一、 實驗說明:打造無線藍牙遠端數據傳輸系統!
在物聯網(IoT)與智慧控制專題中,近距離無線通訊是非常實用的功能。傳統透過實線連接電腦 Serial 視窗除錯或傳輸資料,限制了裝置的移動性;若能利用 ESP32 內建的藍牙功能與隨身攜帶的手機連線,就能輕鬆實現無線監控、遠端遙控與資料傳輸!
本實驗米羅將帶大家使用 ESP32 開發板 搭配 Android 手機。ESP32 整合了傳統藍牙(Classic Bluetooth)與低功耗藍牙(BLE)。本篇將聚焦示範 ESP32 如何透過傳統藍牙的序列埠規範(Serial Port Profile – SPP)與 Android 手機建立連線,手把手教大家完成手機與 ESP32 之間的文字訊息雙向收發!
二、 實驗材料準備清單
本篇實作 ESP32 與 Android 手機藍牙通訊專案所需的硬體與軟體如下:
-
ESP32 開發板
-
Android 手機或平板
-
Android APP:
Arduino Bluetooth Control(可至 Google Play 商店免費下載) -
USB 傳輸線
⭐ 一次備齊創客工具!
歡迎直接購買米羅科技的 ESP32 物聯網應用學習套件,免去東奔西跑湊零件的煩惱。內含 ESP32 開發板與豐富感測元件,是學校教學與專案開發的最佳首選!
三、 核心知識:藍牙通訊規範與 ESP32 藍牙模式
1. 什麼是藍牙 SPP 規範(Serial Port Profile)?
藍牙Bluetooth無線通訊傳輸,通常用於近端點對點通訊,為了確保藍牙裝置間的互通性,藍牙技術聯盟(SIG)定義了許多Profile,稱為藍牙規範(Bluetooth profile),例如藍牙立體聲音訊傳輸規範(A2DP)、人機介面規範 (HID)、序列埠規範 (SPP)、藍牙耳機規範(HSP)、免手持裝置規範 (HFP)等等…。本篇將會使用序列埠規範 (Serial Port Profile – SPP)與手機的藍牙進行數據傳輸。
若需要了解更詳細的藍牙規範細節,可參考SIG網站:https://www.bluetooth.com/specifications/specs/
▼ESP32集成了低功耗藍牙(BLE)和傳統藍牙兩種藍牙功能。在數據傳輸有兩種模式:主模式和從模式。

2. 藍牙主模式 (Master) 與從模式 (Slave) 概念
-
主模式 (Master Mode):主導發起連線請求的一方,會主動搜尋周圍藍牙裝置並要求配對,它需要其他藍牙設備的信息,包括它們的MAC Address和Passkey 。配對完成後,就可以直接連線。
-
從模式 (Slave Mode):被動等待連線請求的一方,無法主動發起連線,它可以向主設備發送數據或從主機設備接收數據。
-
本實作配置:Android 手機扮演主模式發起連線,ESP32 則設定為從模式接收連線。
四、 實作實驗程式碼與 Android App 連線測試
請將以下程式碼複製到 Arduino IDE 中並上傳至 ESP32 開發板:
1. 範例程式碼
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_BT"); //藍牙顯示名稱,可自行更改,需避免與他人重複命名
Serial.println("ESP32 藍牙已啟動!等待 Android 手機配對連線...");
}
void loop() {
if (Serial.available()) { // 1. 若 ESP32 從電腦序列埠視窗收到文字,則透過藍牙發送給手機
SerialBT.write(Serial.read());
}
if (SerialBT.available()) { // 2. 若 ESP32 從手機藍牙收到文字,則列印到電腦序列埠視窗
Serial.println(SerialBT.readString());
}
delay(50);
}
2. Android App 設定與連線操作步驟
-
程式上傳與啟動:將程式上傳至 ESP32,並開啟 Arduino IDE 的 「序列埠監控視窗 (Serial Monitor)」(鮑率設定為 115200)。
-
首先,請至Android App Store 下載並安裝『Arduino Bluetooth Control』。

3. 手機藍牙配對:
-
開啟 Android 手機的 「設定」 ➜ 「藍牙」。
-
搜尋附近的藍牙裝置,點擊
ESP32_BT完成配對。

4. App 連線:
-
開啟手機上的
Arduino Bluetooth ControlApp。 -
在裝置選單中點選
ESP32_BT進行連線。

5. 開啟 Terminal 通訊視窗:進入 App 後點擊 Terminal 介面,即可看到「資料接收區」與「資料發送區」。

6. 測試雙向通訊:
-
ESP32 傳至手機:在電腦序列埠視窗輸入文字點擊發送,手機 App 視窗即會同步顯示該文字。

-
手機傳至 ESP32:在手機 App 下方的輸入欄輸入文字並送出,電腦序列埠視窗即會即時印出手機傳來的訊息!

五、 初學者常見卡關問題與排錯指南(Troubleshooting)
1. 手機藍牙搜尋不到 ESP32_BT?
-
確認程式燒錄:請確定程式已順利上傳且 ESP32 已正常通電。
-
名稱重複:若教室或週遭有多人同時測試,請修改
SerialBT.begin("ESP32_BT_YourName")的名稱以利辨識。
2. App 顯示連線失敗(Connection Failed)?
-
先配對再開啟 App:請務必先在 Android 手機系統的「藍牙設定」中完成
ESP32_BT的裝置配對,再開啟 App 進行連線。 -
重啟手機藍牙:偶爾藍牙快取可能會卡住,可嘗試將手機藍牙關閉後重新開啟。
3. iPhone 手機可以使用這段程式碼連線嗎?
-
不支援:iOS(iPhone/iPad)因系統權限限制,不支援傳統藍牙 SPP 規範。iPhone 使用者需要改用 BLE(低功耗藍牙 Bluetooth Low Energy) 進行連線,詳情請參考下一篇教學。
六、 結語與下一篇教學
恭喜你!成功掌握了使用 ESP32 與 Android 手機進行藍牙 SPP 雙向通訊的技巧。掌握了這個無線傳輸機制後,未來就能進一步將手機 App 改造成搖控器(如操控藍牙遙控車),或是用手機即時讀取 ESP32 收集到的感測器數據!
ESP32 教學系列|延伸閱讀與章節導覽
- 上一篇回顧: 【ESP32教學】第十八篇:SW-420震動感測器模組搭配LED實作防震警報器
- 下一篇預告: 【ESP32教學】ESP32 與 iPhone (iOS) BLE 低功耗藍牙數據傳輸實作
- ▼【ESP32教學】教學總索引頁面