风筝
发表于: 2019-5-27 17:23:14 | 显示全部楼层

蓝牙低功耗(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-Wireless-Transceiver-Module.jpg


本文将介绍如何将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模块的引脚排列如下所示:

nRF24L01-RF-Module.png


该模块具有1.9V至3.6V(通常为3.3V)的工作电压,在正常工作期间仅消耗12mA的电流,这使其具有电池效率,因此甚至可以在纽扣电池上运行。即使工作电压为3.3V,大多数引脚都具有5V容限,因此可以直接与Arduino等5V微控制器连接。使用这些模块的另一个优点是,每个模块有6个管道。意思是,每个模块可以与其他6个模块通信以传输或接收数据。这使得该模块适用于在物联网应用中创建星形或网状网络。它们还具有125个唯一ID的广泛地址范围,因此在封闭区域中,我们可以使用这些模块中的125个而不会相互干扰。


Arduino NRF24L01模块电路图

Circuit-Diagram-for-Interfacing-nRF24L01-with-Arduino-for-BLE-Communication.png

Circuit-Hardware-for-Interfacing-nRF24L01-with-Arduino-for-BLE-Communication.jpg


将nRF24L01与Arduino连接以进行BLE通信

nRF24L01适用于SPI,因此接口将使用SPI协议。这里使用nRF24L01模块与Nordic的Smartphone App进行通信。


首先包括所需的库。该库包括用于访问nRF24L01命令的RF24,用于访问DHT11命令的DHT11库和用于使用BLE功能的BTLE库。

  1. #include <SPI.h>
  2. #include <RF24.h>
  3. #include <BTLE.h>
  4. #include <DHT.h>
复制代码

定义并初始化DHT11和BLE模块的引脚和功能。由于我们使用的是DHT11,因此DHT类型初始化为DHT11。 DHT连接到GPIO引脚4,nRF模块的CE和CSN引脚分别连接到引脚9和10。

  1. #define DHTPIN
  2. #define DHTTYPE DHT11                  
  3. DHT22
  4. DHT dht(DHTPIN, DHTTYPE);
  5. RF24 radio(9, 10);
  6. BTLE btle(&radio);
复制代码

串口波特率设置为9600,打开串口。然后启动DHT传感器并使用蓝牙本地名称启动BTLE,最多8个字符。

  1. Serial.begin(9600);
  2. dht.begin();   
  3. btle.begin("CD Temp");   
复制代码

无限循环读取温度并将其保存到浮点变量温度。如果DHT断电或发生任何意外情况,请添加调试行以显示错误消息。

  1.   float temp = dht.readTemperature();   //read temperature data
  2.   if (isnan(h) || isnan(t)) {                                                
  3.     Serial.println(F("Failed to read from DHT sensor!"));
  4.     return;
  5.   }
复制代码

将值保存到Buffer并将其解析为BLE模块。同时将温度值发送到BLE模块。 BLE模块将公布温度数据。 Android应用程序可以搜索BLE模块并接收传感器数据。

  1. nrf_service_data buf;
  2.   buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID;
  3.   buf.value = BTLE::to_nRF_Float(temp);

  4.   if (!btle.advertise(0x16, &buf, sizeof(buf))) {
  5.     Serial.println("BTLE advertisement failed..!");
  6.   }
复制代码

完成后,只需跳到下一个通道即可。

  1.   btle.hopChannel();
复制代码

由于DHT传感器文档建议在一次读取后保持至少2秒的延迟,因此添加2秒的延迟。

  1. delay(2000);
复制代码

在上传智能手机并将智能手机与nRF模块配对后,您将可以在nRF Temp 2.0 for BLE android应用程序上得到这些值,如下所示:

Getting-Data-on-Android-App-using-NRF24L01-and-Arduino.png


以上就是使用BLE nRF24L01向Nordic安卓应用程序发送传感器数据的全部内容。如果您有任何问题,请在本帖下面进行回复。


代码

本文使用的完整代码如下所示: main.rar (1011 Bytes, 下载次数: 156)

跳转到指定楼层
阿卡不卡
发表于: 2020-1-2 13:48:05 | 显示全部楼层

exit status 1
'h' was not declared in this scope
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-25 09:59 , Processed in 0.037095 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表