英语 | 中文
本项目是一款基于乐鑫 ESP32-pico-d4 芯片的无线模块,具有多种通信协议接口:UART、SPI。设计初衷是为了方便智能车比赛摄像头算法的调试,通过与上位机配合降低调试难度。
esp32硬件支持5Mbps UART和10Mbps SPI从机
该模块的特点之一是可以兼容珠飞无线串口接口,具有硬件流控功能,可以直接使用珠飞无线串口驱动实现单向通信,省去了车友测试的麻烦这个模块。需要重新打板,目前只支持单向传输到上位机
本项目软硬件比较粗糙,欢迎大家交流并提出改进建议,我的QQ:1626632460
开源智能汽车图传上位机可以使用智用上位机,该模块主要与该上位机配合使用,用户手册和单片机例程在该上位机仓库中,链接:https://gitee.com /周文琪/ipc-for-car
哔哩哔哩视频链接:https://www.bilibili.com/video/BV1oZ4y1m7y2
PCB仿真如下
类别 | 串口+SPI |
---|---|
3D模拟 | |
焊接效果 | |
JLC开源链接 | https://oshwhub.com/Wander_er/891fe1d235694ef7afe684f5a2f05b73 |
姓名 | 功能 |
---|---|
文档 | 芯片文档 |
司机 | 驱动文件 |
固件 | 固件 |
硬件 | 硬件 |
图像 | 图片 |
软件 | 简单图像传输上位机python脚本 |
两种通讯方式
UART波特率高达5Mbps,一次接收高达20000字节
使用串行轮询从缓冲区中提取接收到的数据。有两个参数,分别是接收缓冲区大小和最大等待时间。当接收到的字节数达到缓冲区大小时,立即视为完成一次接收;当发送完成但未达到接收缓冲区大小时,则等待最大等待时间才视为完成传输。这个等待时间固定为20ms。
所以可以认为有两种模式,通过修改固件中uart_read_bytes
()函数中的length
参数进行切换。
透明模式:是指传输的数据没有固定的字节限制。每次通信可以传输各种大小的数据,更加灵活。
建议使用透传模式间隔大于serial port transmission time
+ 20ms
+ udp transmission time (rate calculated at 30Mbps)
当length
参数为缓冲区大小RX_BUF_SIZE -1
时,为透明模式,即假设没有数据会达到此长度。
固定字节模式:指传输的数据有固定的字节限制。速度比透明模式快,但只能传输固定大小的数据。
建议使用固定字节模式,间隔大于serial port transmission time
+ udp transmission time (rate calculated at 30Mbps)
当length
参数等于发送的固定数据的字节数时,就是固定字节,例如,发送60 x 90的灰度图像时为5400。
当然,发送低于这个长度的数据也可以视为透明模式。
SPI波特率高达10Mbps,一次接收高达25000字节
SPI transmission time
+ udp transmission time (calculated at 30Mbps)
固件集成了UART和SPI两种通信模式,可通过串行通信协议进行配置并写入Flash,无需掉电,无需反复修改固件
如何与下位机连接?
串口
图片链接 | 下位机 |
---|---|
接收数据 | TXD |
TXD | 接收数据 |
RTS(多路 MOSI) | CTS(如果没有也没关系,但是需要在下位机串口传输功能中禁用流控检测) |
SPI
图片链接 | 下位机 |
---|---|
时钟脉冲 | 时钟脉冲 |
味噌 | 味噌 |
莫西 | 莫西 |
CS | CS |
5V电源,必须连接地线
如何计算发送完整图像所需的时间?
以UART 3Mbps传输大小灰度图像为例。首先计算图像的位数:60 x 90 x 8 = 43200 位。然后将位数除以波特率:43200 / 3000000 = 0.0144 s = 14.4 ms
如何进入并使用配置模式?
使用电脑上的USB转TTL串口助手连接Pic-o Link
,短接MOSI
和CS
引脚,然后复位。 rgb 指示灯显示黄色表示已进入配置模式。此时,您可以通过串口配置Pic-o Link参数。波特率115200 ,协议见表
|类别 |备注 |帧头|长度| | :--------------------------: | :------------------------------------------: | :------: |- ----:| |通讯协议选择|8位无符号整数,0:UART,1:SPI| 0x41(一)| 1字节| | UART通讯方式波特率| 32 位无符号整数,<=5000000 | 0x42(B)| 4字节| | UART通讯模式接收缓冲区字节数| 16 位无符号整数,<=20000 | 0x43(C)| 2字节| | WiFi账号|字符串,最多 32 个字节 | 0x44(D)| 32字节| |无线网络密码|字符串,最多 64 字节 | 0x45 (E) | 0x45 64 字节 | | UDP 服务器 IP 地址 |字符串,最多 16 个字节| 0x46(女)| 16字节| | UDP 服务器端口 |16 位无符号整数,<=65535| 0x47(G)| 2字节| |读取模块参数|单指令| 0x48 (H) |无 | |将模块内存参数写入Flash|单指令| 0x49(一)|无|
具体应该配置哪个IP地址呢?
以下两种情况表示Pic-o Link配置的IP地址参数:
如何打开固件项目?
Pic-o Link
文件夹选择Open with Code
,打开后稍等片刻,插件会自动安装依赖并编译工具链如何进入下载模式并刷新固件?
Pic-o Link
连接到电脑,按住Pic-o Link上的DOWNLOAD
按钮然后按RESET
按钮,然后点击Platform IO底部的下载按钮进行编译和下载一键下载,下载后记得按RESET
键如何修改模块的主机名?
sdkconfig.pico32
文件中的CONFIG_LWIP_LOCAL_HOSTNAME
项,重新编译并刷写固件模块支持什么WiFi频率?
接口和PCB图纸要求?
UART模式以TC264为例(参考竹飞无线串口接口原理图,可以直接复制,注意与一般UART接口相比需要多一个流控引脚,可以模仿竹飞无线串口发送驱动使用一个GPIO作为模拟输入模式)
简单的python图传上位机显示脚本,带有帧头帧尾检测,类似于智勇上位机
运行所需的Python库:
乐鑫官方对 ESP32 udp/tcp 速率的测试:
类型/吞吐量 | 实验室空气 | 屏蔽盒 | 测试工具 | IDF 版本(提交 ID) |
---|---|---|---|---|
原始 802.11 数据包接收 | 不适用 | 130兆比特/秒 | 内部工具 | 不适用 |
原始 802.11 数据包发送 | 不适用 | 130兆比特/秒 | 内部工具 | 不适用 |
UDP接收 | 30兆比特/秒 | 85兆比特/秒 | iperf 示例 | 15575346 |
UDP发送 | 30兆比特/秒 | 75兆比特/秒 | iperf 示例 | 15575346 |
TCP 接收 | 20兆比特/秒 | 65兆比特/秒 | iperf 示例 | 15575346 |
TCP 发送 | 20兆比特/秒 | 75兆比特/秒 | iperf 示例 | 1557534 |