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





