IoT
SORACOM

もうちょっと楽にRaspberry PiでSORACOM Airを使う(FS01BU USBモデムを用いて)

More than 3 years have passed since last update.


概要

Raspberry Piで富士ソフトのUSBモデム FS01BUを使い、SORACOM Airの3G通信ができました。USBの抜き差しが不要で簡単な手順で接続できましたので紹介します。

基本的には下記のページに従いました。

Raspberry PiでSORACOM SIMを使う(FS01BU)


入手

富士ソフトのUSBモデムFS01BUは現在Amazonで入手可能です。SIMカードスロットには標準SIMサイズのSORACOM Airが入ります。


手順

まずはFS01BUをRaspberry Piに差します。

PA040478.JPG

FS01BU本体のLEDが緑色で点滅していれば待機中となり準備OKです。操作を続けましょう。

lsusbコマンドで認識されているUSBデバイスの確認をします。

$ lsusb

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 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 006: ID 1c9e:6801 OMEGA TECHNOLOGY

FS01BUはOMEGA TECHNOLOGY社製です。Vender IDが1c9e、Product IDが6801であることがわかります。

もし、Product IDが6801ではなく98ffの場合、デバイスがうまく認識しません。


ID 1c9e:98ffの場合うまく行かないようだ


lsusbコマンドの表示結果

Bus 001 Device 006: ID 1c9e:6801 OMEGA TECHNOLOGY ←正しい

Bus 001 Device 004: ID 1c9e:98ff OMEGA TECHNOLOGY ←うまくいかない

Product IDが98ffの場合、何をやっても認識しませんでした。ちょこちょこいじっていたので正しい解決策かどうかわかりませんが^^;sudo apt-get upgradeを行うことでProduct IDが6801に変わりました。どなたかコメントいただければ助かります。


modprobeでサクッとデバイス認識

次に以下のコマンドでttyデバイスとして認識させます。

$ sudo modprobe usbserial vendor=0x1c9e product=0x6801

/dev/にttyUSB?デバイスが表示されれば使用可能になります。

$ ls -l /dev/ttyU*

crw-rw---T 1 root dialout 188, 0 10月 4 00:54 /dev/ttyUSB0
crw-rw---T 1 root dialout 188, 1 10月 4 00:54 /dev/ttyUSB1
crw-rw---T 1 root dialout 188, 2 10月 4 00:54 /dev/ttyUSB2


簡単にダイヤルする

wvdialコマンドを用いて簡単にダイヤルすることができます。まずはwvdialをインストールしておきます。

$ sudo apt-get install wvdial

/etc/wvdial.confファイルに以下の接続設定を入れてください。

SORACOMのAPN、ユーザー名、パスワードを入れた接続設定です。

$ sudo vi /etc/wvdial.conf


/etc/wvdial.conf

[Dialer Defaults]

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

保存できたら、sudoでwvdialを実行して接続します。

$ sudo wvdial

--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> 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
--> Sending: AT+CGDCONT=1,"IP","soracom.io"
AT+CGDCONT=1,"IP","soracom.io"
OK
--> Modem initialized.
--> Sending: ATD*99***1#
--> Waiting for carrier.
ATD*99***1#
CONNECT 14400000
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Sun Oct 4 01:15:49 2015
--> Pid of pppd: 3019
--> Using interface ppp0
--> pppd: [18]F?
--> pppd: [18]F?
--> pppd: [18]F?
--> pppd: [18]F?
--> pppd: [18]F?
--> pppd: [18]F?
--> local IP address 10.214.154.107
--> pppd: [18]F?
--> remote IP address 10.64.64.64
--> pppd: [18]F?
--> primary DNS address 169.254.0.53
--> pppd: [18]F?

自分のIPアドレスやプライマリDNSのIPアドレスが表示されれば正常につながっています。

FS01BU本体のLEDが緑色で点灯したままになり通信中の状態を示しています。

Ctrl+Cで終了可能です(LEDが緑色で点滅に戻ります)。


接続確認

別のコンソール(Alt+F2とかLAN接続してれば別のSSHアクセスとか)でpiユーザーでログインしifconfigコマンドで確認します。

$ ifconfig ppp0

ppp0 Link encap:Point-to-Pointプロトコル
inetアドレス:10.214.154.107 P-t-P:10.64.64.64 マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 メトリック:1
RXパケット:8 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:9 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:3
RXバイト:152 (152.0 B) TXバイト:209 (209.0 B)

あと、curlやpingなどを打っておけばいいでしょう。名前解決も確認できます。

$ curl http://www.yahoo.co.jp

$ ping www.yahoo.co.jp

s1.minimum(32Kbps)でもs1.fast(2Mbps)でもpingの速度はあまり変わらないみたい。


最後に

これでwvdialコマンド一発で接続できるようになりますが、ログアウトすると終了しますし、再起動すると再度入力が必要です。前者はnohupコマンドで実行、後者はスクリプトを書いてsystemdに組み込めばとりあえずは解決できるでしょう。

あと、自動起動や自動再接続ができるテクニックをお持ちの方は是非Qiitaに投稿お願いします!


メカトラックスさんの3GPIという選択肢も

細かい設定などが大変だと思う方は、メカトラックス社の3GPIがオススメです。Network Managerを用いて一度設定すれば自動起動できるように作り込まれています。信頼性が高くエンタープライズ用途にオススメです。

3GPIの接続設定については、以下のサイトで紹介させていただきました。気になる方はご覧ください。

Raspberry PiでSORACOM Airをつないでみた! ~メカトラックス3GPI編~「コマンド1発で接続OK!」

ではでは!SORACOM AirでIoTをお楽しみください:laughing: