常田です
ここ数日ネットを見るとほぼ同じような記事が沢山あるわけですがやはり自分でやってみましょうということでやってみました。Raspberry Piの3Gモジュールは高価なので少し遊びにして見るには少しむずかしいので会社で L-03D を借りたのでそちらで実施してみます。
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]
接続の確認
実際に接続がされているかを確認します。
コンソールから「オンライン」となっていることが確認できるので無事に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との接続の仕方が掲載されていますのでこちらを実施してみようと思います。これで外に持っていくこともできるのでそのうち外出先から遊んでみたいと思います。