0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將ESP32藍牙低功耗連接到健身手環(huán)以觸發(fā)燈泡的方法

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯溫斯·拉吉 ? 2022-10-28 17:07 ? 次閱讀

一進入家門就自動開燈,離開時又關(guān)掉燈,這是多么酷?。∈堑?,一個簡單的應(yīng)用程序可以為您做到這一點。在這個項目中,我們將 ESP32 用作 BLE 客戶端將健身手環(huán)用作 BLE 服務(wù)器,因此,每當(dāng)佩戴健身手環(huán)的人進入 ESP32 藍牙范圍內(nèi)時,ESP32 都會檢測到它并打開燈。任何具有 BLE 服務(wù)器功能的藍牙設(shè)備都可以用作觸發(fā)設(shè)備,以使用 ESP32 控制任何家用電器。

我們將對 ESP32 進行編程,使其充當(dāng) BLE 客戶端,并不斷掃描 BLE 設(shè)備;如果我們在范圍內(nèi)找到健身帶,我們將嘗試連接到它,如果連接成功,我們可以通過切換ESP32上的一個GPIO引腳來觸發(fā)燈泡。該方法是可靠的,因為每個BLE服務(wù)器(健身帶)將具有唯一的硬件ID,因此沒有兩個BLE服務(wù)器設(shè)備是相同的。有趣的對吧?!!!現(xiàn)在,讓我們開始構(gòu)建:

所需材料

ESP32 開發(fā)板

交流負載(燈)

繼電器模塊

硬件

這個 ESP32 BLE 客戶端項目的硬件非常簡單,因為大多數(shù)魔術(shù)都發(fā)生在代碼內(nèi)部。ESP32 必須在發(fā)現(xiàn)或丟失藍牙信號時切換交流燈(負載)。要切換此負載,我們將使用繼電器,由于 ESP32 的 GPIO 引腳僅兼容 3.3V,我們需要一個可以用 3.3V 驅(qū)動的繼電器模塊。只需檢查繼電器模塊中使用的晶體管,如果它是BC548,你就可以按照下面的電路圖建立自己的電路。

pYYBAGNbm0eAN4WsAADxWYTqRTY547.png

警告:該電路直接處理220V交流電源電壓。小心帶電電線,并確保不會產(chǎn)生短路。你已被警告。

使用BC548而不是BC547或2N2222的原因是它們具有低基極發(fā)射極電壓,僅可在3.3V下觸發(fā)。這里使用的繼電器是5V繼電器,因此我們使用Vin引腳為其供電,該引腳從電源線中獲得5V。接地引腳連接到電路的接地。電阻 R1 1K 用作基極電流限制器電阻。相線連接到繼電器的NO引腳,繼電器的共引腳連接到負載,負載的另一端連接到中性線。您可以交換相位和中性的位置,但請注意不要直接做空它們。電流應(yīng)始終通過負載(燈泡)。我使用了一個繼電器模塊來保持簡單,這里的負載是焦點LED燈。我的設(shè)置如下所示

pYYBAGNbm8qAfGRLAAC3jIacubg753.jpg

如果您現(xiàn)在想跳過硬件,可以使用 GPIO 2 引腳而不是 GPIO 13 引腳來切換 ESP32 上的板載 LED。建議初學(xué)者使用此方法。

獲取服務(wù)器的藍牙地址(健身手環(huán)的地址)

如前所述,我們將對 ESP32 進行編程,使其充當(dāng)客戶端(類似于電話)并連接到我的健身手環(huán)(聯(lián)想 HW-01)的服務(wù)器。對于連接到服務(wù)器的客戶端,它必須知道服務(wù)器的藍牙地址。每個藍牙服務(wù)器,就像我的健身手環(huán)一樣,都有自己獨特的藍牙地址,這是永久性的。您可以將此與筆記本電腦手機的 MAC 地址相關(guān)聯(lián)。

