跳转至

Index

作者:沈园园 | 最后修改:2026-03-09

一、概述

AirCAMERA _1030 是合宙推出的一款USB接口的摄像头的配件板,其中:

  1. 驱动IC:KC6089-V.0,USB-OV2720;
  2. 200万像素静态拍照;
  3. 100万像素录像;
  4. 适用于Air6201系列模组;

二、演示模块概述

本示例主要是展示 AirCAMERA_1030 的使用,本地拍摄照片后通过 httpplus 扩展库将图片上传至 air32.com

1、main.lua:主程序入口

2、take_photo_http_post.lua:执行拍照后上传照片至 air32.com

3、netdrv_wifi.lua:连接 WIFI

注意事项:

1、如用V1006版本固件,请使用2号固件

2、建议使用 V2xxx 版本固件

3、仅支持2.4G的WiFi,不支持5G的WiFi

三、演示功能概述

1、主程序入口模块(main.lua)

  • 初始化项目信息和版本号
  • 初始化看门狗,并定时喂狗
  • 启动一个循环定时器,每隔 3 秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况方便分析内存使用是否有异常
  • 加载 netdrv_wifi 模块(通过 require "netdrv_wifi")
  • 加载 take_photo_http_post 模块(通过 require "take_photo_http_post")

2、WIFI 连接模块(netdrv_wifi.lua)

  • 订阅"IP_READY"和"IP_LOSE"
  • 根据对应的网络状态执行对应的动作
  • 联网成功则配置 DNS
  • 联网失败则打印联网失败日志

3、拍照上传业务模块(take_photo_http_post.lua)

  • 订阅 IP_READY 信息,确认联网后执行拍照上传任务
  • 每 30 秒触发一次拍照:AirCAMERA_1030_func()
  • 每 3 秒打印一次系统和 LUA 的内存信息:memory_check()
  • 配置摄像头信息表:usb_camera_param
  • 初始化摄像头:excamera.open()
  • 执行拍照:excamera.photo()
  • 上传照片:httpplus.request()
  • 关闭摄像头:excamera.close()

四、准备硬件环境

1、Air6201 核心板一块

2、TYPE-C USB 数据线一根

3、合宙标准配件 AirCAMERA_1030 一块

4、Air6201 核心板和合宙标准配件 AirCAMERA_1030 的硬件接线方式为

Air6201 核心板通过 TYPE-C USB 口供电;(背面功耗测试开关拨到 OFF)

TYPE-C USB 数据线直接插到核心板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;

AirCAMERA_1030 配件板 + Air6201 核心板,硬件连接示意图:

单路摄像头链接方式

四路摄像头链接方式 如图所示,将四路USB摄像头接入HUB中,然后将HUB通过USB口连接到Air6201核心板上;

五、准备软件环境

5.1 软件环境

在开始实践本示例之前,先筹备一下软件环境:

1、烧录工具:Luatools 下载调试工具

2、内核固件:Air6201 最新版本的内核固件

3、脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air6201/demo/accessory_board/AirCAMERA_1030

4、lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件

准备好软件环境之后,接下来查看 Air6201 核心板使用说明,将本篇文章中演示使用的项目文件烧录到 Air6201 核心板中

5.2 API 介绍

excamera 扩展库:https://docs.openluat.com/osapi/ext/excamera/

六、程序结构

AirCAMERA_1030/
│── main.lua
│── netdrv_wifi.lua
│── take_photo_http_post.lua
│── readme.md

6.1 文件说明

  1. main.lua:主程序入口文件。
  2. netdrv_wifi.lua:连接 WIFI。
  3. take_photo_http_post.lua:执行拍照后上传照片至 air32.com。

七、代码详解

7.1 main.lua

主程序文件 main.lua 是整个项目的入口点。它负责初始化系统环境。

7.2 netdrv_wifi.lua

本文件为WIFI STA网卡驱动模块,核心业务逻辑为:

1、初始化WIFI网络;

2、连接WIFI路由器;

3、和WIFI路由器之间的连接状态发生变化时,在日志中进行打印;

local exnetif = require "exnetif"

