文章目录

  • 前言
  • 方案
  • 工程
  • 选择芯片
  • 移植程序与F0系列相关资料和例程
  • 转接配置
  • 程序


前言

想使用Openmv实现与单片机远程无线传输,但是直接用HC05蓝牙个人觉得有很多不如意,而工业级别的NRF24L01与之相较而言有不少优势:

NRF24L01

HC-05/HC-06

稳定

短距离内稳定

传输数据距离1100m

传输距离在空旷处10m

SPI接口

串口



优势太多仅作列举,其实我只是想节约一下接收端单片机的串口,而NRF24L01使用SPI传输,因此写了一个使用NRF实现Openmv和STM32单片机无线传输的工程。
如有错误,欢迎指正,相互交流,共同进步!

方案

  1. 直接在Openmv上通过SPI接口连接:
  • Openmv的IO口极其珍贵,而一块NRF24L01拥有8个引脚:
    也就是说,如果直接连接NRF24L01,那么Openmv可以用的IO口仅剩三四个,此时如果使用openmv同时做别的工程,可能引脚就会出现不够用的情况;
  • 如果直接连接NRF24L01,需要自己写Openmv部分的底层【虽然不是很麻烦,但是个人感觉使用python写底层,会很浪费程序运行时间】;
  1. 使用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发送程序