Jetbotを3G USBモデム(AK-020)でSORACOM対応する。
この記事について
この記事ではJetson nanoに3G USBモデムAK-020を接続する方法を紹介する。RaspbianやUbuntuへの接続方法が多数紹介されている。Jetson nanoのUbuntu 18.04に接続する場合基本的な手順は同じだが、いくつか細かい違いがあったのでまとめておく。Jetbotへ接続し、3G回線を使いたい場合の参考に。
接続手順
1. 3Gモデムのマウント
AK-020はJetson nanoへ接続するとCD-ROMとしてマウントされる。そのため、CD-ROMをアンマウントして、3Gモデムとして動作させる必要がある。Raspbianで実行する場合はいくつか方法がある。Jetson nanoの場合はusb-modeswitchを使う方法で唯一成功した。
usb_modeswitchがインストールされていない場合はインストールする。
sudo apt-get install usb-modeswitch
usb_modeswitchの設定ファイルの末尾にAK-020用の設定を記載する。
# ファイル名 /lib/udev/rules.d/40-usb_modeswitch.rules #AK-020 ATTR{idVendor}=="15eb", ATTR{idProduct}=="a403", RUN+="usb_modeswitch '%b/%k'"
さらに、GSMモデムとして認識させるための設定ファイルを作成する。
# ファイル名 /etc/usb_modeswitch.d/15eb:a403 DefaultVendor = 0x15eb DefaultProduct = 0xa403 TargetVendor = 0x15eb TargetProduct = 0x7d0e StandardEject = 1 WaitBefore=2
ここまで設定したら一度Jetson nanoを再起動させる。Jetson nanoが起動したらAK-020を刺した時のイベントを確認する。dmesgだとコマンド実行時のみ表示されるので、tail -f /var/log/kern.log
で確認するとよい。
CD-ROMがアンマウントされGMSモデムとして認識される。またこの時/dev/ttyUSB0〜/dev/ttyUSB3まで4つのシリアルデバイスが作成されている。このうちどれかがUSBモデムとの通信ポートになる。少し長ったらしくなるが、認識した時のログを掲載する。
[Jul 14 05:39:04 jetbot kernel: [19427.007551] usb 1-2.4: new high-speed USB device number 4 using tegra-xusb Jul 14 05:39:04 jetbot kernel: [19427.031933] usb 1-2.4: New USB device found, idVendor=15eb, idProduct=a403 Jul 14 05:39:04 jetbot kernel: [19427.031999] usb 1-2.4: New USB device strings: Mfr=2, Product=3, SerialNumber=4 Jul 14 05:39:04 jetbot kernel: [19427.032041] usb 1-2.4: Product: AK-020 Jul 14 05:39:04 jetbot kernel: [19427.032080] usb 1-2.4: Manufacturer: AK-020 Jul 14 05:39:04 jetbot kernel: [19427.032116] usb 1-2.4: SerialNumber: Jul 14 05:39:04 jetbot kernel: [19427.044589] usb-storage 1-2.4:1.0: USB Mass Storage device detected Jul 14 05:39:04 jetbot kernel: [19427.045364] scsi host0: usb-storage 1-2.4:1.0 Jul 14 05:39:05 jetbot kernel: [19428.069400] scsi 0:0:0:0: CD-ROM HSPA_USB SCSI CD-ROM 622 PQ: 0 ANSI: 0 CCS Jul 14 05:39:07 jetbot kernel: [19430.368167] usb 1-2.4: USB disconnect, device number 4 Jul 14 05:39:08 jetbot kernel: [19431.363561] usb 1-2.4: new high-speed USB device number 5 using tegra-xusb Jul 14 05:39:08 jetbot kernel: [19431.394481] usb 1-2.4: New USB device found, idVendor=15eb, idProduct=7d0e Jul 14 05:39:08 jetbot kernel: [19431.394525] usb 1-2.4: New USB device strings: Mfr=9, Product=10, SerialNumber=0 Jul 14 05:39:08 jetbot kernel: [19431.394552] usb 1-2.4: Product: AK-020 Jul 14 05:39:08 jetbot kernel: [19431.394580] usb 1-2.4: Manufacturer: AK-020 Jul 14 05:39:08 jetbot kernel: [19431.405649] usb-storage 1-2.4:1.6: USB Mass Storage device detected Jul 14 05:39:08 jetbot kernel: [19431.410039] scsi host0: usb-storage 1-2.4:1.6 Jul 14 05:39:09 jetbot kernel: [19432.420346] scsi 0:0:0:0: Direct-Access HSPA_USB SCSI CD-ROM 622 PQ: 0 ANSI: 0 CCS Jul 14 05:39:09 jetbot kernel: [19432.451840] sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled Jul 14 05:39:09 jetbot kernel: [19432.458823] sd 0:0:0:0: [sda] Asking for cache data failed Jul 14 05:39:09 jetbot kernel: [19432.464333] sd 0:0:0:0: [sda] Assuming drive cache: write through Jul 14 05:39:09 jetbot kernel: [19432.474501] sd 0:0:0:0: [sda] Attached SCSI removable disk Jul 14 05:39:10 jetbot kernel: [19433.406926] usbcore: registered new interface driver option Jul 14 05:39:10 jetbot kernel: [19433.406994] usbserial: USB Serial support registered for GSM modem (1-port) Jul 14 05:39:17 jetbot kernel: [19440.421602] option 1-2.4:1.2: GSM modem (1-port) converter detected Jul 14 05:39:17 jetbot kernel: [19440.430267] usb 1-2.4: GSM modem (1-port) converter now attached to ttyUSB0 Jul 14 05:39:17 jetbot kernel: [19440.430449] option 1-2.4:1.3: GSM modem (1-port) converter detected Jul 14 05:39:17 jetbot kernel: [19440.431161] usb 1-2.4: GSM modem (1-port) converter now attached to ttyUSB1 Jul 14 05:39:17 jetbot kernel: [19440.431358] option 1-2.4:1.4: GSM modem (1-port) converter detected Jul 14 05:39:17 jetbot kernel: [19440.431718] usb 1-2.4: GSM modem (1-port) converter now attached to ttyUSB2 Jul 14 05:39:17 jetbot kernel: [19440.431906] option 1-2.4:1.5: GSM modem (1-port) converter detected Jul 14 05:39:17 jetbot kernel: [19440.435208] usb 1-2.4: GSM modem (1-port) converter now attached to ttyUSB3
[参考]
- 3Gモデムマウント qiita.com
2. ModemManagerの停止
接続は後述するpppconfigを使用する。しかしUbuntuの場合、別途ModemManagerがモデムを管理し始めるので競合しないようにあらかじめ停止させておく。
sudo systemctl stop ModemManager sudo systemctl disable ModemManager
3. 通信接続設定
pppconfigを使ってキャリアへの接続を行う。pppconfigのインストールは以下の通り。
sudo apt-get install pppconfig
インストール後、ターミナルからpppconfigを立ち上けてcreate connectionを選択する。以下の表に合わせて設定進める。ユーザ名やパスワードについてはSORACOM Air SIMのデフォルトの場合。それ以外のキャリアの場合は都度修正を行う。
設定 | 値 |
---|---|
Provider | soracom_ak-020 |
Configure Nameservers (DNS) | Dynamic |
Authentication Method | PAP |
User Name | sora |
Password | sora |
Speed | 460800 |
Puls or Tone | Tone |
Phone Number | *99# |
Choose Modem Config Method | No |
Manually Select Modem Port | /dev/ttyUSB0 |
ppp接続時に3G回線をデフォルトルートとして設定できるように、pppconfigの設定ファイルを直接編集する。ファイル名はProviderで設定した値になっている。末尾から3行を追加する。
# This optionfile was generated by pppconfig 2.3.18. # # hide-password noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/soracom_ak-020" debug /dev/ttyUSB0 460800 defaultroute noipdefault user "sora" remotename soracom_ak-020 ipparam soracom_ak-020 usepeerdns #追加 persist #追加 replacedefaultroute #追加
[参考]
続いて、ATコマンドの修正を行う。このATコマンドファイルに従い、pppconfigがシリアルポートを介してモデムを制御する。
This chatfile was generated by pppconfig 2.3.18. # Please do not delete any of the comments. Pppconfig needs them. # # ispauth PAP # abortstring ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED # modeminit '' ATH # ispnumber OK AT+CFUN=1 OK ATZ OK AT+CGDCONT=1,"IP","soracom.io" OK-AT-OK "ATD*99#" # ispconnect CONNECT \d\c # prelogin # ispname # isppassword # postlogin # end of pppconfig stuff
3.起動
以下のコマンドで接続を行う。AK-020の場合はLEDが緑色に点滅したら接続成功となる。
pon soracom_ak-020
ifconfigを打つと以下のようにppp0というインタフェースができている。IPが当たっていたら接続成功。
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.xxx.xxx.xxx netmask 255.255.255.255 destination 10.64.64.64 ppp txqueuelen 3 (Point-to-Point Protocol) RX packets 62 bytes 649 (649.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 63 bytes 1474 (1.4 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
明示的に切断したい場合は以下のコマンドで接続する。
poff soracom_ak-020
あとはこのコマンドを起動スクリプトに仕掛けておけば良い。起動スクリプトに仕掛ける場合は、usb_modeswitchの実行後になるように順番に留意する。
まとめ
Jetson nanoを3G回線にダイレクトに接続できる。WiFi モバイルルータに経由で接続する方法もあるが、それだと3G回線のみになる。とりあえずソラコムまで繋がったら、Jetbotの走行データをHarvestにあげるもよし、Napterで遠隔操作するも良し。この続きはまたいずれ。