XBeeモジュールの使い方(I2C温度センサ:その2)


 今回は前回解説した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に書き込むことにより自動実行が可能となります。