MZ Platformとフィジカルコンピューティング

MZ PlatformとXBeeの接続

ここでは、MZ PlatformとXBeeを接続する方法と、その利用例について説明します。

XBeeとは、比較的安価で購入できる市販の無線通信用モジュールで、 PCとArduinoのシリアル通信の間に入れて無線化することや、 単独で無線化I/Oモジュールとして利用することが可能です。 電波使用に関する国内外の認証を取得しているので、 これを用いてプロトタイプとして作成した機器を実際に利用することが可能です。

書籍やウェブ上で日本語でも多くの解説が出ているので、 それらを参考にすれば情報は充分ですが、参考文献を一つだけ挙げておきます。

書籍: XBeeで作るワイヤレスセンサネットワーク,R. Faludi著,オライリージャパン,2011年.

XBeeでできることと準備するもの

XBeeでできることはいくつかありますが、ここでは2点に焦点を絞ります。 一つはPCとArduino等のシリアル通信を無線化することで、 もう一つはXBeeとセンサを組み合わせて無線化I/Oモジュールとして利用することです。

いずれの場合も、XBeeが2つと、PCとXBeeを接続するための機器を準備する必要があります。 無線化I/Oモジュールとしての利用では3つ以上も可能です。 PCとXBeeを接続する機器としては、XBeeエクスプローラUSBが市販されています。 また、XBeeは複数のシリーズが存在しますが、 ここではXBee 802.15.4(シリーズ1)を用いています。 なお、XBee ZB(シリーズ2)でも同じことができるはずですが、 多少設定方法とピン配置が違うようです。 上に挙げた参考書籍はシリーズ2が対象なので、そちらを参考にすると良いでしょう。 また、それぞれにPROと付くバージョンがありますが、高出力版なのでここでは不要です。 いずれにしろ準備する場合にXBeeのシリーズを揃える必要があります。 さらに、それぞれにアンテナのバリエーションがあり、 アンテナの種類を揃える必要はありませんが、 チップアンテナかPCBアンテナを選ぶと無難です。 それぞれ用途と使用状況によっては向き不向きがあるようですが、ここでは省略します。

XBeeをPCに接続するエクスプローラUSBは、接続にドライバのインストールが必要となるので、 製品の情報に従って導入してください。

XBeeとセンサを直接接続するためには、ブレッドボードやジャンプワイヤ、 ブレッドボードでXBeeを利用するための変換基板などがあると便利です。

XBeeの設定

XBeeの設定は、WindowsのPC上で、販売元が提供するソフトウェアX-CTUを利用します。 大まかな流れは次の通りです。

X-CTUをインストールし、XBeeをエクスプローラUSB等でPCに接続して起動すると、 下図左のような画面になります。該当するポートを選択し、適切なボーレート(Baud)を選択して、 Test/Queryボタンを押します。下図右のダイアログが表示されれば設定が可能です。 失敗する原因としては、接続不良かポート選択ミス、またはボーレート指定ミスなどがあります。 XBee購入直後は9600ですが、設定してから忘れてしまった場合などはいくつか試してみる必要があります。

設定するには、上のタブからModem Configurationを選択して、下図左の画面を表示します。 Readボタンを押すと、該当するバージョンが自動的に選択されて、設定が読み取られ、下図右の画面になります。 該当するバージョンのデータがない場合など、この時点でダウンロードが必要になることもあります。

設定を変更するには、対象の行を選択すると右側にフィールドが出るので、そこに値を入力します。 必要なところを入力したら、Writeボタンを押します。 一度Writeボタンを押したら、Readボタンを押して反映されているか確認すると良いでしょう。 注意点として、ボーレートを書き換えたら、最初の画面でBaudの値を変更しないとその後の接続に失敗しますので、 つながらなくなったと思ったら、そこを確認してみてください。

シリアル通信の無線化

シリアル通信の無線化については、設定箇所は下記となります。

  • DH:(通信相手の上位アドレス)
  • DL:(通信相手の下位アドレス)
  • MY:FFFF
  • BD:(使用するボーレート)
XBeeのアドレスは裏側に8桁の英数字が2段で書かれているので、それを入力します。 この設定を1組のXBeeに対して行えば、シリアル通信の無線化が可能となります。

無線化I/Oモジュール

無線化I/Oモジュールとして使用する場合、PC側とセンサー側で設定内容が変わります。 PC側の設定箇所は下記となります。

  • ID:(PAN ID)
  • DH:0
  • DL:FFFF
  • MY:FFFF
  • BD:(使用するボーレート)