為了從服務(wù)器中獲取此地址,我們使用稱為nRF的應(yīng)用程序從北歐半導(dǎo)體連接,我們已經(jīng)在上一個教程中使用過。它免費提供給IOS和安卓用戶。只需下載,啟動應(yīng)用程序并掃描附近的藍牙設(shè)備。該應(yīng)用程序?qū)⒘谐鏊业降乃蠦LE設(shè)備。我的命名為HW-01,只需查看其名稱下方,您就會發(fā)現(xiàn)服務(wù)器的硬件地址,如下所示。

poYBAGNbm8uAYNwVAAA4atOrE8k433.png

所以我的健身手環(huán)的 ESP32 BLE 硬件地址是 C7:F0:69:F0:68:81,您將擁有一組相同格式的不同數(shù)字。只需記下它,因為我們在編程ESP32時需要它。

獲取服務(wù)器的服務(wù)和特征 UUID

好的,現(xiàn)在我們已經(jīng)使用BLE地址標(biāo)識了我們的服務(wù)器,但是為了與之通信,我們需要說服務(wù)語言和特征,如果您閱讀了上一個教程,您將理解這一點。在本教程中,我將使用我的服務(wù)器的寫入特征(健身帶)與它配對。因此,為了與設(shè)備配對,我們需要服務(wù)廣告特征UUID,我們可以使用相同的應(yīng)用程序再次獲得它。

只需單擊應(yīng)用程序上的“連接”按鈕并搜索一些寫入特征,應(yīng)用程序?qū)@示服務(wù) UUID 和特征 UUID。我的如下所示

pYYBAGNbm86AJC0LAABtBM2E4b4348.png

在這里,我的服務(wù) UUID 和特征 UUID 是相同的,但它不必相同。記下服務(wù)器的 UUID。我的被記錄下來

Service UUID:

0000fee7-0000-1000-8000-00805f9b34fb

Characteristic

UUID: 0000fee7-0000-1000-8000-00805f9b34fb

使用寫入特性不是強制性的;您可以使用應(yīng)用程序中顯示的服務(wù)器的任何有效服務(wù)和特征 UUID。

對 ESP32 進行編程,使其充當(dāng)鄰近感應(yīng)開關(guān)應(yīng)用的客戶端

該程序的理念是使 ESP32 充當(dāng)客戶端,在找到我們的服務(wù)器(健身帶)時不斷掃描藍牙設(shè)備,驗證硬件 ID,并通過 GPIO 引腳 13 切換指示燈。好吧!!,但有一個問題。所有BLE服務(wù)器的射程均為10米,這有點太多了。因此,如果我們試圖使接近開關(guān)打開打開一扇門的燈,這個范圍非常高。

要縮小BLE服務(wù)器的范圍,我們可以使用配對選項。僅當(dāng) BLE 服務(wù)器和客戶端的距離在 3-4 米以內(nèi)時,兩者才會保持配對狀態(tài)。這非常適合我們的應(yīng)用。因此,我們制造 ESP32 不僅是為了發(fā)現(xiàn) BLE 服務(wù)器,也是為了連接到它并確保它是否保持配對狀態(tài)。 本頁末尾提供了完整的 ESP32 BLE 示例程序來執(zhí)行相同的操作。下面,我將代碼分解成小片段并嘗試解釋它們。

在包含頭文件后,我們通知 ESP32 我們通過 nRF 連接應(yīng)用程序獲得的 BLE 地址、服務(wù)和特征 UUID,如上面的標(biāo)題中所述。代碼如下所示

static BLEUUID serviceUUID("0000fee7-0000-1000-8000-00805f9b34fb"); //Service UUID of fitnessband obtained through nRF connect application

static BLEUUID charUUID("0000fee7-0000-1000-8000-00805f9b34fb"); //Characteristic UUID of fitnessband obtained through nRF connect application

String My_BLE_Address = "c7:f0:69:f0:68:81"; //Hardware Bluetooth MAC of my fitnessband, will vary for every band obtained through nRF connect application

