news 2026/5/27 10:12:42

LuatOS核心库API——【camera 】摄像头功能库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LuatOS核心库API——【camera 】摄像头功能库

在嵌入式物联网开发中,图像采集能力日益重要。LuatOS提供的camera模块作为其核心库的重要组成部分,为开发者提供了简洁高效的摄像头控制接口。本篇将深入解析该API的功能结构、初始化流程及常用操作方法,帮助开发者快速集成图像采集功能至其应用中。

一、概述

camera 核心库是 LuatOS 的一个特色功能库,按照顺序调用就可以非常快捷的使用上摄像头外设,完成拍照,扫描任务,并将扫描结果和拍照文件存储。根据摄像头类型的不同分为三种使用逻辑:

SPI 摄像头:

适用于 Air700 系列、Air780 系列、Air8000 系列模组;

目前支持 gc0310、gc032a、bf30a2 三款摄像头,并且已经制作好了官方配置表,使用时只需要使用配置的函数初始化摄像头后,就可以调用 camera.capture()接口完成拍照或扫描的任务,再通过 camera.on()函数接收回调数据即可完成拍照或扫描业务;

USB 摄像头:

适用于 Air8101 系列模组;

支持多路 USB 摄像头,但是同时只能使用一路摄像头,根据 USB 端口号选择对应的摄像头,调用对应的初始化和拍照接口即可完成拍照业务;

DVP 摄像头:

适用于 Air8101 系列模组;

支持单路 DVP 摄像头,camera.init()初始化完成后执行 camera.capture()接口完成拍照或扫描任务即可完成拍照任务;

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

3.1 camera.AUTO


3.2 camera.SCAN

3.3 camera.USB


3.4 camera.DVP

3.5 camera.ROTATE_0


3.6 camera.ROTATE_90


3.7 camera.ROTATE_270


3.8 camera.CONF_PREVIEW_ENABLE

3.9 camera.CONF_PREVIEW_ROTATE


四、函数详解

4.1 camera.init(InitReg_or_cspi_id, cspi_speed, mode, is_msb, rx_bit, seq_type, is_ddr, only_y, scan_mode, w, h)

功能

SPI 摄像头:

初始化摄像头,因为摄像头的初始化配置参数需要向摄像头对应的配置寄存器中写入参数,一般会有一两百个参数需要配置,所以我们制作了 gc0310、gc032a、bf30a2 这三款当前支持的摄像头参数配置表,并且将摄像头初始化参数的默认值已经写好,在使用这三个型号的摄像头时只需要 require 对应的配置表,并且调用对应的初始化函数(例如:gc0310Init())即可;

USB、DVP 摄像头:

在 Air8101 系列上支持多路 USB 摄像头,在多路摄像头使用时需要注意摄像头初始化动作

注意事项

如果对照片的大小有要求时,不要修改摄像头初始化时的像素参数,会造成摄像头初始化错误,初始化不会报错,但是回调会收不到任何信息。如需较小的照片结果请直接使用camera.capture()接口的裁切功能,直接输出裁切好的照片即可!

参数

InitReg_or_cspi_id

cspi_speed

mode

is_msb

rx_bit

seq_type

is_ddr

only_y

scan_mode

w

h

返回值

local result = camera.init(InitReg_or_cspi_id, cspi_speed, mode, is_msb, rx_bit, seq_type, is_ddr, only_y, scan_mode, w, h)

会有一个返回值 result

result

例子

4.2 camera.on(id , event , func)

功能

注册摄像头事件回调

注意事项

初始化摄像头成功后,所有摄像头事件均是由回调函数触发,所以在初始化成功后需马上注册回调,及时接收到摄像头执行任务后的结果;

参数

id

event

func

返回值

例子

4.3 camera.start(id)

功能

开始指定的摄像头,在初始化完摄像头后如果并不是马上需要拍照,可以先调用 camera.stop()暂停摄像头,拍照前再调用 camera.start()打开即可;

参数

id

返回值

local result = camera.start(id)

会有一个返回值 result

result

例子

4.4 camera.stop(id)

功能

暂停指定的 camera;

注意事项

是暂停不是关闭,暂停后可直接调用 camera.start()再开启摄像头拍照或者扫描,不需要再初始化;

合宙官方摄像头配置表内已经调用了 camera.start(),如果调用接口 camera.init 初始化后不,需要立马拍照需及时调用 camera.stop()暂停摄像头,避免造成资源浪费;

参数

id

返回值

local result = camera.stop(id)

会有一个返回值 result

result

例子

4.5 camera.close(id)

功能

关闭指定的 camera,释放相应的 IO 资源

