USB 3G モデム L-02CをRaspberry Pi 3で使えるようにしてMVNOのSIMカードで通信する


MVNOのSIMをUSB接続で使えるUSB 3G モデム L-02Cを買いました。Raspberry Pi 3で使えるようにしてみます。

これで外で自由に通信できるようになります。



MVNOのSIMをUSB接続で使えるUSB 3G モデム L-02Cを買いました。
MVNOのSIMをUSB接続できる3GモデムL-02CをWindows 10で使ってみる

今回はRaspberry Pi 3で動かしてみます。

L-02CをRaspberry Piで使う方法はすでに多くの情報があります。良くまとまっているのはこちらでしょうか。
How to setup a USB 3G Modem on Raspberry PI using usb_modeswitch and wvdial / The Fan Club
手順の通りにやってみます。

必要なパッケージのインストール

まずはパッケージのインストールです。
sudo apt-get update
sudo apt-get install ppp usb-modeswitch wvdial

USBモデムのIDを確認する

USBモデムのベンダーIDとプロダクトIDを調べます。
USBモデムは2つのモードで動くそうです。USBストレージとして動くモードとモデムとして動くモードです。USBを挿した時、最初はストレージとして認識するので自動的にモデムモードに切り替えます。また、モデムを挿した事を認識して自動的にネットへ接続動作をさせるためです。


USBモデムをRaspberry Piへ挿します。そしてデバイスを表示します。
lsusb
Bus 001 Device 005: ID 1004:618f LG Electronics, Inc. Ally/Optimus OneBus 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
3Gモデムと思われるデバイスのIDをメモします。
モデムを挿したままリブートします。
sudo reboot
Bus 001 Device 005: ID 1004:618f LG Electronics, Inc. Ally/Optimus One
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
最初のIDはストレージモードのID、2番目のIDはモデムモードのIDとなるはずです。
L-02CはプロダクトIDは変わらないようですね。ストレージモードで認識されないようです。usb_modeswitchはいらないのかな?

一応手順通りに進めてみます。ですが、ストレージモードのプロダクトIDがわかりません。
configPack.tar.gzをパソコンにもってきて展開します。LGのベンダーID1004で始まるファイルを一つずつ開いてみると、プロダクトID 61ddがL-02Cだとわかりました。
という事で次のようにします。
cd ~/Downloads
tar -xzvf /usr/share/usb_modeswitch/configPack.tar.gz 1004\:61dd

展開されたファイル1004:61ddを見てみると
# LG L-02C LTE
TargetVendor=0x1004
TargetProduct=0x618f
StandardEject=1
となっていました。

usb_modeswitch.confを編集する

ストレージモードと認識されたモデムをモデムモードに切り替えるusb_modeswitchの設定をします。
設定ファイルを編集します。
sudo leafpad /etc/usb_modeswitch.conf
次を最後に追加
# LG L-02C LTE
DefaultVendor=0x1004
DefaultProduct=0x61dd
TargetVendor=0x1004
TargetProduct=0x618f
打ち間違いしやすいです。Targetとなっている方にモデムのIDを設定します。

wvdial config fileを編集する

MVNOのネットワークにつなぐ設定をします。今回の例ではwvdialというプログラムを使います。
設定ファイルを開きます。
sudo leafpad /etc/wvdial.conf

この内容はこちらを参考にしました。
Raspberry Pi をUSBモデムでインターネット接続 Qaplaの覚書・メモ・備忘録・独言
L-02CでLTEルータ作成  /dev/stkinosh
通信ポートはModem = /dev/gsmmodemとしてみました。
私はIIJmioを使います。他のMVNOの場合はAPN設定を変えてください。設定番号2番を使います。
[Dialer Defaults]
Init1 = ATZ
Init2 = ATH
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = AT+CGDCONT=2,"IP","iijmio.jp"
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = iijmio.jp
Modem = /dev/gsmmodem
ISDN = 0
Phone = *99***2#
Carrier Check = no
Password = iij
Username = mio@iij
保存して終了します。

つながるか試します。

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 Wed Oct -- 10:--:-- 2016
--> Pid of pppd: 1290
--> Using interface ppp0
--> local  IP address 100.77.*.*
--> remote IP address 10.64.*.*
--> primary   DNS address 202.232.*.*
--> secondary DNS address 202.232.*.*

つながったようです。
/dev/stkinosh様のサイトに書かれているようにATHコマンドがないと再接続できませんでした。

L-02Cを引っこ抜いて別のUSBポートへつないでみました。認識するかな・・・問題なくwdialでつながりました。
これでL-02Cが使えるようになりました。

/etc/network/interfacesを編集する

wvdialを個別に使ってもよいですが、ネットワーク関連の設定は/etc/network/interfacesにまとめておくと他のインターフェースとの関係を整理しやすいです。
こちらを参考にしました。
Guide How to use Raspberry Pi with 3G USB Stick / CopyNDone
/etc/network/interfacesを編集します。
sudo leafpad /etc/network/interfaces
ファイルの最後に次を追加します。
allow-hotplug ppp0
iface ppp0 inet wvdial
  pre-up sleep 3

後ほどの自動起動サービスを機能させるため物理インターフェース名ppp0を使っています。論理インターフェース名でやっていたらサービスが停止しなくて悩みまくりました。
sleep 3はおまじないです。USB 3Gモデムを挿したままRPiをブートするとpppdがハングアップする確率が高いようです。sleepを付けたら動く可能性が高くなった気がします。

iijに接続してみます。
sudo ifup ppp0
端末に何も表示されませんので不安になります。接続できたかな?確認します。
ip a show dev ppp0
4: ppp0:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp 
    inet 100.87.113.*** peer 10.64.**.**/32 scope global ppp0
       valid_lft forever preferred_lft forever
接続を解除するには
sudo ifdown ppp0
と入れます。

これで基本的な設定は終わりました。

自動で接続する

ブート時やUSB 3Gモデムを挿した時に自動的にppp接続をするようにします。
こちらを参考にしました。
Raspberry PiでUSBモデム挿入時にSORACOMへ自動接続する

/etc/ppp/peers/wvdialに追加設定を書きます。
sudo leafpad /etc/ppp/peers/wvdial
次の文を追加します。
replacedefaultroute
persist
holdoff 10
replacedefaultrouteを書いておかないとUSB 3Gモデムがつながってもこっちの回線を使ってくれません。ルート設定を自動的にするようにします。
persistとholdoffはリダイヤルできるようにするのかな?動作を実感していないので良くわかりません。

次にUSB 3Gモデムの抜き差しをした時に自動的でifup/ifdownするサービスを登録します。
/etc/udev/rules.d/50-lte.rulesというファイルを作ります。
sudo leafpad /etc/udev/rules.d/10-lte.rules
次のように書きます。
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{../idVendor}=="1004", ATTRS{../idProduct}=="618f", ATTRS{bInterfaceNumber}=="02", TAG+="systemd" ,ENV{SYSTEMD_WANTS}+="ifup@ppp0.service"
add時にifup@サービスを登録します。remove時は必要ありません。
ifup@.servicesは/devにあるインターフェースにバインドする記述になっているため、物理インターフェースppp0が無くなると自動的に終了処理が実行されます。

最初、論理インターフェース名で登録していたため、モデムを抜いてもifdownしない、再接続してもifupしない、と2週間悩んでいました。サービスが終了する条件をまじめに見たら物理デバイスに関連付けないと動かないと気づきました。

L-02Cがppp0にならないと動かない記述なので納得できませんが、とにかくこれでL-02Cを挿すと自動的に接続できるようになりました。

まとめ

USB 3G モデム L-02Cが使えるようになりました。
独立して通信できると使い道も広がるかもしれません。ホットスポット化すればお手軽ルータとして通信の拠点が出来上がります。

まぁ、こんな使い方ではスマートフォンの方が便利ですけど・・・。安いスマートフォンが高性能化しているためRaspberry Piの使いどころがわかりずらくなっています。やはり外部のハードウエアを制御しないと意味を見いだせないかも。そのための下地作りですね。


上の写真のような状態で消費電流はブート時に0.7A強で、アイドル時に約0.56A、通信時に0.6A弱でした。モバイルバッテリーで動かせます。

もっと早い時期に記事を上げるつもりでしたが時間がかかってしまいました。
できる限り素のRASPBIANの状態で動かしたいと思っています。
ブート時にモデムを挿していれば自動的につながるはずなのですが、日によって繋がったり繋がらなかったりします。pppdがhangupするようです。原因がわからず解決できません。sleepを追加して回避しています。


前回の記事
外出時にRaspberry Pi 3を起動すると自動的にホットスポットになるスクリプトを作りました(RPi3_Switchable_HOTSPOT)
で書きましたように、RPiのホットスポット化も行いました。
これだけでは3Gモデムを使ってくれないので追加の設定が必要です。

次回はホットスポットとして使う時の変更箇所を紹介する予定です。

コメント

最近のコメント

Threaded Recent Comments will be here.