低功耗蓝牙(BLE)是蓝牙的一个版本,它是经典蓝牙的较小,高度优化的版本。它也被称为智能蓝牙。BLE的设计考虑了最低功耗,特别是针对低成本,低带宽,低功耗和低复杂度的功耗。ESP32具有内置的BLE功能,但对于其他微控制器(如Arduino),可以使用nRF24L01。该RF模块也可用作BLE模块,以将数据发送到其他Bluetooth设备,例如智能手机,计算机等。
在本教程的此处,我们将演示如何使用nRF24L01通过BLE发送任何数据。我们将通过BLE使用Arduino和nRF模块将DHT11的温度读数发送到智能手机。
低功耗蓝牙(BLE)有何不同?
BLE由于其功耗特性而被采用,因为它仅使用一个纽扣电池就可以长时间运行。与其他无线标准相比,由于BLE在智能手机,平板电脑和移动计算中的惊人应用,其快速发展变得更快。
NRF24L01模块的BLE功能
BLE使用相同的2.4 GHz ISM频段,波特率从250Kbps到2Mbps,这在许多国家都允许,并且可以应用于工业和医疗应用。频段始于2400 MHz至2483.5 MHz,分为40个通道。这些通道中的三个称为 “广告” ,被设备用来发送带有有关它们的信息的广告包,以便其他BLE设备可以连接。这些通道最初是在频带的较低上部和频带的中间选择的,以避免可能会干扰多个信道的干扰。要了解有关BLE的更多信息,请遵循本教程。
本教程将说明如何将NRF24L01模块用作BLE收发器。NRF24L01作为RF模块的教程已经在nRF24L01与Arduino教程的接口中进行了说明。今天,将通过将传感器数据发送到智能手机来说明该模块的BLE功能。在这里,此nRF24L01模块将与Arduino Microcontroller接口,DHT11传感器温度数据将发送到官方Nordic BLE android应用程序。
所需组件
硬件:
- Arduino UNO
- nRF24L01 BLE模块
- DHT11温湿度传感器
- 跳线
软件:
- Arduino IDE
- Nordic BLE Android应用程序(适用于BLE的nRF Temp 2.0或适用于移动设备的nRF Connect)
从nRF24L01模块开始
nRF24L01模块是收发器模块,这意味着每个模块都可以发送和接收数据,但是由于它们是半双工的,因此可以一次发送或接收数据。该模块具有来自北欧半导体的通用nRF24L01 IC,负责数据的发送和接收。该IC使用SPI协议进行通信,因此可以轻松地与任何微控制器接口。由于库很容易获得,因此使用Arduino变得容易得多。我们已经在Arduino上使用了nRF24L01模块来创建聊天室并无线控制伺服电机。
标准nRF24L01模块的引脚排列如下所示:
该模块的工作电压范围为1.9V至3.6V(通常为3.3V),在正常操作期间仅消耗12mA的电流,这使其具有电池效率,因此甚至可以在纽扣电池上运行。即使工作电压为3.3V,大多数引脚还是可以承受5V电压,因此可以直接与Arduino等5V微控制器接口。使用这些模块的另一个优点是,每个模块都有6条管道。这意味着,每个模块可以与其他6个模块通信以发送或接收数据。这使该模块适合在IoT应用程序中创建星形或网状网络。而且它们具有125个唯一ID的宽地址范围,因此在封闭区域中,我们可以使用125个这些模块而不会互相干扰。
Arduino的
将nRF24L01与Arduino接口以实现BLE通信
nRF24L01在SPI上工作,因此接口将使用SPI协议。将 完整的代码和视频将在本教程的最后进行安装。视频中还介绍了Android应用指南。在此,nRF24L01模块用于与Nordic的Smartphone应用程序进行通信 。首先包括所需的库。该库包括用于访问nRF24L01命令的RF24,用于访问DHT11命令的DHT11库以及用于使用BLE功能的BTLE库。
#包括
定义并初始化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。
Serial.begin(9600); dht.begin(); btle.begin(“ CD Temp”);
读取循环上的温度,并将其保存到float变量 temp 。如果DHT断电或发生任何意外情况,请添加一条调试行以显示错误消息。
float temp = dht.readTemperature(); //读取温度数据 if(isnan(h)-isnan(t)){ Serial.println(F(“无法从DHT传感器读取!”)); 返回; }
将值保存到Buffer并将其解析到BLE模块。还将温度值发送到BLE模块。BLE模块将发布温度数据。android应用程序可以搜索BLE模块并接收传感器数据。
nrf_service_data buf; buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID; buf.value = BTLE:: to_nRF_Float(temp); 如果(!btle.advertise(0x16,&buf,sizeof(buf))){ Serial.println(“ BTLE失败..!”); }
完成后,只需跳到下一个频道。
btle.hopChannel();
由于DHT传感器文档建议一次读取后至少保留2秒的延迟,因此请增加2秒的延迟。
delay(2000);
上载并将智能手机与nRF模块配对后,您将开始在BLE android应用程序的nRF Temp 2.0上获取值,如下所示。视频中还介绍了在Android应用上配对和获取数据的完整过程:
至此,完成了使用BLE nRF24L01将传感器数据发布到Nordic Android App的完整教程。如果您发现任何困难,请在下面发表评论或写信给我们的论坛。要探索有关nRF24L02的更多信息,您还可以尝试使用Arduino,nRF24L01和Processing创建一个私人聊天室。