基礎(chǔ)資料
基于Air105開發(fā)板:Air105 - LuatOS 文檔
探討重點
對官方camera - 攝像頭demo中capture功能的復(fù)現(xiàn),進(jìn)行相關(guān)內(nèi)容的學(xué)習(xí)及探討。
實現(xiàn)功能
功能2:捕捉圖片并通過Serial 串口接收數(shù)據(jù)存入電腦;
硬件準(zhǔn)備
Air105開發(fā)板1塊,面包板1塊,TFTLCD 屏幕,Micro SD卡模塊(SPI)接口1個,攝像頭GC032A(SPI) , USB轉(zhuǎn)TTL串口模塊,導(dǎo)線若干。
?
Air105開發(fā)板
?
TFTLCD 屏幕
?
SD卡模塊(SPI),攝像頭GC032A(SPI)
?
CH340G-USB轉(zhuǎn)TTL串口模塊
軟件版本
AIR105:LuatOS@AIR105 base 22.10 bsp V0011
軟件使用
接口文檔可參考:camera攝像頭
接線示意圖
?
功能1:捕捉圖片并存入SPI接口外置SD卡
lcd初始化
spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,4810001000,spi.MSB,1,1) --debug信息:顯示芯片類型st7735
log.info("lcd.init", --SHPI接口管腳對應(yīng)連接
lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 128,h = 160,xoffset = 2,yoffset = 1},spi_lcd))
攝像頭初始化
--GC032A輸出rgb圖像初始化命令
local GC032A_InitReg =
{
zbar_scan = 0,--是否為掃碼
draw,開發(fā)板未引出_lcd = 1,--是否向lcd輸出
i2c_id = 0,
i2c_addr = 0x21,
pwm_id = 5;
pwm_period = 1210001000,
pwm_pulse = 0,
sensor_width = 640,
sensor_height = 480,
color_bit = 16,
init_cmd ="/luadb/GC032A_InitReg.txt"--此方法將初始化指令寫在外部文件,支持使用 # 進(jìn)行注釋
}
local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引腳,開發(fā)板上未引出
local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引腳,開發(fā)板上未引出
camera_rst(0)
-- 拍照, 自然就是RGB輸出了
local camera_id = camera.init(GC032A_InitReg)--屏幕輸出rgb圖像
camera.start(camera_id)--開始指定的camera
log.info("攝像頭啟動")
/luadb/是開發(fā)板的虛擬地址。GC032A_InitReg.txt在燒寫主程序時一并燒寫入開發(fā)板,和main()文件同級。PS:GC032A_InitReg.txt內(nèi)容為攝像頭模組GC032A的初始化的命令(寄存器操作指令及參數(shù)),后期另外撰文分析。GC032A芯片硬件手冊的最新版本為:GC032A DataSheet_Release_V1.1_20170314。
GC032ADataSheet-Release-V1.1-20170314(GC032ADataSheet-Release)-單片機(jī)文檔類資源-CSDN文庫
指定capture按鈕
gpio.setup(pin.PA10, function() --BOOT鍵
sys.publish("CAPTURE", true) --點擊后系統(tǒng)釋放"CAPTURE",并由sys.waitUntil處理
end, gpio.PULLUP,gpio.FALLING)
SD卡初始化
local spiId = 2
local result = spi.setup(
spiId,--串口id
255, -- 不使用默認(rèn)CS腳,通過gpio.setup(TF_CS, 1)重新指定
0,--CPHA
0,--CPOL
8,--數(shù)據(jù)寬度
400*1000 -- 初始化時使用較低的頻率
)
local TF_CS = pin.PB3
gpio.setup(TF_CS, 1)
--fatfs.debug(1) -- 若掛載失敗,可以嘗試打開調(diào)試信息,查找原因
fatfs.mount("SD", spiId, TF_CS, 24000000)
local data, err = fatfs.getfree("SD")
if data then
log.info("fatfs", "getfree", json.encode(data))
else
log.info("fatfs", "err", err)
end
圖片存儲
result, data = sys.waitUntil("CAPTURE", 30000) --capture捕獲周期為30s
if result==true and data==true then --獲取到數(shù)據(jù)
log.debug("攝像頭捕獲圖像")
os.remove("/sd/temp.jpg")
camera.capture(camera_id, "/sd/temp.jpg", 1) --存儲在SD上
功能2:捕捉圖片并通過Serial 串口接收數(shù)據(jù)存入電腦
串口初始化
local uartid = 1 -- 根據(jù)實際設(shè)備選取不同的uartid
--初始化
local result = uart.setup(
uartid,--串口id
115200,--波特率
8,--數(shù)據(jù)位
1--停止位
)
官方demo本段代碼注釋狀態(tài),運(yùn)行前需取消注釋,并將SD卡存儲部分代碼進(jìn)行注釋,不能同時運(yùn)行。
串口數(shù)據(jù)接收
demo中選用U1_RX,U2_TX端口。
?
點擊板載BOOT鍵進(jìn)行截圖后,串口接收到截圖信息,api已封裝攝像頭截圖并輸出JPEG格式的相關(guān)功能。
?
端口收到的原始數(shù)據(jù)
串口數(shù)據(jù)處理
后期可以對HEX 16進(jìn)制數(shù)據(jù)解碼,采用HEX 16進(jìn)制數(shù)據(jù)格式轉(zhuǎn)換為JPEG格式。
?
HEX 16進(jìn)制JPG文件信息
提示:JPG文件正常以FF D8開頭,F(xiàn)F D9結(jié)尾,可以用來輔助判斷串口接收信息是否完整。
HEX數(shù)據(jù)轉(zhuǎn)換為jpeg格式文件
HEX(16進(jìn)制數(shù)據(jù))先轉(zhuǎn)存在txt文檔中,再通過Python的binascii庫輸出為jpeg文件(由十六進(jìn)制字符串即十六進(jìn)制數(shù)據(jù),轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)JPG文件)。
轉(zhuǎn)換效果如下:
?
HEX轉(zhuǎn)JPG
HEX轉(zhuǎn)JPG代碼示例(Python)
import binascii
十六進(jìn)制字符串,如:“ff d8 ff e1 11 e0 45 78 69...”;存入TXT文件。經(jīng)過如下代碼轉(zhuǎn)換,可將pic存儲為圖片形式并可以正常打開
o_file=r"G:jpg數(shù)據(jù).txt"
filepath=r"G:jpg數(shù)據(jù).jpg"
f = open(o_file,"r")
payload=f.read()
f.close()
f=open(filepath,"ab") # filepath為你要存儲的圖片的全路徑
pic = binascii.a2b_hex(payload.replace(' ', '').strip())
f.write(pic)
f.close()
驗證完成!
測試LOG數(shù)據(jù)分析
?
LOG數(shù)據(jù)分析
后續(xù)
介紹功能3:捕捉圖片存入SPI接口外置sd卡,副本同步通過Serial 串口輸出jpg文件存入電腦。
審核編輯:湯梓紅
-
攝像頭
+關(guān)注
關(guān)注
60文章
4872瀏覽量
96441 -
Capture
+關(guān)注
關(guān)注
0文章
19瀏覽量
15598 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5141瀏覽量
98395 -
AIR
+關(guān)注
關(guān)注
0文章
18瀏覽量
2991
發(fā)布評論請先 登錄
相關(guān)推薦
評論