RaspberryPi
raspbian
IoT
Raspberry
L-03F

Raspberry PiにてUSB-LTEモジュール+格安SIMでインターネット接続

More than 1 year has passed since last update.

はじめに

Qiitaに投稿するのも初めてで、おっかなびっくり書いてみる。

概要

家庭内LANのない場所でもRaspberry Piをオンライン利用したく、LTE-USBモジュールを用いてネット接続を試みたもの。
途中やりだが、記録として残しておく。

構成

-Raspberry Pi Zero(not W)
-Raspbian(not lite)
-L-03F(LG/ドコモ)
-OCNモバイルoneのSIM
-USBハブ付き有線LANアダプタ LAN-TXU2H3A

下準備

1.L-03FをWindows環境にて接続。CD/DVDドライブ(ドライバインストールディスク)として認識されないよう、設定しておく。(すみません、各自調べてください。)
2.Raspberry Pi ZeroにRaspbianをインストールしておく。
3.有線LANアダプタを接続。必要に応じて、IPアドレスを固定。
4.L-03Fを接続。

手順

wvdialのインストール

LAN環境にて。

$ sudo apt-get install wvdial

lsusbコマンドにて、L-03Fが認識されていることを確認。

$ lsusb
Bus 001 Device 004: ID 1004:6366 LG Electronics, Inc.

上記から、Vender IDが1004、Product IDが6366であることがわかります。

modprobeコマンドでデバイスを認識させる。

上記にて調べた、ベンダーIDとプロダクトIDを用います。

$ sudo modprobe usbserial vendor=0x1004 product=0x6636

/dev/にttyUSB?デバイスとして表示されればOK

上記modprobeコマンドの実行結果を確認する。

$ ls -l /dev/ttyU*
crw-rw---- 1 root dialout 188, 0  8月 20 15:11 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1  8月 20 15:13 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2  8月 20 15:06 /dev/ttyUSB2

lsusbコマンドにて、L-03Fの詳細を調べる。その1。

$ lsusb -d 1004:6366 -v | grep "bNumEndpoints"
Couldn't open device, some information will be missing
      bNumEndpoints           2
      bNumEndpoints           3
      bNumEndpoints           3

lsusbコマンドにて、L-03Fの詳細を調べる。その2。

$ lsusb -d 1004:6366 -v | grep "bInterfaceNumber"
Couldn't open device, some information will be missing
      bInterfaceNumber        0
      bInterfaceNumber        1
      bInterfaceNumber        2

認識状況まとめ

こういう状況らしい。

デバイス bNumEndpoints bInterfaceNumber
ttyUSB0 2 0
ttyUSB1 3 1
ttyUSB2 3 2

ダイヤル設定の修正

wvdial.confを、OCNモバイルoneにあわせて修正します。

$ sudo nano /etc/wvdial.conf
wvdial.conf
 [Dialer Defaults]
Phone = *99***1#
APN = lte-d.ocn.ne.jp
Username = mobileid@ocn
Password = mobile
New PPPD = yes
Stupid Mode = yes
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","lte-d.ocn.ne.jp"
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attemps = 3
Modem Type = Analog Modem
Modem = /dev/ttyUSB1
Dial Command = ATD
Baud = 460800
ISDN = 0
Carrier Check = no
Auto DNS = 1
Check Def Route = 1

L-03Fの場合は、ttyUSB1がモデムとして動作するようです。(方々の状況より)

ためしにつないでみる

$sudo wvdialを実行

$sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: AT+CGDCONT=1,"IP","lte-d.ocn.ne.jp"
AT+CGDCONT=1,"IP","lte-d.ocn.ne.jp"
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 Aug 20 16:33:52 2017
--> Pid of pppd: 4243
--> Using interface ppp0
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> local  IP address 153.157.201.255
--> pppd: 委鷆枇[01]効[01]
--> remote IP address 10.64.64.64
--> pppd: 委鷆枇[01]効[01]
--> primary   DNS address 222.146.35.1
--> pppd: 委鷆枇[01]効[01]
--> secondary DNS address 221.184.25.1
--> pppd: 委鷆枇[01]効[01]

文字が化けますが、接続が確認できるかと思います。
L-03Fのランプでも接続が確認できます。

今回は試すだけなので、終了します。[ctrl]+[c]押下にて中断。