ここでは複数のXBeeからセンサ情報が送られてくることだけを想定して、 PC側からの送信は想定していないのですが、通信相手のアドレス指定はブロードキャストとしています。 また、シリアル通信の無線化は1対1なので省略しましたが、ここでブロードキャストの設定にしているので、 一応PANのIDをデフォルトから変更しています。

センサ側の設定箇所は下記となります。

  • ID:(PAN ID)
  • DH:(PC側XBeeの上位アドレス)
  • DL:(PC側XBeeの下位アドレス)
  • MY:FFFF
  • BD:(使用するボーレート)
  • D0-D8:(入力ピンの設定)
  • IR:(サンプリングレート)
PANのIDをPC側と一致させ、こちらはPC側のアドレスを通信相手に指定します。 あとは入力ピンの設定とサンプリングレートを指定します。 入力ピンの設定は、デジタル入力であればDI、アナログ入力であればADCを指定します。 サンプリングレートは、測定間隔をミリ秒単位の16進数で指定します。

コンポーネント開発

ここでは、無線化I/Oモジュールとして利用するために必要なコンポーネント開発について説明します。 シリアル通信の無線化であれば専用のコンポーネントは必要ありません。

前述のような無線化I/Oモジュールとしての設定を行って回路を構成すると、 入力ピンでサンプリングされたデータがPC側のシリアルポートに送信されるようになります。 送信されるデータは所定のバイト列で構成され、その書式はXBeeのマニュアル等に記載されています。

現在、その書式を読み取るMZコンポーネントを開発中ですが、 完成するのはだいぶ先になりそうです。なお、そのようなライブラリを開発している例はいくつかあって、 XBee APIなどの名称でJava版やProcessing版があるようなので、必要な方はそちらを調べてみてください。

利用例

シリアル通信の無線化:Arduino FIOでのLED点灯

MZ PlatformとArduinoの接続 で説明したLED点灯のサンプルを、Arduino FIOとXBeeで再構成した例を示します。

Arduino FIOは、 数多く存在するArduinoのバリエーションの一つで、 XBeeとリチウムイオンポリマー電池との組み合わせに最適です。

下図左がArduino DuemilanoveをPCとUSBケーブルで接続してLEDを点灯させている例で、 下図右がArduino FIOとXBeeで無線化した例です。 Arduino FIOの裏側にXBeeを挿すソケットがあるので、写真では見えていません。 MZアプリケーションは同じものを使っています。つまり、シリアル通信の無線化の場合、 MZアプリケーションとしてはシリアル通信コンポーネントを使って通信を実行するだけで、 特別なコンポーネントを利用することはありません。 注意点としては、シリアル通信のボーレートと2つのXBeeのボーレートをすべて一致させる必要があります。

無線化I/Oモジュール:光センサとボタンスイッチ

XBee経由で光センサとボタンスイッチの状態を取得する例を示します。これは Gainer miniの利用例 の無線化版にあたります。

ここではXBeeでデータをPCに送信するモジュールを2つ作成しました。 下図左がブレッドボード上に光センサとボタンを2個載せたもので、 下図右が基板上に光センサとボタンを1個載せたものです。どちらも乾電池で動作します。 ボタンの数が違いますが、XBeeの設定は同じで、 D0とD1をDIに、D4をADCとし、IRを3E8(=1秒ごとにサンプリング)としています。 右のボタン1個の方はD0を使用しています。 なお、XBeeはデフォルトで入力ピンがプルアップされているので、 ここではボタンを押したときにLOWとなるように回路を構成しています。

下図は、開発中のXBee接続コンポーネントを利用して作成した、MZアプリケーションの画面です。 上記の2つのモジュールからデータを受信し、 それぞれからデジタル入力2つとアナログ入力1つの値を読み取って、 計6つの値を棒グラフで表示しています。 左側のテキストエリアには2つのモジュールから受信した一回分のデータを一行で表示しています。 前述のように、回路上はボタンを押したときにデジタル入力がLOWになりますが、 MZアプリケーション側では押したときにグラフの値が1024を示すように記述しています。

下図が、2つのモジュールでデータをPC側に送っているときの様子です。 ブレッドボード側のデータがグラフの上から3つ分で、基板実装側は下3つ分になっています。 それぞれ3つ目が光センサの値を示しています。

下図左では、ブレッドボード側の光センサを指で隠したときに値が下がり、 下図右では、基板実装側のボタンを押すとグラフが変化していることがわかります。

作成日 2013-04-18

最終更新日 2013-04-18