找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-17 13:18 编辑

第42课 NRF24L01 2.4G无线模块的使用


目标

利用NRF24L01 2.4G无线模块进行数据的传输

实验材料

Arduino UNO开发板*2
NRF24L01 2.4G无线模块*2
配套USB数据线*2
配套杜邦线若干
Arduino IDE软件

微信图片_20200712091340.png

内容

利用NRF24L01 2.4G无线模块进行数据的传输,在一块Arduino UNO 上发送“Hello World”,在另一块Arduino UNO 上接收“Hello World”。

接线图

图片2.png

接线方式

Arduino UNO    <------>     NRF24L01 2.4G无线模块
           3.3V        <------>            VCC
          GND        <------>            GND
             8           <------>            CSN
             7           <------>             CE  
           13           <------>            SCK
           11           <------>           MOSI
           12           <------>            MISO

需要用到NRF24L01 2.4G无线模块的第三方库文件,文件名为“RF24-master”。
提取码:j6y6

下载后安装库文件

文件下载后无需解压,点击Arduino IDE菜单栏项目—加载库—添加.ZIP库...

微信图片_20200712091514.png

选择RF24-master文件

微信图片_20200712091612.png

程序实现代码

发送端程序 Sender.ino

  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
  6. void setup() {
  7.   radio.begin();    //初始化radio对象
  8.   radio.openWritingPipe(address);  //使用radio.openWritingPipe()函数设置的发送机地址
  9.   radio.setPALevel(RF24_PA_MIN);  //设置功率放大器级别,将其设置为最小值
  10.   radio.stopListening();  // 使用radio.stopListening()函数将模块设置为发送机
  11. }
  12. void loop() {
  13.   const char text[] = "Hello World";  //创建一个字符数组,并为其分配消息”Hello World”
  14.   radio.write(&text, sizeof(text)); //使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
  15. // sizeof(text))设置了我们要从text变量中获取的字节数
  16.   delay(1000);  //延迟等待1秒
  17. }
复制代码

接收端程序 Receiver.ino

  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
  6. void setup() {
  7.   Serial.begin(9600);
  8.   radio.begin();   //初始化radio对象
  9.   radio.openReadingPipe(0, address);   //使用radio.openReadingPipe()函数设置的接收机地址
  10.   radio.setPALevel(RF24_PA_MIN);   //设置功率放大器级别,将其设置为最小值
  11.   radio.startListening();    // 使用radio..startListening()将模块设置为接收机
  12. }
  13. void loop() {
  14.   if (radio.available()) {  //判断是否有要接收的数据
  15.     char text[32] = "";   //创建一个由32个元素组成的数组
  16.     radio.read(&text, sizeof(text));  //读取数据,并将其存储到text变量中
  17.     Serial.println(text);  //打印变量text的数据,即接收到的数据
  18.     delay(1000);  //延迟等待1秒
  19.   }
  20. }
复制代码

程序上传后点击接收方的串口监视器进行查看,每隔1秒出现“Hello World”字样

微信图片_20200712091707.png

const常量

const关键字代表常量 (Constant)。它用于修改变量性质,使其变为只读状态。常量可以像任何相同类型的其他变量一样使用,但不能改变其数值。也就是说,常量的数值在建立时一旦确定以后,如果在后续的程序中尝试改变常量数值,那么程序编译时将会报错。
const关键字定义的常量与其他变量遵守相同的规则。由于使用#define定义常量具有缺陷 ,所以用 const 关键字定义常量更加好一些。

示例

  1. const float pi = 3.14;
  2. float x;
  3. void setup()
  4. {
  5.    x = pi * 2;    // 常量可用于数学运算
  6.    pi = 7;        // 注意!常量数值不能改变。这句程序将报错。
  7. }
  8. void loop()
  9. {
  10. }
复制代码

#DEFINE 或 CONST

您可以使用 const 或 #define 创建数字或字符串常量。但要创建arrays数组常量,只能使用const定义。

byte(字节)

byte类型变量可存储8位无符号数,其存储数值范围是 0 – 255。
byte类型变量在控制LED时显得格外有用,因为Arduino控制LED亮度或色彩时常常使用的数值是在0-255之间。

示例程序

  1. byte b;  //创建byte类型变量b
  2. void setup() {
  3. Serial.begin(9600);
  4. }
  5. void loop() {
  6. b++;
  7. Serial.print("b = ");
  8. Serial.println(b);
  9. delay(100);
  10. }
复制代码
变量b的数值会从0开始逐1递增b的数值达到255时,当变量b再次执行b++操作后,变量b的数值将会复位到0,然后再次逐1递增程序将会依次往复循环。

打开串口监视器,查看结果

微信图片_20200712091823.png

指针运算符:

& 取地址运算符: 它返回其操作数(即一个变量)在内存中的实际地址。
C语言中提供了地址运算符&来获取变量的地址,其一般形式为:
&变量名;
假设有整数型变量a,那么&a表示变量a的地址。再假设我们还有一个指向整型变量的指针变量p,如要把变量a的地址赋予指针变量p可以用以下方式。
int a; //建立整数型变量a
int* p; //建立整数指针变量p
p=&a; //将变量a的地址赋予指针变量p
分享至 : QQ空间
收藏

0 个回复

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