實驗說明:
米羅會分成兩篇分別介紹如何使用ESP32的藍牙與手機藍牙進行簡單的相互數據傳輸。本篇將示範ESP32與Android手機的藍牙2.0進行資料傳送與接收,在下一篇將會介紹ESP32與Iphone手機的BLE藍牙進行資料傳送與接收。
材料:
- ESP32-E DevKit
- USB 傳輸線
- Android手機或平板
▼ 購買IoT物聯網學習教材:
相關知識:
藍牙Bluetooth無線通訊傳輸,通常用於近端點對點通訊,為了確保藍牙裝置間的互通性,藍牙技術聯盟(SIG)定義了許多Profile,稱為藍牙規範(Bluetooth profile),例如藍牙立體聲音訊傳輸規範(A2DP)、人機介面規範 (HID)、序列埠規範 (SPP)、藍牙耳機規範(HSP)、免手持裝置規範 (HFP)等等…。本篇將會使用序列埠規範 (Serial Port Profile – SPP)與手機的藍牙進行數據傳輸。
若需要了解更詳細的藍牙規範細節,可參考SIG網站:https://www.bluetooth.com/specifications/specs/
▼ESP32集成了低功耗藍牙(BLE)和傳統藍牙兩種藍牙功能。在數據傳輸有兩種模式:主模式和從模式。
Master mode (主模式):
在這種模式下,工作在主設備中完成,它可以與從設備連線。我們可以搜索並選擇附近的從設備進行連線。當一個設備在主模式下發起連線請求時,它需要其他藍牙設備的信息,包括它們的MAC Address和Passkey 。配對完成後,就可以直接連線。
Slave mode(從機模式)
從模式的藍牙模組只能接受來自主模式的連線請求,而不能主動發起連線請求。與主設備連線後,它可以向主設備發送數據或從主機設備接收數據。
藍牙設備之間可以進行數據交互傳送,一個是主模式,另一個則是從模式。在進行數據交互傳送時,主模式下的藍牙設備會搜索並選擇附近的藍牙設備進行連接,在藍牙建立連接後就可以交互進行傳送與接收資料。手機與ESP32交互傳送數據時,通常手機為主模式,ESP32 則是從模式。
程式:
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_BT"); //藍牙顯示名稱,可自行更改,需避免與他人重複命名
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.println(SerialBT.readString());
}
delay(50);
}
程式說明:
將範例程式編譯並上傳程式碼到ESP32開發板後,接著我們開始設定手機端的部分。
▼首先,請至Android App Store 下載並安裝『Arduino Bluetooth Control』
▼手機安裝好APP後,請先開啟Android手機『設定』並打開藍牙,點擊“搜索”附近的藍牙設備,選擇ESP32_BT進行配對連線。
▼接著,開啟『Arduino Bluetooth Control』APP,選擇ESP32_BT進行連線。
▼進入APP之後,請點擊Terminal序列通訊功能,接著就會看到上下兩個視窗,分別是用來『接收資料的顯示視窗』與『發送資料的顯示視窗』
▼接下來在ESP32的序列視窗發送訊息後,我們即可在手機視窗內接收到ESP32傳來的文字訊息。注意鮑率需要設定在115200。
▼一樣在手機端的序列通訊功能下方的資料發送欄位,輸入文字後並按鍵盤處的完成鍵送出資料,我們即可在ESP32的序列視窗內接收到手機傳來的文字訊息。