読者です 読者をやめる 読者になる 読者になる

RaspberryPiでL-02Cを使ってSORACOM Airに接続する

RaspberryPi コンピュータ サービス

RaspberryPiでL-02Cを使ってSORACOM Airに接続する

仕事が落ち着いたのでいろいろやりたいことをぼちぼちと行っています。

昨年、会社の移転に伴い、廃棄物品の中にL-02Cがあったのでいただくことにしました。(一応、ご自由にどうぞということだったので)

docomo L-02C レッド(R) データ通信専用機種

L-02Cはdocomoさんの商品ですが、実際はLGさんの商品になります。

f:id:ueponx:20170408115404j:plain

今回はSORACOM AirのSIMを使って接続を行っていこうと思います。SIMは2016年のSoftwareDesign5月号の付録についていたものをアクティベートしていたのでそれを使う予定でした。ただ、SIMサイズが合わなかったので以下のアダプタで対応しました。

安!

f:id:ueponx:20170408115336j:plain

こんな感じで装着します。

今回は以下のRaspberryPiの環境で行っています。

$ uname -a
Linux raspberrypi 4.4.34-v7+ #930 SMP Wed Nov 23 15:20:41 GMT 2016 armv7l GNU/Linux

また、以下の記事を参考にしています。

www.mana-cat.com

SORACOM AirのSIM設定を事前にしておく。

今回はアクティベート済みのSIMなのですが、念のためSORACOM Airのユーザーコンソールで確認しておきます。

soracom.jp

ユーザーコンソールへ

f:id:ueponx:20170408111602j:plain

ユーザーコンソールでSIMの状況を確認

f:id:ueponx:20170408111653j:plain

大丈夫そうですね。

L-02CをRaspberryPiに接続する

L-02Cが意外と大きいのでその他のUSB機器とコネクタの干渉をしてしまうので延長ケーブルを経由したほうが無難です。

USBに指すとdmesgの結果が以下のように変化しました。ネットで出ている情報ではL-02CはCDROMドライブとして認識されるということだったのですが、今回はCDROMにはなっていませんでした。なぜ?

L-02Cはドライバーなどを本体に持っている機器のため、そのまま接続するとCDROMドライブとして見え、ドライバインストール後はモデムとしてみえるタイプのデバイスの様です。

$ dmesg |tail
[ 6026.677568] option 1-1.4:1.0: GSM modem (1-port) converter detected
[ 6026.677996] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[ 6026.678756] option 1-1.4:1.1: GSM modem (1-port) converter detected
[ 6026.679132] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 6026.679870] option 1-1.4:1.2: GSM modem (1-port) converter detected
[ 6026.680318] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[ 6026.681146] option 1-1.4:1.3: GSM modem (1-port) converter detected
[ 6026.681537] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[ 6027.411662] w1_master_driver w1_bus_master1: Family 0 for 00.3e0000000000.a1 is not registered.
[ 6086.671765] w1_master_driver w1_bus_master1: Family 0 for 00.be0000000000.2d is not registered.

たまたま何でしょうか?あるいはOSのバージョンアップなどの要因でしょうか?会社で使っているときの設定でなにかあったのでしょうか。

正解はUSBシリアルとして認識されることなので問題はないのですが…。 念のためlsusbコマンドでも確認します。

【接続前】

$ lsusb
Bus 001 Device 005: ID 045e:075d Microsoft Corp. LifeCam Cinema
Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

【接続後】

$ lsusb
Bus 001 Device 006: ID 1004:61dd LG Electronics, Inc.
Bus 001 Device 005: ID 045e:075d Microsoft Corp. LifeCam Cinema
Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
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 006: ID 1004:61dd LG Electronics, Inc.のエントリが追加されているので正常に認識されているようです。

wvdialejectをパッケージをインストール

あとはUSBモデムのダイヤラーであるwvdialパッケージをインストールします。 今回はCDROMとして認識されていないので必要ないのですがejectパッケージは念のためインストールします。

$ sudo apt-get update
$ sudo apt-get install wvdial eject
()
Success!  You can run "wvdial" to connect to the internet.
  (You can also change your configuration by editing /etc/wvdial.conf)