其次,在程序中,我們有連接到服務(wù)器和我的廣告服務(wù)回撥,我們稍后將返回。然后在設(shè)置函數(shù)內(nèi)部,我們初始化串行監(jiān)視器,并使ESP上的BLE掃描設(shè)備。掃描完成后,發(fā)現(xiàn)每個BLE設(shè)備,就會調(diào)用“我的廣告設(shè)備”回調(diào)功能。

我們還支持主動掃描,因為我們使用主電源為 ESP32 供電,對于電池應(yīng)用,它已關(guān)閉以降低電流消耗。繼電器觸發(fā)引腳在我們的硬件中連接到GPIO 13,因此我們也聲明GPIO引腳13為輸出。

void setup() {

Serial.begin(115200); //Start serial monitor

Serial.println("ESP32 BLE Server program"); //Intro message

BLEDevice::init("");

pBLEScan = BLEDevice::getScan(); //create new scan

pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); //Call the class that is defined above

pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster

pinMode (13,OUTPUT); //Declare the in-built LED pin as output

}

在“我的廣告設(shè)備回調(diào)”功能中,我們打印行將列出發(fā)現(xiàn)的BLE設(shè)備的名稱和其他信息。我們需要發(fā)現(xiàn)的BLE設(shè)備的硬件ID,以便我們可以將其與所需的設(shè)備進行比較。因此,我們使用變量Server_BLE_Address來獲取設(shè)備的地址,然后將其從BLE地址類型轉(zhuǎn)換為字符串。

class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks

{

void onResult(BLEAdvertisedDevice advertisedDevice) {

Serial.printf("Scan Result: %s n", advertisedDevice.toString().c_str());

Server_BLE_Address = new BLEAddress(advertisedDevice.getAddress());

Scaned_BLE_Address = Server_BLE_Address->toString().c_str();

}

};

在循環(huán)函數(shù)中,我們掃描 3 秒鐘,并將結(jié)果放在發(fā)現(xiàn)的設(shè)備中,這是來自 BLEScanResults 的對象。如果我們通過掃描找到一個或多個設(shè)備,我們將開始檢查發(fā)現(xiàn)的BLE地址是否與我們在程序中輸入的地址匹配。如果匹配是正數(shù),并且設(shè)備未提前配對,我們嘗試使用 connectToserver 函數(shù)對其進行配對。我們還使用了一些串行語句來理解目的。

while (foundDevices.getCount() >= 1)

