像HC-05和HC-06這樣的藍(lán)牙模塊很容易設(shè)置,并且可以在Arduino IDE上快速使用,但它們有自己的限制,如高功耗,并且它們在舊的藍(lán)牙V2.0上運(yùn)行。此外,最近我給自己買了一個(gè)新的ESP32 開發(fā)套件,這些模塊具有內(nèi)置Wi-Fi 和藍(lán)牙、充足的 ADC 和 DAC 引腳、音頻支持、SD 卡支持、深度睡眠模式等功能,它幾乎具備構(gòu)建物聯(lián)網(wǎng)項(xiàng)目所需的一切。
正如任何業(yè)余愛好者都會喜歡它一樣,ESP32 現(xiàn)在也得到了 Arduino IDE 的正式支持。早些時(shí)候,我們必須對尼爾·科爾班斯庫做一個(gè)巨大的解決方法,但現(xiàn)在由于這個(gè)家伙的辛勤工作,用Arduino IDE編程ESP32已經(jīng)成為一個(gè)蛋糕。因此,我啟動了我的Arduino IDE,并深入研究了幾個(gè)示例BLE程序,通過這些程序我一無所知。經(jīng)過長時(shí)間的沖浪和推攏,我意識到,如果您必須使用 ESP32 使用低功耗藍(lán)牙 (BLE),還有很多事情需要了解。我決定在單獨(dú)的文章中介紹 BLE,因此在這里我們將使用 ESP32 的經(jīng)典串行藍(lán)牙來切換使用智能手機(jī)的 LED。
ESP32 藍(lán)牙入門
我想嘗試的第一個(gè)程序是一個(gè)簡單的程序,使用它可以打開或關(guān)閉手機(jī)藍(lán)牙終端應(yīng)用程序中的LED,就像舊的HC-05天一樣。但事實(shí)證明,藍(lán)牙低功耗(BLE)并沒有因此而縮進(jìn)。我還發(fā)現(xiàn) ESP32 模塊中有兩種類型的藍(lán)牙,一種是經(jīng)典藍(lán)牙,另一種是BLE藍(lán)牙低功耗。好吧,但是為什么呢?....為什么我們有兩種類型的藍(lán)牙,我應(yīng)該為我的項(xiàng)目使用什么?
了解低功耗藍(lán)牙 (BLE) 和 ESP32 經(jīng)典藍(lán)牙
顧名思義,低功耗藍(lán)牙比經(jīng)典藍(lán)牙消耗更少的功率。它是通過根據(jù)需要通過預(yù)定義的定期更新發(fā)送數(shù)據(jù)來實(shí)現(xiàn)的。但與傳統(tǒng)藍(lán)牙不同,它不用于傳輸文件或音樂。你有沒有想過你的手機(jī)如何自動識別你剛剛配對的藍(lán)牙設(shè)備是音頻設(shè)備或筆記本電腦或手機(jī),你可能還看到無線音頻播放器或健身樂隊(duì)的電池電量自動顯示在手機(jī)的狀態(tài)欄中;所有這些都可以通過BLE設(shè)備的特性來實(shí)現(xiàn)。BLE設(shè)備可與藍(lán)牙V4.0配合使用,并且可以作為服務(wù)器或客戶端以低功耗運(yùn)行,這使得BLE成為信標(biāo),智能手表,健身手環(huán)等的理想選擇。
另一方面,經(jīng)典藍(lán)牙只是我們用來傳輸文件和其他數(shù)據(jù)的簡單普通的舊藍(lán)牙。幾乎所有BLE設(shè)備都具有與之關(guān)聯(lián)的經(jīng)典藍(lán)牙功能。HC-05等模塊中使用的藍(lán)牙是經(jīng)典藍(lán)牙的一個(gè)版本,稱為藍(lán)牙SSP(串行端口協(xié)議),這意味著藍(lán)牙遵循標(biāo)準(zhǔn)串行協(xié)議,這使得發(fā)送和接收數(shù)據(jù)變得更加容易,沒有太多開銷。在本教程結(jié)束時(shí),我們將學(xué)習(xí)如何在 ESP32 中使用串行藍(lán)牙功能。
在本文中,我們將使用 ESP32 上的串行藍(lán)牙功能將其與智能手機(jī)配對,并使用 Play 商店中任何現(xiàn)有的藍(lán)牙終端應(yīng)用程序向 ESP32 發(fā)送命令,并相應(yīng)地切換板載 LED。
在后面的文章中,我們將介紹 ESP32 BLE 作為服務(wù)器和客戶端。BLE服務(wù)器通常用于將BLE數(shù)據(jù)發(fā)送到其他藍(lán)牙設(shè)備,BLE客戶端用于掃描其他BLE設(shè)備,從而充當(dāng)信標(biāo)。
正在為 ESP32 準(zhǔn)備Arduino IDE
請注意,默認(rèn)情況下,Arduino IDE 不支持 ESP32 板;您必須使用主板管理器下載并安裝它們。如果這是您使用 ESP32 的第一個(gè)程序,請按照此入門教程將 ESP32 開發(fā)板添加到 Arduino 并上傳測試草圖。
此外,您可以使用 ESP32 完成更多項(xiàng)目,而無需使用任何微控制器。
適用于 ESP32 的串行藍(lán)牙程序
本頁末尾提供了使用 ESP32 藍(lán)牙切換 LED的完整程序。在此標(biāo)題下,讓我們將代碼分解為小片段并嘗試?yán)斫馑鼈?。如果您已?jīng)使用過其他藍(lán)牙模塊,如 HC-05,那么您會發(fā)現(xiàn)這個(gè)ESP32 藍(lán)牙經(jīng)典示例程序非常相似。
該程序的想法是使用 ESP32 初始化串行藍(lán)牙連接,并偵聽來自配對設(shè)備的數(shù)據(jù)。如果傳入的數(shù)據(jù)是“1”,那么我們打開LED,如果是“0”,我們應(yīng)該關(guān)閉LED。我們通過添加頭文件藍(lán)牙序列開始我們的程序,這使得 ESP32 藍(lán)牙可以作為藍(lán)牙 SSP 工作。
#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino
這個(gè)庫背后有很多事情在發(fā)生,但我們選擇不深入研究它以保持簡單。我們需要的下一件事是藍(lán)牙相關(guān)操作的對象。在這里,我把我的名字命名為ESP_BT,但你可以選擇任何名字。
BluetoothSerial ESP_BT; //Object for Bluetooth
接下來,在空隙設(shè)置()函數(shù)內(nèi)部。我們以波特率9600開始串行通信,并使用名稱初始化藍(lán)牙信號。在這里,我將其命名為“ESP32_LED_Control”,這將是我們的手機(jī)在嘗試配對時(shí)可以找到的名稱。最后,我將內(nèi)置LED引腳聲明為輸出引腳,因?yàn)槲覀儗⒏鶕?jù)藍(lán)牙信號切換它。
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
}
在無限空洞循環(huán)函數(shù)中,我們檢查是否有任何數(shù)據(jù)來自藍(lán)牙模塊,如果是,則讀取數(shù)據(jù)并將其存儲在傳入變量中。我們還在串行監(jiān)視器上打印此值,只是為了交叉檢查Arduino正在接收的內(nèi)容。
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);
現(xiàn)在,接收到的任何數(shù)據(jù)都存儲在傳入的變量中,因此我們可以直接將此變量與預(yù)期值進(jìn)行比較并執(zhí)行所需的操作。但是從藍(lán)牙發(fā)送的值將采用字符形式,Arduino 將讀取從手機(jī)發(fā)送的字符的十進(jìn)制值。在我們的例子中,對于字符“0”,十進(jìn)制值將為48,對于字符“1”,十進(jìn)制值將為49。您可以參考 ASCII 圖表來了解每個(gè)字符的十進(jìn)制值。
在這里,我們將傳入變量與 48 和 49 進(jìn)行了比較,以分別檢查 0 和 1。如果是1,那么我們關(guān)閉LED,并將確認(rèn)消息打印回藍(lán)牙,說LED已關(guān)閉,反之亦然。
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 測試串行藍(lán)牙
將 ESP 連接到 Arduino IDE,然后選擇正確的電路板和端口,如入門教程中所述。因?yàn)樗且粋€(gè)3斷續(xù)器方板管理器 編譯和上傳代碼可能需要更長的時(shí)間。上傳后,啟動串行監(jiān)視器(僅用于調(diào)試)并打開手機(jī)上的藍(lán)牙設(shè)置。您應(yīng)該找到一個(gè)名為ESP32_LED_Control配對的藍(lán)牙設(shè)備。
現(xiàn)在,您可以在智能手機(jī)上打開任何藍(lán)牙終端應(yīng)用程序,我正在使用從Google應(yīng)用商店下載的名為“藍(lán)牙終端”的應(yīng)用程序。將藍(lán)牙應(yīng)用程序連接到我們剛剛配對的設(shè)備,然后鍵入1并按發(fā)送。
ESP32 模塊應(yīng)按照我們的程序接收并打開 LED,并向您發(fā)送確認(rèn)消息,指出 LED 已打開,如上圖所示。您還可以檢查串行監(jiān)視器,它將以十進(jìn)制格式顯示 ESP32 藍(lán)牙接收的數(shù)據(jù),即 Arduino 將按 48 表示 0 和 49 表示 1,如前所述。我的終端窗口的快照如下所示。
同樣,您還應(yīng)該能夠通過從移動應(yīng)用程序發(fā)送0來關(guān)閉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
+關(guān)注
關(guān)注
240文章
23087瀏覽量
657346 -
BLE
+關(guān)注
關(guān)注
12文章
650瀏覽量
59302 -
低功耗藍(lán)牙
+關(guān)注
關(guān)注
1文章
223瀏覽量
21186
發(fā)布評論請先 登錄
相關(guān)推薦
評論