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