SORACOM Air を Raspberry Pi 2 & L-03D で動かしてみる

うわさの IoT 向け SIM である SORACOM Air を Raspberry Pi で使ってみます。 ここでは、docomoLTE 通信対応 USB ドングル L-03D を使って通信をしました。 やり方についてはすでに先人の方々が詳しく書いている(参考参照)ので簡単な手順のみ書きます。

用意するもの

  • Raspberry Pi 2 Model B
  • SORACOM Air
  • L-03D
  • セルフパワーの USB ハブ

手順

  1. SORACOM のユーザコンソールから SIM を登録する
  2. Raspbian JESSIE を SD カードにインストール (Ubuntu)
    • dd if=2015-09-24-raspbian-jessie.img of=/dev/sdc
    • ※ SD カードに対応するデバイスファイル(/dev/sd?)は dmesg などで確認してください
  3. Raspbeery Pi を起動、ログインして必要なソフトウェアをインストール
    • apt-get install usb-modeswitch wvdial
  4. セルフルパワーの USB ハブ経由で L-03D を Raspbeery Pi に接続
  5. /etc/wvdial.conf に下記の内容を書く
  6. sudo wvdial を実行する
  7. ppp インターフェースに IP アドレスがついていれば接続完了(ifconfig などで確認)
  8. SORACOM 経由で通信するには、ppp インターフェースをデフォルトルートに設定する
    • sudo route add default dev ppp0
    • 設定されているルートは route で確認できる
    • すでにデフォルトルートが設定されている場合(DHCPでアドレスをもらっている場合など)は sudo route del default で予め削除しておく
    • ssh で操作している場合、接続が切れないようにお気をつけ下さい
  9. traceroute すると、AWS 経由でインターネットに接続していることがわかる

/etc/wvdial.conf

[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 = 1
Baud = 460800
New PPPD = yes
ISDN = 0
Phone = *99***1#
Carrier Check = no
Modem = /dev/ttyUSB2
APN = soracom.io
Username = sora
Password = sora

成功したときのログ

接続できた時はこのような表示になりました(IP アドレスは伏せてあります)。

pi@raspberrypi ~ $ sudo wvdial
--> 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
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sun Oct  4 11:01:01 2015
--> Pid of pppd: 4415
--> Using interface ppp0
--> pppd: �v(ZV
--> pppd: �v(ZV
--> pppd: �v(ZV
--> pppd: �v(ZV
--> pppd: �v(ZV
--> pppd: �v(ZV
--> local  IP address xx.xxx.xxx.xxx
--> pppd: �v(ZV
--> remote IP address 10.64.64.64
--> pppd: �v(ZV
--> primary   DNS address 169.254.0.53
--> pppd: �v(ZV
--> secondary DNS address 169.254.1.53
--> pppd: �v(ZV

ifconfig で確認すると、ppp インターフェースが生えて IP アドレスが付いている。

pi@raspberrypi ~ $ ifconfig ppp
ppp0      Link encap:Point-to-Point Protocol
          inet addr:xx.xxx.xxx.xxx  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:62 (62.0 B)  TX bytes:101 (101.0 B)

デフォルトルートを ppp インターフェースに設定する。

pi@raspberrypi ~ $ sudo route del default
pi@raspberrypi ~ $ sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
192.168.11.0    *               255.255.255.0   U     0      0        0 eth0
pi@raspberrypi ~ $ sudo route add default dev ppp0
pi@raspberrypi ~ $ sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 ppp0
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
192.168.11.0    *               255.255.255.0   U     0      0        0 eth0

traceroute すると1ホップ目で AWS を経由していることがわかる。

pi@raspberrypi ~ $ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  ec2-175-41-192-130.ap-northeast-1.compute.amazonaws.com (175.41.192.130)  45.393 ms ec2-175-41-192-128.ap-northeast-1.compute.amazonaws.com (175.41.192.128)  45.175 ms ec2-175-41-192-134.ap-northeast-1.compute.amazonaws.com (175.41.192.134)  45.055 ms
 2  27.0.0.172 (27.0.0.172)  48.160 ms  48.676 ms 27.0.0.154 (27.0.0.154)  48.575 ms
 3  27.0.0.154 (27.0.0.154)  48.476 ms 27.0.0.136 (27.0.0.136)  49.455 ms 27.0.0.154 (27.0.0.154)  49.346 ms
 4  27.0.0.136 (27.0.0.136)  49.251 ms  50.050 ms  49.947 ms
 5  216.239.54.11 (216.239.54.11)  48.956 ms  49.743 ms 15169.tyo.equinix.com (203.190.230.31)  49.639 ms
 6  209.85.143.159 (209.85.143.159)  58.198 ms  38.001 ms 216.239.54.11 (216.239.54.11)  37.700 ms
 7  209.85.255.225 (209.85.255.225)  92.213 ms google-public-dns-a.google.com (8.8.8.8)  41.482 ms  41.232 ms

失敗したときのログ

最初に sudo wvdial した時は、下記のエラーで接続できませんでした。 この時は、「手元のスマホに SORACOM SIM を挿して、一度通信する」「L-03D を一度抜いて再度挿す」をすることで Raspberry Pi でも通信できるようになりました。どちらが効いたのかわかりませんが参考まで。

pi@raspberrypi ~ $ sudo wvdial
--> 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#
ERROR
--> Invalid dial command.
--> Disconnecting at Sun Oct  4 10:59:29 2015

参考