NRF24L01 的双向通信_nrf24l01怎么配对(1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

u8 Tx_Cnt=0; //发送次数计数
u8 Rx_Cnt=0; //接收次数计数
u8 Mode=1; //Mode为1表示发送模式,0表示接收模式
u8 tmp_buf_Tx[32],tmp_buf_Rx[32]; //发送接收缓冲数组
NRF24L01_TX_Mode();
while(1) //NRF24L01工作在一个无限循环体内
{
if (Mode==1) //发送模式下
{
(NRF24L01_TxPacket(tmp_buf_Tx)TX_OK)
{
Tx_Cnt=0;
Mode=0;
NRF24L01_RX_Mode(); //一旦发送成功则变成接收模式;
}
Tx_Cnt++;
if (Tx_Cnt
Max) //如果连续发送Max次都失败,则切换为接收模式
{
Tx_Cnt=0;
Mode=0;
NRF24L01_RX_Mode();
}
}
else //接收模式下
{
if (NRF24L01_RxPacket(tmp_buf_Rx)0)//一旦接收成功则变成发送模式;
{
Rx_Cnt=0;
Mode=1;
NRF24L01_TX_Mode();
}
Rx_Cnt++;
if (Rx_Cnt
Max)//如果连续接收Max次都失败,则切换为发送模式
{
Rx_Cnt=0;
Mode=1;
NRF24L01_TX_Mode();
}
}
delay_ms(10); //延时大发送接收慢,延时小发送接收快,太小了可能影响通信可靠性;
}


下面是B端的代码



u8 Mode=0; //模式标志设置为0 接收端
NRF24L01_RX_Mode(); //将模式设置为接收模式
while(1) //NRF24L01工作在一个无限循环体内
{
if (Mode==1)
{
/*这里可以更新要发送的数据*/
if (NRF24L01_TxPacket(tmp_buf_Tx)==TX_OK)//发送数据成功
{
Mode=0;//转变为接收模式
NRF24L01_RX_Mode(); //一旦发送成功则变成接收模式;
}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

ip1024c (备注嵌入式)**

如果你需要这些资料,可以戳这里获取

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nrf24l01是一种低功耗无线通信模块,可以用于单片机与单片机之间的双向通信。在使用nrf24l01之前,需要先了解它的一些基本特性和使用方法。 首先,nrf24l01支持2.4GHz的ISM频段,最大通信距离可以达到100米,速率最高可以达到2Mbps。同时,它还支持多路通信,最多可以连接6个设备。 在使用nrf24l01时,需要先将它配置为发送或接收模式,然后设置相应的参数,例如通道号、地址等。接着,可以使用SPI接口向nrf24l01发送数据或接收数据。 下面是一个简单的nrf24l01双向通信的例子,使用的是Atmel公司的AVR单片机: 发送端代码: ``` #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "nrf24l01.h" #define TX_ADDRESS 0xE7E7E7E7E7 #define RX_ADDRESS 0xE7E7E7E7E7 void init_spi(void) { // 初始化SPI接口 } void init_nrf24l01(void) { // 初始化nrf24l01 nrf24l01_init(); nrf24l01_set_rx_address(RX_ADDRESS); nrf24l01_set_tx_address(TX_ADDRESS); nrf24l01_set_channel(2); nrf24l01_set_payload_size(8); nrf24l01_set_data_rate(NRF24L01_DATA_RATE_2MBPS); nrf24l01_set_crc_mode(NRF24L01_CRC_2BYTE); nrf24l01_set_power_level(NRF24L01_POWER_0DBM); nrf24l01_set_rx_mode(); } int main(void) { init_spi(); init_nrf24l01(); while (1) { uint8_t data[8] = {1, 2, 3, 4, 5, 6, 7, 8}; nrf24l01_send(data, 8); _delay_ms(1000); } return 0; } ``` 接收端代码: ``` #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "nrf24l01.h" #define TX_ADDRESS 0xE7E7E7E7E7 #define RX_ADDRESS 0xE7E7E7E7E7 void init_spi(void) { // 初始化SPI接口 } void init_nrf24l01(void) { // 初始化nrf24l01 nrf24l01_init(); nrf24l01_set_rx_address(RX_ADDRESS); nrf24l01_set_tx_address(TX_ADDRESS); nrf24l01_set_channel(2); nrf24l01_set_payload_size(8); nrf24l01_set_data_rate(NRF24L01_DATA_RATE_2MBPS); nrf24l01_set_crc_mode(NRF24L01_CRC_2BYTE); nrf24l01_set_power_level(NRF24L01_POWER_0DBM); nrf24l01_set_rx_mode(); } int main(void) { init_spi(); init_nrf24l01(); while (1) { if (nrf24l01_data_received()) { uint8_t data[8]; nrf24l01_get_data(data, 8); // 处理接收到的数据 } } return 0; } ``` 以上代码只是一个简单的示例,实际应用中需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值