local function ip_ready_func(ip, adapter)
    if adapter == socket.LWIP_STA then
        -- 在位置1和2设置自定义的DNS服务器ip地址:
        -- "223.5.5.5",这个DNS服务器IP地址是阿里云提供的DNS服务器IP地址;
        -- "114.114.114.114",这个DNS服务器IP地址是国内通用的DNS服务器IP地址;
        -- 可以加上以下两行代码,在自动获取的DNS服务器工作不稳定的情况下,这两个新增的DNS服务器会使DNS服务更加稳定可靠;
        -- 如果使用专网卡,不要使用这两行代码;
        -- 如果使用国外的网络,不要使用这两行代码;
        socket.setDNS(adapter, 1, "223.5.5.5")
        socket.setDNS(adapter, 2, "114.114.114.114")

        log.info("netdrv_wifi.ip_ready_func", "IP_READY", socket.localIP(socket.LWIP_STA))
    end
end

local function ip_lose_func(adapter)
    if adapter == socket.LWIP_STA then
        log.warn("netdrv_wifi.ip_lose_func", "IP_LOSE")
    end
end


--WIFI联网成功(做为STATION成功连接AP,并且获取到了IP地址)后,内核固件会产生一个"IP_READY"消息
--各个功能模块可以订阅"IP_READY"消息实时处理WIFI联网成功的事件
--也可以在任何时刻调用socket.adapter(socket.LWIP_STA)来获取WIFI网络是否连接成功

--WIFI断网后,内核固件会产生一个"IP_LOSE"消息
--各个功能模块可以订阅"IP_LOSE"消息实时处理WIFI断网的事件
--也可以在任何时刻调用socket.adapter(socket.LWIP_STA)来获取WIFI网络是否连接成功

--此处订阅"IP_READY"和"IP_LOSE"两种消息
--在消息的处理函数中,仅仅打印了一些信息,便于实时观察WIFI的连接状态
--也可以根据自己的项目需求,在消息处理函数中增加自己的业务逻辑控制,例如可以在连网状态发生改变时更新网络图标
sys.subscribe("IP_READY", ip_ready_func)
sys.subscribe("IP_LOSE", ip_lose_func)


-- 配置WiFi设备模式的单网卡,exnetif.set_priority_order使用的网卡编号为socket.LWIP_STA
-- ssid为要连接的WiFi路由器名称;
-- password为要连接的WiFi路由器密码;
-- 注意:仅支持2.4G的WiFi,不支持5G的WiFi;
-- 实际测试时,根据自己要连接的WiFi热点信息修改以下参数
exnetif.set_priority_order({
    {
        WIFI = {
            ssid = "A上海合宙通讯", 
            password = "HZ88888888"
        }
    }
})

7.3 take_photo_http_post.lua

使用AirCAMERA_1020 DVP摄像头完成拍照上传任务,每30S触发一次拍照

-- 功能:提供摄像头初始化、拍照和资源管理功能
-- 引入excamera扩展库模块
local excamera = require "excamera"
-- 引入httpplus扩展库模块
local httpplus = require "httpplus"

-- 定义照片保存方式,有三种类型:
-- 1、ZBUFF保存,输入"ZBUFF"即可,excamera库会自动处理ZBUFF
-- 2、保存到内存文件系统中,路径名需指向/ram/文件夹
-- 3、保存到内置FLASH文件系统中
-- 选择其中一个即可,注释另两个路径变量
-- local save_method = "ZBUFF"
local save_method = "/ram/test.jpg"
-- local save_method = "/test.jpg"

-- USB摄像头支持多摄像头轮切拍摄
-- 该变量表示有多少路摄像头,如果有多路摄像头则会逐个轮切拍摄,顺序以HUB的USB端口号顺序
-- 如果只是一路摄像头,此处填1即可
local usb_port_num = 4

