nRF24L01 + ArdunioUno + NodeMCU(ESP8266) 实现 无线通讯的Hello World (点灯仪式),字符串传输

nRF24L01 + ArdunioUno + NodeMCU(ESP8266) 实现 无线通讯的Hello World

本文中 ArdunioUno 作为无线信号的发送者,NodeMCU作为无线信号的接受者.
实现效果: NodeMCU接收到指令并控制LED

引脚定义

nRF24L01 模块引脚

nRF24L01 模块引脚

ArdunioUno模块引脚

ArdunioUno模块引脚
引脚说明
ArdunioUno模块引脚详细说明

我还准备了官方的详细文档,可以点击 这里 进行查看

NodeMCU模块引脚

NodeMCU模块引脚
引脚定义
NodeMcu引脚定义

动手环节

经过对 nRF24L01 模块引脚的定义与识别,我们获取到如下关键信息
nRF24L01 一共 8个引脚, 但是我们在这个Demo中只需要用到启用7个.
而其中7个引脚只有2个是引脚是可以任意连接的,其余都是固定的
所以对我们来说,只用注意2个引脚的连接即可

nRF24L01 固定连接 ( 5个引脚 )

注意,这里ArdunioUno和NodeMcu都是一样的连接方法, 注意看图即可

  • <1号引脚> 接 单片机的 GND     [ArdunioUno: PIN05, NodeMcu: PIN10]
  • <2号引脚> 接 单片机的 3.3V      [ArdunioUno: PIN04, NodeMcu: PIN11]
  • <5号引脚> 接 单片机的 SCK      [ArdunioUno: PIN14, NodeMcu: PIN09]
  • <6号引脚> 接 单片机的 MOSI    [ArdunioUno: PIN12, NodeMcu: PIN06]
  • <7号引脚> 接 单片机的 MISO    [ArdunioUno: PIN13, NodeMcu: PIN08]

nRF24L01 自定义连接 ( 2个引脚 )

注意,这里ArdunioUno和NodeMcu都是随意选择一个IO引脚即可, 我采用的引脚如下

  • <3号引脚> CE     [ArdunioUno: PIN09, NodeMcu: D2]
  • <4号引脚> CSN   [ArdunioUno: PIN10, NodeMcu: D4]

连接好后,如图所示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码

ArdunioUno 发送者代码
每300毫秒 输入一次1 和 0

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

// CE, CSN     
RF24 radio(9, 10);    
// 地址 (需要和接收端保持一致)
const byte address[6] = "00001";  

const boolean open = HIGH;
const boolean close = LOW;

void setup() {
  radio.begin();                  
  radio.openWritingPipe(address); 
  radio.setPALevel(RF24_PA_MIN); 
  radio.stopListening();         
}

void loop(){
  radio.write(&open, sizeof(open));  
  delay(300);
  radio.write(&close, sizeof(close));  
  delay(300);
}

NodeMcu 接受者代码
每5毫秒检测一次是否有输出,并尝试点灯
这里需要注意, 我接了一个LED在D8

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

// CE, CSN     
RF24 radio(D2, D4);    
// 地址 (需要和接收端保持一致)
const byte address[6] = "00001";  
// 需要点亮的LED引脚
const int led_pin = D8;

boolean state = LOW;

void setup() {
  pinMode(led_pin, OUTPUT);
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);   
  radio.setPALevel(RF24_PA_MIN);       
  radio.startListening();             
}
void loop(){
  // 监听是否有数据传入
  if (radio.available()){
    radio.read(&state, sizeof(state));
    Serial.println(state);
    digitalWrite(led_pin, state);
  }
  delay(5);
}

烧录后 NodeMcu的D8引脚就会每300毫秒接收到一个信号, 用于控制D8引脚的高低点平

效果展示

客户端idea串口控制台输出如下:
在这里插入图片描述
在这里插入图片描述

###演示视频

nRF24L01 点灯视频


传输字符串的代码

ArdunioUno 发送者代码
分别输出英文和中文的示例

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

// CE, CSN     
RF24 radio(9, 10);    
// 地址 (需要和接收端保持一致)
const byte address[6] = "00001";  


const char open[] = "1asdasdasd123123";
const char close[] = "你好a";

void setup() {
  Serial.begin(9600);
  radio.begin();      
  radio.setChannel(115); //设置无线电信道
  radio.setPALevel(RF24_PA_MAX); //设置功率级别为最大
  radio.setDataRate(RF24_250KBPS); //设置数据速率为250kbps
  radio.setAutoAck(1); //设置自动确认
  radio.enableDynamicPayloads(); //启用动态负载
  radio.setRetries(15, 15); //设置重试次数和间隔            
  radio.openWritingPipe(address); 
  radio.setPALevel(RF24_PA_MIN); 
  radio.stopListening();         
}

void loop(){
  radio.write(&open, sizeof(open));  
  Serial.println(open);
  delay(1000);
  radio.write(&close, sizeof(close));  
  Serial.println(close);
  delay(300);
}

NodeMcu 接受者代码
每5毫秒检测一次是否有输出,并尝打印在控制台

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

// CE, CSN     
RF24 radio(D2, D4);    

// 地址 (需要和接收端保持一致)
const byte address[6] = "00001";  
char message[32]; // 接收到的消息

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(115); //设置无线电信道
  radio.setPALevel(RF24_PA_MAX); //设置功率级别为最大
  radio.setDataRate(RF24_250KBPS); //设置数据速率为250kbps
  radio.setAutoAck(1); //设置自动确认
  radio.enableDynamicPayloads(); //启用动态负载
  radio.setRetries(15, 15); //设置重试次数和间隔
  radio.openReadingPipe(1, address); //打开管道1,使用地址“1Node”
  radio.startListening(); //开始监听
}
void loop(){
  // 监听是否有数据传入
  if (radio.available()){
    radio.read(&message, sizeof(message));
    Serial.println(message);
  }

  delay(5);
}

本文借鉴与参考了下面两篇文章

参考资料: ArdunioUno
参考资料: NodeMCU

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java小庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值