XBee通信のデータ読み込み

XBeeを使った自宅状態遠隔見守りサービス実現方法の紹介  
第7章 XBee通信のデータ読み込みについて解説します。

## 全体図

<img src="https://websa12.z11.web.core.windows.net/image-data/202506/20250606/1749170743732.png" alt="image" width="50%"/>

👆全体図はこんな感じです。  

👇ここからの内容は下記記事を前提とします

- [4 . XBee接続確認とセンサーの接続](https://docs.saurus12.com/device/xbee_connect)  
- [6 . ESP32-WROVER-E開発ボードとXBeeの接続](https://docs.saurus12.com/device/esp32_xbee)

## プログラムの書き込み(Auduino IDE)

Arduino IDEの書き込み方法は[5 . ESP32-WROVER-E開発ボードのツール設定と接続](https://docs.saurus12.com/device/esp32_preparation)を参照して下さい。  

```text
void setup() {

    // USB接続シリアル接続を作成（コンソール出力用）
    Serial.begin(9600);

    // 25番ピンと26番ピンでシリアル接続を作成（XBee接続用）
    Serial1.begin(9600,SERIAL_8N1,25,26);
}

void loop() {
    
    // 10ms 待機
    delay(10);

    // シリアルに27バイト読み込みできて、先頭がスタートバイトの場合
    if ((Serial1.available()>22) && (Serial1.read() == 0x7E)){
        // skip offset 1 -> 4
        for (int i = 0; i < 3; i++) {
            int i_input = Serial1.read();
        }

        // 64-bit source address :offset 4 -> 12
        String source_address = "";
        for (int i = 0; i < 8; i++) {
            int i_input = Serial1.read();
            String hexString = String(i_input, HEX);
            if(hexString.length() == 1){
                source_address.concat("0");
            }
            source_address.concat(hexString);
        }
        Serial.print("source_address:");
        Serial.println(source_address);

        // 16-bit source address :offset 12 -> 14
        for (int i = 0; i < 2; i++) {
          int i_input = Serial1.read();
          String hexString = String(i_input, HEX);
        }
      
        // skip offset 14 -> 16
        for (int i = 0; i < 2; i++) {
          byte discarded = Serial1.read();
        }
      
        // Digital sample mask 16 -> 18
        for (int i = 0; i < 2; i++) {
          byte b_ret = Serial1.read();
        }
      
        // Analog sample mask 18 -> 19
        for (int i = 0; i < 1; i++) {
          byte b_ret = Serial1.read();
        }
      
        // Digital sample 19 -> 20
        int digital_1 = Serial1.read();
        int digital_2 = Serial1.read();
        int digital_val = (digital_1 * 256) + digital_2;
        int pin_value = bitRead(digital_val, 1);
        Serial.print("pin_value:");
        Serial.println(pin_value);
      
        // Analog sample mask 21 -> 22
        int Analog_1_1 = Serial1.read();
        int Analog_1_2 = Serial1.read();
        int Analog_val_1 = (Analog_1_1 * 256) + Analog_1_2;
        Serial.print("Analog_val_1:");
        Serial.println(Analog_val_1);

    }

}
```

<img src="https://websa12.z11.web.core.windows.net/image-data/202506/20250606/1749172696718.png" alt="image" width="50%"/>

👆こんな感じでSerial Monitorにデータが出力されます。  
※ シリアルの通信速度は`9600`を指定して下さい。  

## プログラムの書き込み(MicroPython)

MicroPythonの書き込み方法は[5 . ESP32-WROVER-E開発ボードのツール設定と接続](https://docs.saurus12.com/device/esp32_preparation)を参照して下さい。  

```text
import time
from machine import UART

# create serial connect (port-25,26)
uart1 = UART(1, baudrate=9600,bits=8, parity=None, stop=1, rx=25, tx=26)

while True:
    time.sleep(0.1)
    # check start byte
    if(uart1.any()>22 and uart1.read(1).hex()=='7e'):

        # skip offset 3 byte
        uart1.read(3)

        # 64-bit source address
        source_address = uart1.read(8).hex()
        print("source_address:" + source_address)

        # 16-bit source address
        uart1.read(2).hex()

        # skip offset 2 byte
        uart1.read(2)

        # Digital sample mask 2byte
        uart1.read(2)

        # Analog sample mask 1byte
        uart1.read(1)

        # Digital sample 2byte
        b_digital_value = uart1.read(2)
        digital_value_bin = bin(int.from_bytes(b_digital_value))
        print("digital_value:" + digital_value_bin[2:3])

        # Analog sample 2byte
        b_analog_value = uart1.read(2)
        analog_value = int.from_bytes(b_analog_value)
        print("analog_value:" + str(analog_value))

```

やっぱりPythonの方が書きやすいな・・  

<img src="https://websa12.z11.web.core.windows.net/image-data/202506/20250606/1749193388861.png" alt="image" width="50%"/>

👆こんな感じでShellのところにデータが出力されます。  

[\<\<(前の記事) 6 . ESP32-WROVER-E開発ボードとXBeeの接続](https://docs.saurus12.com/device/esp32_xbee)  

## 👇関連記事

- [1 . XBeeを使った自宅状態遠隔見守りサービス実現方法の紹介](https://docs.saurus12.com/device/monitoring_introduce)
- [2 . XBee受信側の接続と設定](https://docs.saurus12.com/device/xbee_setting_1)
- [3 . XBee送信側の接続と設定](https://docs.saurus12.com/device/xbee_setting_2)
- [4 . XBee接続確認とセンサーの接続](https://docs.saurus12.com/device/xbee_connect)  
- [5 . ESP32-WROVER-E開発ボードのツール設定と接続](https://docs.saurus12.com/device/esp32_preparation)
- [6 . ESP32-WROVER-E開発ボードとXBeeの接続](https://docs.saurus12.com/device/esp32_xbee)
- 7 . XBee通信のデータ読み込み
- [ESP32-C3-WROOM-02-N4 設定方法解説](https://docs.saurus12.com/device/esp32_c3_wroom_setup)

## 👇参考URL

- [Pin signals for the XBee 3](https://docs.digi.com/resources/documentation/digidocs/90001543/#reference/r_pinouts_xbee3_tht.htm?TocPath=Pin%2520signals%257C_____3)
- [I/O sampling](https://docs.digi.com//resources/documentation/digidocs/90002002/default.htm#Reference/r_zb_i_o_sampling.htm?Highlight=ADC)
- [Digi XBee® 3 Hardware Reference Manual](https://docs.digi.com/resources/documentation/digidocs/90001543/#concepts/c_90001543_start.htm?TocPath=Digi%2520XBee%25C2%25AE%25203%2520Hardware%2520Reference%2520Manual%257C_____0)

## 本記事へのリンク

<img src="https://websa12.z11.web.core.windows.net/image-data/202506/20250606/1749164917314.png" alt="image" width="30%"/>

### [https://docs.saurus12.com/device/xbee_communication](https://docs.saurus12.com/device/xbee_communication)

[keywords]  
ESP32 ESP32-DevKitC-VE ESP32-WROVER-E開発ボード XBee Micropython

[7 . XBee通信のデータ読み込み](https://docs.saurus12.com/device/xbee_communication)  

更新日:2025年06月06日