XBeeのAPIモードでメッセージを送信する(PIC)
はじめに
以前、Xbeeの子機で読み取ったセンサー値を親機へ送信していたが、任意のメッセージを送信する方はやっていなかったなと思い、挑戦してみることにした。ArduinoかPICが選択肢としてはあるが、PICでの実装にも慣れてきたのでこちらでやってみる。
今回用意するもの
- PIC16F628A
- XBee S2C * 2
XBeeのAPIモードでフレームを送信するには
XBeeで送受信するには、透過モードとAPIモードがあるので、後者でやってみることにする。
APIモードでメッセージをコーディネータに送信するには、PIC側でAPIフレームを作成する必要がある。最初XBeeのRXとPICのTXを繋ぐだけでシリアル通信が可能になるのかなと思ったが、ウンともスンとも言わなかった...
どうしたものかなと思い、digiのサイトを見に行ったら詳しく説明されていた。
送信フレームを作成してXBeeに送れば、あとはよしなにやってくれるらしい。
APIフレームの作成
あとは送信フレームを作成すればいいだけなので、送信フレームがどんなフォーマットなのかを調べる。
フレーム構造はわかったが、具体的にどういう風に値をセットすれば送信してくれるのかまではわからない。 が、そこもちゃんと説明しているページがあった。親切。
この中の、フレーム作成の手順を参考にXCTUでフレームを作成してみる。
それをPICから送信してみると、XBeeの親機で正常に受信することが確認できた。
ここで作成するフレームはチェックサムも計算済なので、PICから送信するフレームの妥当性を検証する際にも大変役に立った。
※ ちなみに色々なフレームの種類を選択可能なので、XCTUのフレーム作成がベースになると思う。
実装
こんな感じでAPIフレームを作成して送信すればOK
回路図
電源とTX/RXを相互につないだだけのシンプルな構成。
確認
送信されるフレームをXCTUで確認する。
Receive Packet (API 1) 7E 00 19 90 00 13 A2 00 41 7D 50 31 24 A4 01 48 45 4C 4C 4F 20 31 36 46 36 32 38 41 90 Start delimiter: 7E Length: 00 19 (25) Frame type: 90 (Receive Packet) 64-bit source address: 00 13 A2 00 41 7D 50 31 16-bit source address: 24 A4 Receive options: 01 RF data (HEX): 48 45 4C 4C 4F 20 31 36 46 36 32 38 41 RF data (ASCII): HELLO 16F628A Checksum: 90
実際に受信したパケットを何かの処理に利用する場合は、こちらにあるような実装を行えばいい。
まとめ
最初、APIモードでフレーム送信している記事を色々見ていたのだが、ソースがなかったり個人ライブラリ前提だったりで、見てパッとできそうな記事に出会えなかったけど、digiのサイトにExampleがあったのは大変良かった。XBeeのAPIモードで任意の文字列を送ってやりとりするのは、今後も多用しそう。