Raspberry PiでSORACOM SIMを使う(ZTE MF120, MF112)

  • 77
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

Raspberry PiでSORACOM SIMを用いた3G通信を行います。
ZTEの3GモデムをRPiに接続して、soracomを使ってインターネットに接続するところまで書きます。

準備

・Raspberry Pi 2
OSはRaspbianを使います。

・SORACOM SIM
ユーザーコンソールからSIMのアクティベートしておくこと。
下記の記事がわかりやすいです。
http://dev.classmethod.jp/cloud/soracom1/

・USB接続の3Gモデム
MF120.jpg

富士ソフトの3Gモデムを利用しました。
MF120という型番でしたが、lsusbコマンドで確認したところ、ZTE MF112という機種でした。

$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 008: ID 19d2:0103 ZTE WCDMA Technologies MSM MF112          <= これが3Gモデム
Bus 001 Device 005: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

19d2はZTEを示すVenderID, 0103はMF112を示すProductIDです。
-vオプションを付けると詳細がわかります。

手順

CDマウントを解除しよう

USBの3Gモデムは、USBポートに差し込むと、ドライバやユーティリティソフトのインストールを行うためにCDとしてマウントされます。
シリアル接続を行うためには、このCDをアンマウントし、USB-Serialデバイスとして認識させる必要があります。
これを行うパッケージが、usb-modeswitchです。以下のコマンドを入力します。

$ sudo apt-get install usb-modeswitch

インストールが終わると、udevの設定ファイルが追加されます。
以下のコマンドを打ち、その設定ファイル内に今回接続する3Gモデムがあるか確認します。

$ grep 19d2 /lib/udev/rules.d/40-usb_modeswitch.rules -3

設定ファイルの中に、MF112の設定があることを確認できました。
もし無くても、lsusb -vでVenderIdとProductIdを調査して他に似せて作れば良いだけです。

...
# ZTE MF112
ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0103", RUN+="usb_modeswitch '%b/%k'"
...

この手順が終わると、/devにデバイスが3つ現れます。一番後ろのデバイスを使います。

$ ls /dev -la | grep USB
crw-rw---T  1 root dialout 188,   0 Sep 28 16:46 ttyUSB0
crw-rw---T  1 root dialout 188,   1 Sep 28 16:46 ttyUSB1
crw-rw---T  1 root dialout 188,   2 Sep 28 16:46 ttyUSB2   <= モデムの指定にはこのデバイス名を利用する

ダイアルしよう

3Gモデムをシリアル接続して、ATコマンドを叩き、通信できたか確認します。
以下のようにコマンドを入力します。cuコマンドは~.で抜けられます。
CONNECTが表示されればOK。

$ cu -l /dev/ttyUSB2
Connected.
ATI
Manufacturer: ZTE CORPORATION
Model: MF633
Revision: BD_NTTCOMP673C1V1.0.0B05
IMEI: 352018034776290
+GCAP: +CGSM,+DS,+ES

OK
AT+CGDCONT=1,"IP","soracom.io"
OK
AT+CGDCONT?
+CGDCONT: 1,"IP","soracom.io","0.0.0.0",0,0

OK
ATZ
OK
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
ATD*99***1#
CONNECT 7200000
~.

Disconnected.

#正直なところ、この手順は飛ばしちゃってもokですが、次の手順のwvdialコマンドで繋がらないときはこれを試してください。

もっと簡単にダイアルしよう

このダイアルアップを簡単に行うために、wvdialコマンドをインストールします。

$ sudo apt-get install wvdial

/etc/wvdial.confに以下の設定を上書きします。
Modemには、3Gモデムの一番大きなデバイス名を使用します。
今回の場合は、ttyUSB2です。

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
ISDN = 0
Phone = *99***1#
Carrier Check = no
Modem = /dev/ttyUSB2
APN = soracom.io
Username = sora
Password = sora

以下のコマンドを叩き、3G通信を行います。問題なければ、CONNECTと表示されます。

#なお、コマンドの後ろに&がつけているのでバックグラウンド実行です。
#バックグラウンド実行のプロセスを止めたければ、fgコマンドからのCtrl+Cです。

$ sudo wvdial &
[1] 29232
pi@raspi-010:~$ --> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATD*99***1#
--> Waiting for carrier.
ATD*99***1#
CONNECT 7200000
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Mon Sep 28 17:15:39 2015
--> Pid of pppd: 29234
--> Using interface ppp0
--> local  IP address 10.145.115.200
--> remote IP address 10.64.64.64
--> primary   DNS address 169.254.0.53

ifconfigを叩くと、ppp0接続が作られていることがわかります。

$ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:69:8d:d0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.145.115.200  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1492 (1.4 KiB)  TX bytes:1613 (1.5 KiB)

ppp0 をデフォルトの経路にします。

sudo route add default dev ppp0

tracerouteコマンドで、awsのサーバーを経由していることを確認します。

$ traceroute google.com
traceroute to google.com (216.58.221.14), 30 hops max, 60 byte packets
 1  ec2-175-41-192-236.ap-northeast-1.compute.amazonaws.com (175.41.192.236)  99.936 ms ec2-175-41-192-230.ap-northeast-1.compute.amazonaws.com (175.41.192.230)  109.730 ms ec2-175-41-192-232.ap-northeast-1.compute.amazonaws.com (175.41.192.232)  119.274 ms
 2  27.0.0.73 (27.0.0.73)  129.326 ms  128.950 ms 27.0.0.71 (27.0.0.71)  148.936 ms
...

Let's SORACOM

あとは、wvdialコマンドを起動スクリプトに登録すればいいと思います。
ではでは!

参考

参考にさせていただきました。ありがとうございます。

http://christian.amsuess.com/tutorials/zte_mf180/
http://qapla.blog52.fc2.com/blog-entry-313.html