^CCaught signal 2:  Attempting to exit gracefully...
--> Terminating on signal 15
--> pppd: 委鷆枇[01]効[01]
--> Connect time 0.2 minutes.
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> pppd: 委鷆枇[01]効[01]
--> Disconnecting at Sun Aug 20 16:34:02 2017

自動接続化(udev)

ここらへんから雲行きが怪しくなってくる

udevの編集

udevにファイルを追加することで、一連の設定の自動実行を試行する。

udev(userspace device management)とは,カーネルがパソコンへの接続を検出したデバイスに対して,動的に「デバイス・ファイル」を作成して割り当てるための仕組みです。 Linuxは,システムに存在するあらゆるリソースをファイルとして扱うという特徴を持っています。 - IT Proより。

$sudo nano /etc/udev/rules.d/99-usb.rulesにて、udevを編集する。設定ファイル名は、適当。
2桁数字+任意の文字.rulesでよいらしい。)

99-usb.rules
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="1004", ATTRS{../idProduct}=="6366", ATTRS{bNumEndpoints}=="02", ATTRS{bInterfaceNumber}=="00", SYMLINK+="modem"

idVendor、idProduct、bNumEndpoints、bInterfaceNumberは、それぞれ最初に調べた値を記入。

再起動

上記、udevの設定を確認するため、再起動。

$reboot

ここで躓く

方々のサイトによれば、この段階で、/dev/ttyUSB*/dev/modemが見えるはずなのだが、私の環境では、/dev/modemが見えなかった。
というか、/dev/ttyUSB*も見えない。
modprobeコマンドを再実行したところ、/dev/ttyUSB*が見えるようになった。modprobeコマンドって、起動のたびに再実行が必要なのかな??

udevの編集(2度目)

試行錯誤し、99-usb.rulesの先頭に一行追加した。
編集後のファイルは下記の通り。

99-usb.rules
ATTRS{idVendor}=="1004", ATTRS{idProduct}=="6366", RUN+="/sbin/modprobe usbserial vendor=0x1004 product=0x6366"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="1004", ATTRS{../idProduct}=="6366", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="01", SYMLINK+="modem"

1.1004:6366をみつけたら、modprobeコマンドを実行。ttyUSB*を作成。
2.ttyUSB*の中に1004:6366をみつけたら、シンボリックリンク/dev/modemを実行

といったところだろうか。

再起動

上記、udevの設定を確認するため、再起動。

なんかちがう・・・

$ ls -l /dev/mo*
lrwxrwxrwx 1 root root 7  8月 20 15:06 /dev/modem -> ttyUSB0

使いたいのはttyUSB1なのに、ttyUSB0にシンボリックリンクが張られてしまった・・・
→解決しました。

自動接続化(ifup/ifdown)

気を取り直して、続き(うまくいくはずの作業)を書いてみる。

/etc/network/interfacesの編集

$ sudo nano /etc/network/interfaces

を実行し、/etc/network/interfacesの最下部に、下記記述を追加する。

allow-hotplug ocn
iface ocn inet wvdial

ダイヤル設定の修正

wvdial.confを、自動接続化にあわせて修正します。
/dev/ttyUSB1/dev/modemに修正。

$ sudo nano /etc/wvdial.conf
wvdial.conf
 [Dialer Defaults]
Phone = *99***1#
APN = lte-d.ocn.ne.jp
Username = mobileid@ocn
Password = mobile
New PPPD = yes
Stupid Mode = yes
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","lte-d.ocn.ne.jp"
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attemps = 3
Modem Type = Analog Modem
Modem = /dev/modem
Dial Command = ATD
Baud = 460800
ISDN = 0
Carrier Check = no
Auto DNS = 1
Check Def Route = 1

ifupで接続、ifdownで切断

$ sudo ifup ocn

でインターネット接続、

$ sudo ifdown ocn

でインターネット切断ができる。

今後の展開予定

-自動接続を実現する。
-Raspberry Pi単独でDDNSを運用する。

参考記事

http://qiita.com/dietposter/items/068019ee53252206a6bf
http://qiita.com/hiroyasu55/items/e0ad9d04a9d8feb5c654
http://qiita.com/yumatsud/items/e159d7ffe73de3a65deb
http://qiita.com/gimy/items/1d49f8e08210e9c9f20a