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

# 概要
Raspberry Piで富士ソフトのUSBモデム FS01BUを使い、SORACOM Airの3G通信ができました。USBの抜き差しが不要で簡単な手順で接続できましたので紹介します。
基本的には下記のページに従いました。
[Raspberry PiでSORACOM SIMを使う(FS01BU)](http://qiita.com/osada9000/items/9254646652717cba0267)
##入手
富士ソフトのUSBモデムFS01BUは現在Amazonで入手可能です。SIMカードスロットには標準SIMサイズのSORACOM Airが入ります。

+ [3G USB ドングル (FS01BU)](http://amzn.to/1GqiDQx) 8,880円（2015年10月現在）
+ [SORACOM Air SIMカード（データ通信のみ） (標準)](http://amzn.to/1Gqj1hZ) 888円（2015年10月現在）

#手順
まずはFS01BUをRaspberry Piに差します。
![PA040478.JPG](https://qiita-image-store.s3.amazonaws.com/0/4092/2b7a65fe-6fda-7261-e070-95e98ae6eb93.jpeg)
FS01BU本体のLEDが緑色で点滅していれば待機中となり準備OKです。操作を続けましょう。
`lsusb`コマンドで認識されているUSBデバイスの確認をします。

```bash
$ 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の場合うまく行かないようだ

```bash: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デバイスとして認識させます。

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

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

```bash
$ 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`をインストールしておきます。

```bash
$ sudo apt-get install wvdial
```

`/etc/wvdial.conf`ファイルに以下の接続設定を入れてください。
SORACOMのAPN、ユーザー名、パスワードを入れた接続設定です。

```bash
$ sudo vi /etc/wvdial.conf
```

```bash:/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を実行して接続します。

```bash
$ 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`コマンドで確認します。

```bash
$ 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などを打っておけばいいでしょう。名前解決も確認できます。

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

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

#最後に
これでwvdialコマンド一発で接続できるようになりますが、ログアウトすると終了しますし、再起動すると再度入力が必要です。前者はnohupコマンドで実行、後者はスクリプトを書いてsystemdに組み込めばとりあえずは解決できるでしょう。
あと、自動起動や自動再接続ができるテクニックをお持ちの方は是非Qiitaに投稿お願いします！
## メカトラックスさんの3GPIという選択肢も
細かい設定などが大変だと思う方は、メカトラックス社の3GPIがオススメです。Network Managerを用いて一度設定すれば自動起動できるように作り込まれています。信頼性が高くエンタープライズ用途にオススメです。

* [3GPI（Raspberry Pi 向け3G通信モジュール）](http://www.mechatrax.com/products/3gpi) 29,800円（税込 2015年10月現在）

3GPIの接続設定については、以下のサイトで紹介させていただきました。気になる方はご覧ください。
[Raspberry PiでSORACOM Airをつないでみた！ ～メカトラックス3GPI編～「コマンド１発で接続OK！」](http://adven.info/marketing/rasberry-pi-soracom-air/)

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