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 10replacedefaultrouteを書いておかないと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モデムを使ってくれないので追加の設定が必要です。
次回はホットスポットとして使う時の変更箇所を紹介する予定です。
コメント
コメントを投稿