XBeeモジュールの使い方(XBee STM Grove Development Boardのユーザーボタン)


 XBee STM Grove Development Boardに新たに搭載されたユーザーボタンは、開発やデバッグに非常に便利な「入力トリガ」として使える機能です。このユーザーボタンはXBee3 のGNDとDIO4(24番ピン)に220Ωの抵抗を介した接続されており、通常はプルアップされていて HIGHですが、ユーザーボタンが押されると DIO4(24番ピン)はGND に落ちてLOWとなります。また、ユーザーボタンが押されるとDevelopment BoardのLEDの一番上にあるUSER LEDが点灯します。

以下の図はユーザーボタンの配線図です。この図でSW3がユーザーボタンです。

ユーザーボタンの主な用途を以下に解説します。

(1)マニュアル入力トリガとして使用する

 例えば「ボタンを押したら温度データを送信する」又は、「押すたびにLEDをトグル(点灯⇔消灯)」等のようにマニュアル入力として使用することが可能です。ここでは、押すたびにLEDをトグルさせる方法を解説します。LEDをDIO3(30番ピン)とGND(13番ピン)の間に接続します。

 以下のMicroPythonサンプルコードをMicroPython Terminalでプロンプト>>>でCtrl+Fで1^^^の状態でペーストしてコンパイルして実行します。

from machine import Pin
import time

button = Pin("D4", Pin.IN, Pin.PULL_UP)
led = Pin("D3", Pin.OUT)

led_state = False
prev_button = 1

while True:
    current_button = button.value()
    if prev_button == 1 and current_button == 0:  # 押した瞬間を検出
        led_state = not led_state
        led.value(led_state)
        print("LED toggled:", led_state)
    prev_button = current_button
    time.sleep(0.05)

以下にMicroPython Terminalで実行し結果を示します。

 これにより、XBee STM Grove Development Boardのユーザーボタンを押してトグルを確認することができます。

(2)ファームウェアの動作確認・デバッグ

 MicroPythonスクリプトの中で「このボタンが押されていたら特別なモードで起動」といった処理が可能です。例えば「ボタンを押しながら起動すると〇〇モードになる」等の設定が可能です。

(3)センサデータ送信の手動トリガ

 省電力なシステムでは、「ボタンを押したときだけ送信」も有効です。通常時はスリープしておき、PinWakeで割込みを使い起動させる設計が可能です。

 以下にユーザーボタンを押した際にデータをコーディネータに送信する方法を解説します。ユーザーボタンを押した際にLEDを発光させるため、LEDをDIO3(30番ピン)とGND(13番ピン)の間に接続します。

 以下のMicroPythonサンプルコードをMicroPython Terminalでプロンプト>>>でCtrl+Fで1^^^の状態でペーストしてコンパイルして実行します。8行目のコーディネータのアドレスはご自分の環境に合わせて書き換えてください。

from machine import Pin
import time
import xbee
# ボタンとLED
button = Pin("D4", Pin.IN, Pin.PULL_UP)
led = Pin("D3", Pin.OUT)
# 宛先アドレス
DEST_ADDR = b'\x00\x13\xA2\x00\x41\xAE\x36\x69'

while True:
    if button.value() == 0:  # ボタンが押されたら
        print("Button pressed, wake up!")
        led.value(1)  # LED ON

        # 例:センサ値を読む
        sensor_value = 25.4  # ダミーデータ

        # データ送信
        msg = "Sensor value: {:.2f}".format(sensor_value)
        xbee.transmit(DEST_ADDR, msg)
        print("Sent:", msg)

        # チャタリング対策 & 連続押し防止
        while button.value() == 0:
            time.sleep(0.1)

        led.value(0)  # LED OFF

    # 短時間sleepで省電力
    time.sleep(0.1)

上記のコードを実行したルータのMicroPyton Terminalの様子を以下に示します。

以下の図はコーディネータのコンソール画面です。ダミーデータが送信されていることを確認することができます。