Air780EPM Camera 硬件电路说明
Air780EPM 支持 SPI 接口 Camera,如下表所示;
一、硬件支持
1. 摄像头模块特性
- 接口类型:Air780EPM 支持 SPI/I2C 接口摄像头,通过 SPI 总线传输图像数据,通过 I2C 总线传输控制命令。
-
驱动 IC 型号:
- V1.2 版本开发板:默认使用 GC032A 摄像头模组(30 万像素)。
- V1.3 版本开发板:默认使用 GC032A 摄像头模组(30 万像素)。
- V1.3 版本开发板带外壳:默认使用 GC0310 摄像头模组(30 万像素)。
- Air780EPM目前已支持的Camera驱动IC有:GC0310/GC032A/BF30A2等。
-
供电要求:
-
摄像头模块由开发板内部 LDO 供电(3.3V),需确保开发板电源稳定(建议使用 USB 供电或稳定 5V 输入)。
- GPIO2(PIN23)控制摄像头供电:默认作为摄像头供电的控制引脚,需注意与其他功能的冲突(见注意事项)。
2. 硬件连接
- 关键引脚:
- SPI 数据线:通过 SPI 总线传输图像数据。包括时钟与控制信号:包括 MCLK(主时钟)、BCLK(位时钟)、RX0/RX1(数据)等。
- I2C 控制线:通过 I2C 总线传输控制命令,包括:SCL(时钟)、SDA(数据)。
- CAM_PWDN:摄像头开关控制信号(通常为 GPIO 控制)。
3. 电源与信号设计
- 供电稳定性:
- 摄像头模块功耗较高(约 100-200mA),需确保开发板电源电路能提供足够电流。
- 若使用外部电源,需与开发板共地。
二、软件开发
1. LuatOS API 与驱动
- 初始化摄像头:
-- 初始化摄像头(默认GC032A/GC0310配置)
camera.init({
format = "RGB565", -- 图像格式(支持RGB565、YUV等)
width = 320, -- 分辨率(如320x240)
height = 240
})
- 抓取图像:
local img = camera.capture() -- 返回图像数据(二进制流)
- LCD 显示联动:
-- 假设已初始化LCD(如ST7796)
lcd.init() -- LCD初始化
while true do
local img = camera.capture()
lcd.display() -- 将图像数据发送到LCD显示
sys.wait(500) -- 控制刷新频率
end
2. 二维码解析功能
- 调用摄像头扫码:
-- 启动扫码功能(需LuatOS内置解析库支持)
require("qrcode")
local result = qrcode.scan(camera)
if result then
print("解析结果:" .. result)
end
3. 数据传输至电脑
- 通过串口传输图像:
-- 配置串口(如UART0)
uart.setup(0, 115200, 8, uart.STOP, uart.PARITY)
while true do
local img = camera.capture()
uart.send(0, img) -- 发送图像数据到电脑
sys.wait(1000)
end
三、注意事项
1. 硬件设计与调试
-
GPIO2 冲突问题:
- Air780EPM 开发板默认 GPIO2(PIN23)用于控制摄像头供电的 LDO,若需复用该引脚(如 OneWire 协议),需物理修改开发板电路:
-
摄像头供电稳定性:
-
避免在摄像头工作时频繁开关电源,可能导致初始化失败。
- 若使用外部电源,需确保电压匹配(3.3V)并共地。
2. 软件配置关键点
-
驱动 IC 适配:
- 不同摄像头型号(GC0310/GC032A)的寄存器配置不同,需确保 LuatOS 固件版本支持目标驱动 IC。
- 若更换摄像头模组,需重新配置
camera.init()
参数(如分辨率、格式)。 -
内存与性能:
-
高分辨率图像(如 640x480)会占用较多内存(PSRAM 需 ≥2MB),建议根据需求调整分辨率。
- 使用
sys.timer()
或sys.task()
控制图像捕获频率,避免 CPU 过载。
3. 典型问题排查
-
摄像头无法初始化:
- 检查摄像头模块是否正确插入。
- 确认 GPIO2 未被其他功能占用(如 OneWire)。
- 检查电源供电是否稳定。
-
图像显示异常:
-
确保 LCD 和摄像头的分辨率、格式匹配(如 LCD 为 240x240,摄像头设置相同分辨率)。
- 检查 DVP 数据线是否短路或接触不良。
4. 其他注意事项
-
热插拔与复位:
- 摄像头模块不支持热插拔,需在系统重启后重新连接。
- 复位摄像头需使用硬件开关引脚 CAM_PWDN。
-
固件版本:
-
使用支持摄像头功能的 LuatOS 固件。
四、典型应用场景
1. 实时图像预览:通过 LCD 实时显示摄像头画面。 2. 二维码/条形码扫描:结合 LuatOS 解析库实现快速扫码功能。 3. 图像传输:将拍摄的图像通过 4G 网络上传至服务器或通过串口传输至电脑。
五、Air780EPM 开发板
1. 硬件参考设计
2. LuatOS API 与驱动
- 有关 Camera 的代码太长,仅截取一段有关 API 和驱动的代码作为示例;
- 注意!Air780EPM 有专门的硬件 Camera 驱动接口且已封装好 API,无需再按照 SPI 接口 API 从头开始写驱动;
- 当然,Air780EPM 的硬件 Camera 接口本质上也是 SPI 接口的复用或者说专用,官方暂未公开此接口的具体资料;
- Camera 完整示例代码:demo/780EPM_1.3 版本开发板全功能测试/camera780epm.lua · 合宙 Luat/LuatOS-Air780EPM - Gitee.com
-- 根据实际情况选用GC032A或GC0310
-- require "bf30a2"
require "gc032a"
-- require "gc0310"
httpplus = require "httpplus"
gpio.setup(2, 1) -- GPIO2打开给camera电源供电
gpio.setup(29, 1) -- 1.3版本 GPIO29打开给lcd电源供电
gpio.setup(14, nil) -- 关闭GPIO14,防止camera复用关系出问题
gpio.setup(15, nil) -- 关闭GPIO15,防止camera复用关系出问题
local SCAN_MODE = 0 -- 写1演示扫码
local scan_pause = true
local getRawStart = false
local RAW_MODE = 0 -- 写1演示获取原始图像
-- SCAN_MODE和RAW_MODE都没有写1就是拍照
六、参考资料
1. 摄像头开发文档:
-
LuatOS 摄像头 API 说明:
https://docs.openluat.com/air780epm/luatos/app/audio/camera/
2. 硬件设计指南: -
参考开发板 PIN 脚定义与电路图:
http://docs.openluat.com/air780epm/product/shouce/
3. Camera 完整示例代码: -
demo/780EPM_1.3 版本开发板全功能测试/camera780epm.lua · 合宙 Luat/LuatOS-Air780EPM - Gitee.com 4. 驱动 IC 手册:
-
GC0310/GC032A 摄像头驱动,从 LuatOS 资源库获取。
七、总结
在 Air780EPM 上开发 Camera 应用需注意以下关键点:
- 硬件层面:确保供电稳定。
- 软件层面:精确配置摄像头参数,适配驱动 IC,优化内存使用。
- 调试阶段:优先检查电源、引脚复用和固件兼容性。