ESP32-S3

【ESP32-S3 教學】開始使用 Arduino IDE 編寫程式-Serial 序列埠通信與 UART 入門實作

ESP32-S3 Serial 序列埠通信與 UART 入門實作教學封面圖

在進行 ESP32-S3 開發 時,「序列埠通信(Serial Communication)」是最基礎也最重要的核心功能。不論是初學者入門練習,還是進階的物聯網專案開發,透過序列埠,我們都能實現查看程式執行狀態、顯示感測器數據、接收電腦輸入指令以及進行程式除錯(Debug)。

本篇教學將帶你使用 Arduino IDE,快速掌握 ESP32-S3 的 Serial 序列埠通信與 UART 技術,並解析 ESP32-S3 獨特的原生 USB CDC 設定技巧!

一、 什麼是序列埠通信(Serial / UART)?原理與常見用途

序列埠通信通常是指 通用異步收發器(UART, Universal Asynchronous Receiver-Transmitter),是電子電路與微控制器(MCU)中最常見的非同步通訊協定。

1. UART 通訊原理:TX 與 RX 的橋樑

UART 主要透過兩條信號線來傳輸數據:

  • TX 線(Transmit):負責發送數據。

  • RX 線(Receive):負責接收數據。

在兩台設備進行 UART 序列埠通訊時,線路必須採用交叉連接方式:即設備 A 的 TX 接到設備 B 的 RX,而設備 A 的 RX 接到設備 B 的 TX,雙方才能正確收發訊號。

UART 通訊原理 TX 與 RX 交叉連接示意圖

展示兩台設備進行 UART 序列埠通訊時,設備 A 的 TX 必須連接設備 B 的 RX、RX 必須連接 TX 的交叉接線原理。

 

ESP32-S3 原生 USB 與 USB 轉串口架構示意圖

說明 ESP32-S3 開發板如何透過內建的 USB 轉串口晶片與 Type-C 線路與電腦進行序列埠通訊。

2. 什麼是鮑率(Baud Rate)?

在序列埠通信開始前,通訊雙方的鮑率(Baud Rate)設定必須完全一致。鮑率代表每秒傳輸的位元數(Bits per second),只有在相同波特率下,接收端才能精確解析數據。在 ESP32-S3 開發中,最常用的標準鮑率為 9600 與 115200(本教學範例一律使用 115200)。

3. ESP32-S3 的 USB 轉串口與原生 USB 功能

現代的 ESP32-S3 開發板 晶片內建了原生 USB CDC 介面與 USB 轉串口功能,因此我們可以直接透過普通的 Type-C 數據線連接電腦,實現高速數據傳輸、程式燒錄與 Serial 監控。

ESP32-S3 序列埠的 5 大核心用途:

核心功能 實務應用說明
Serial Monitor 在 Arduino IDE 的「序列埠監控視窗」即時查看文字輸出訊息
Debug 除錯 輸出變數數值、追蹤程式碼執行流程與邏輯漏洞
感測器數據輸出 將讀取到的溫濕度、光線、距離等類比與數位資料圖像化或文字化
接收使用者輸入 從電腦鍵盤發送控制指令給 ESP32-S3 開發板進行互動
外接 UART 通訊 與 Arduino、GPS 模組、藍芽模組、PLC 或其他工業設備連線

 

二、 開發前準備與推薦硬體

想順利完成本次的 ESP32-S3 序列埠通訊實驗,請先備妥以下工具:

  1. ESP32-S3 開發板(推薦選擇具備大容量 PSRAM 與 Flash 的版本)。

  2. USB Type-C 數據傳輸線(請確保線材具備資料傳輸功能,而非純充電線)。

  3. 電腦(已安裝 Arduino IDE 並配置好 ESP32 開發環境)。

高效能開發板推薦: ESP32-S3 開發板 N16R8 已焊排針 (16MB Flash / 8MB PSRAM) | 米羅科技官方賣場

ESP32 S3 開發板 N16R8 已焊排針 16MB Flash 8MB PSRAM | ESP32 Type C

三、 Arduino IDE 環境配置與 USB CDC On Boot 重要設定

在上傳程式碼之前,請務必確認你的 Arduino IDE 工具設定正確。ESP32-S3 開發板因為擁有原生 USB 介面,如果設定錯誤,將導致序列埠監控視窗完全抓不到文字輸出!

請開啟 Arduino IDE,點選上方選單 【工具 (Tools)】,進行以下關鍵配置:

  • 開發板 (Board):選擇 ESP32S3 Dev Module

  • USB CDC On Boot:設定為 Enabled(關鍵設定)

  • 連接埠 (Port):選擇 ESP32-S3 連接的正確 COM 埠

