常田です

ここ数日ネットを見るとほぼ同じような記事が沢山あるわけですがやはり自分でやってみましょうということでやってみました。Raspberry Piの3Gモジュールは高価なので少し遊びにして見るには少しむずかしいので会社で L-03D を借りたのでそちらで実施してみます。

NewImage

L-03Dの認識から接続

L-03DをRaspberry Piに接続してみます。

[  330.298647] usb 1-1.5: new high-speed USB device number 5 using dwc_otg
[  330.401343] usb 1-1.5: New USB device found, idVendor=1004, idProduct=6327
[  330.401369] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=4
[  330.401386] usb 1-1.5: Product: docomo L03D
[  330.401403] usb 1-1.5: Manufacturer: NTT DOCOMO, INC.
[  330.401419] usb 1-1.5: SerialNumber: LGELTE10046327
[  330.403361] usb-storage 1-1.5:1.0: USB Mass Storage device detected
[  330.404432] scsi host0: usb-storage 1-1.5:1.0
[  331.400100] scsi 0:0:0:0: CD-ROM            LG       Autorun          2.00 PQ: 0 ANSI: 0
[  331.429655] sr 0:0:0:0: [sr0] scsi-1 drive
[  331.429683] cdrom: Uniform CD-ROM driver Revision: 3.20
[  331.430841] sr 0:0:0:0: Attached scsi CD-ROM sr0
[  331.454379] sr 0:0:0:0: Attached scsi generic sg0 type 5

Productが「Product: docomo L03D」と認識されていることがわかります。
他の箇所で書かれているようにCDROMとして認識しますので一旦イジェクトします。

sudo apt-get install eject

先ほどのCDROMは sr0 として認識されていますので

eject sr0

USBを確認します。

pi@raspi ~ $ 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 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 006: ID 1004:6326 LG Electronics, Inc.

USBシリアルとして認識してみます。

pi@raspi ~ $ sudo modprobe usbserial vendor=0x1004 product=0x6326
pi@raspi ~ $ lsmod
Module                  Size  Used by
usbserial              22445  0

デバイスを見ると

pi@raspi ~ $ ls /dev | grep USB
ttyUSB0
ttyUSB1
ttyUSB2
ttyUSB3
  • 今回 cl コマンドで接続するのは ttyUSB2 になります。

cuコマンドがインストールされていなかったので導入します。

apt-get install cu
sudo usermod -G dialout root

cuコマンドで接続を確認してみます。

$ cu -l /dev/ttyUSB2
Connected.
ATI
NTT DOCOMO, INC.

OK
AT+CGDCONT=1,"IP","soracom.io"
OK
AT+CGDCONT?
+CGDCONT: 1,"IP","soracom.io",,0,0,0
+CGDCONT: 11,"IPV4V6","mopera.net",,0,0,0

OK
ATZ
OK
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
ATD*99***1#
CONNECT
Connection to 192.168.0.22 closed.

接続の簡略化

簡易的にダイヤルをするために wvdial を導入します

sudo apt-get install wvdial

pppdを利用するのでsudoで実行します。

$ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
--> Sending: ATQ0
ATZ
OK
ATQ0
OK
--> Re-Sending: ATZ
ATZ
OK
--> Sending: ATH
ATH
OK
--> Sending: AT+CGDCONT=1,"IP","soracom.io"
AT+CGDCONT=1,"IP","soracom.io"
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:39:28 2015
--> Pid of pppd: 4275
--> Using interface ppp0
--> pppd: ?A?v?%[01][08]?%[01]
--> pppd: ?A?v?%[01][08]?%[01]
--> pppd: ?A?v?%[01][08]?%[01]
--> pppd: ?A?v?%[01][08]?%[01]
--> pppd: ?A?v?%[01][08]?%[01]
--> pppd: ?A?v?%[01][08]?%[01]
--> local  IP address 10.220.129.79
--> pppd: ?A?v?%[01][08]?%[01]
--> remote IP address 10.64.64.64
--> pppd: ?A?v?%[01][08]?%[01]
--> primary   DNS address 169.254.0.53
--> pppd: ?A?v?%[01][08]?%[01]
--> secondary DNS address 169.254.1.53
--> pppd: ?A?v?%[01][08]?%[01]

接続の確認

実際に接続がされているかを確認します。

SORACOM_ユーザーコンソール.png

コンソールから「オンライン」となっていることが確認できるので無事にL-03Dからダイヤルアップできていることが確認できます。

$ ifconfig ppp0
ppp0      Link encap:Point-to-Pointプロトコル
          inetアドレス:10.220.129.79 P-t-P:10.64.64.64  マスク:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  メトリック:1
          RXパケット:6 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:3
          RXバイト:66 (66.0 B)  TXバイト:129 (129.0 B)