-- 拍照功能函数
-- 作用:循环监听拍照事件,执行摄像头初始化、拍照和资源释放
local function capture_func()
    -- 定义变量用于存储操作结果和数据
    local result, data
    -- 无限循环,持续等待拍照事件
    while true do
        -- 等待外部触发拍照事件(ONCE_CAPTURE)
        local result, usb_port = sys.waitUntil("ONCE_CAPTURE")
        -- 配置USB摄像头参数表
        local usb_camera_param = {
            id = camera.USB, -- 摄像头类型,USB接口
            sensor_width = 1280, -- 摄像头像素宽度,1280像素
            sensor_height = 720, -- 摄像头像素高度,720像素
            usb_port = usb_port,
            save_path = save_method -- 照片保存路径,保存在RAM中
        }
        -- 初始化摄像头,传入配置参数
        result = excamera.open(usb_camera_param)
        -- 记录摄像头初始化状态
        log.info("初始化状态", result,"这是第"..usb_camera_param.usb_port.."个摄像头")
        -- 判断摄像头初始化是否成功,不成功则直接关闭,成功则启动拍照
        if result then
            -- 执行拍照操作
            result, data = excamera.photo()
            -- 拍照执行完成则上传,否则关闭摄像头
            if result then
                log.info("这是第"..usb_port.."个摄像头拍的")
                -- 通过网卡状态判断WIFI是否连接成功,WIFI连接成功后再运行照片上传任务。
                while not socket.adapter(socket.dft()) do
                    -- 在此处阻塞等待WIFI连接成功的消息"IP_READY",避免联网过快,丢失了"IP_READY"信息而导致一直被卡住。
                    -- 或者等待30秒超时退出阻塞等待状态
                    log.warn("tcp_client_main_task_func", "wait IP_READY")
                    sys.waitUntil("IP_READY", 30000)
                end
                if type(data) == "userdata" then
                    data = data:query()
                else
                    data = io.readFile(data)
                end
                -- 通过网卡(本demo使用的是socket.LWIP_STA网卡)将拍摄到的照片数据result上传到服务器air32.cn
                -- 如果上传成功,电脑上浏览器打开https://www.air32.cn/upload/jpg/,打开对应的测试日期目录,点击具体的测试时间照片,可以查看摄像头拍照上传的照片
                -- 执行httpplus.request后,等待服务器的http应答,此处会阻塞当前task,等待整个过程成功结束或者出现错误异常结束
                -- code表示结果,number类型,详细说明参考API手册,一般来说:
                --             200表示成功
                --             小于0的值表示出错,例如-8表示超时错误
                --             其余结果值参考API手册
                local code = httpplus.request({
                    url = "http://upload.air32.cn/api/upload/jpg",
                    method = "POST",
                    body = data
                })
                -- 打印http传输状态
                log.info("http_upload_photo_task_func", "httpplus.request", code)
            end
        end
        -- 判断是否ZBUFF存储方式,如果是文件系统保存则删除本地文件
        if save_method ~= "ZBUFF" then
            os.remove(usb_camera_param.save_path)
        end
        -- 关闭摄像头,释放资源
        excamera.close()
    end
end

-- 内存检查函数
-- 作用:定期监控系统内存使用情况
local function memory_check()
    -- 无限循环,定期检查内存
    while true do
        -- 等待3秒
        sys.wait(3000)
        -- 打印系统内存使用信息
        log.info("sys ram", rtos.meminfo("sys"))
        -- 打印Lua虚拟机内存使用信息
        log.info("lua ram", rtos.meminfo("lua"))
    end
end

-- AirCAMERA_1030 DEMO应用触发函数,每30S触发一次拍照
local function AirCAMERA_1030_func()
    while true do
        -- 循环推送USB端口号,触发轮切拍照功能
        for i = 1, usb_port_num do
            sys.publish("ONCE_CAPTURE",i)
            sys.wait(10000)
        end
    end
end

-- 创建拍照功能任务
-- 作用:在单独的任务中运行拍照逻辑
sys.taskInit(capture_func)

-- 创建内存监控任务
-- 作用:在单独的任务中运行内存监控逻辑
sys.taskInit(memory_check)

-- 创建拍照触发任务
-- 作用:每30秒触发一次拍照上传业务
sys.taskInit(AirCAMERA_1030_func)

八、运行结果展示

8.1 拍照后上传

1、搭建硬件环境;

2、修改 netdrv_wifi.lua 中的 WIFI 账号密码;

3、烧录 DEMO 代码; 单路摄像头请将take_photo_http_post.lua中的usb_port_num修改为1; 四路或多路摄像头请将take_photo_http_post.lua中的usb_port_num修改为4或对应的摄像头数量;

4、 等待单摄像头自动拍照完成后上传平台,LUATOOLS会有如下打印;

