C言語アプリケーションから無線モジュールZigBEEをコントロールする

デジタル屏風では、音楽に光が連動する光音共演コンピュータを開発しています。コンピュータとLEDの間を無線通信も可能とするため、切手サイズの無線モジュールZigBEEの評価中です。ZigBEEに関する書籍はいくつかありますが、光音共演コンピュータとして、リモート側にArduinoを配置すること、ローカル側はCプログラムを使うこと、これらの要件から以下のようなシステム構成を考えています。

ZigBEEに関する書籍として「Arduinoプログラム全集」(国野亘著)を選びました。多数のC言語でのサンプルプログラムが掲載されていて、C言語アプリケーションからコントロールするという目的のアーキテクチャに近いものだからです。

しかし、一番初めのプログラムからつまずきました。問題はZigBEEのバージョンの差異によるものです。本書はZigBEE S2を基に記述されています。私が秋月電子で購入したより新しいZigBEE S2Cでは、X-CTUという設定ソフトにおいてFunctionSetでCoordinator、Router、EndDeviceの指定ができないのです。ZigBEE S2C ユーザマニュアル を参照し、Coordinator、Router等の設定はFunction以外のパラメータで行うことがわかりました。Function Setとしては、既定値として設定されている「ZIGBEE TH REG」のままで良いとわかりました。ちなみにここでのTHとは「Through Hole and not SMD」を表し、「REG」とは「Regular and not pro」を表しています。

ZigBEEで使うTransparentモードとAPIモードの違いもFunction Setとしてではなく、「API-Enable」というパラメータを設定する、しないで使い分けるという差異もあります。

Coordinator、RouterおよびAPIモードの設定をS2Cユーザマニュアル通り行っても、一番目のサンプルプログラム(XBEE USBエクスプローラーのRSSIランプを点滅させる)が「XBEE NOT IN API MODE」というエラーで異常終了してしまいます。国野様のサンプルプログラムを見てみると、初期処理の中で”ATVR”というコマンドを呼び出してZigBEEのタイプ(Coordinator,Router,EndDevice)を判定しています。私が見る限りATVRコマンドはZigBEEのバージョンを取得するコマンドであり、S2Cでは単にバージョンしか返していない(目的とした判定ができていない)ように見えました。そこでソースプログラム中のタイプチェックの部分を全てコメントアウトしたところ、一番目のプログラムがようやく動作しました。

一番目のサンプルプログラムはごく簡単なものですが、サンプルプログラムから呼び出している初期化関数で、色々な処理(Resetだとか)を色々呼び出しているという印象を持ちました。

さらにトレーニングを進めて、リモートのArduinoを制御できるようにしたいと思います。

Follow me!