{

if (Scaned_BLE_Address == My_BLE_Address && paired == false)

{

Serial.println("Found Device :-)... connecting to Server as client");

if (connectToserver(*Server_BLE_Address))

{

連接服務(wù)器功能中,我們使用 UUID 與 BLE 服務(wù)器(健身帶)配對。要連接服務(wù)器,ESP32 必須充當(dāng)客戶端,因此我們使用 createClient() 函數(shù)創(chuàng)建一個客戶端,然后連接到 BLE 服務(wù)器的地址。然后,我們使用 UUID 值搜索服務(wù)和特征,并嘗試連接到它。當(dāng)連接成功時,該函數(shù)返回 true,如果不是,則返回 false。請注意,使用服務(wù)和特征 UUID 與服務(wù)器配對并不是強制性的,它只是為了便于您理解。

bool connectToserver (BLEAddress pAddress){

BLEClient* pClient = BLEDevice::createClient();

Serial.println(" - Created client");

// Connect to the BLE Server.

pClient->connect(pAddress);

Serial.println(" - Connected to fitnessband");

// Obtain a reference to the service we are after in the remote BLE server.

BLERemoteService* pRemoteService = pClient->getService(serviceUUID);

if (pRemoteService != nullptr)

{

Serial.println(" - Found our service");

return true;

}

else

return false;

// Obtain a reference to the characteristic in the service of the remote BLE server.

pRemoteCharacteristic = pRemoteService->getCharacteristic(charUUID);

if (pRemoteCharacteristic != nullptr)

Serial.println(" - Found our characteristic");

return true;

}

如果連接成功,則GPIO引腳13變高,并使用中斷語句將控件發(fā)送到環(huán)路之外。配對的布爾變量也設(shè)置為 true。

if (connectToserver(*Server_BLE_Address))

{

paired = true;

Serial.println("********************LED turned ON************************");

digitalWrite (13,HIGH);

break;

}

配對成功并打開GPIO引腳后,我們必須檢查設(shè)備是否仍在范圍內(nèi)。由于現(xiàn)在設(shè)備已配對,因此BLE掃描服務(wù)將無法再看到它。只有當(dāng)用戶離開該區(qū)域時,我們才會再次找到它。因此,我們只需要掃描BLE服務(wù)器,如果我們發(fā)現(xiàn),則必須將GPIO引腳設(shè)置為低電平,如下所示

if (Scaned_BLE_Address == My_BLE_Address && paired == true)

{

Serial.println("Our device went out of range");

paired = false;

Serial.println("********************LED OOOFFFFF************************");

digitalWrite (13,LOW);

ESP.restart();

break;

}

工作和測試

完成程序和硬件設(shè)置后,只需將代碼上傳到 ESP32 并按如下所示安排整個設(shè)置即可。

poYBAGNbm8-AQH9hAADIXXLZy9c059.jpg

您應(yīng)該注意到,一旦健身手環(huán)(服務(wù)器)與 ESP32 配對,燈就會被打開。您也可以通過注意健身手環(huán)上的連接藍牙符號來檢查這一點。配對后,只需嘗試離開 ESP32,當(dāng)您越過 3-4 米時,您會注意到手表上的藍牙符號消失,連接丟失?,F(xiàn)在,如果你看一下燈,它將被關(guān)閉。當(dāng)您走回設(shè)備時,設(shè)備會再次配對并打開指示燈。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    12

    文章

    661

    瀏覽量

    59471
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1215

    瀏覽量

    52231
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17417
收藏 人收藏

    評論

    相關(guān)推薦

    請問esp32 mesh provisioner和低功耗藍牙可以共存嗎?

    esp32 mesh provisioner 和低功耗藍牙可以共存嗎
    發(fā)表于 06-18 06:40

    請問esp32藍牙能不能保持超低功耗的監(jiān)聽?

    做一個低功耗的設(shè)備,需要進入深度睡眠,但是有需要空中喚醒,可以用外掛LORA去喚醒esp32。 那么esp32低功耗藍牙,能不能像家用的
    發(fā)表于 06-18 07:11

    基于ESP32低功耗藍牙觸摸鍵盤

    觸摸低功耗藍牙行業(yè)芯事經(jīng)驗分享
    迪文智能屏
    發(fā)布于 :2022年04月07日 16:05:53

    藍牙4.1申請】低功耗藍牙手環(huán)

    申請理由:想開發(fā)低功耗手環(huán),苦于沒有開發(fā)板,看到這邊有符合我的開發(fā)板,所以申請一套。項目描述:低功耗藍牙手環(huán),適合當(dāng)代年輕人追求科技時尚的理
    發(fā)表于 10-09 14:18

    低功耗藍牙的應(yīng)用領(lǐng)域

    、室內(nèi)定位導(dǎo)航(包括商場、圖書館、停車場、酒店、飯店等等)、景點語音介紹、身份識別等均可使用低功耗藍牙技術(shù)。藍牙防丟器藍牙防丟器與智能手機
    發(fā)表于 03-18 02:25

    請問esp32藍牙能不能保持超低功耗的監(jiān)聽?

    做一個低功耗的設(shè)備,需要進入深度睡眠,但是有需要空中喚醒,可以用外掛LORA去喚醒esp32。那么esp32低功耗藍牙,能不能像家用的
    發(fā)表于 02-15 06:13

    如何使用ESP32和Bluetooth模塊閃爍LED

    在本教程中,LED的陽極連接到ESP32的p21,LED的陰極連接到ESP32的GND
    的頭像 發(fā)表于 10-05 17:50 ?9003次閱讀
    如何使用<b class='flag-5'>ESP32</b>和Bluetooth模塊閃爍LED

    HC05 藍牙模塊 連接 ESP32 經(jīng)典藍牙

    概述HC05是一款常用的經(jīng)典藍牙模塊,某寶有大量銷售,主從機一體,而ESP32藍牙兼容經(jīng)典藍牙低功耗
    發(fā)表于 11-24 12:36 ?65次下載
    HC05 <b class='flag-5'>藍牙</b>模塊 <b class='flag-5'>連接</b> <b class='flag-5'>ESP32</b> 經(jīng)典<b class='flag-5'>藍牙</b>

    通用型WiFi和低功耗藍牙模組ESP32-C3的優(yōu)勢特征及應(yīng)用范例

    ESP32-C3-WROOM-02(簡稱ESP32-C3)模組是一款專為物聯(lián)網(wǎng)應(yīng)用場景設(shè)計的通用型 WiFi 和低功耗藍牙模組,安全性高、內(nèi)存充足、外設(shè)接口多、應(yīng)用場景豐富、尺寸小,可
    的頭像 發(fā)表于 06-24 10:16 ?4660次閱讀

    您的Magicbit(ESP32)連接到thingsboard

    電子發(fā)燒友網(wǎng)站提供《您的Magicbit(ESP32)連接到thingsboard.zip》資料免費下載
    發(fā)表于 11-15 11:46 ?0次下載
    <b class='flag-5'>將</b>您的Magicbit(<b class='flag-5'>ESP32</b>)<b class='flag-5'>連接到</b>thingsboard

    使用ESP32簡單且不安全的方式連接到AWS IoT

    電子發(fā)燒友網(wǎng)站提供《使用ESP32簡單且不安全的方式連接到AWS IoT.zip》資料免費下載
    發(fā)表于 12-26 09:15 ?0次下載
    使用<b class='flag-5'>ESP32</b><b class='flag-5'>以</b>簡單且不安全的方式<b class='flag-5'>連接到</b>AWS IoT

    基于ESP32低功耗藍牙暗室定時器

    電子發(fā)燒友網(wǎng)站提供《基于ESP32低功耗藍牙暗室定時器.zip》資料免費下載
    發(fā)表于 02-09 11:53 ?0次下載
    基于<b class='flag-5'>ESP32</b>的<b class='flag-5'>低功耗</b><b class='flag-5'>藍牙</b>暗室定時器

    自動化燒錄器支持芯片燒錄Espressif樂鑫科技的低功耗藍牙模組ESP32-WROOM32E

    芯片燒錄行業(yè)領(lǐng)導(dǎo)者-昂科技術(shù)近日發(fā)布最新的燒錄軟件更新及新增支持的芯片型號列表,其中昂科發(fā)布軟件更新支持Espressif樂鑫科技的低功耗藍牙模組ESP32-WROOM32E已經(jīng)被昂科的通用燒錄平臺
    的頭像 發(fā)表于 05-09 17:17 ?3279次閱讀
    自動化燒錄器支持芯片燒錄Espressif樂鑫科技的<b class='flag-5'>低功耗</b><b class='flag-5'>藍牙</b>模組<b class='flag-5'>ESP32</b>-WROOM32E

    信馳達基于ESP32-C3推出低功耗Wi-Fi藍牙雙模模塊

    廠商深圳信馳達科技RF-star推出了基于ESP32-C3 SoC的低功耗WiFi藍牙二合一通信模塊——RF-WM-ESP32B1。
    的頭像 發(fā)表于 07-19 09:44 ?899次閱讀

    低功耗藍牙模塊在運動健身追蹤中的革新應(yīng)用

    隨著健康和健身意識的不斷提升,人們對運動追蹤技術(shù)的需求日益增加。低功耗藍牙模塊的引入為運動健身追蹤領(lǐng)域帶來了新的可能性。本文探討
    的頭像 發(fā)表于 11-29 14:50 ?473次閱讀