XBeeモジュールの使い方(MicroPython Terminalによるフレーム送信)


 今回はMicroPython Terminalを用いて電源電圧やDIO1でA/D変換した温度センサの出力電圧及びRSSIを表示させる方法を解説します。

 設定は前々回の記事と同様にAPをMicro Python REPL[4]に設定し、BDを115200[7]に設定します。

 以下のコードをコピーしてプロンプトに張り付けます。4行目にはコーディネータXBeeの64ビットアドレスを入力しておきます。

 MicroPython Terminalにコードを貼り付けの際にCtrl+Vは機能しないため、マウスで右クリックしてPasteを使用して貼り付けます。

するとコーディネータXBeeにフレームが送信されます。

import xbee
import time
from machine import Pin, ADC
COORDINATOR_64BIT_ADDR = b'\x00\x13\xA2\x00\x42\x1B\xCC\x55'
adc_pin = Pin("D1", Pin.IN, Pin.PULL_UP)
adc = ADC(adc_pin)
voltage_mv = xbee.atcmd('%V')
supply_voltage_v = voltage_mv / 1000.0
rssi_val = xbee.atcmd("DB")
rssi_dbm = -rssi_val
raw_adc_value = adc.read()
adc_voltage = (raw_adc_value / 4095.0) * 1.25
temperature_c = (adc_voltage * 1000 - 400) / 19.5
data_payload = "Voltage: {:.3f}V, RSSI: {:d}dBm, Temp: {:.3f}C".format( supply_voltage_v, rssi_dbm, temperature_c)
xbee.transmit(COORDINATOR_64BIT_ADDR, data_payload.encode('utf8'))

 次に電源電圧やDIO1でA/D変換した温度センサの出力電圧及びRSSIを10秒間隔で送信する以下のコードを張り付けます。貼り付けたらCtrl+Dで実行させます。これによりコーディネータXBeeにフレームが10秒間隔で送信されます。プログラムを停止する場合はMicroPython Terminal でCtrl+Cで停止することができます。

import xbee
import time
from machine import Pin, ADC
COORDINATOR_64BIT_ADDR = b'\x00\x13\xA2\x00\x42\x1B\xCC\x55'
# Initialize ADC for DIO1
adc_pin = Pin("D1", Pin.IN, Pin.PULL_UP)
adc = ADC(adc_pin)
print("Starting data transmission to coordinator...")
while True:
    voltage_mv = xbee.atcmd('%V')
    supply_voltage_v = voltage_mv / 1000.0
    rssi_val = xbee.atcmd("DB")
    rssi_dbm = -rssi_val
    raw_adc_value = adc.read()
    adc_voltage = (raw_adc_value / 4095.0) * 1.25
    temperature_c = (adc_voltage * 1000 - 400) / 19.5
    data_payload = "Voltage: {:.3f}V, RSSI: {:d}dBm, Temp: {:.3f}C".format( supply_voltage_v, rssi_dbm, temperature_c)
    print("\n--- Sending Data ---")
    print("Payload: {}".format(data_payload))
    try:
        xbee.transmit(COORDINATOR_64BIT_ADDR, data_payload.encode('utf8'))
        print("Data sent successfully.")
    except Exception as e:
        print("Error sending data: {}".format(e))
    # Wait for 10 seconds before the next transmission
    time.sleep(10)