英語 | 中文
本專案為基於樂鑫 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 |