|
蓝牙低功耗(BLE)是蓝牙的一个版本,它是经典蓝牙的更小、优化度更高的版本。它也被称为智能蓝牙。 BLE的设计考虑到了低成本、低带宽、低功耗和低复杂度的最低功耗。 ESP32具有内置的BLE功能,但对于像Arduino这样的其他微控制器,可以使用nRF24L01。该RF模块还可以用作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个信道。这些信道中的三个被称为“Advertising”,并且被设备用于发送具有关于它们的信息的广告分组,以便其他BLE设备可以连接。这些信道最初选择在频带的较低上部和频带的中间,以避免可能干扰多个信道的干扰。
本文将介绍如何将NRF24L01模块用作BLE收发器。今天,将通过将传感器数据发送到智能手机来介绍该模块的BLE功能。这个nRF24L01模块将连接到Arduino微控制器,DHT11传感器温度数据将被发送到官方的Nordic BLE android应用程序。
需要的组件 ● Arduino UNO开发板 ● nRF24L01 BLE模块 ● DHT11温湿度传感器 ● 跳线 ● Arduino IDE ● Nordic BLE Android应用程序
nRF24L01模块介绍 nRF24L01模块是收发器模块,这意味着每个模块都可以发送和接收数据,但由于它们是半双工的,因此它们可以一次发送或接收数据。该模块使用Nordic半导体的通用nRF24L01,负责数据的传输和接收。 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协议。这里使用nRF24L01模块与Nordic的Smartphone App进行通信。
首先包括所需的库。该库包括用于访问nRF24L01命令的RF24,用于访问DHT11命令的DHT11库和用于使用BLE功能的BTLE库。 - #include <SPI.h>
- #include <RF24.h>
- #include <BTLE.h>
- #include <DHT.h>
复制代码
定义并初始化DHT11和BLE模块的引脚和功能。由于我们使用的是DHT11,因此DHT类型初始化为DHT11。 DHT连接到GPIO引脚4,nRF模块的CE和CSN引脚分别连接到引脚9和10。 - #define DHTPIN
- #define DHTTYPE DHT11
- DHT22
- DHT dht(DHTPIN, DHTTYPE);
- RF24 radio(9, 10);
- BTLE btle(&radio);
复制代码
串口波特率设置为9600,打开串口。然后启动DHT传感器并使用蓝牙本地名称启动BTLE,最多8个字符。 - Serial.begin(9600);
- dht.begin();
- btle.begin("CD Temp");
复制代码
无限循环读取温度并将其保存到浮点变量温度。如果DHT断电或发生任何意外情况,请添加调试行以显示错误消息。 - float temp = dht.readTemperature(); //read temperature data
- if (isnan(h) || isnan(t)) {
- Serial.println(F("Failed to read from DHT sensor!"));
- return;
- }
复制代码
将值保存到Buffer并将其解析为BLE模块。同时将温度值发送到BLE模块。 BLE模块将公布温度数据。 Android应用程序可以搜索BLE模块并接收传感器数据。 - nrf_service_data buf;
- buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID;
- buf.value = BTLE::to_nRF_Float(temp);
- if (!btle.advertise(0x16, &buf, sizeof(buf))) {
- Serial.println("BTLE advertisement failed..!");
- }
复制代码
完成后,只需跳到下一个通道即可。
由于DHT传感器文档建议在一次读取后保持至少2秒的延迟,因此添加2秒的延迟。
在上传智能手机并将智能手机与nRF模块配对后,您将可以在nRF Temp 2.0 for BLE android应用程序上得到这些值,如下所示:
以上就是使用BLE nRF24L01向Nordic安卓应用程序发送传感器数据的全部内容。如果您有任何问题,请在本帖下面进行回复。
代码 本文使用的完整代码如下所示:
main.rar
(1011 Bytes, 下载次数: 173)
|