像HC-05和HC-06這樣的藍牙模塊很容易設置,并且可以在Arduino IDE上快速使用,但它們有自己的限制,如高功耗,并且它們在舊的藍牙V2.0上運行。此外,最近我給自己買了一個新的ESP32 開發套件,這些模塊具有內置Wi-Fi 和藍牙、充足的 ADC 和 DAC 引腳、音頻支持、SD 卡支持、深度睡眠模式等功能,它幾乎具備構建物聯網項目所需的一切。
正如任何業余愛好者都會喜歡它一樣,ESP32 現在也得到了 Arduino IDE 的正式支持。早些時候,我們必須對尼爾·科爾班斯庫做一個巨大的解決方法,但現在由于這個家伙的辛勤工作,用Arduino IDE編程ESP32已經成為一個蛋糕。因此,我啟動了我的Arduino IDE,并深入研究了幾個示例BLE程序,通過這些程序我一無所知。經過長時間的沖浪和推攏,我意識到,如果您必須使用 ESP32 使用低功耗藍牙 (BLE),還有很多事情需要了解。我決定在單獨的文章中介紹 BLE,因此在這里我們將使用 ESP32 的經典串行藍牙來切換使用智能手機的 LED。
ESP32 藍牙入門
我想嘗試的第一個程序是一個簡單的程序,使用它可以打開或關閉手機藍牙終端應用程序中的LED,就像舊的HC-05天一樣。但事實證明,藍牙低功耗(BLE)并沒有因此而縮進。我還發現 ESP32 模塊中有兩種類型的藍牙,一種是經典藍牙,另一種是BLE藍牙低功耗。好吧,但是為什么呢?....為什么我們有兩種類型的藍牙,我應該為我的項目使用什么?
了解低功耗藍牙 (BLE) 和 ESP32 經典藍牙
顧名思義,低功耗藍牙比經典藍牙消耗更少的功率。它是通過根據需要通過預定義的定期更新發送數據來實現的。但與傳統藍牙不同,它不用于傳輸文件或音樂。你有沒有想過你的手機如何自動識別你剛剛配對的藍牙設備是音頻設備或筆記本電腦或手機,你可能還看到無線音頻播放器或健身樂隊的電池電量自動顯示在手機的狀態欄中;所有這些都可以通過BLE設備的特性來實現。BLE設備可與藍牙V4.0配合使用,并且可以作為服務器或客戶端以低功耗運行,這使得BLE成為信標,智能手表,健身手環等的理想選擇。
另一方面,經典藍牙只是我們用來傳輸文件和其他數據的簡單普通的舊藍牙。幾乎所有BLE設備都具有與之關聯的經典藍牙功能。HC-05等模塊中使用的藍牙是經典藍牙的一個版本,稱為藍牙SSP(串行端口協議),這意味著藍牙遵循標準串行協議,這使得發送和接收數據變得更加容易,沒有太多開銷。在本教程結束時,我們將學習如何在 ESP32 中使用串行藍牙功能。
在本文中,我們將使用 ESP32 上的串行藍牙功能將其與智能手機配對,并使用 Play 商店中任何現有的藍牙終端應用程序向 ESP32 發送命令,并相應地切換板載 LED。
在后面的文章中,我們將介紹 ESP32 BLE 作為服務器和客戶端。BLE服務器通常用于將BLE數據發送到其他藍牙設備,BLE客戶端用于掃描其他BLE設備,從而充當信標。
正在為 ESP32 準備Arduino IDE
請注意,默認情況下,Arduino IDE 不支持 ESP32 板;您必須使用主板管理器下載并安裝它們。如果這是您使用 ESP32 的第一個程序,請按照此入門教程將 ESP32 開發板添加到 Arduino 并上傳測試草圖。
此外,您可以使用 ESP32 完成更多項目,而無需使用任何微控制器。
適用于 ESP32 的串行藍牙程序
本頁末尾提供了使用 ESP32 藍牙切換 LED的完整程序。在此標題下,讓我們將代碼分解為小片段并嘗試理解它們。如果您已經使用過其他藍牙模塊,如 HC-05,那么您會發現這個ESP32 藍牙經典示例程序非常相似。
該程序的想法是使用 ESP32 初始化串行藍牙連接,并偵聽來自配對設備的數據。如果傳入的數據是“1”,那么我們打開LED,如果是“0”,我們應該關閉LED。我們通過添加頭文件藍牙序列開始我們的程序,這使得 ESP32 藍牙可以作為藍牙 SSP 工作。
#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino
這個庫背后有很多事情在發生,但我們選擇不深入研究它以保持簡單。我們需要的下一件事是藍牙相關操作的對象。在這里,我把我的名字命名為ESP_BT,但你可以選擇任何名字。
BluetoothSerial ESP_BT; //Object for Bluetooth
接下來,在空隙設置()函數內部。我們以波特率9600開始串行通信,并使用名稱初始化藍牙信號。在這里,我將其命名為“ESP32_LED_Control”,這將是我們的手機在嘗試配對時可以找到的名稱。最后,我將內置LED引腳聲明為輸出引腳,因為我們將根據藍牙信號切換它。
void setup() {
Serial.begin(9600); //Start Serial monitor in 9600
ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal
Serial.println("Bluetooth Device is Ready to Pair");
pinMode (LED_BUILTIN, OUTPUT);//Specify that LED pin is output
}
在無限空洞循環函數中,我們檢查是否有任何數據來自藍牙模塊,如果是,則讀取數據并將其存儲在傳入變量中。我們還在串行監視器上打印此值,只是為了交叉檢查Arduino正在接收的內容。
if (ESP_BT.available()) //Check if we receive anything from Bluetooth
{
incoming = ESP_BT.read(); //Read what we recevive
Serial.print("Received:"); Serial.println(incoming);
現在,接收到的任何數據都存儲在傳入的變量中,因此我們可以直接將此變量與預期值進行比較并執行所需的操作。但是從藍牙發送的值將采用字符形式,Arduino 將讀取從手機發送的字符的十進制值。在我們的例子中,對于字符“0”,十進制值將為48,對于字符“1”,十進制值將為49。您可以參考 ASCII 圖表來了解每個字符的十進制值。
在這里,我們將傳入變量與 48 和 49 進行了比較,以分別檢查 0 和 1。如果是1,那么我們關閉LED,并將確認消息打印回藍牙,說LED已關閉,反之亦然。
if (incoming == 49)
{
digitalWrite(LED_BUILTIN, HIGH);
ESP_BT.println("LED turned ON");
}
if (incoming == 48)
{
digitalWrite(LED_BUILTIN, LOW);
ESP_BT.println("LED turned OFF");
}
使用 ESP32 測試串行藍牙
將 ESP 連接到 Arduino IDE,然后選擇正確的電路板和端口,如入門教程中所述。因為它是一個3斷續器方板管理器 編譯和上傳代碼可能需要更長的時間。上傳后,啟動串行監視器(僅用于調試)并打開手機上的藍牙設置。您應該找到一個名為ESP32_LED_Control配對的藍牙設備。

現在,您可以在智能手機上打開任何藍牙終端應用程序,我正在使用從Google應用商店下載的名為“藍牙終端”的應用程序。將藍牙應用程序連接到我們剛剛配對的設備,然后鍵入1并按發送。

ESP32 模塊應按照我們的程序接收并打開 LED,并向您發送確認消息,指出 LED 已打開,如上圖所示。您還可以檢查串行監視器,它將以十進制格式顯示 ESP32 藍牙接收的數據,即 Arduino 將按 48 表示 0 和 49 表示 1,如前所述。我的終端窗口的快照如下所示。


同樣,您還應該能夠通過從移動應用程序發送0來關閉LED。
/*Program to control LED (ON/OFF) from ESP32 using Serial Bluetooth
* Thanks to Neil Kolbans for his efoorts in adding the support to Arduino IDE
* Turotial on: www.circuitdigest.com
*/
#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino
BluetoothSerial ESP_BT; //Object for Bluetooth
int incoming;
int LED_BUILTIN = 2;
void setup() {
Serial.begin(9600); //Start Serial monitor in 9600
ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal
Serial.println("Bluetooth Device is Ready to Pair");
pinMode (LED_BUILTIN, OUTPUT);//Specify that LED pin is output
}
void loop() {
if (ESP_BT.available()) //Check if we receive anything from Bluetooth
{
incoming = ESP_BT.read(); //Read what we recevive
Serial.print("Received:"); Serial.println(incoming);
if (incoming == 49)
{
digitalWrite(LED_BUILTIN, HIGH);
ESP_BT.println("LED turned ON");
}
if (incoming == 48)
{
digitalWrite(LED_BUILTIN, LOW);
ESP_BT.println("LED turned OFF");
}
}
delay(20);
}
-
led
+關注
關注
243文章
24596瀏覽量
690860 -
BLE
+關注
關注
13文章
776瀏覽量
66344 -
低功耗藍牙
+關注
關注
1文章
271瀏覽量
22370
發布評論請先 登錄
如何使用ESP32的經典串行藍牙來切換使用智能手機的LED
評論