低功耗藍牙 (BLE) 是藍牙的一個版本,它是經典藍牙的更小、高度優化的版本。它也被稱為智能藍牙。BLE 的設計考慮到了最低的功耗,專門針對低成本、低帶寬、低功耗和低復雜性。ESP32 具有內置的 BLE 功能,但對于 Arduino 等其他微控制器,可以使用 nRF24L01。該射頻模塊也可以用作 BLE 模塊,將數據發送到其他藍牙設備,如智能手機、電腦等。
在本教程中,我們將演示如何使用 nRF24L01 通過 BLE 發送任何數據。我們將使用 Arduino 和 nRF 模塊通過 BLE 將溫度讀數從 DHT11 發送到智能手機。
低功耗藍牙 (BLE) 有何不同?
BLE 因其功耗特性而被采用,因為它僅使用紐扣電池即可長時間運行。與其他無線標準相比,BLE 的快速增長速度更快,因為它在智能手機、平板電腦和移動計算中的應用非常廣泛。
NRF24L01 模塊的 BLE 功能
BLE 使用相同的 2.4 GHz ISM 頻段,波特率從 250Kbps 到 2Mbps,這在許多國家都是允許的,可應用于工業和醫療應用。頻段從 2400 MHz 到 2483.5 MHz 開始,分為 40 個頻道。其中三個通道被稱為“廣告”,設備使用它們來發送包含有關它們的信息的廣告數據包,以便其他 BLE 設備可以連接。這些頻道最初選擇在頻帶的較低上部和頻帶的中間,以避免可能干擾多個頻道的干擾。
本教程將解釋如何使用 NRF24L01 模塊作為 BLE 收發器。NRF24L01 作為 RF 模塊的教程已經在nRF24L01 與 Arduino 接口教程中進行了解釋。今天將通過向智能手機發送傳感器數據來解釋該模塊的 BLE 功能。在這里,這個 nRF24L01 模塊將與 Arduino 微控制器連接,DHT11 傳感器溫度數據將發送到官方 Nordic BLE android 應用程序。
所需組件
硬件:
Arduino UNO
nRF24L01 BLE模塊
DHT11溫濕度傳感器
跳線
軟件:
Arduino IDE
Nordic BLE Android 應用程序(nRF Temp 2.0 for BLE或nRF Connect for Mobile)
從 nRF24L01 模塊開始
nRF24L01 模塊是收發器模塊,這意味著每個模塊都可以發送和接收數據,但由于它們是半雙工的,因此它們可以一次發送或接收數據。該模塊具有來自 Nordic Semiconductors 的通用 nRF24L01 IC,負責數據的傳輸和接收。該 IC 使用 SPI 協議進行通信,因此可以輕松與任何微控制器連接。由于庫很容易獲得,因此使用 Arduino 會容易得多。
標準 nRF24L01 模塊的引腳排列如下所示:
該模塊的工作電壓為 1.9V 至 3.6V(通常為 3.3V),在正常工作期間消耗的電流非常少,僅為 12mA,這使其電池高效,因此甚至可以在紐扣電池上運行。盡管工作電壓為 3.3V,但大多數引腳都可以承受 5V,因此可以直接與 Arduino 等 5V 微控制器連接。使用這些模塊的另一個好處是,每個模塊有 6 個管道。意思是,每個模塊可以與其他 6 個模塊通信以傳輸或接收數據。這使得該模塊適用于在物聯網應用中創建星形或網狀網絡。它們還具有 125 個唯一 ID 的廣泛地址范圍,因此在封閉區域中,我們可以使用 125 個這些模塊而不會相互干擾。
Arduino NRF24L01模塊 電路圖
將 nRF24L01 與 Arduino 連接以進行 BLE 通信
nRF24L01 在 SPI 上工作,因此接口將使用 SPI 協議。完整的代碼和視頻將附在本教程的最后。視頻中還解釋了 Android 應用指南。這里使用 nRF24L01 模塊與Nordic 的 Smartphone App進行通信。
首先包括所需的庫。該庫包括用于訪問 nRF24L01 命令的 RF24、用于訪問 DHT11 命令的 DHT11 庫和用于使用 BLE 功能的BTLE 庫。
?
#include#include #include #include
?
定義和初始化 DHT11 和 BLE 模塊的引腳和功能。由于我們使用的是 DHT11,因此 DHT 類型被初始化為 DHT11。DHT 連接到 GPIO 引腳 4,nRF 模塊的 CE 和 CSN 引腳分別連接到引腳 9 和 10。
?
#define DHTPIN #define DHTTYPE DHT11 DHT22 DHT dht(DHTPIN, DHTTYPE); RF24 收音機(9、10); BTLE btle(&radio);
?
在9600啟動串口,可以選擇任意端口。然后啟動 DHT 傳感器,并以最多 8 個字符的藍牙本地名稱開始 BTLE 。
?
序列號.開始(9600); dht.begin(); btle.begin("CD 溫度");
?
讀取循環中的溫度并將其保存到浮點變量temp。如果 DHT 斷電或發生任何意外情況,添加調試行以顯示錯誤消息。
?
浮動溫度 = dht.readTemperature(); //讀取溫度數據 if (isnan(h) || isnan(t)) { Serial.println(F("讀取 DHT 傳感器失敗!")); 返回; }
?
將值保存到 Buffer 并解析到 BLE 模塊。還將溫度值發送到 BLE 模塊。BLE 模塊將公布溫度數據。安卓應用可以搜索BLE模塊并接收傳感器數據。
?
nrf_service_data 緩沖區; buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID; buf.value = BTLE::to_nRF_Float(temp); if (!btle.advertise(0x16, &buf, sizeof(buf))) { Serial.println("BTLE 廣告失敗..!"); }
?
完成后,只需跳到下一個頻道。
?
btle.hopChannel();
?
由于 DHT 傳感器文檔建議在一次讀數后保持至少 2 秒的延遲,因此添加 2 秒的延遲。
?
延遲(2000);
?
上傳智能手機并將其與 nRF 模塊配對后,您將開始獲取BLE android 應用程序的 nRF Temp 2.0 上的值,如下所示。視頻中還解釋了在android應用程序上配對和獲取數據的完整過程:
這完成了使用 BLE nRF24L01 將傳感器數據廣播到 Nordic Android 應用程序的完整教程。
/* CircuitDigest ( www.circuitdigest.com )將傳感器數據發送到 Nordic BLE android 應用程序
與 nRF24L01 一起使用。Nordic 的作品
它從 DHT11 讀取溫度并通過 BTLE 發送。
適用于 Nordic Semiconductor 應用程序,例如
“nRF Connect for Mobile”和“nRF Temp 2.0 for BLE”
引腳映射:
GND -> Arduino
VCC 上的 GND -> Arduino CE 上的 3.3v -> Arduino
CSN
上的 PIN 9 ->
Arduino
SCK 上的 PIN 10 -> Arduino Uno
MOSI 上的 PIN 13 -> Arduino Uno
MISO 上的 PIN 11 -> Arduino Uno
IRQ 上的 PIN 12 -> 未使用
*/
#include
#include
#include
#include
#define DHTPIN 4 // 我們連接的數字引腳
#define DHTTYPE DHT11 // 選擇 dht 類型為 DHT 11 或 DHT22
DHT dht(DHTPIN, DHTTYPE);
RF24 收音機(9、10);// CE, CSN
BTLE btle(&radio);
無效設置(){
序列.開始(9600);
延遲(1000);
Serial.print("BLE 和 DHT 開始...");
Serial.println("通過 BTLE 發送溫度數據");
dht.begin(); // 初始化 DHT11 傳感器
btle.begin("CD Temp"); // 最多 8 個字符
Serial.println("Successfully Started");
}
無效循環(){
浮動溫度=dht.readTemperature();//讀取溫度數據
if (isnan(h) || isnan(t)) { // 檢查是否有任何讀取失敗并提前退出(重試)。
Serial.println(F("讀取 DHT 傳感器失敗!"));
返回;
}
Serial.print("溫度:"); 序列號.print(t); Serial.println("°C");
nrf_service_data 緩沖區;
buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID;
buf.value = BTLE::to_nRF_Float(temp);
if (!btle.advertise(0x16, &buf, sizeof(buf))) {
Serial.println("BTLE 廣告失敗..!");
}
btle.hopChannel();
延遲(2000);
}
?
評論
查看更多