注意事项

Air780 系列、Air700 系列、Air8000 系列:

SPI 摄像头会占用 2 路 I2C、1 路 UART 和 2 路 onewire,在 SPI 摄像头启动时无法复用,所以摄像头业务执行完毕后可以调用 camera.close()关闭摄像头,释放 IO 资源;

Air8101 系列:

DVP 摄像头会占用 1 路 UART、1 路 I2C、6 路 PWM 并且同样管脚可复用一路 SPI 或一路以太网,DVP 摄像头启用时无法复用,所以摄像头业务执行完毕后可以调用 camera.close()关闭摄像头,释放 IO 资源;

参数

id

返回值

local result = camera.close(id)

会有一个返回值 result

result

例子

4.6 camera.capture(id, save_path, quality, x, y, w, h)

功能

摄像头初始化成功后执行拍照或扫描或录像业务;

可根据参数直接在这个接口里完成照片的裁切动作;

注意事项

执行拍照任务前一定要调用 camera.start()接口将摄像头打开;

如需较小的照片结果请直接使用camera.capture()接口的裁切功能,计算好接口中的x、y、w、h参数,直接输出裁切好的照片即可!

参数

id

save_path

quality

x

y

w

h

返回值

local result = camera.capture(1, "/capture.jpg", 80,10,15 , 310 , 465)

会有一个返回值 result

result

例子

4.7 camera.preview(id, mode)

功能

启停 camera 预览功能

注意事项

直接输出到 LCD 上,只有硬件支持 LCD 的 SOC 可以运行,启动预览前必须调用 lcd.int 等 api 初始化 LCD,预览时自动选择已经初始化过的 LCD;

参数

id

mode

返回值

local result = camera.preview(id, mode)

会有一个返回值 result

result

例子

4.8 camera.pwdn_pin(id, level)

功能

摄像头 PWDN 控制脚控制;

注意事项

该接口仅用于 Air72X 系列无法用 GPIO 控制 camera pwdn 脚的平台,手动控制 camera pwdn 脚拉高或者拉低;

参数

id

level

返回值

例子

4.9 camera.reset_pin(id, level)

功能

重启摄像头;

注意事项

该接口仅用于 Air72X 系列无法用 GPIO 控制 camera reset 脚的平台,手动控制 camera reset 脚拉高或者拉低;

参数

id

level

返回值

例子

五、模组支持说明

支持 LuatOS 开发的所有模组都支持 camera 核心库。

今天的内容就分享到这里了~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 4:49:04

3步颠覆游戏翻译体验:XUnity.AutoTranslator智能翻译实战指南

3步颠覆游戏翻译体验:XUnity.AutoTranslator智能翻译实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 破解语言壁垒难题:游戏翻译的三大痛点 在全球化游戏体验中&#xff…

作者头像 李华
网站建设 2026/5/20 15:30:01

GLM-4-9B-Chat-1M与VSCode的深度集成开发环境配置

GLM-4-9B-Chat-1M与VSCode的深度集成开发环境配置 1. 为什么需要在VSCode中集成GLM-4-9B-Chat-1M 你可能已经注意到,现在写代码时经常要反复查文档、翻API手册,或者在不同窗口间来回切换——一边看需求文档,一边写代码,还要时不…

作者头像 李华
网站建设 2026/5/26 18:01:25

UART串行通信底层原理与STM32 USART实战解析

1. 串行通信的底层逻辑与工程本质在嵌入式系统开发中,串行通信绝非简单的“发数据、收数据”操作。它是一套建立在物理层约束、时序同步机制和协议约定之上的精密协作体系。理解其底层逻辑,是避免调试时陷入“数据收不到”、“校验失败”、“波特率漂移”…

作者头像 李华
网站建设 2026/5/25 15:59:08

STM32启动流程深度解析:从向量表、栈初始化到C环境建立

1. STM32启动机制的底层逻辑嵌入式系统上电后的第一行代码,从来不是main()函数。这个被绝大多数开发者忽略的“黑箱”,恰恰是整个系统稳定运行的基石。STM32F0系列作为Cortex-M0内核的代表,其启动流程严格遵循ARMv6-M架构规范,但又…

作者头像 李华
网站建设 2026/5/22 7:18:34

深度学习模型转换:ONNX格式跨平台部署

深度学习模型转换:ONNX格式跨平台部署 1. 为什么模型部署总让人头疼 刚训练完一个效果不错的模型,兴冲冲想把它用到实际项目里,结果发现事情远没那么简单。在PyTorch里跑得好好的模型,到了生产服务器上可能需要重写推理代码&…

作者头像 李华