次に default route を pppに変更して traceroute で確認します。

sudo route add default dev ppp0
raspi ~ $ route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         *               0.0.0.0         U     0      0        0 ppp0
default         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
default         192.168.0.1     0.0.0.0         UG    304    0        0 wlan0
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     *               255.255.255.0   U     304    0        0 wlan0

接続確認

$ traceroute www.google.com
traceroute to www.google.com (173.194.117.148), 30 hops max, 60 byte packets
 1  ec2-175-41-192-232.ap-northeast-1.compute.amazonaws.com (175.41.192.232)  32.248 ms ec2-175-41-192-236.ap-northeast-1.compute.amazonaws.com (175.41.192.236)  31.935 ms ec2-175-41-192-230.ap-northeast-1.compute.amazonaws.com (175.41.192.230)  31.732 ms
 2  27.0.0.73 (27.0.0.73)  32.333 ms 27.0.0.71 (27.0.0.71)  35.070 ms  42.808 ms
 3  27.0.0.83 (27.0.0.83)  43.840 ms  43.661 ms  43.602 ms
 4  15169.tyo.equinix.com (203.190.230.31)  43.266 ms 54.239.52.158 (54.239.52.158)  41.829 ms 15169.tyo.equinix.com (203.190.230.31)  42.861 ms
 5  72.14.236.82 (72.14.236.82)  42.818 ms  42.632 ms 27.0.0.127 (27.0.0.127)  45.881 ms
 6  72.14.233.219 (72.14.233.219)  42.761 ms  37.517 ms 15169.tyo.equinix.com (203.190.230.31)  38.883 ms
 7  72.14.236.82 (72.14.236.82)  43.625 ms  59.742 ms nrt04s09-in-f20.1e100.net (173.194.117.148)  61.455 ms

最初にawsのサイトから始まっているのがわかりますね。問題なくSORACOM AIRが利用可能になっている状態ですね。

簡易ツールの導入

自動的にUSBのモードを変更するためのツールを導入します。

sudo apt-get install usb-modeswitch

導入した設定ファイルのなかに今回のL-03Dが含まれていることを確認します。

grep L-03D /lib/udev/rules.d/40-usb_modeswitch.rules -3
# LG L-03D LTE/3G
ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6327", RUN+="usb_modeswitch '%b/%k'"

この状態でUSBを抜き差しするとデバイスが認識されている状態となります。

自動起動設定

なんでも良いのですが/etc/init.d/に置くようにスクリプトを書いてみます。実際には私のRaspberry PiにはLCDが接続されているので画面にppp0のIPアドレスを表するようにしてみました。

#! /bin/sh
# /etc/init.d/init.3g
PIDFILE=/var/run/3g.pid
case "$1" in
     start)
        if [ -f $PIDFILE ]; then
           echo $PIDFILE exists.
           exit 1
        fi
        start-stop-daemon -S -x /usr/bin/wvdial -b -m -p $PIDFILE
        sleep 10
        route add default dev ppp0
        ;;
     stop)
        if [ ! -f $PIDFILE ]; then
           echo $PIDFILE not found.
           exit 1
        fi
        start-stop-daemon -K -p $PIDFILE
        rm $PIDFILE
        ;;
     *)
        echo "Usage: /etc/init.d/init.3g {start|stop}"
        exit 1
        ;;
esac
exit 0

まとめ

実際には Raspberry Pi にはKeybordやDisplayがないのでUSBを接続したら自動的に接続するようにしたかったのですが微妙に判断が難しかったので今回はここまでにしておきます(pyusbモジュールを使ってusb.busses()で値を取得すれば挿入されているのがわかります)

次は、このRaspberry Piにセンサーを取り付けて MQTT 経由でサーバにデータを送信してみたいと思います。SORACOMのサイトにも にBluemix上のMQTTとの接続の仕方が掲載されていますのでこちらを実施してみようと思います。これで外に持っていくこともできるのでそのうち外出先から遊んでみたいと思います。

Raspberry Pi + SORACOM + Bluemix のIoTデモ環境構築

  1. Raspberry Pi + L-03D + SORACOM SIM で通信を行う
  2. Raspberry PiからSORACOM Beam経由でBluemixのMQTTへデータ送信を行う
  3. Raspberry PiのLEDを Node-RED を使ってLチカする
  4. SORACOM Beam を利用してMQTTプロトコル経由でIMSI情報を付与してみる
  5. MQTT経由のデータをSORACOM APIでSIM単位の認証/受信したデータをCloudantに格納
  6. Cloudantに格納したデータを可視化