UX302NC を Raspberry Pi2 で動かす

LTEのクアッドバンド対応のUSBデータ通信機器 NCXX UX302NC を libqmi を使って Raspberry Pi2 で動かします。

目次
  1. UX302NC ファームウエアの更新
  2. Raspberry Pi2 の準備
  3. libqmi の導入
  4. 確認作業
  5. 接続方法
  6. まとめ

1.UX302NC ファームウエアの更新

2015年10月9日に最新のファームウェアが公開されていますので、この際に更新しておきます。

2.Raspberry Pi2 の準備

Raspberry Pi2 の準備をします。Raspbian Jessie をインストールします。

USBインタフェースの総出力電流を500maから1.2Aまで上げる設定をします。外部電源は5V2A程度のものを用意しておきましょう。

$ sudo vi /boot/config.txt 
safe_mode_gpio=4
max_usb_current=1

3.libqmiの導入

libqmi を導入すると、シリアル接続やPPPを使わないで UX302NC をネットワークカードのように扱えます。先日の「UX302NC の CD-ROM を解除」を参考にしながら、APN情報(IIJmio)、udevルールまで作成します。

$ sudo apt-get install sg3-utils libqmi-utils
$ sudo vi /etc/udev/rules.d/99-ux302nc.rules 
# for NCXX UX302NC
SUBSYSTEMS=="scsi", ATTRS{vendor}=="USBModem", KERNEL=="sg*", RUN+="/bin/sleep 1", RUN+="/usr/bin/sg_raw /dev/%k 06 f5 04 02 52 70"
SUBSYSTEM=="usb", ATTR{idVendor}=="11f6", ATTR{idProduct}=="1034", RUN+="/sbin/modprobe -b qmi_wwan"
SUBSYSTEM=="drivers", ENV{DEVPATH}=="/bus/usb/drivers/qmi_wwan", ATTR{new_id}="11f6 1034"
SUBSYSTEM=="usb", ATTR{idVendor}=="11f6", ATTR{idProduct}=="1034", RUN+="/sbin/modprobe -b qcserial"
SUBSYSTEM=="drivers", ENV{DEVPATH}=="/bus/usb-serial/drivers/qcserial", ATTR{new_id}="11f6 1034"
$ sudo sh -c "echo 'APN=iijmio.jp,PAP,mio@iij,iij' > /etc/qmi-network.conf"

ここで一旦、ux302ncを刺して再起動して確認します。

4.確認作業

再起動後にいろいろと確認しておきます。

$ lsusb
Bus 001 Device 006: ID 11f6:1034 Prolific
$ lsmod
Module                  Size  Used by
qcserial                4772  0 
usb_wwan                4906  1 qcserial
usbserial              22526  2 qcserial,usb_wwan
qmi_wwan               11176  0 
cdc_wdm                 9705  1 qmi_wwan
$ usb-devices
T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#=  6 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=11f6 ProdID=1034 Rev=02.32
S:  Manufacturer=NCXX Inc.
S:  Product=NCXX UX302NC
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
$ ls -l /dev
total 0
crw------- 1 root root    180, 176 Feb 17 23:46 cdc-wdm0
crw-rw---- 1 root dialout 188,   0 Feb 17 23:46 ttyUSB0
crw-rw---- 1 root dialout 188,   1 Feb 17 23:46 ttyUSB1
$ ifconfig wwan0
wwan0     Link encap:Ethernet  HWaddr f2:38:44:36:7f:8c  
          inet addr:169.254.28.149  Bcast:169.254.255.255  Mask:255.255.0.0
          inet6 addr: fe80::59e5:6194:afd6:2890/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:28438 (27.7 KiB)

5.接続方法

接続してみます。

$ sudo qmi-network /dev/cdc-wdm0 start
Loading profile...
    APN: iijmio.jp,PAP,mio@iij,iij
Starting network with 'qmicli -d /dev/cdc-wdm0 --wds-start-network=iijmio.jp,PAP,mio@iij,iij  --client-no-release-cid'...
Saving state... (CID: 25)
Saving state... (PDH: 90631296)
Network started successfully

数秒するとDHCPが機能してwwan0に割り当てられたIPアドレスが変わっているのがわかります。

$ ifconfig wwan0
wwan0     Link encap:Ethernet  HWaddr f2:38:44:36:7f:8c  
          inet addr:100.73.183.126  Bcast:100.73.183.126  Mask:255.255.255.255
          inet6 addr: fe80::59e5:6194:afd6:2890/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:143 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:662 (662.0 B)  TX bytes:42425 (41.4 KiB)
$ cat /var/log/daemon.log | grep wwan0
dhcpcd[540]: wwan0: offered 100.66.119.244 from 202.232.2.2
dhcpcd[540]: wwan0: leased 100.66.119.244 for 7200 seconds
avahi-daemon[337]: Registering new address record for 100.66.119.244 on wwan0.IPv4.
dhcpcd[540]: wwan0: router 202.232.2.2 requires a host route
dhcpcd[540]: wwan0: adding host route to 202.232.2.2
avahi-daemon[337]: Withdrawing address record for 169.254.187.228 on wwan0.
avahi-daemon[337]: Leaving mDNS multicast group on interface wwan0.IPv4 with address 169.254.187.228.
avahi-daemon[337]: Joining mDNS multicast group on interface wwan0.IPv4 with address 100.66.119.244.
dhcpcd[540]: wwan0: adding default route via 202.232.2.2
dhcpcd[540]: wwan0: deleting route to 169.254.0.0/16
ntpd[563]: Listen normally on 10 wwan0 100.66.119.244 UDP 123
ntpd[563]: Deleting interface #9 wwan0, 169.254.187.228#123, interface stats: received=0, sent=0, dropped=0, active_time=118 secs
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         ns2.iij4u.or.jp 0.0.0.0         UG    303    0        0 wwan0
192.168.1.0     *               255.255.255.0   U     202    0        0 eth0
ns2.iij4u.or.jp *               255.255.255.255 UH    303    0        0 wwan0

