ESP32, IOT物聯網

【ESP32】第十九篇:ESP32與Android手機藍牙(Bluetooth SPP)雙向數據傳輸實作

一、 實驗說明:打造無線藍牙遠端數據傳輸系統!

在物聯網(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 設定與連線操作步驟

  1. 程式上傳與啟動:將程式上傳至 ESP32,並開啟 Arduino IDE 的 「序列埠監控視窗 (Serial Monitor)」(鮑率設定為 115200)。

  2. 首先,請至Android App Store 下載並安裝『Arduino Bluetooth Control』。

 

3. 手機藍牙配對:

  • 開啟 Android 手機的 「設定」 ➜ 「藍牙」。

  • 搜尋附近的藍牙裝置,點擊 ESP32_BT 完成配對。

 

4. App 連線:

  • 開啟手機上的 Arduino Bluetooth Control App。

  • 在裝置選單中點選 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 教學系列|延伸閱讀與章節導覽

 

相關文章