ANROT 教學文件

ESP32 串列埠讀取教學

使用 ESP32 與 Arduino IDE 快速讀取 ANROT 姿態資料,適合 MCU 端驗證與原型整合。

最後更新 2025年1月1日 對應產品 7
  • esp32
  • uart
  • tutorial

ESP32 讀取 ANROT UART 資料

協議支援

協議 / frame支援狀態這份 example 的處理方式
0x91 IMUSOL支援單機完整 float frame,解碼到 receive_imusol,主程式印出 ID、Roll、Pitch、Yaw。
0x62 GWSOL支援Gateway 多節點 float frame,遍歷 receive_gwsol.receive_imusol[] 輸出各 node 姿態。
0x63 GWSOL Compact不支援ESP32 decoder 沒有 compact gateway 分支;需要 0x63 請參考 Qt C++ 或 Ubuntu 範例。
0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xD1部分支援decoder 可解析鬆散欄位;主程式仍以姿態角輸出示範為主。
0xF0 Pressure略過程式只跳過 payload 長度,沒有保存 pressure 欄位。

這份範例使用 Arduino IDE 與 ESP32 的 Serial2 讀取 ANROT IMU / AHRS 的 UART 封包,適合先做 MCU 端連線驗證,再整合到自己的韌體。

下載範例

瀏覽器下載並解壓縮: demo-esp32-en.zip

解壓縮後主要檔案如下:

anrotimu/
├── anrotimu.ino
├── imu_data_decode.cpp
├── imu_data_decode.h
├── packet.cpp
└── packet.h

硬體接線

範例使用 ESP32 GPIO25 作為 RX、GPIO27 作為 TX。ANROT UART 為 TTL 電位,若手上的產品輸出是 RS232 或 RS485,需先轉成 ESP32 可接受的 TTL 電位。

ANROT PINESP32 PIN
5V5V
GNDGND
TXDGPIO25 RX
RXDGPIO27 TX

第一次測試可先只接 TXD -> GPIO25GND -> GND 讀取資料;需要送指令到感測器時再接 RXD

Arduino IDE 設定

  1. 安裝 Arduino IDE 與 ESP32 board package。
  2. 開啟 anrotimu/anrotimu.ino
  3. 選擇你的 ESP32 開發板與 COM port。
  4. 確認程式中的腳位與接線一致:
#define RXD2 25
#define TXD2 27
  1. 上傳後開啟 Serial Monitor,baud rate 設為 115200

範例流程

setup() 會初始化 USB debug serial、ESP32 UART2 與 ANROT 解碼器:

Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
imu_data_decode_init();

loop() 會把 UART 收到的每個 byte 交給 packet_decode()。當 frame_count 增加時,代表已成功解出新的一筆資料。

while (Serial2.available()) {
  char c = Serial2.read();
  packet_decode(c);
}

if (frame_count > old_frame_ctr) {
  old_frame_ctr = frame_count;
  Serial.println(String(receive_imusol.id) + ":"
                 + String(receive_imusol.eul[0]) + ","
                 + String(receive_imusol.eul[1]) + ","
                 + String(receive_imusol.eul[2]));
}

Serial Monitor 會輸出:

0:-0.51,0.58,3.86

三個數值分別是 Roll、Pitch、Yaw,單位為 degree。

Gateway / 多節點輸出

若使用 Gateway / Dongle 模式,範例會遍歷 receive_gwsol.receive_imusol[],逐一印出每個 node 的 ID 與姿態角。新手測試時建議先確認單一節點能穩定輸出,再增加多節點數量與提高波特率。

常見問題

Serial Monitor 沒有輸出

確認 ESP32 與 ANROT 共地、TX/RX 沒有接反、裝置波特率與 Serial2.begin() 一致。若產品目前不是 115200,請把程式中的 baud rate 改成裝置實際值。

數字有輸出但不會變

先確認感測器是否有正確供電並持續輸出資料。也可以先用 USB-UART 接到電腦,搭配 Python 或 Ubuntu 範例確認感測器本身輸出正常。