XBeeモジュールの使い方(加速度センサ:MicroPythonフレーム送信の限界)


 前回はリモートXBeeによる3軸加速度センサKXR94-2050モジュールからX,Y,Z軸方向の加速度データからのサンプリング間隔を短縮するため、ディレイとして設定していた100msとtimestampを無効にしました。その結果、約34msまで短縮できたことを確認しました。

 今回はRSSIの読出しやコードの簡素化を実施してサンプリング間隔がどこまで短縮可能か確認していきます。

 以下のコードをリモートXBeeのMicroPython Terminalで実行します。4行目のCOORDINATOR_64BIT_ADDRはご自分のローカルXBeeのシリアルナンバーに変更してください

import xbee
import time
from machine import Pin, ADC
COORDINATOR_64BIT_ADDR = b'\x00\x13\xA2\x00\x41\xAE\x36\x69'
adc_pin0 = Pin("D0", Pin.IN, Pin.PULL_UP)
adcx = ADC(adc_pin0)
adc_pin1 = Pin("D1", Pin.IN, Pin.PULL_UP)
adcy = ADC(adc_pin1)
adc_pin2 = Pin("D2", Pin.IN, Pin.PULL_UP)
adcz = ADC(adc_pin2)
while True:
    voltage_mv = xbee.atcmd('%V')
    supply_voltage_v = voltage_mv / 1000.0
    raw_adcx_value = adcx.read()
    raw_adcy_value = adcy.read()
    raw_adcz_value = adcz.read()
    accelx = ((raw_adcx_value / 4095.0) * supply_voltage_v - supply_voltage_v / 2) / 0.66
    accely = ((raw_adcy_value / 4095.0) * supply_voltage_v - supply_voltage_v / 2) / 0.66
    accelz = ((raw_adcz_value / 4095.0) * supply_voltage_v - supply_voltage_v / 2) / 0.66
    data_payload = "Vref: {:.3f}V, Accel_x: {:.3f}g, Accel_y: {:.3f}g, Accel_z: {:.3f}g".format(
        supply_voltage_v, accelx, accely, accelz
    )
    try:
        xbee.transmit(COORDINATOR_64BIT_ADDR, data_payload.encode('utf8'))
    except Exception as e:
        print("Error sending data: {}".format(e))

 上記のコードをまずはMicroPython Terminalで確認しました。Ctrl+Dで実行してローカルXBeeにフレームが送信されていることを確認しました。

 さらに、上記のコードを「main.py」として保存し、File System ManagerでXBeeの/flashに書き込みます。具体的な書き込み方法は以前に投稿した「XBeeモジュールの使い方(MicroPython Terminalによるフレーム送信:Auto Start)」の中で解説した手順でFile System Managerを用いて行います。書き込みが終わったらConfigurationのPS MicroPython Auto StartをEnable [1]に設定し、リモートXBeeを再起動又はリセットボタンを押すことにより自動でmain.pyが実行されます。

 以下の図がローカルXBeeで受信したフレームです。 9.699秒で386個のフレームが受信されており、周波数は29.8Hzでありフレームの時間間隔は25msであることが分かります。