XBeeのAPIモードで温度を受信する

はじめに

夏場は部屋が寒すぎるので、どうにかならないかな〜と考えていたら、部屋の温度を監視して適温になるようにエアコンを自動調整すればいいのでは。と思い立ち、周辺装置の開発でもしてみようと思ったので、その前段としてXBeeの使い方を覚えてみる(一年経過)

準備

秋月電子で以下の部品を調達する

X-CTUのセットアップ

XBeeの設定を行うには X-CTU というソフトウェアを使うと簡単に設定できるので、インストールする

www.digi.com

XBeeの設定

X-CTU をインストールしたら、早速XBeeの設定を行ってみる
今回はコーディネータ1台とルータ2台によるメッシュネットワークを構成したいと思う。

ZigBeeの仕様についてはskyleyのサイトで大変わかりやすくまとめてくれているので、一通り目を通すのをオススメする。

ZigBee入門 - Skyley Support Wiki

XBeeのフレーム構造や種類などに関しては、XBeeの製造元の digi 社のサイトが大変参考になる。

XBee API mode

XBeeのピン配列に関しては以下のサイトがわかりやすい

XBeeのピン配列

共通

最初は、親機子機共に共通の設定を行う必要があるので以下のように設定する。
XBeeUSBアダプターを使ってXBeeを繋いだら左上の「+」マークからデバイスを探す。

f:id:kyonta1022:20191018232653p:plain

USBで繋いでいるので usbserial を選択する。

f:id:kyonta1022:20191018232711p:plain

無事デバイスが見つかったら、Firmwareの最新版を一度書き込みたいので update を選択する。

f:id:kyonta1022:20191018232736p:plain

ZIGBEE TH Reg を選択して完了するのを少々待つ。

f:id:kyonta1022:20191018232723p:plain

余談だが、従来のXBeeだとコーディネータやルータなどのデバイスタイプ毎に書き込むFirmwareが違っていたらしいが、XBeeS2Cからは設定項目でデバイスタイプなどを変更することが可能となった。

どうやら、メモリやCPUの性能が上がったことで全モードが書き込み可能となったため、ATコマンドで変更することができるようになったのだとかどうとか。

子機(室温を親機に送る)

設定項目は結構あるので、変更部分だけを抜粋。
若干ハマった所としては、アナログピン(Pin19)を入力にするだけではダメで、サンプリングレートを設定しないとセンサー素子から値を読み込んで送信してくれない。

[Networking]
- PAN ID = 1192
- Zigbee stack profile = 0

[Serial Interfacing]
- API Enable = API Enabled [1]

[I/O Settings]
- Pin 19 DIO1/AD1/nSPI_ATTN Configuration = ADC [2]

[I/O Sampling]
- IO Sampling Rate = 3E7

ブレッドボード上の回路としてはこんな感じになる f:id:kyonta1022:20191018224221p:plain

親機(受信した値をコンソールに出力する)

同じく変更部分だけを抜粋。
重要な部分は Coordinator を有効にするぐらい。

[Networking]
- PAN ID = 1192
- Zigbee stack profile = 0
- Coordinator Enable = Enabled[1]

[Addressing]
- Destinaton Address Low = FFFF

[Serial Interfacing]
- API Enable = API Enabled [1]

親機は設定が終わってもPCに繋げっぱなしにしとき、X-CTU のコンソールを開いて受信するフレームを確認する。

f:id:kyonta1022:20191018234542p:plain

一点混乱してハマったのでメモとして残しておくが、コンソールで確認したり設定変更したりスキャンしてネットワークを確認してまたコンソールみたりと、試行錯誤しながら色々触ると思うが、何かしらのタイミングで IO Data Sample RX Indicator のフレームが受信されなくなり、代わりに変なフレームを受信するようになる。これは、スキャンなどを行っているとそれに関係するフレームの送受信を行っているために、そのようなフレームがコンソールに表示される(その間はスキャン以外のフレームは送信されないような仕様になってるぽい?)

完成

f:id:kyonta1022:20191018235222j:plain