本帖最后由 lxf 于 2020-8-17 13:18 编辑
第43课 NRF24L01 2.4G无线模块 之按钮点亮LED灯
目标
利用NRF24L01 2.4G无线模块,按钮远程控制点亮LED灯
实验材料
Arduino UNO开发板*2 NRF24L01 2.4G无线模块*2 LED发光模块 按钮开关模块 配套USB数据线*2 配套杜邦线若干 Arduino IDE软件
内容
利用NRF24L01 2.4G无线模块,在一块Arduino UNO主板上按下按钮,另一块Arduino UNO主板上的LED灯被点亮5秒,5秒后再次熄灭。
接线图
接线方式
Arduino UNO1 <------> NRF24L01 2.4G无线模块1 3.3V <------> VCC GND <------> GND 8 <------> CSN 7 <------> CE 13 <------> SCK 11 <------> MOSI 12 <------> MISO Arduino UNO2 <------> NRF24L01 2.4G无线模块2 3.3V <------> VCC GND <------> GND 8 <------> CSN 7 <------> CE 13 <------> SCK 11 <------> MOSI 12 <------> MISO Arduino UNO2 <------> 按钮开关模块 5V <------> VCC GND <------> GND 2 <------> OUT Arduino UNO1 <------> LED发光模块 5V <------> VCC GND <------> GND 4 <------> IN
程序实现代码
发送端程序 Sender.ino
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h> //NRF24L01 2.4G无线模块的库文件
- RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
- const byte address[6] = "00001"; //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
- void setup() {
- pinMode(2, INPUT); //初始化2号引脚为输入
- radio.begin(); //初始化radio对象
- radio.openWritingPipe(address); //使用radio.openWritingPipe()函数设置的发送机地址
- radio.setPALevel(RF24_PA_MIN); //设置功率放大器级别,将其设置为最小值
- radio.stopListening(); // 使用radio.stopListening()函数将模块设置为发送机
- }
- void loop() {
- if (digitalRead(2) == 1){ //如果2号引脚为高电平,即按钮被按下
- const char text= 'a'; //创建一个字符数组,并为其分配消息a
- radio.write(&text, sizeof(text)); //使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
- // sizeof(text))设置了我们要从text变量中获取的字节数
- delay(1000); //延迟等待1秒
- }
- }
复制代码
接收端程序 Receiver.ino
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h> //NRF24L01 2.4G无线模块的库文件
- RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
- const byte address[6] = "00001"; //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
- void setup() {
- pinMode(4, OUTPUT); //初始化4号引脚为输出
- Serial.begin(9600);
- radio.begin(); //初始化radio对象
- radio.openReadingPipe(0, address); //使用radio.openReadingPipe()函数设置的接收机地址
- radio.setPALevel(RF24_PA_MIN); //设置功率放大器级别,将其设置为最小值
- radio.startListening(); // 使用radio..startListening()将模块设置为接收机
- }
- void loop() {
- if (radio.available()) { //判断是否有要接收的数据
- char text = 0; //创建一个空的字符变量text
- radio.read(&text, sizeof(text)); //读取数据,并将其存储到text变量中
- Serial.println(text); //打印变量text的数据,即接收到的数据
- delay(1000); //延迟等待1秒
- if (text == 'a') { //如果接收到的数据是a,那么LED被点亮5秒,5秒后熄灭
- digitalWrite(4,HIGH);
- delay(5000);
- digitalWrite(4,LOW);
- } else {
- digitalWrite(4,LOW);
- }
- }
- }
复制代码 |