米羅小學堂(關鍵除錯備註): 如果你使用的是開發板上標示為 「USB」 的原生 Type-C 接口連接電腦,請務必將 USB CDC On Boot 設定為 Enabled,這樣序列埠監控視窗(Serial Monitor)才能正確印出 Serial.print() 的訊息。 反之,若是使用外接晶片(如 CH343 / CH340)且連接至標示為 COM/UART 的接口,則須將此選項設為 Disabled。

四、 如何開啟與使用 Arduino IDE 序列埠監控視窗?

當 ESP32-S3 透過 USB 線連接至電腦後,作業系統會將其識別為一個虛擬的 COM 連接埠(例如:COM3 或 COM5)。

  1. 確認 Port:請至 【工具】 -> 【序列埠 (Port)】 勾選正確的 COM 號碼。

  2. 開啟監控視窗:點擊 Arduino IDE 右上角的 「序列埠監控器 (Serial Monitor)」 圖示(或按下快捷鍵 Ctrl + Shift + M)。

  3. 調整鮑率:將序列埠監控視窗右下角的鮑率選擇為與程式中設定相同的 115200 baud。

▼ 序列埠監控視窗界面如下。 如果打不開,請確保ESP32已經連接到電腦,在菜單欄“工具”中選擇正確的序列埠。

五、 實作範例程式碼(包含 3 個基礎與進階範例)

完成環境配置後,接下來跟著米羅一起透過 3 個由淺入深的經典範例,實際測試 ESP32-S3 的通訊實力吧!請將以下程式碼複製到 Arduino IDE 中,並點擊「上傳」燒錄。

範例 1:ESP32-S3 Serial 每秒定時輸出訊息

最基礎的測試程式,用來確認開發板與電腦的連線是否通暢。

void setup() {
  Serial.begin(115200);
}

void loop() {

  Serial.println("Hello ESP32-S3");

  delay(1000);
}

序列監控視窗預期效果:

Hello ESP32-S3
Hello ESP32-S3
Hello ESP32-S3

 

範例 2:ESP32-S3 Serial 變數資料輸出(常用於除錯)

展示如何將程式中的變數數值即時列印出來,這是日後排除程式 Bug 的必學技巧。

int count = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {

  Serial.print("Count = ");
  Serial.println(count);

  count++;

  delay(1000);
}

序列監控視窗預期效果:

Count = 0
Count = 1
Count = 2

 

範例 3:ESP32-S3 Serial 雙向通訊:接收電腦輸入資料

這個範例展示了「雙向通訊」,ESP32-S3 會等待並讀取使用者從電腦鍵盤輸入的指令或文字。

String data;

void setup() {

  Serial.begin(115200);

  Serial.println("請輸入文字:");
}

void loop() {

  if (Serial.available()) {

    data = Serial.readStringUntil('\n');

    Serial.print("你輸入的是:");
    Serial.println(data);
  }
}

六、Arduino Serial 常用核心函式庫統整

在編寫物聯網專案時,你常會用到以下 Serial 語法,建議可以加進你的常用筆記:

語法 / 函式 功能與用途說明
Serial.begin(baud) 啟動序列埠通訊,並設定指定的傳輸鮑率(如 115200)。
Serial.print(val) 輸出資料至監控視窗,文字末端不自動換行。
Serial.println(val) 輸出資料至監控視窗,並於文字末端自動加上換行符號。
Serial.available() 回傳序列埠目前已接收到、可供讀取的資料位元組(Byte)數。
Serial.read() 讀取序列埠接收緩衝區中的第一個字元(Character)。
Serial.readString() 讀取快取區中所有的資料,並將其組合並轉換為字串(String)。
Serial.write(val) 傳送原始的二進位資料(Byte)到序列埠,常用於精密的硬體對接。

七、ESP32-S3 序列埠常見問題排除(FAQ)

Q1:在 Arduino IDE 找不到 COM Port(連接埠)怎麼辦?

  • 排查 1:請確認使用的 Type-C 線是否具有「數據傳輸」功能,有些便宜的線材僅供充電。

  • 排查 2:檢查電腦是否已安裝對應的 USB 轉序列埠驅動程式(如 CH340 或 CP210x,視板子晶片而定)。

  • 排查 3:請確認開發板的 USB CDC On Boot 參數已開啟。

Q2:開啟了序列埠監控視窗,卻完全沒有輸出內容?

  • 解答:請再次確認您的 Arduino IDE 設定中,USB CDC On Boot 已經切換為 Enabled,並重新燒錄一次程式。另外,可以按壓開發板上的「EN/RST」重置按鈕讓程式重新跑一次。

Q3:序列埠監控視窗裡顯示一堆看不懂的亂碼?

  • 解答:這通常是因為「鮑率不匹配」引起的。請確認程式碼中 Serial.begin(115200); 寫的分華與監控視窗右下角下拉選單選擇的 115200 baud 數字完全一致。

延伸閱讀與推薦課程