接続を止めます。

$ sudo qmi-network /dev/cdc-wdm0 stop
Loading profile...
    APN: iijmio.jp,PAP,mio@iij,iij
Loading previous state...
    Previous CID: 25
    Previous PDH: 90631296
Stopping network with 'qmicli -d /dev/cdc-wdm0 --wds-stop-network=90631296 --client-cid=25'...
Network stopped successfully
Clearing state...

6.まとめ


mbim_qmi

  • シリアル接続以外の接続方法は、libqmi以外ではlibmbimがあります。この辺の関係をAleksander Morgadoさんが≪こちらの英語のPDF≫にわかり易くまとめてくれています。日本語の情報が少ないので概念を理解するのに役立ちました。
  • qmicli –help で様々な情報が得られるのがわかります。

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

“HIH-6130 湿度センサー を使う” に9件のコメントがあります

  1. はじめまして、私もhih-6130とRaspberry piの接続をしようとしていますが、pythonのプログラムは初めてで、記事を参考にさせて頂こうとしています。
    早速ですが、記事のコードが上手く実行出来なくて、教授頂けないでしょうか?

    実行すると、以下のエラーが出てデータの読み取りができません。
    buf = i2c.read_i2c_block_data(0x27, 0, 4)
    IOError: [Errno 5] Input/output error

    失礼ですが、33行目のwhile文の後ろに:が足りないのではないでしょうか?

    1. naggieさん、こんばんは。はじめまして。
      実は私もPythonは初めてなんです (^-^;)
      ご教授頂いた最後のループの「:」は訂正させて頂きました。
      お恥ずかしい限りです。
      さて、naggieさんのRaspiちゃんですがi2c-toolsとpython-smbusが入っていて
      modprobeとblacklistは対応済みでtypeはBでrevisionが2と考えて宜しいでしょうか?
      それならばまずはi2c-toolsを使って動作確認をしてみましょう。
      i2cdump -y 1 0x27 で値が出て来るでしょうか?
      センサーが活きていれば

      $ i2cdump -y 1 0x27
      No size specified (using byte-data access)
           0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
      00: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      10: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      20: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      30: 58 58 58 18 58 58 58 58 58 58 58 58 58 58 58 58    XXX?XXXXXXXXXXXX
      40: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      50: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      60: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      70: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      80: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      90: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      a0: 58 58 58 58 58 58 58 58 18 58 58 58 58 58 58 58    XXXXXXXX?XXXXXXX
      b0: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      c0: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      d0: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX
      e0: 58 58 58 18 58 58 58 58 58 58 58 58 58 58 58 58    XXX?XXXXXXXXXXXX
      f0: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58    XXXXXXXXXXXXXXXX

      こんな感じのダンプが得られるはずなんですが…いかがでしょうか?

      1. airwhiteさん、
        返信ありがとうございます。
        前提条件は整っている筈です。BMP085という気圧計での計測実績もあります。
        早速コマンドを試してみました。
        $ i2cdump -y 1 0x27
        No size specified (using byte-data access)
        0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
        00: XX XX XX XX XX XX XX XX XX 40 40 40 40 40 40 40 XXXXXXXXX@@@@@@@
        10: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 @@@@@@@@@@@@@@@@
        20: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 @@@@@@@@@@@@@@@@
        30: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 @@@@@@@@@@@@@@@@
        40: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 @@@@@@@@@@@@@@@@
        50: 40 40 40 40 64 64 64 64 64 64 64 64 64 64 64 64 @@@@dddddddddddd
        60: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        70: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        80: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        90: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        a0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        b0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        c0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        d0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        e0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        f0: 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 dddddddddddddddd
        おかしいですね。死んでいるのでしょうか?

        1. どうも、こんばんは o(*^-^*)o
          たぶん壊れていることは無いと思うのですが…信号が不安定なように思います。
          ちょっと気になることがありまして hih6130 は i2cバスに1個だけでしょうか?
          その他にもi2cバスにぶら下がっているものがありましたら外してみては如何でしょう。
          私のhih6130はスイッチサイエンスさんから購入したのですが、このセンサーのSDAとSCLにはプルアップ抵抗がついていますが、RaspberryPi本体はプルアップ済みになっています。
          単体のセンサー1個ぐらいなら大丈夫だけど複数個のセンサーや装置をi2cバスにぶら下げる場合には、センサー側のプルアップ抵抗を外した方が良いそうです。
          ちなみに私が買ったbmp085もプルアップ済みになっています。
          (スイッチサイエンスのbmp085は半田パッドを削り取るとプルアップが無効になるように回路が組まれているそうです)
          無事に動いてくれることを願っております。

  2. airwhiteさん、
    こんばんは、naggieです。
    信号が不安定というご指摘ありがとうございました。
    思い当たる節があったので、ピンヘッダーの形状を太い物に変更した所、上手く値が取れるようになりました。いやぁ、すばらしい。
    我が家には夏場湿度が高くなる部屋があって、カビが大変なんです。湿度の変化を検知して除湿機を動かそうと思っています。

  3. Raspberry Piから磁気センサーの出力を読み取ろうとしていましたが、うまくいかず、調べているうちにこちらにたどり着きました。
    「RaspberryPi本体はプルアップ済み」という情報が大変助かりました。センサーモジュールの基盤についているプルアップ抵抗を有効にしていたのが原因でした。これを無効にすると素直なdump結果が得られました。数日悩んでいたのがウソのようです。ありがとうございました。