XBee Wi-FiをWebに接続する


![XBee Wi-Fi - Digi International](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720014650.png?1405788429)


XBee Wi-Fiを買ってWiFi経由でHTTPリクエストを投げてみたのでメモ。

##準備
###ハードウェア

#### XBee Wi-Fi
[スイッチサイエンス](http://www.switch-science.com/catalog/1364/)などで買える。4000円程度。

#### XBee USBアダプター
なんでもよいが[SparkFun Electronics XBee Explorer USB](https://www.sparkfun.com/products/8687)(写真の赤いボード)を使った。[千石電商](http://www.sengoku.co.jp/)などで買える。2500円程度。USBポートに直接差すドングルタイプも便利だが、電源ケーブルなどほかのものと干渉して煩わしいので避けた。
#### USBケーブル
SparkFunの場合はmini-B typeのもの。引き出しを漁ったら出てきた。

###ソフトウェア
#### FTDIドライバ
[FTDI Chip VCP Drivers](http://www.ftdichip.com/Drivers/VCP.htm)
アダプターをMacに認識させるのに必要。スイッチサイエンスのアダプターも比較で買ってみたがまだちゃんと認識できていない。


#### シリアル端末クライアント
OS Xを想定。WindowsだとTeraTermなども使えるみたい。
初めは以下の二つを使い分けるのがよさそう。どちらかだけでも目的は達成できるはず。

- [XCTU](http://www.faludi.com/2013/09/22/new-xctu-for-mac-windows/)
一つ一つの設定でXBeeに特化したGUIサポートがあり直感的。設定の段階で便利。ターミナルも付属はしているが使いづらい。

- [CoolTerm](http://freeware.the-meiers.org/)
コマンドのペーストができるので長いコマンドを打つときに便利。XBeeは無通信時間が10秒以上続くと自動でコマンドモードから抜けてしまうので、XCTUで直打ちしているとしばしば抜けてしまう。

併用する場合は、片方をConnectする前にもう一方をDisconnectして使う(※ここは本当に必要か怪しい)。

## 設定
Webのテストで[@IT Access Test Page](http://www.atmarkit.co.jp/fnetwork/accesstest/at.html)でチェックという例が多かったので倣ってみた。どこかのAPIでもいい気はするし、アクセスログを見ながらやりたければMacでApache立ててアクセスでもよい。
（以下スクリーンショットが続きます）

1. XBeeをアダプタに差してXCTUを起動。
![xctu](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720114516_original.png?1405824333)
1. 左上のルーペボタンで書込み先を探す。FTDIドライバーがインストールされていればアダプターが認識されて`usbserial`などが表示されるはずなので選択して次へ。
![xctu](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720114515_original.png?1405824341)
1. モジュールが追加されたらクリックして読み込みを始める。
![xctu](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720114514_original.png?1405824338)
![xctu](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720114513_original.png?1405824337)
1. 各設定項目を変更する。
![xctu](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720114512_original.png?1405824336)

取り急ぎ変更したのは以下の項目。

- SSID
- Encryption Enable
- Passphrase
- IP Protocol: デフォルトで`UDP`になっているので`TCP`に直す。
- DNS Address
- Description IP Address: 1カ所決め打ちで通信するという設計らしい。
- Source Port: `50`(16進数)
- Destination Port: `50`(16進数)
- IP Address of gateway
- IP Address Mask
- Module IP Address

Description IP AddressはMacのターミナルで調べて設定。

```bash
% nslookup www.atmarkit.co.jp
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	www.atmarkit.co.jp
Address: 202.218.219.147
```
必要な項目を設定したら鉛筆のボタンで書き込む。
なお、ここまでの作業はCoolTermでもできるはずだが、ATコマンドを覚える必要がある。

##確認

1. 今度はCoolTermで接続。usbserialを選んだ後、Local Echoをonにする。
![local echo](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720120922_original.png?1405825771)
1. HTTPリクエストを投げる。最後の空行も必要。

```
GET /fnetwork/accesstest/at.html HTTP/1.1
host: www.atmarkit.co.jp

```

![XTerm screen](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720010903_original.png?1405786163)

HTMLが返ってきたら成功。

## ハマりどころ
### ポート
XBeeの設定は16進数なので、HTTPの`80`番を指定するときは`50`(つまり`0x50`)を指定する必要がある。
### モード
XBeeにはコマンドモードと透過モードがある。
クライアントで`+++`を入力するとコマンドモードに移る。
設定はコマンドモードで行うが、HTTPのリクエストは透過モードで行う。
コマンドモードでHTTPリクエストを投げると以下のようにエラってしまう。
![HTTP error](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720121624_original.png?1405826192)
コマンドモードにいる場合は10秒数えて、透過モードに戻ってからリクエストを投げる。透過モードに戻ったかどうかを確認する手段はないようだ。
## 参考書籍
- [XBeeで作るワイヤレスセンサーネットワーク](http://www.amazon.co.jp/dp/4873115302/):
XBee Wi-Fiよりも前の本だが、XBeeの基本的なところを必要に応じて読んでいく。

## 注意
XBee Wi-Fiは技術基準適合証明の工事設計認証番号をとっており日本国内で適法で利用できるらしい。こういうのをちゃんと確認していくのも大事ですね。
![giteki](http://f.st-hatena.com/images/fotolife/s/satzz/20140720/20140720134230_original.jpg?1405831391)

- - -
次はセンサデータをWebへ送ってみたい。
いろいろ初めてなので間違って理解しているところもあるかもしれないのでご指摘あればください。