XBee Wi-Fiを買ってWiFi経由でHTTPリクエストを投げてみたのでメモ。
##準備
###ハードウェア
XBee Wi-Fi
スイッチサイエンスなどで買える。4000円程度。
XBee USBアダプター
なんでもよいがSparkFun Electronics XBee Explorer USB(写真の赤いボード)を使った。千石電商などで買える。2500円程度。USBポートに直接差すドングルタイプも便利だが、電源ケーブルなどほかのものと干渉して煩わしいので避けた。
USBケーブル
SparkFunの場合はmini-B typeのもの。引き出しを漁ったら出てきた。
###ソフトウェア
FTDIドライバ
FTDI Chip VCP Drivers
アダプターをMacに認識させるのに必要。スイッチサイエンスのアダプターも比較で買ってみたがまだちゃんと認識できていない。
シリアル端末クライアント
OS Xを想定。WindowsだとTeraTermなども使えるみたい。
初めは以下の二つを使い分けるのがよさそう。どちらかだけでも目的は達成できるはず。
-
XCTU
一つ一つの設定でXBeeに特化したGUIサポートがあり直感的。設定の段階で便利。ターミナルも付属はしているが使いづらい。 -
CoolTerm
コマンドのペーストができるので長いコマンドを打つときに便利。XBeeは無通信時間が10秒以上続くと自動でコマンドモードから抜けてしまうので、XCTUで直打ちしているとしばしば抜けてしまう。
併用する場合は、片方をConnectする前にもう一方をDisconnectして使う(※ここは本当に必要か怪しい)。
設定
Webのテストで@IT Access Test Pageでチェックという例が多かったので倣ってみた。どこかのAPIでもいい気はするし、アクセスログを見ながらやりたければMacでApache立ててアクセスでもよい。
(以下スクリーンショットが続きます)
- XBeeをアダプタに差してXCTUを起動。
- 左上のルーペボタンで書込み先を探す。FTDIドライバーがインストールされていればアダプターが認識されて
usbserial
などが表示されるはずなので選択して次へ。
- モジュールが追加されたらクリックして読み込みを始める。
- 各設定項目を変更する。
取り急ぎ変更したのは以下の項目。
- 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のターミナルで調べて設定。
% 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コマンドを覚える必要がある。
##確認
GET /fnetwork/accesstest/at.html HTTP/1.1
host: www.atmarkit.co.jp
HTMLが返ってきたら成功。
ハマりどころ
ポート
XBeeの設定は16進数なので、HTTPの80
番を指定するときは50
(つまり0x50
)を指定する必要がある。
モード
XBeeにはコマンドモードと透過モードがある。
クライアントで+++
を入力するとコマンドモードに移る。
設定はコマンドモードで行うが、HTTPのリクエストは透過モードで行う。
コマンドモードでHTTPリクエストを投げると以下のようにエラってしまう。
コマンドモードにいる場合は10秒数えて、透過モードに戻ってからリクエストを投げる。透過モードに戻ったかどうかを確認する手段はないようだ。
参考書籍
-
XBeeで作るワイヤレスセンサーネットワーク:
XBee Wi-Fiよりも前の本だが、XBeeの基本的なところを必要に応じて読んでいく。
注意
XBee Wi-Fiは技術基準適合証明の工事設計認証番号をとっており日本国内で適法で利用できるらしい。こういうのをちゃんと確認していくのも大事ですね。
次はセンサデータをWebへ送ってみたい。
いろいろ初めてなので間違って理解しているところもあるかもしれないのでご指摘あればください。