[2025-12-03 10:13:16.931] luat:U(83052):I/user.初始化状态 true 这是第1个摄像头
[2025-12-03 10:13:16.931] luat:U(83053):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:13:17.053] luat:U(83187):I/user.摄像头数据 54696
[2025-12-03 10:13:17.053] luat:U(83188):I/user.拍照完成
[2025-12-03 10:13:17.053] luat:U(83189):I/user.这是第1个摄像头拍的
[2025-12-03 10:13:17.082] luat:D(83196):socket:connect to upload.air32.cn,80
[2025-12-03 10:13:17.082] luat:D(83197):DNS:upload.air32.cn state 0 id 9 ipv6 0 use dns server0, try 0
[2025-12-03 10:13:17.082] luat:D(83197):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:13:17.082] luat:D(83198):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:13:17.113] luat:I(83227):DNS:dns all done ,now stop
[2025-12-03 10:13:17.113] luat:D(83228):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:13:17.408] luat:U(83520):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:17.964] luat:U(84077):I/user.sys ram 233472 35256 35336
[2025-12-03 10:13:17.964] luat:U(84077):I/user.lua ram 2097144 730984 792808
[2025-12-03 10:13:18.399] luat:U(84521):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:19.390] luat:U(85522):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:20.411] luat:U(86523):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:20.971] luat:U(87078):I/user.sys ram 233472 35256 35336
[2025-12-03 10:13:20.971] luat:U(87078):I/user.lua ram 2097144 732128 792808
[2025-12-03 10:13:21.402] luat:U(87524):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:22.032] luat:U(88145):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:13:22.032] luat:U(88150):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:13:22.048] luat:U(88162):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:13:23.969] luat:U(90079):I/user.sys ram 233472 33376 35336
[2025-12-03 10:13:23.969] luat:U(90080):I/user.lua ram 2097144 693112 792808

等待4路摄像头自动轮切拍照完成后上传平台,LUATOOLS会有如下打印;

