NRF24树莓派和arduino通信

计划做一个浇花系统,树莓派做主控,uno作为节点进行数据采集和控制,两者之间采用nrf24的2.4G来通信。

uno上很快就上手了,推荐TMRh20的RF24.h库,非常完毕,而且例子也不错,可以乒乓发信

树莓派遇到难点,原计划用python来写,这样调用数据库,还有后面用AI库也更方便。

但是网上搜了下教程很少,大多数直接用访问设备文件的方式来做,python即使调用,也肯定要用设备文件,所以先试试C方法。

TMRh20是个好东西,不仅有UNO的,下面的文件夹还有py和C的,核心其实还是C函数。

大神主页地址如下

http://tmrh20.github.io/RF24/index.html

先用wget将项目下下来,git地址

https://github.com/TMRh20/RF24.git

然后cd到RF24文件夹下,使用如下命令进行编译

./configure --driver=SPIDEV

然后安装SPI模块

sudo make install -B

网上有一步修改/etc/modprobe.d/raspi-blacklist.conf,如果其中存在blacklist spi-bcm2708,将其注释。我的没有,我用的4B+,比较新,可能以前老的系统有相应的内容。

修改/etc/modules文件,在其中追加一行,开启SPI。我的里面本身有I2C-dev,本来我改成spi-dev,但是想了下怕源文件调用设备文件如果没有中间的“-”,到时候又报些莫名其妙的错误,所以还是将就原文。

spidev

另外还可以用rasp-config来图形配置,我也配置了,怕一会出错又去解决开机默认启动之类的问题。

最后重启,/dev下会新增spidev0.0和spidev0.1两个设备文件。

这里是分界线,如果没有两个设备文件,则不用进行下面的了,设备文件是调用的关键。


开始准备执行文件。

cd 到RF24的examples_linux文件夹

查看gettingstarted.cpp文件(网上资料是大写,但是目前作者是小写,所以不能光复制,看看真正的文件名)

里面其他都可以不改,下面这两行最关键

RF24 radio(22, 0);

bool radioNumber = 1;

第一行是设置SPI的CE脚,CS脚,22对应的是树莓派管脚的BCM编码,我的接是GPIO.6也就是BCM是25的脚,所以要改这个地方。0对应的是树莓派的CS脚,树莓派只有CS0和CS1两组SPI,而NRF24的CS连到树莓派CS0的话,这里就是0,如果连CS1的话,这里就应该改为1。可以参考大神的解释,要多读几遍就能懂。。

第二行是用来定义收发两端的,作者用0/1来互斥两个地址,所以用树莓派和UNO通信的话,一个为0则另一个代码就得改成1。TMRh20的例子都是1,所以这地方必须改。我改的UNO端,因为树莓派要make编译,所以偷个懒,改UNO更方便。

然后在当前目录下sudo make,如果报红字,则需要改gettingstarted.cpp对应的行,如果不知道make。。。那还是先用UNO耍着,这个坑要填的话要费点神。我用make的时候报gettingstarted_call_response.cpp引用了pi3的处理器没定义,所以改了下makefile,把其他几个例子都注释了,只留一个gettingstarted.cpp来make。

最后以下命令来执行程序

sudo ./gettingstarted

出现命令行,选0/1对应收发,和UNO上R/T是一个道理,都可以试试。

最后UNO上如下图

树莓派上出现如下图

完美


昨天调了arduino的UNO和NANO的通信,大概10包就出现丢包,原因是发送端没发出去。

但是和树莓派就不会,看回环时间差不多,昨天以为是功率问题,还提高了功率,而且让两个nrf24脸对脸都不行。。。现在看来可能是UNO 16M的主频用loop方式发数据,发完等NANO返回回来,NANO的时间也要ms级处理时间,所以RF.avaliable老是占用着,所以发送失败。而4B基础1.5G的主频,完全是秒收秒发,UNO端也不会出现被占用的情况了。

贴个实物接线图

                        4B+                                                                                                        UNO

                                


补充一个树莓派接线图(借用如有不妥联系撤下),需要说明的是几代树莓派硬件管脚基本兼容,而这个图是面向树莓派,USB口向下,右上方插针对应的管脚图。上面RF的程序里面要设置的引脚号,是BCM编码。而接线用的,是灰色的那两列。这个有必要慢慢接,接完检查下,免得烧机。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值