
前回はリモートXBeeからの送信側のタイミング詳しく調べるため、3軸加速度センサKXR94-2050モジュールからX,Y,Z軸方向の加速度データを読み出す際にtimestampを付けて確認することにしました。
前回のコードではディレイとして100msを設定し、timestampを付けていましたが、今回はこれらを無効にしたコードでさらに高速化を確認します。
以下のコードをリモートXBeeのMicroPython Terminalで実行します。5行目のCOORDINATOR_64BIT_ADDRはご自分のローカルXBeeのシリアルナンバーに変更してください
import xbee
import time
import utime
from machine import Pin, ADC
COORDINATOR_64BIT_ADDR = b'\x00\x13\xA2\x00\x41\xAE\x36\x69'
# Initialize ADC for DIO0, DIO1, DIO2
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)
print("Starting data transmission to coordinator...")
def precise_delay_ms(delay_ms):
start = utime.ticks_ms()
while utime.ticks_diff(utime.ticks_ms(), start) < delay_ms:
pass
while True:
start_time = utime.ticks_ms()
voltage_mv = xbee.atcmd('%V')
supply_voltage_v = voltage_mv / 1000.0
rssi_val = xbee.atcmd("DB")
rssi_dbm = -rssi_val
raw_adcx_value = adcx.read()
raw_adcy_value = adcy.read()
raw_adcz_value = adcz.read()
adcx_voltage = (raw_adcx_value / 4095.0) * supply_voltage_v
adcy_voltage = (raw_adcy_value / 4095.0) * supply_voltage_v
adcz_voltage = (raw_adcz_value / 4095.0) * supply_voltage_v
adcx_voltage = adcx_voltage - supply_voltage_v / 2
adcy_voltage = adcy_voltage - supply_voltage_v / 2
adcz_voltage = adcz_voltage - supply_voltage_v / 2
accelx = adcx_voltage / 0.66
accely = adcy_voltage / 0.66
accelz = adcz_voltage / 0.66
data_payload = "Vref: {:.3f}V, RSSI: {:d}dBm, Accel_x: {:.3f}g, Accel_y: {:.3f}g, Accel_z: {:.3f}g".format(
supply_voltage_v, rssi_dbm, accelx, accely, accelz
)
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))
# precise_delay_ms(100) # ディレイ
end_time = utime.ticks_ms()
loop_time = utime.ticks_diff(end_time, start_time)
print("Loop time: {} ms".format(loop_time))
以下の図が上記のコードを実行した際のリモートXBeeのMicroPython Terminalのダイアログです。前回はディレイの100msとtimestamp要した約70msが存在したためタイムループの平均は約208msとなっていましたが、ディレイとtimestampを無効にしたことにより約34ms周期でサンプリングされていることが分かります。
