本文章主要記錄基于 【K210-ESP8266】 圖傳和顯示的過程,結(jié)合人臉識別,實現(xiàn)嵌入式邊緣設(shè)備的無線通訊和AI推流,是系列文章,歡迎學(xué)習(xí)交流。
關(guān)于上位機(jī)的開發(fā)過程,請參考以下博文:
【K210+ESP8266圖傳上位機(jī)開發(fā)】TCP server + JPEG圖像解析上位機(jī)開發(fā)
- ?? 作者簡介:大家好,我是喜歡記錄零碎知識點的小菜鳥。??
- ?? 個人主頁:歡迎訪問我的 Ethernet_Comm 博客主頁??
- ?? 支持我:點贊??+收藏??+留言??
- ?? 系列專欄:K210開發(fā)板二次開發(fā) ??
- ??格言:寫文檔啊不是寫文章,重要的還是直白!??
1. K210 - esp8266 圖傳
1.1 系統(tǒng)架構(gòu)
-
K210
開發(fā)板的OV2340
攝像頭采集圖像 -
K210
開發(fā)板串口接 樂鑫科技的ESP8266
模塊,使用其WIFI
功能 -
ESP8266
連接wifi后通過連接上位機(jī)TCP
服務(wù)器,并將K210
采集的圖像數(shù)據(jù)通過透傳的方式傳輸至TCP server
- 上位機(jī)
TCP server
將圖像數(shù)據(jù)解析并還原顯示
1.2 圖像格式解析
一幀圖像,格式 RGB565
:16
位數(shù)據(jù),每個像素占用2
字節(jié)
320*240
分辨率 = 76800
像素
數(shù)據(jù)量 = 像素 * 2 字節(jié) = 76800 * 2 = 153600
字節(jié) = 150 kb
img = sensor.snapshot()
#返回值:{"w":320, "h":240, "type"="rgb565", "size":153600} 一幀圖像字節(jié)數(shù) 153600
img_bytes = img.to_bytes() #轉(zhuǎn)化為 字節(jié)
print(len(img_bytes)) #字節(jié)長度為 153600
# 圖像壓縮
img = sensor.snapshot()
lcd.display(img)
img = img.compress(quality=60) # 對原始圖像壓縮 壓縮的 quality 越大 對原始圖像的破壞率越大
img_bytes = img.to_bytes() #轉(zhuǎn)化為 字節(jié)
print(len(img_bytes)) # #輸出 6900 多 對原圖進(jìn)行壓縮后,字節(jié)數(shù)變少,
#lcd.display(img) #注意,壓縮后再顯示,會報錯 格式不支持
1.3 圖像發(fā)送方式解析
發(fā)送時,單次發(fā)送2048
個字節(jié),用block
的形式,先發(fā)送2048
的整數(shù)倍,再發(fā)送剩余字節(jié)數(shù):
img = sensor.snapshot()
lcd.display(img)
img = img.compress(quality=50) # 對原始圖像壓縮 quality 越小 對原始圖像的破壞率越大
img_bytes = img.to_bytes() #轉(zhuǎn)化為 字節(jié)
print("send len: 壓縮后的字節(jié)數(shù) ", len(img_bytes))
try:
block = int(len(img_bytes)/2048) #單次傳2048個字節(jié)
#print("發(fā)送的block數(shù) ", block)
for i in range(block): # 先發(fā)送2048 的整數(shù)倍
send_len = sock.send(img_bytes[i*2048:(i+1)*2048]) #返回發(fā)送的字節(jié)數(shù)
#time.sleep_ms(500)
send_len2 = sock.send(img_bytes[block*2048:]) #然后發(fā)啊送剩余不到2048個字節(jié)
#print("send len2: ", send_len2)
#time.sleep_ms(500)
if send_len == 0:
raise Exception("send fail")
except OSError as e:
if e.args[0] == 128:
print("connection closed")
1.4 ESP8266 配置AT指令:
一般來說,ESP8266
模塊默認(rèn)的波特率是115200,AT指令全部以\r\n
結(jié)尾;發(fā)送AT命令后,返回OK
即認(rèn)為設(shè)置成功
AP 模式:本身作為熱點讓別人連接: AT+CWMODE=2
。配置熱點信息: AT+CWSAP="Eureka1024","123456789",1,3
---- 熱點名為 Eureka1024,密碼為 123456789,使用通道 1,加密方式為 WPA2_PSK。
station 模式: 用來連接熱點,加入外部網(wǎng)絡(luò)。AT+CWMODE=1
連接到指定路由器:AT+CWJAP_DEF="PiWiFi","12345678"
。//wifi名
和wifi密碼
# 透傳模式:開啟透傳模式后只需要在第一次發(fā)送數(shù)據(jù)時使用 AT+CIPSEND 指令來告訴 ESP8266 開始透傳發(fā)送,隨后我們直接發(fā)送想要的數(shù)據(jù)即可,不需要在每次發(fā)送數(shù)據(jù)之前都要指定發(fā)送數(shù)據(jù)的長度
# 開啟:使用 AT+CIPMODE=1 指令開啟透傳模式,
# 結(jié)束:1、發(fā)送 +++ 這三個字符,值得注意的是該命令沒有換行符,不然后失敗。 2、接著發(fā)送 AT+CIPMODE=0 命令即可退出透傳模式,即回到正常的模式。
#ESP8266是通過AT指令進(jìn)行配置的,因此要保證ESP8266已經(jīng)燒錄了AT固件庫,一般網(wǎng)上買的ESP8266模塊默認(rèn)會燒錄AT固件庫,如若沒有,可以自行進(jìn)行燒錄
AT+RESTORE #恢復(fù)出廠設(shè)置
AT+CWMODE=1 #設(shè)置ESP8266工作模式為STA
AT+RST #復(fù)位
AT+CWJAP="路由器賬號","密碼" #連接路由器
AT+CIPMODE=1 #設(shè)置透傳模式
AT+CIPSTART="TCP","192.168.6.117",8266 #連接TCP服務(wù)器(上位機(jī))
AT+CIPSEND #開啟透傳,傳送數(shù)據(jù)的長度
1.5 ESP8266 透傳圖像數(shù)據(jù)
1.5.1 TcpServer 測試結(jié)果:
#上圖中可以看出,OV2640采集到的圖像數(shù)據(jù),最終經(jīng)過ESP8266發(fā)送到了上位機(jī),并成功顯示出來,只是受限于串口速率,大概3秒才會傳輸完一幀數(shù)據(jù),在實際使用時,也可以發(fā)現(xiàn),上位機(jī)數(shù)據(jù)緩沖容器時常都是空的,數(shù)據(jù)生產(chǎn)線程受限于串口速率,導(dǎo)致數(shù)據(jù)的生產(chǎn)遠(yuǎn)遠(yuǎn)小于數(shù)據(jù)的消耗,表現(xiàn)出來就是幾秒才會刷新一幀數(shù)據(jù)。
圖像幀數(shù): 157
fps: 0.1968504
send len: 壓縮后的字節(jié)數(shù) 6283
圖像幀數(shù): 158
fps: 0.1975114
send len: 壓縮后的字節(jié)數(shù) 6285
圖像幀數(shù): 159
fps: 0.1968117
send len: 壓縮后的字節(jié)數(shù) 6265
圖像幀數(shù): 160
fps: 0.1976675
send len: 壓縮后的字節(jié)數(shù) 6232
圖像幀數(shù): 161
fps: 0.1969279
send len: 壓縮后的字節(jié)數(shù) 6190
圖像幀數(shù): 162
fps: 0.1970055
send len: 壓縮后的字節(jié)數(shù) 6205
圖像幀數(shù): 163
fps: 0.1970055
send len: 壓縮后的字節(jié)數(shù) 6193
1.6 TCP 服務(wù)器+圖像數(shù)據(jù)解析上位機(jī)
1.6.1 上位機(jī):
上位機(jī)使用說明:
上位機(jī)下載:C#上位機(jī) 網(wǎng)絡(luò)調(diào)試軟件 可實時顯示JPEG圖像
https://download.csdn.net/download/qq_39217004/86946865
ESP8266
在接受到K210
開發(fā)板通過串口傳輸?shù)膱D像數(shù)據(jù)之后,會將其發(fā)送給上位機(jī),那么ESP8266和上位機(jī)之間是如何通訊的呢?是通過TCP/IP協(xié)議。本軟件使用C#語言,基于TCP/IP協(xié)議,寫了一個簡單的上位機(jī)服務(wù),該服務(wù)接受ESP8266的連接,并將其發(fā)送過來的數(shù)據(jù)編碼為圖像進(jìn)行顯示。由于軟件寫的很簡單,因此很多功能并沒有進(jìn)行擴(kuò)充實現(xiàn),如其只支持一個設(shè)備的圖傳,后續(xù)可以進(jìn)行升級改進(jìn)。感謝各位的下載使用使用說明:配置好您的本機(jī)IP和port口,port口在 0-65536任選一個即可,下位機(jī)和上位機(jī)的連接配置要一致,配置好趴之后可以實現(xiàn)連接使用
若有問題歡迎大家留言交流,祝大家工作學(xué)習(xí)順利
修改不同的IP地址后,測試:
下位機(jī):請留言交流文章來源:http://www.zghlxwxcb.cn/news/detail-413788.html
關(guān)于上位機(jī)的開發(fā)過程,請參考以下博文:
【K210+ESP8266圖傳上位機(jī)開發(fā)】TCP server + JPEG圖像解析上位機(jī)開發(fā)文章來源地址http://www.zghlxwxcb.cn/news/detail-413788.html
到了這里,關(guān)于【K210-ESP8266】開發(fā)板上傳圖像數(shù)據(jù)到服務(wù)器并實時顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!