[2025-12-03 10:42:38.748] luat:U(3494):I/user.初始化状态 true 这是第1个摄像头
[2025-12-03 10:42:38.748] luat:U(3494):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:42:38.748] luat:D(3495):net:network ready 2, setup dns server
[2025-12-03 10:42:38.748] luat:D(3496):net:设置DNS服务器 id 2 index 0 ip 223.5.5.5
[2025-12-03 10:42:38.764] luat:D(3497):net:设置DNS服务器 id 2 index 1 ip 114.114.114.114
[2025-12-03 10:42:38.764] luat:U(3497):I/user.netdrv_wifi.ip_ready_func IP_READY 192.168.1.118 255.255.255.0 192.168.1.1 nil
[2025-12-03 10:42:38.764] luat:U(3497):I/user.dnsproxy 开始监听
[2025-12-03 10:42:38.764] luat:D(3498):wlan:sta ip 192.168.1.118
[2025-12-03 10:42:38.764] luat:D(3498):wlan:设置STA网卡可用
[2025-12-03 10:42:38.764] luat:D(3498):net:设置DNS服务器 id 2 index 0 ip 223.5.5.5
[2025-12-03 10:42:38.764] luat:D(3499):net:设置DNS服务器 id 2 index 1 ip 114.114.114.114
[2025-12-03 10:42:38.764] luat:U(3499):I/user.netdrv_wifi.ip_ready_func IP_READY 192.168.1.118 255.255.255.0 192.168.1.1 nil
[2025-12-03 10:42:38.764] luat:U(3499):I/user.dnsproxy 开始监听
[2025-12-03 10:42:39.755] luat:U(4491):I/user.摄像头数据 19572
[2025-12-03 10:42:39.755] luat:U(4492):I/user.拍照完成
[2025-12-03 10:42:39.755] luat:U(4493):I/user.这是第1个摄像头拍的
[2025-12-03 10:42:39.755] luat:D(4497):socket:connect to upload.air32.cn,80
[2025-12-03 10:42:39.755] luat:D(4498):DNS:upload.air32.cn state 0 id 1 ipv6 0 use dns server0, try 0
[2025-12-03 10:42:39.755] luat:D(4498):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:42:39.755] luat:D(4499):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:42:40.018] luat:I(4753):DNS:dns all done ,now stop
[2025-12-03 10:42:40.018] luat:D(4753):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:42:40.127] luat:U(4861):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:40.329] luat:U(5076):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:40.340] luat:U(5079):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:42:40.340] luat:U(5089):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:42:41.036] luat:U(5780):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:41.036] luat:U(5781):I/user.lua ram 2097144 181512 205912
[2025-12-03 10:42:44.036] luat:U(8782):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:44.036] luat:U(8783):I/user.lua ram 2097144 181832 205912
[2025-12-03 10:42:47.041] luat:U(11784):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:47.041] luat:U(11785):I/user.lua ram 2097144 182064 205912
[2025-12-03 10:42:48.038] ap1:uvc_stre:W(12678):uvc_camera_device_power_on, port:5, device:0
[2025-12-03 10:42:48.038] ap1:uvc_stre:W(12678):uvc_camera_device_power_on, port:1, device:0, ret:0
[2025-12-03 10:42:48.038] ap1:CHERRY_U:E(12680):!!!config->fps 30
[2025-12-03 10:42:48.065] ap1:CHERRY_U:E(12681):!!!custom fps 15
[2025-12-03 10:42:48.065] luat:U(12797):I/user.初始化状态 true 这是第2个摄像头
[2025-12-03 10:42:48.065] luat:U(12797):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:42:48.507] luat:U(13248):I/user.摄像头数据 20259
[2025-12-03 10:42:48.507] luat:U(13249):I/user.拍照完成
[2025-12-03 10:42:48.507] luat:U(13250):I/user.这是第2个摄像头拍的
[2025-12-03 10:42:48.507] luat:D(13254):socket:connect to upload.air32.cn,80
[2025-12-03 10:42:48.507] luat:D(13254):DNS:upload.air32.cn state 0 id 2 ipv6 0 use dns server0, try 0
[2025-12-03 10:42:48.507] luat:D(13255):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:42:48.507] luat:D(13255):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:42:48.558] luat:I(13276):DNS:dns all done ,now stop
[2025-12-03 10:42:48.558] luat:D(13277):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:42:48.615] luat:U(13358):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:48.957] luat:U(13715):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:48.957] luat:U(13717):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:42:48.975] luat:U(13727):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:42:50.051] luat:U(14786):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:50.051] luat:U(14787):I/user.lua ram 2097144 210240 236904
[2025-12-03 10:42:53.048] luat:U(17788):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:53.048] luat:U(17789):I/user.lua ram 2097144 210480 236904
[2025-12-03 10:42:56.046] luat:U(20790):I/user.sys ram 233472 33832 35792
[2025-12-03 10:42:56.046] luat:U(20790):I/user.lua ram 2097144 210688 236904
[2025-12-03 10:42:58.037] ap1:uvc_stre:W(22678):uvc_camera_device_power_on, port:5, device:0
[2025-12-03 10:42:58.037] ap1:uvc_stre:W(22678):uvc_camera_device_power_on, port:1, device:0, ret:0
[2025-12-03 10:42:58.037] ap1:CHERRY_U:E(22680):!!!config->fps 30
[2025-12-03 10:42:58.037] ap1:CHERRY_U:E(22680):!!!custom fps 15
[2025-12-03 10:42:58.329] luat:U(23063):I/user.初始化状态 true 这是第3个摄像头
[2025-12-03 10:42:58.329] luat:U(23064):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:42:58.454] luat:U(23197):I/user.摄像头数据 36352
[2025-12-03 10:42:58.454] luat:U(23198):I/user.拍照完成
[2025-12-03 10:42:58.454] luat:U(23199):I/user.这是第3个摄像头拍的
[2025-12-03 10:42:58.479] luat:D(23206):socket:connect to upload.air32.cn,80
[2025-12-03 10:42:58.479] luat:D(23206):DNS:upload.air32.cn state 0 id 3 ipv6 0 use dns server0, try 0
[2025-12-03 10:42:58.479] luat:D(23207):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:42:58.479] luat:D(23207):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:42:58.479] luat:I(23231):DNS:dns all done ,now stop
[2025-12-03 10:42:58.479] luat:D(23231):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:42:58.655] luat:U(23403):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:59.042] luat:U(23791):I/user.sys ram 233472 35712 35792
[2025-12-03 10:42:59.042] luat:U(23792):I/user.lua ram 2097144 252608 314400
[2025-12-03 10:42:59.151] luat:U(23898):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:42:59.162] luat:U(23901):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:42:59.162] luat:U(23911):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:43:02.049] luat:U(26793):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:02.049] luat:U(26794):I/user.lua ram 2097144 255232 314400
[2025-12-03 10:43:05.046] luat:U(29795):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:05.046] luat:U(29796):I/user.lua ram 2097144 255448 314400
[2025-12-03 10:43:08.043] ap1:uvc_stre:W(32678):uvc_camera_device_power_on, port:5, device:0
[2025-12-03 10:43:08.043] ap1:uvc_stre:W(32678):uvc_camera_device_power_on, port:1, device:0, ret:0
[2025-12-03 10:43:08.043] ap1:CHERRY_U:E(32679):!!!config->fps 30
[2025-12-03 10:43:08.043] ap1:CHERRY_U:E(32679):!!!custom fps 15
[2025-12-03 10:43:08.292] luat:U(33054):I/user.初始化状态 true 这是第4个摄像头
[2025-12-03 10:43:08.292] luat:U(33054):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:43:08.292] luat:U(33056):I/user.sys ram 233472 35584 35792
[2025-12-03 10:43:08.292] luat:U(33056):I/user.lua ram 2097144 257648 314400
[2025-12-03 10:43:09.301] luat:U(34051):I/user.摄像头数据 19328
[2025-12-03 10:43:09.301] luat:U(34053):I/user.拍照完成
[2025-12-03 10:43:09.301] luat:U(34053):I/user.这是第4个摄像头拍的
[2025-12-03 10:43:09.301] luat:D(34057):socket:connect to upload.air32.cn,80
[2025-12-03 10:43:09.301] luat:D(34057):DNS:upload.air32.cn state 0 id 4 ipv6 0 use dns server0, try 0
[2025-12-03 10:43:09.301] luat:D(34058):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:43:09.301] luat:D(34058):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:43:09.392] luat:I(34126):DNS:dns all done ,now stop
[2025-12-03 10:43:09.392] luat:D(34126):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:43:09.610] luat:U(34348):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:43:10.318] luat:U(35057):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:43:10.318] luat:U(35060):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:43:10.342] luat:U(35070):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:43:11.322] luat:U(36058):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:11.322] luat:U(36059):I/user.lua ram 2097144 282960 314400
[2025-12-03 10:43:14.317] luat:U(39060):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:14.317] luat:U(39061):I/user.lua ram 2097144 283176 314400
[2025-12-03 10:43:17.329] luat:U(42062):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:17.329] luat:U(42062):I/user.lua ram 2097144 283384 314400
[2025-12-03 10:43:18.039] ap0:uvc_stre:W(42678):uvc_camera_device_power_on, port:5, device:0
[2025-12-03 10:43:18.039] ap0:uvc_stre:W(42678):uvc_camera_device_power_on, port:1, device:0, ret:0
[2025-12-03 10:43:18.039] ap1:CHERRY_U:E(42679):!!!config->fps 30
[2025-12-03 10:43:18.039] ap1:CHERRY_U:E(42680):!!!custom fps 15
[2025-12-03 10:43:18.318] luat:U(43055):I/user.初始化状态 true 这是第1个摄像头
[2025-12-03 10:43:18.318] luat:U(43056):I/user.照片存储路径 /ram/test.jpg
[2025-12-03 10:43:18.505] luat:U(43251):I/user.摄像头数据 20172
[2025-12-03 10:43:18.505] luat:U(43252):I/user.拍照完成
[2025-12-03 10:43:18.505] luat:U(43253):I/user.这是第1个摄像头拍的
[2025-12-03 10:43:18.518] luat:D(43257):socket:connect to upload.air32.cn,80
[2025-12-03 10:43:18.518] luat:D(43257):DNS:upload.air32.cn state 0 id 5 ipv6 0 use dns server0, try 0
[2025-12-03 10:43:18.518] luat:D(43258):net:adatper 2 dns server 223.5.5.5
[2025-12-03 10:43:18.518] luat:D(43258):net:dns udp sendto 223.5.5.5:53 from 192.168.1.118
[2025-12-03 10:43:18.518] luat:I(43270):DNS:dns all done ,now stop
[2025-12-03 10:43:18.518] luat:D(43270):net:adapter 2 connect 49.232.89.122:80 TCP
[2025-12-03 10:43:18.707] luat:U(43455):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:43:19.440] luat:U(44184):I/user.httpplus 等待服务器完成响应
[2025-12-03 10:43:19.440] luat:U(44187):I/user.httpplus 服务器已完成响应,开始解析响应
[2025-12-03 10:43:19.451] luat:U(44195):I/user.http_upload_photo_task_func httpplus.request 200
[2025-12-03 10:43:20.323] luat:U(45064):I/user.sys ram 233472 33832 35792
[2025-12-03 10:43:20.323] luat:U(45065):I/user.lua ram 2097144 311256 337952

5、登录 https://www.air32.cn/upload/jpg/ 查看拍摄的照片;

九、总结

通过本文学习,你可以学习到使用Air6201核心板 +AirCAMERA_1030的拍照以及照片上传功能。