文章目录
- 前言
- 方案
- 工程
- 选择芯片
- 移植程序与F0系列相关资料和例程
- 转接配置
- 程序
前言
想使用Openmv实现与单片机远程无线传输,但是直接用HC05蓝牙个人觉得有很多不如意,而工业级别的NRF24L01与之相较而言有不少优势:
NRF24L01 | HC-05/HC-06 |
稳定 | 短距离内稳定 |
传输数据距离1100m | 传输距离在空旷处10m |
SPI接口 | 串口 |
… | … |
优势太多仅作列举,其实我只是想节约一下接收端单片机的串口,而NRF24L01使用SPI传输,因此写了一个使用NRF实现Openmv和STM32单片机无线传输的工程。
如有错误,欢迎指正,相互交流,共同进步!
方案
- 直接在Openmv上通过SPI接口连接:
- Openmv的IO口极其珍贵,而一块NRF24L01拥有8个引脚:
也就是说,如果直接连接NRF24L01,那么Openmv可以用的IO口仅剩三四个,此时如果使用openmv同时做别的工程,可能引脚就会出现不够用的情况; - 如果直接连接NRF24L01,需要自己写Openmv部分的底层【虽然不是很麻烦,但是个人感觉使用python写底层,会很浪费程序运行时间】;
- 使用Openmv串口发送,再使用一块核心板串口接收并通过SPI接口连接NRF24L01发送接收到的信息:
- openmv只需要编写串口收发程序,且仅需要2个串口IO口;
例程可在此下载openmv识别特定颜色且打印坐标到串口 - STM32的NRF24L01的例程很多,可以移植程序,省时省力省心;
- 节约Openmv的程序运行时间,避免拖慢速度
工程
选择芯片
为了节约,我使用的STM32F0超值系列的STM32F030F4P6,这块核心板仅20个IO,体态轻盈又能满足需求,个人想直接放在Openmv背面,看都看不见也不会影响
移植程序与F0系列相关资料和例程
之前用过STM32F1和F4系列,由于F1是M3内核,而F0是M0内核,所以正点原子哥的程序不能直接照搬,自己写了好久,写完之后,大佬发给了我一份他的例程……【自闭】
不过在写这个程序的时候发现各有长短,这两份例程结合起来倒是十分管用,另外还找到了一份F1移植到F0上的“秘籍”,两份例程与这份文档我会合在一起上传,有需要的可以点此下载STM32F0例程库【两份】和F1移植到F0的资料
转接配置
- openmv部分直接使用串口收发
- STM32F030F4P6相当于一个转接的桥,使用串口接收来自Openmv的信息
- STMF030F4P6使用SPI连接NRF24L01,并将接收到的信息发送出去
- 另一端接受设备(可以是STM32的任何系列)需要连接NRF24L01,配置成接收端无线接收数据
程序
STM32F0串口转NRF发送程序