nRF24L01通信
1. nRF24L01通信简介
(1)nRF24L01通信经历
先说说小菜鸟蛋疼调试模块的经历吧~有可能某些人觉得没有必要写这篇文章,因为Arduino作为开源硬件,本身容易上手例程也很多,直接跑就可以判断是软件问题还是硬件问题了。如果真的这样简单就没有下文了,因为在我刚刚了解的范围内,我觉得Arduino Uno R3的示例是很充分的,做到前面这一点真的一点问题都没有。但是新增的扩展板在国内其实销量很小,毕竟五花八门的处理器充斥着大大小小的市场,作为Arduino这种除了容易编程加上修改硬件局限性很大的品种来说没什么份额。所以如果觉得仅仅用Uno R3就够了,只是have fun一下就够了,那Arduino对你来说局限性确实很大~Mega板前几天刚到,这么便宜的板子收到自己都感动了。不过本人像死人一样守在屏幕前等结果,想想就觉得相当惨。
(2) Arduino Uno R3
这个就不想说了,用起来很舒服,就是硬件资源太少了,什么事也干不了,传说中的have fun。
(3)Arduino Mega 2560
我也是刚入手,以后有兼容性的问题再说~
(4)SPI通信
射频模块通信部分,即使不懂也没关系,通信的目的就是用来传递数据。数据才是最重要的。以前读写SD卡时用过这个,现在已经不想记起来了。
2. 接线图
左上图为nRF24L01模块图,左下图为nRF24L01引脚图,中上和右上图为Arduino Uno R3与nRF24L01接线图,中下和右下图为Arduino Mega 2560与nRF24L01接线图。
3. 代码实现
(1)代码来源
进入elecfreaks网站下载nRF24L01模块的示例程序,在此不给出程序内容了,但是要注意nRF24L01的示例代码有两个版本v1.0和v1.1,v1.0适用于Uno R3,v1.1适用于Mega 2560。v1.0的接收端代码烧给Uno R3不需要修改,v1.1的发送端代码烧给Mega 2560编译时依然有问题,所以需要修改。
(2)代码修改部分
Mega 2560的接线和Uno R3一致,Mega 2560的nRF24L01头文件修改如下。同时将nRF24L01_TX中所有的SCK, MOSI, MISO替换成SCK_PIN, MOSI_PIN, MISO_PIN。
(3)实验结果
实验结果和2个Uno R3板通信的结果一致,接收端显示如下:
4. 注意事项
接收端的读取状态包括state=0, state=E, state=FF, state=40等情况。
(1)state=0或FF时:一定是状态寄存器读取失败,检查端口接线和代码的端口映射(宏定义),检查宏定义后的变量是否应用到了通信的函数中(即使编译通过也要注意);
(2)state=40时:出现在发送端先打开,接收端后打开的场合;
(3)state=E时:端口读取有效,为默认值,说明状态寄存器读取没有问题,同时也说明接线和代码版本都没有问题;
(4)state=其他值时:先从(1)开始检查。