
今回は前回解説したADT7410使用したI2C・16Bit 温度センサーモジュールをXBeeに接続して温度データ読み取りに加え、リモートXBeeの電源電圧及びRSSIを10秒間隔でローカルXBeeに送信する方法を解説していきます。
XBeeのConfigurationの設定やADT7410とXBeeとの接続は前回と同じです。
以下のコードの7行目はご自分が使用されているローカルXBeeのシリアルナンバーを設定してください。
ToolsのMicroPython Terminalを開き、左上のアイコンでモジュールを接続します。
エンターキーを押してMicroPythonプロンプトの状態にします。
以下のコードをコピーしてMicroPython Terminalにマウスの右クリックでPasteを選択して貼り付けます。
Ctrl+Dで実行します。
import xbee
import time
import machine
import ustruct
I2C_ADDR = 0x48 # ADT7410のI2Cアドレス
TEMP_REG = 0x00 # 温度レジスタ
DEST_ADDR = b'\x00\x13\xA2\x00\x42\x1B\xCC\x55'
i2c = machine.I2C(1, freq=100000)
while True:
try:
voltage_mv = xbee.atcmd('%V')
voltage_v = voltage_mv / 1000.0
rssi_val = xbee.atcmd('DB')
rssi_dbm = -rssi_val
data = i2c.readfrom_mem(I2C_ADDR, TEMP_REG, 2)
raw_temp = ustruct.unpack_from('>h', data)[0]
temp = raw_temp >> 3
temp_celsius = temp * 0.0625
payload = "V:{:.2f}V,RSSI:{}dBm,T:{:.2f}C".format(voltage_v, rssi_dbm, temp_celsius)
print("Sending:", payload)
xbee.transmit(DEST_ADDR, payload)
except Exception as e:
print("Error:", e)
time.sleep(10)
Ctrl+Dで実行します。

ローカルXBeeのコンソール画面を確認するとデータとリモートXBeeの電源電圧及びRSSIを10秒間隔で送信されていることを確認できます。

上記のコードをファイル名「main.py」として保存し、2日前の5月29日に投稿した「XBeeモジュールの使い方(MicroPython Terminalによるフレーム送信:Auto Start)」の中で解説した手順でFile System Managerを用いてXBeeに書き込むことにより自動実行が可能となります。