
前段时间我在做低功耗蓝牙的时候看到了这个网页
https://wiki.bitcraze.io/misc:hacks:hackrf
但是我当时没有成功解调nrf24l01,反而成功搞定蓝牙了。
后来我用了我自己新买的小四轴也没解调成功,所以我打算老老实实地重现那个网页上的步骤。
正好我以前买过crazyflie的产品(小四轴和crazyradio模块),我就找出了这个crazyradio模块来重复实验。
期间我还看到了几个好的资源。
https://www.bitcraze.io/2015/06/sniffing-crazyflies-radio-with-hackrf-blue/
这个也是同一网站的相关内容,但是更详细。
http://blog.cyberexplorer.me/2014/01/sniffing-and-decoding-nrf24l01-and.html
这是nrf24l01和btle的解码程序作者的文章。从这篇文章,我发现nrf24l01解码程序的输入必须是2M的数据。
然后根据nrf24l01的发射机硬件选择的速率模式来决定降采样率。如果nrf24l01设置的速度是2M那么降采样率就是1,如果是1M那么降采样率是2,如果是256K那么降采样率就是8。这个值不能自动判断,需要根据发射机事先指定好。
另外在实验过程中,我还发现一个坑。gnuradio流图输出的fifo,在每次实验前都需要清空再新建,否则里面的数据就是老的。无法以此来判断是否准确解码。
我的开发计划分为4步:
1.重复实验crazyflie网页上的步骤,使用crazyradio来发射,然后用gnuradio流图来做fm解调输出给fifo,再用nrf解码程序来解码。
2.合并gnuradio的fm解调程序和nrf解码程序,这样在电脑上用一个单独的程序就能解调crazyradio发射的数据了。
3.把这个独立的程序搬到portapack里,解调crazyradio的数据。
4.用portapack去解调小四轴的遥控器指令。
目前我第一步已经实现了。
首先,我下载了crazyflie的库,这样就能用python语言来控制它,并发出自己想要的数据。
https://github.com/bitcraze/crazyradio-firmware
不用编译安装,但是需要安装一些依赖
sudo apt install python-usb
然后到lib下,可以看到crazyradio.py,这就是我们自己写的Python程序要调用的库了。
然后在同一个文件夹下新建我们自己的python程序try.py
from crazyradio import Crazyradio
import time
cr = Crazyradio()
cr.set_channel(26)
cr.set_data_rate(cr.DR_250KPS)
while True:
cr.send_packet((0,1,2,3,4))
time.sleep(0.1)
然后运行
sudo python try.py
这样就开始发射了。
接下来画一个流图

如果你不想自己画可以下载下面的流图,不过它的参数和我不太一样,你要把参数改成和我一样的。
https://wiki.bitcraze.io/_media/misc:hacks:nrf24_demod.grc.zip
再然后就可以参照我以前的文章,编译NRF24-BTLE-Decoder程序,就是我前面说的nrf解码程序。
搞定以后的运行顺序是:
sudo rm /tmp/fifo
mkfifo /tmp/fifo
然后运行gnuradio流图
cat /tmp/fifo | ./nrf24-btle-decoder -d 8
这样你就能看到终端里的这样的输出了

你可以看到大多数数据

本文详细介绍了解调CrazyRadio模块发射的NRF24L01信号的过程,包括使用gnuradio进行FM解调、编写Python程序控制CrazyRadio发送数据、合并解调和解码程序、以及在Portapack中实现解调等功能。通过一系列实验步骤,成功实现了对小四轴遥控器指令的解调。
最低0.47元/天 解锁文章
1116

被折叠的 条评论
为什么被折叠?



