Arduino 使用NRF24L01+通信

该博客介绍了如何使用Arduino和NRF24L01无线通信模块进行数据传输。通过修改网上找到的代码,实现了串口数据的无线收发。博主详细讲解了NRF24L01的引脚功能,并提供了初始化配置和中断设置。此外,还分享了用于驱动NRF24L01的库文件下载链接,帮助读者快速上手无线通信项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Arduino 本意为开源 开放,有很多的库,但是参差不齐,这个24L01+换了很多的库 都nm不行,真是无语,在网上找了一段程序 改了下,终于可以简单通信了

记录下:

CE: 模块控制线,CSN为低时,CE协同CONFIG寄存器共同决定NRF24L01状态
CSN: SPI片选线
SCK: SPI时钟线
MOSI:SPI数据线(主机输出从机输入)
MISO:SPI数据线(主机输入从机输出)
IRQ: 中断信号线。中断时变为低电平,在以下三种情况变低:Tx FIFO发完并且收到ACK(使能ACK情况下)、Rx FIFO收到数据、达到最大重发次数

这里中断可用可不用,Arduino UNO才放了2个中断口,这种业余的MCU查询也不误事

这种无线通信模块通常都是绑定地址,固定信道,调频什么的,固定套路,这里找了一个模拟SPI的驱动,经简单验证可以收发

附上代码:
这里从串口收到数据,用NRF发送出去,另一端的2.4g接受后串口打出来,都是裸数据,无协议

TX


#include "NRF24L01.h"
String comdata = "";//字符串函数
#define TX_NAME  "32899"



/* 声明nRF24L01 */
nRF24L01 nrf24;

/* 建立发送数据缓存,初始化为0 */
char buf[12] = {0};

void setup() {
	Serial.begin(9600);
    /* 初始化 nrf24 */         
	nrf24.init();
    /* 配置数据宽度 */
    nrf24.payload = 10;
    /* 配置地址 */
	nrf24.setTADDR(TX_NAME);
    /* 写入配置 */
	nrf24.config();

}

void loop() {
    recv_uart_cmd();
    if (comdata.length() > 0)//如果comdata有数据
    {
      //Serial.println(comdata);//打印comdata数据
      strcpy(buf, comdata.c_str());
      Serial.println(buf);//打印comdata数据
      comdata = "";
      nrf24.send(buf);
      
    }
}

void recv_uart_cmd(void)
{
  if (Serial.available() > 0)//判读是否串口有数据
  {
    comdata = "";//缓存清零
    while (Serial.available() > 0)//循环串口是否有数据
    {
      comdata += char(Serial.read());//叠加数据到comdata
      delay(2);//延时等待响应
    }
    //if (comdata.length() > 0)//如果comdata有数据
    //{
    //  Serial.println(comdata);//打印comdata数据
    //}
  }
}

RX :

#include "NRF24L01.h"


#define RX_NAME  "32899"

/* 声明nRF24L01 */
nRF24L01 nrf24;

/* 建立接收数据缓存,初始化为0 */
char buf[15];
int  recv_cmd = 0;

void setup() {
  Serial.begin(9600);
  nrf24.init();
  nrf24.payload = 10;
  nrf24.setRADDR(RX_NAME);
  nrf24.config();
  /* 设定中断 */
  //attachInterrupt(0, readData, LOW) ;
}

void loop() {

  readData ();

}

void readData (void)
{
  if (nrf24.dataReady())
  {
    //Serial.println("Receiving the data!");
    nrf24.getData(buf);
    Serial.print("Data -> ");
    //Serial.print(buf);
    recv_cmd = atoi(buf);
    Serial.print(recv_cmd);
    Serial.println(" ");

  }
}

最后最重要的是要有 驱动的库支持
这个文件夹放到Arduino 安装文件夹下就可,关于引脚的定义在
NRF24L01.中

/* 中断状态 */
#define RX_IRQ		11
#define TX_IRQ		22
#define MAX_RT_IRQ	33

/* 默认端口号 */
#define CE       8   // CE_BIT:   Digital Input     Chip Enable Activates RX or TX mode
#define CSN      10   // CSN BIT:  Digital Input     SPI Chip Select
#define SCK      13  // SCK BIT:  Digital Input     SPI Clock
#define MOSI     11  // MOSI BIT: Digital Input     SPI Slave Data Input
#define MISO     12  // MISO BIT: Digital Output    SPI Slave Data Output, with tri-state option

在这里插入图片描述
Examples里面就是TX RX的Arduino程序,可以直接使用

最后附上库的下载链接:

https://download.csdn.net/download/weixin_39369053/19619997

click here
over

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值