()

CDROMとして認識されているようであれば sudo eject sr0を実行してください。

$ sudo modprobe usbserial vendor=0x1004 product=0x618f
$ sudo eject sr0
$ sudo chmod 666 /dev/ttyUSB*

これでインストールは完了しました。

wvdialの接続設定を行う

インストール時にも表示されましたが

Success! You can run “wvdial” to connect to the internet. (You can also change your configuration by editing /etc/wvdial.conf)

とのことですので/etc/wvdial.confの設定を行います。

$ sudo vim /etc/wvdial.conf

【インストール後のオリジナル設定ファイル】

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Baud = 9600
New PPPD = yes
Modem = /dev/ttyUSB2
ISDN = 0
; Phone = <Target Phone Number>
; Password = <Your Password>
; Username = <Your Login Name>

【変更後】

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

内容は初期化するためのATコマンドやダイアル先、スピード、認証、APNなどになります。SORACOM Airはほぼ同じ設定になるかと思います。

SORACOM Airで接続

すべての設定が終わったので後は接続テストになります。以下で実行することになりますがコンソールが占領されるので&をつけるか、もう一つコンソールを起動してください。自分はコンソールもう一つ起動しています。

$ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> 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 Sat Apr  8 10:04:58 2017
--> Pid of pppd: 29671
--> Using interface ppp0
--> pppd: ー[01]黐・5
--> pppd: ー[01]黐・5
--> pppd: ー[01]黐・5
--> pppd: ー[01]黐・5
--> pppd: ー[01]黐・5
--> pppd: ー[01]黐・5
--> local  IP address ???.???.???.???
--> pppd: ー[01]黐・5
--> remote IP address ???.???.???.???
--> pppd: ー[01]黐・5
--> primary   DNS address ???.???.???.???
--> pppd: ー[01]黐・5
--> secondary DNS address ???.???.???.???
--> pppd: ー[01]黐・5

接続されるとpppのインターフェースにIPアドレスDNSなどが設定されてネットワーク接続ができるようになります。

接続状況の確認

ipコマンドで確認するとppp0インターフェースが追加されていることがわかります。

【接続前のネットワークインターフェース】

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    (略)
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    (略)
       valid_lft forever preferred_lft forever

【接続後のネットワークインターフェース】

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    (略)
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    (略)
       valid_lft forever preferred_lft forever
4: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp
    inet ???.???.???.??? peer ???.???.???.???/?? scope global ppp0
       valid_lft forever preferred_lft forever

4番目のエントリにppp0インターフェースが追加されています。

疎通確認

ローカルIPに対してのPING実行を行う

???.???.???.???の部分は接続後のipコマンドから調べて置き換えてください。

$ ping ???.???.???.???
PING ???.???.???.??? (???.???.???.???) 56(84) bytes of data.
64 bytes from ???.???.???.???: icmp_seq=1 ttl=64 time=0.169 ms
64 bytes from ???.???.???.???: icmp_seq=2 ttl=64 time=0.098 ms
64 bytes from ???.???.???.???: icmp_seq=3 ttl=64 time=0.115 ms
64 bytes from ???.???.???.???: icmp_seq=4 ttl=64 time=0.112 ms
64 bytes from ???.???.???.???: icmp_seq=5 ttl=64 time=0.114 ms
^C
--- ???.???.???.??? ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.098/0.121/0.169/0.027 ms

ローカル側のpingも成功しています。

ppp0インターフェースを経由してのPING実行

googleDNSpingを飛ばしてみます。

$ ping -I ppp0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from ???.???.???.??? ppp0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=68.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=70.8 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 68.234/69.549/70.865/1.341 ms

無事に接続できました。

終わりに

折角アクティベートしていたSORACOM AirのSIMがやっと活きました。作品のデモを行う展示会などではWiFiやBulethoothが入らない事があるので通信がうまくいかないことも多いのですが、USBモデムとSORACOM Airがあることで回避策を一つ追加して保険がかけられるようになるのかなと思って期待しています。