
前回はDigiMeshを用いたセンサネットワークの一例として、コーディネータXBeeに送信されたフレームからI2C温度センサADT7410(Microchip社製)からの温度データをProcessingで読みとり、温度データをリアルタイムでスクロールグラフに表示する方法を解説しました。今回はDigiMesh独自の機能について解説します。
XBee3のDigiMeshファームウェアにおけるSynchronous Sleep Support Mode(SM = 7)は、802.15.4やZigbee等の他のファームウェアとは異なる独自のスリープモードを有しています。
最大の特徴は、全ノードが同期してスリープ/ウェイクすることが可能であるということです。ネットワーク全体のルーターおよびエンドデバイスが同時にスリープし、同時に起きるように同期されることが可能です。一方、ZigbeeではEnd Deviceは個別にスリープ設定が可能ですがルーターはスリープ設定することはできません。これはZigbeeではルーターは中継機能を維持するために常時稼働しておく必要があるためです。DigiMeshはネットワーク全体のスリープ・起動タイミングを制御することができ、電力効率と通信効率の両立が可能となります。
以下にアナログ温度センサMCP9701(Microchip社製)をそれぞれ3個のルーターXBeeに接続し、60秒間隔でコーディネータXBeeに結果を送信する方法を解説します。MCP9701の2番ピン(Sig.)はXBeeの19番ピン(DIO1)に接続します。 DigiMesh 2.3 THに設定し、1個のコーディネータXBeeと3個のルーターXBeeのConfigurationを以下のように設定します。
Coordinator | Router 1 | Router 2 | Router 3 | |
ID | 2025 | 2025 | 2025 | 2025 |
CE | [0] | [1] | [1] | [1] |
NI | - | 1 | 2 | 3 |
DH | - | 13A200 | 13A200 | 13A200 |
DL | - | 41AE3669 | 41AE3669 | 41AE3669 |
SM | [7] | [7] | [7] | [7] |
PS | 59500ms | 59500ms | 59500ms | 59500ms |
ST | 500ms | 500ms | 500ms | 500ms |
AP | [1] | [1] | [1] | [1] |
BD | [7] | [7] | [7] | [7] |
D1 | - | [2] | [2] | [2] |
IR | - | 61000ms | 61000ms | 61000ms |
SOはいずれのXBeeで0でも4でも動作しました。
以下の図はコーディネータに送信されたフレームのLogを示しています。3個のルーターからのフレームが同時に送信されていることを確認することができます。途中でルーター1のリセットした際には、ルーター1のタイミングがズレてルーター2と3からの2フレームが送信されていますが、次の周期では同期が回復して3フレームが同時に送信されていることを確認することができます。

以下はルーター1から送信されたフレームです。
IO Data Sample RX Indicator (API 1)
7E 00 12 92 00 13 A2 00 41 AE 36 24 FF FE C1 01 00 00 02 03 0B A0
Start delimiter: 7E
Length: 00 12 (18)
Frame type: 92 (IO Data Sample RX Indicator)
64-bit source address: 00 13 A2 00 41 AE 36 24
16-bit source address: FF FE
Receive options: C1
Number of samples: 01
Digital channel mask: 00 00
Analog channel mask: 02
DIO1/AD1 analog value: 03 0B (779)
Checksum: A0
参照電圧Vrefが1.2Vであり、DIOのADCから使用するXBee内蔵のA/D変換器の分解能が10ビットなので最大値は1023となり、電圧に変換すると(779×1.2)/1023=0.9137[V]であることが分かります。この値と以下の式を用いて温度換算すると以下の結果を得ることができます。
T=(Vout-V0C)/Tc1=(913.7-400)/19.5=26.37[℃]