最後に XBee の Cyclic Sleep

最後に、低消費電力化のために XBee の Cyclic Sleep を試しました。まずは、XBee のパラメタ SP を 20秒程度に設定して、様子を見てみます。

XBee の ON ピン出力を見ていると、確かにちゃんと周期的に ON になって、その後スリープするのですが、なぜか RSSI が点きません。もちろんデータも飛びません。おかしいですね。

以下の方の分かりやすいウェブサイト

を拝見し、さらにマニュアルをちゃんと読んだら、以下のように書かれてました。

Note: SP controls the packet buffer time on routers and coordinators. SP should be set on all router and coordinator devices to match the longest end device SP time. See the XBee Router / Coordinator Configuration section for details.

つまり、End Device の SP x SN の最大時間よりも、Router や Coordinator の SP x SN を長く設定しておかないといけませんよ、ということです。マニュアルはちゃんと読みましょう。 > 私

なお、私の場合は外部マイコンで CTS 信号を見ているのですが、これが SP x SN ではなくて、SP の間隔でアサートされてしまいます。これを解決するには、Extended Cycle Sleep オプションというのを使う必要があるので、パラメタ SO に 0x4 あるいは 0x6 を設定します。

さらに付け加えて、私は外部マイコンが SP x SN で CTS トリガされると信じてたのですが(だって、period って書いてあるし)、実はこれは period ではなくて length です。つまり、あるタイミングで起きてから、次に起きるまでの周期は、SP x SN ~ SP x SN + ST の間になります。これを一定にするには SO に 0x2 を論理和して、"always wake for full ST time" という設定にする必要があるかも知れません。ただし、これをすると常に ST の時間起きてしまうことになるので、電池がもったいないかも知れず、私は利用していません。ま、この応用の場合は、だいたいの周期で起きてくれれば、いいですからね。

おしまい。

(8月3日作業)

  1. 最初の構想
  2. センサ側マイコンの選定
  3. 温度湿度センサを評価する
  4. XBee の評価(実は 2回目)
  5. Arduino のスリープと、Pin Change 割込
  6. 最後に XBee の Cyclic Sleep