使用HTTP / MQTT構(gòu)建以太網(wǎng)供電的物聯(lián)網(wǎng)攝像頭
現(xiàn)代物聯(lián)網(wǎng)應(yīng)用需要可靠的實時圖像流功能,用于從安全監(jiān)控到遠程監(jiān)控的應(yīng)用。雖然基于wifi的解決方案很常見,但它們往往存在信號不穩(wěn)定和范圍有限的問題。該項目演示了如何使用內(nèi)置以太網(wǎng)功能的W6300-EVB-PICO2微控制器構(gòu)建強大的以太網(wǎng)供電攝像機系統(tǒng),使用HTTP和MQTT協(xié)議將實時圖像流式傳輸?shù)紸dafruit IO,以實現(xiàn)最大的靈活性和可靠性。
步驟1:收集組件
對于這個項目,您將需要:
?W6300-EVB-PICO2單片機
?OV2640攝像頭模塊
?電阻2K歐姆
?面包板和跳線
步驟2:硬件設(shè)置
evb - pico2 -先進的物聯(lián)網(wǎng)基礎(chǔ)
W6300-EVB-PICO2為該項目提供了良好的基礎(chǔ):
?RP2350雙Cortex-M33 (150MHz) + 520KB SRAM用于處理圖像
?16MB閃存+ 64KB網(wǎng)絡(luò)緩沖數(shù)據(jù)處理
?用于HTTP/MQTT通信的8個并發(fā)套接字
?IPv4/IPv6雙棧支持面向未來的網(wǎng)絡(luò)
?增強安全性與TrustZone +安全啟動
連接sov2640相機→W6300-EVB-PICO2
?Vsync→gp12
?Href→gp11
?PCLK→gp10
?D0-D7→GP0-GP7(數(shù)據(jù)總線)
?SCL→GP9 (I2C時鐘)→WITH上拉電阻3.3V
?SDA→GP8 (I2C數(shù)據(jù))→WITH上拉電阻3.3V
?RESET→GP13(可選)
重要提示:在給電路板上電之前,要仔細檢查所有連接的安全性和準(zhǔn)確性。
為什么上拉電阻是必不可少的?
?I2C協(xié)議要求:I2C是一個開路漏極/開路采集器總線,需要上拉
?信號完整性:沒有上拉,SDA和SCL線路將浮動,導(dǎo)致通信錯誤
?適當(dāng)?shù)倪壿嬰娖剑荷侠_保信號達到適當(dāng)?shù)母?3.3V)和低(0V)電平
?攝像機檢測:如果沒有上拉,攝像機的I2C地址(0x30)將無法檢測到
電阻規(guī)格
?取值范圍:標(biāo)準(zhǔn)值為4.7kΩ(4700歐姆),也可選擇2kΩ-10kΩ
?功率:1/4瓦(0.25W)標(biāo)準(zhǔn)電阻
?數(shù)量:2個電阻(一個用于SDA,一個用于SCL)
?連接:3.3V到每條I2C線之間
步驟3:設(shè)置Adafruit IO
設(shè)置Adafruit IO
創(chuàng)建提要:
?相機飼料
設(shè)計儀表板:
?轉(zhuǎn)到Dashboard部分設(shè)計界面,添加圖像塊
步驟4:代碼解釋
導(dǎo)入所需庫
核心系統(tǒng)庫
?time -為圖像捕獲之間的延遲和間隔提供計時功能
?board -訪問微控制器特定的引腳定義和硬件功能
?busio -處理串行通信協(xié)議,包括攝像頭控制的I2C和以太網(wǎng)通信的SPI
?digitalio -管理相機控制信號和以太網(wǎng)復(fù)位功能的GPIO引腳
相機控制
?adafruit_ov2640 - OV2640相機模塊控制的專用庫,提供圖像捕獲,分辨率設(shè)置和JPEG壓縮配置的功能
以太網(wǎng)連接(W6300專用)
?wiznet - wiznet芯片組驅(qū)動程序在W6300-EVB-PICO2上實現(xiàn)以太網(wǎng)連接
?adafruit_wiznet5k -高級以太網(wǎng)接口庫,帶有WIZNET5K類,用于網(wǎng)絡(luò)初始化和管理
?socketpool——為HTTP和MQTT通信創(chuàng)建和管理網(wǎng)絡(luò)套接字
數(shù)據(jù)處理與編碼
?binascii -將二進制圖像數(shù)據(jù)轉(zhuǎn)換為適合網(wǎng)絡(luò)傳輸?shù)腁SCII格式
?ssl——為加密通信提供安全套接字層支持(盡管通常出于性能考慮而禁用)
?gc -用于內(nèi)存管理的垃圾收集模塊,在處理大型圖像緩沖區(qū)時至關(guān)重要
云通信協(xié)議
?adafruit_requests -簡化的HTTP客戶端,用于對Adafruit IO進行REST API調(diào)用
?adafruit_minimqtt -輕量級MQTT客戶端,用于使用Adafruit IO發(fā)布/訂閱消息
?adafruit_io - Adafruit IO集成庫與IO_HTTP類,用于基于http的數(shù)據(jù)傳輸
管理的秘密
此字典存儲您的Adafruit IO憑據(jù)。您應(yīng)該創(chuàng)建一個單獨的secrets.py文件來保證敏感信息的安全。
網(wǎng)絡(luò)配置
定義網(wǎng)絡(luò)連接的MAC地址、靜態(tài)IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)和DNS服務(wù)器地址。
硬件初始化
?以太網(wǎng)配置:為以太網(wǎng)連接配置引腳并重置WIZnet模塊。
?初始化以太網(wǎng):WIZnet模塊使用SPI初始化,啟用DHCP以自動獲取IP地址。
相機的設(shè)置
為攝像機控制初始化I2C通信,并配置具有并行數(shù)據(jù)傳輸引腳的OV2640攝像機模塊。
細節(jié):
?I2C引腳(GP8, GP9)用于攝像頭配置和設(shè)置
?并行數(shù)據(jù)引腳(GP0-GP7)使用8位并行接口處理高速圖像數(shù)據(jù)傳輸
?控制信號(時鐘,vsync, href, reset)管理圖像捕獲的定時和同步:
?時鐘(GP10):用于數(shù)據(jù)同步的像素時鐘
?VSYNC (GP12):表示幀啟動的垂直同步信號
?HREF (GP11):行數(shù)據(jù)的水平參考信號
?Reset (GP13):攝像頭模塊的硬件復(fù)位控制
通信協(xié)議選擇
允許用戶選擇HTTP或MQTT協(xié)議之間的數(shù)據(jù)傳輸?shù)紸dafruit IO。
過程:
?用戶輸入提示選擇通信協(xié)議
?根據(jù)選擇初始化適當(dāng)?shù)目蛻舳?HTTP或MQTT)
?設(shè)置Adafruit IO平臺的連接參數(shù)
?提供連接就緒狀態(tài)反饋
HTTP模式:
?使用ssl安全的HTTP會話進行數(shù)據(jù)傳輸
?為Adafruit IO通信創(chuàng)建HTTP IO客戶端
?適用于簡單的請求/響應(yīng)數(shù)據(jù)傳輸
MQTT模式:
?為發(fā)布/訂閱通信建立持久的MQTT連接
?連接到Adafruit IO的MQTT代理
?使用未加密連接(為提高內(nèi)存效率禁用SSL)
?為圖像提要發(fā)布創(chuàng)建主題路徑
主捕獲回路
連續(xù)圖像捕獲和傳輸循環(huán)與動態(tài)內(nèi)存管理和錯誤處理。
工藝流程:
?對于內(nèi)存受限的環(huán)境,初始化時使用較小的緩沖區(qū)大小(15KB)
?從相機連續(xù)捕獲圖像
?通過選定的協(xié)議(HTTP或MQTT)傳輸圖像
?實現(xiàn)基于內(nèi)存可用性的自適應(yīng)緩沖區(qū)大小
?包括全面的錯誤恢復(fù)機制
主要業(yè)務(wù):
圖像獲取:
?為圖像存儲分配字節(jié)數(shù)組緩沖區(qū)
?從OV2640相機捕獲JPEG圖像
?驗證捕獲的圖像是否有足夠的數(shù)據(jù)(>100字節(jié))
數(shù)據(jù)處理:
?將圖像數(shù)據(jù)編碼為Base64格式,用于基于文本的傳輸
?Base64編碼確保通過基于文本的協(xié)議安全傳輸數(shù)據(jù)
數(shù)據(jù)傳輸:
?MQTT模式:將編碼的圖像發(fā)布到Adafruit IO feed
?HTTP模式:通過HTTP POST請求發(fā)送編碼后的圖像
基于用戶選擇的特定模式傳輸
動態(tài)內(nèi)存管理:
?緩沖區(qū)擴展:當(dāng)圖像接近當(dāng)前限制時增加緩沖區(qū)大小
?Buffer Reduction:減少內(nèi)存錯誤時的緩沖區(qū)大小
?內(nèi)存限制:緩沖區(qū)范圍從10KB到25KB
?垃圾收集:每個周期后顯式內(nèi)存清理
步驟5:功能和好處
?雙重協(xié)議支持(HTTP/MQTT)
?自適應(yīng)內(nèi)存管理
?實時圖像傳輸
?魯棒錯誤恢復(fù)
?硬件攝像頭/以太網(wǎng)集成
結(jié)論
該物聯(lián)網(wǎng)圖像捕獲系統(tǒng)成功演示了:
?在W6300-EVB-PICO2上可靠的攝像頭到云傳輸
?約束環(huán)境的有效內(nèi)存管理
?靈活的協(xié)議支持不同的部署需求
?嵌入式視覺應(yīng)用的實踐基礎(chǔ)
該解決方案平衡了性能和資源限制,為各種物聯(lián)網(wǎng)視覺用例提供了一個通用的平臺。
本文編譯自hackster.io





