ESP32 串列埠讀取教學
使用 ESP32 與 Arduino IDE 快速讀取 ANROT 姿態資料,適合 MCU 端驗證與原型整合。
- 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 PIN | ESP32 PIN |
|---|---|
| 5V | 5V |
| GND | GND |
| TXD | GPIO25 RX |
| RXD | GPIO27 TX |
第一次測試可先只接 TXD -> GPIO25、GND -> GND 讀取資料;需要送指令到感測器時再接 RXD。
Arduino IDE 設定
- 安裝 Arduino IDE 與 ESP32 board package。
- 開啟
anrotimu/anrotimu.ino。 - 選擇你的 ESP32 開發板與 COM port。
- 確認程式中的腳位與接線一致:
#define RXD2 25
#define TXD2 27
- 上傳後開啟 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 範例確認感測器本身輸出正常。