基礎資料
基于Air105開發板:Air105 - LuatOS 文檔
探討重點
對官方camera - 攝像頭demo中capture功能的復現,進行相關內容的學習及探討。
實現功能
功能2:捕捉圖片并通過Serial 串口接收數據存入電腦;
硬件準備
Air105開發板1塊,面包板1塊,TFTLCD 屏幕,Micro SD卡模塊(SPI)接口1個,攝像頭GC032A(SPI) , USB轉TTL串口模塊,導線若干。
?
Air105開發板
?
TFTLCD 屏幕
?
SD卡模塊(SPI),攝像頭GC032A(SPI)
?
CH340G-USB轉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接口管腳對應連接
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,開發板未引出_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"--此方法將初始化指令寫在外部文件,支持使用 # 進行注釋
}
local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引腳,開發板上未引出
local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引腳,開發板上未引出
camera_rst(0)
-- 拍照, 自然就是RGB輸出了
local camera_id = camera.init(GC032A_InitReg)--屏幕輸出rgb圖像
camera.start(camera_id)--開始指定的camera
log.info("攝像頭啟動")
/luadb/是開發板的虛擬地址。GC032A_InitReg.txt在燒寫主程序時一并燒寫入開發板,和main()文件同級。PS:GC032A_InitReg.txt內容為攝像頭模組GC032A的初始化的命令(寄存器操作指令及參數),后期另外撰文分析。GC032A芯片硬件手冊的最新版本為:GC032A DataSheet_Release_V1.1_20170314。
GC032ADataSheet-Release-V1.1-20170314(GC032ADataSheet-Release)-單片機文檔類資源-CSDN文庫
指定capture按鈕
gpio.setup(pin.PA10, function() --BOOT鍵
sys.publish("CAPTURE", true) --點擊后系統釋放"CAPTURE",并由sys.waitUntil處理
end, gpio.PULLUP,gpio.FALLING)
SD卡初始化
local spiId = 2
local result = spi.setup(
spiId,--串口id
255, -- 不使用默認CS腳,通過gpio.setup(TF_CS, 1)重新指定
0,--CPHA
0,--CPOL
8,--數據寬度
400*1000 -- 初始化時使用較低的頻率
)
local TF_CS = pin.PB3
gpio.setup(TF_CS, 1)
--fatfs.debug(1) -- 若掛載失敗,可以嘗試打開調試信息,查找原因
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 --獲取到數據
log.debug("攝像頭捕獲圖像")
os.remove("/sd/temp.jpg")
camera.capture(camera_id, "/sd/temp.jpg", 1) --存儲在SD上
功能2:捕捉圖片并通過Serial 串口接收數據存入電腦
串口初始化
local uartid = 1 -- 根據實際設備選取不同的uartid
--初始化
local result = uart.setup(
uartid,--串口id
115200,--波特率
8,--數據位
1--停止位
)
官方demo本段代碼注釋狀態,運行前需取消注釋,并將SD卡存儲部分代碼進行注釋,不能同時運行。
串口數據接收
demo中選用U1_RX,U2_TX端口。
?
點擊板載BOOT鍵進行截圖后,串口接收到截圖信息,api已封裝攝像頭截圖并輸出JPEG格式的相關功能。
?
端口收到的原始數據
串口數據處理
后期可以對HEX 16進制數據解碼,采用HEX 16進制數據格式轉換為JPEG格式。
?
HEX 16進制JPG文件信息
提示:JPG文件正常以FF D8開頭,FF D9結尾,可以用來輔助判斷串口接收信息是否完整。
HEX數據轉換為jpeg格式文件
HEX(16進制數據)先轉存在txt文檔中,再通過Python的binascii庫輸出為jpeg文件(由十六進制字符串即十六進制數據,轉換為二進制數據JPG文件)。
轉換效果如下:
?
HEX轉JPG
HEX轉JPG代碼示例(Python)
import binascii
十六進制字符串,如:“ff d8 ff e1 11 e0 45 78 69...”;存入TXT文件。經過如下代碼轉換,可將pic存儲為圖片形式并可以正常打開
o_file=r"G:jpg數據.txt"
filepath=r"G:jpg數據.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數據分析
?
LOG數據分析
后續
介紹功能3:捕捉圖片存入SPI接口外置sd卡,副本同步通過Serial 串口輸出jpg文件存入電腦。
審核編輯:湯梓紅
-
攝像頭
+關注
關注
61文章
4949瀏覽量
97658 -
Capture
+關注
關注
0文章
19瀏覽量
15745 -
開發板
+關注
關注
25文章
5507瀏覽量
102252 -
AIR
+關注
關注
0文章
19瀏覽量
3098
發布評論請先 登錄
【合宙Air820開發板免費試用】上電燒錄demo&功能體驗
【合宙Air820開發板試用體驗】I.開箱報告_zmj
【合宙Air105開發板試用體驗】+初識Air105開發板
【合宙Air105開發板試用體驗】Ari105開發板開箱,及攝像頭使用
【合宙Air105開發板試用體驗】開箱體驗運行官方demo:流水燈+攝像頭
合宙Air系列開發板官方demo學習(一):ADC功能
合宙Air系列開發板官方demo學習(二):camera - 攝像頭:(1)-capture
【合宙Air105開發板試用體驗】AIR105開箱體驗及攝像頭demo含軟件及工具

評論