xor

二兎を得るか、一兎をも得ざるか

XBeeの小ネタなど

センサーネットワークを作っていますが、XBeeってすごいです。
特にややこしやーな設定をしなくてもパケットのバイト列送るだけでAD変換値とってきてくれたりルーティングしてくれたりする働きバチですね。

とはいえ色々作ってるうちにわからないことも色々出てきてしまったため雑多にまとめてみました。

ピン配置と使えそうな機能について

CdSとかの可変抵抗素子をセンサに使用した場合、入力が電源電圧をベースとして分圧したものになります。電池電源で野外環境とかにおいとくと温度変化で出力もかなり変動するので、AT%Vで取得した供給電圧値で3300[mV]を割ったものを係数として掛けてやれば良さそうです。

APIパケットのチェックサムの計算

ネットワークの親機(Coordinator)はpythonとpyserialで制御しています。
シリアル出力に直接0x7Eとか書き込むわけですが、末尾にいちいち計算されたチェックサムをつけなければなりません。あらかじめ計算しておいて定数として仕込んでおくのが簡単ですが、ノード数が膨大になったときどうしようもなくなります。

pythonはライブラリとしてpython-xbeeなんかありますが、どういうわけかうまく動いてくれなかったので自分で関数書きました。

def addchksum(p):   s = 0x00   for i in range(3, len(p)):     s += ord(p[i])   c = 0xFF - (s & 0xFF)   return p + chr(c) 

引数に完成したパケットを入れて投げると、末尾にチェックサムを付加して返してくれます。簡単でほっとしましたが、CRCの実装とかのほうがむしろライブラリあったんじゃないかと思ったり。

※全ノードに送るときはブロードキャストを使うので、パケットを定数化しちゃっても大丈夫そう。

参考ページなど

ボクにもわかるXBee用センサネットワーク

日本語で解説されているなかでは最も詳しいのではないかと思われます。実例が豊富!

XBee(無線通信)の実験パート1

パート6まであります。実験というかたちで書かれていますがすごく丁寧でわかりやすいです。

Digi API Frame Maker

公式のAPIパケット生成補助ページです。APIモードでいじるなら必須。

などなど。