跳转至

Air8101-网络摄像头控制

作者:拓毅恒 | 最后修改:2026-06-03

一、网络摄像头控制系统概述

本文档介绍基于 Air8101 工业引擎实现的网络摄像头控制系统功能,通过该功能可以实现对网络摄像头的 OSD (屏幕显示) 文字设置和远程拍照功能。设备连接到网络后,自动控制网络摄像头进行 OSD 设置和拍照操作,照片可保存到 SD 卡或内存中,并支持上传到测试服务器。

1.1 系统架构

网络摄像头控制系统由以下核心组件构成:

  • 网络连接模块:支持 WiFi STA 和以太网两种连接方式
  • SD 卡管理模块:挂载和管理 SD 卡存储,用于保存摄像头拍摄的照片
  • 摄像头控制模块:通过网络协议与摄像头通信,实现 OSD 设置和拍照功能
  • 照片上传模块:可将拍摄的照片上传到测试服务器

二、准备硬件环境

参考:Air8101 硬件环境清单,准备好硬件环境。

2.1 Air8101 核心板

本功能测试需要使用 Air8101 核心板 + AirMICROSD_1000 配件板

2.2 Air8101 核心板 +AirMICROSD_1010 配件板的硬件接线

如上图所示,Air8101 核心板和 AirMICROSD_1010 配件板的硬件接线方式为:

Air8101核心板
AirMICROSD_1010配件板
59/3V3
3V3
gnd
gnd
9/GPIO6
CD
67/GPIO4
D0
66/GPIO3
CMD
65/GPIO2
CLK

2.3 PC 电脑

WIN10 以及以上版本的 WINDOWS 系统;

2.4 数据通信线

USB 数据线(其一端为 Type-C 接口,用于连接 Air8101)。

2.5 SD/TF 卡

在各位选择使用的 TF 卡时,一定不要使用杂牌卡,一定要选择大品牌的主流 TF 卡,杂牌卡本身的稳定性无法保证。

Air8101 核心板购买链接:Air8101 核心板 WiFi 4G 以太网 蓝牙 720P显示屏 200万拍照-淘宝网

三、准备软件环境

3.1 文章内容应用

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

1. 烧录工具:Luatools 工具

2. 内核固件:https://docs.openluat.com/air8101/luatos/firmware/

3. 脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8101/demo/control_network_camera

4. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。

准备好软件环境之后,接下来查看 Air8101 产品手册中“Air8101 核心板使用手册 -> 使用说明”,将本篇文章中演示使用的项目文件烧录到 Air8101 核心板中。

3.2 API 介绍

这里仅介绍本项目所使用的主要 API:

exremotecam.osd(camera_param)

设置摄像头的 OSD 文字显示内容和位置

exremotecam.get_photo(camera_param)

控制网络摄像头进行拍照,并将照片保存到指定路径

四、功能实现

4.1 功能概述

本项目实现的核心功能包括:

  1. 多网络支持:支持 WiFi STA 和以太网两种连接方式
  2. SD 卡挂载:自动挂载 SD 卡,用于存储摄像头拍摄的照片
  3. OSD 控制:设置摄像头的 OSD 文字显示内容和位置
  4. 远程拍照:控制网络摄像头进行拍照,智能选择保存路径
  5. 照片上传:自动将拍摄的照片上传到测试服务器

4.2 代码结构

项目代码结构清晰,主要由以下几个文件组成:

  • main.lua:主入口文件,初始化系统环境
  • netdrv_device.lua:网络驱动设备功能模块,配置网卡模式
  • sdcard_mount_app.lua:SD 卡挂载功能模块
  • cam_control.lua:控制网络摄像头的 OSD 设置、拍照功能

4.3 核心代码示例

main.lua(主入口文件)

--[[
@module  main
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
@version 1.2
@date    2026.03.06
@author  拓毅恒
@usage
演示功能概述
1.1 网络摄像头控制
网络摄像头控制系统是一种基于Air8101模组的轻量级摄像头控制解决方案,通过连接WiFi网络或以太网,实现对网络摄像头的OSD文字显示设置、拍照和照片上传功能。
1.2 系统工作原理
设备启动后,自动连接指定的网络(WiFi或以太网),初始化SD卡挂载。然后控制网络摄像头,设置OSD文字显示并进行拍照操作,根据SD卡状态智能选择保存路径,最后将照片上传到测试服务器。
1.3 核心功能特性
- 多网络支持:支持WiFi STA和以太网两种连接方式
- 智能路径选择:SD卡挂载时保存到/sd/,未挂载时保存到/luadb/
- 自动照片上传:拍照后自动上传到air32.cn测试服务器
- OSD控制:设置摄像头的OSD文字显示内容和位置
- 远程拍照:控制网络摄像头进行拍照操作

本示例基于合宙 Air8101 模组,演示网络摄像头控制的完整实现流程。设备连接到网络后,自动控制网络摄像头进行OSD设置、拍照和照片上传操作。
更多说明参考本目录下的readme.md文件
]]

PROJECT = "CONTROL_NETWORK_CAMERA"
VERSION = "001.999.000"

log.info("main", PROJECT, VERSION)

-- 加载网络驱动设备功能模块
require "netdrv_device"

-- 开启SD卡挂载功能模块
require "sdcard_mount_app" 

-- 引入任务控制模块
require "cam_control"

-- 用户代码已结束--------------------------------------------
sys.run()

netdrv_device.lua(网络驱动设备模块)

--[[
@module  netdrv_device
@summary 网络驱动设备功能模块
@version 1.0
@date    2026.03.06
@author  拓毅恒
@usage
本文件为网络驱动设备功能模块,核心业务逻辑为:根据项目需求,选择并且配置合适的网卡(网络适配器)
1、WiFi STA模式:socket.LWIP_STA,无线网络连接;
2、以太网模式(SPI):socket.LWIP_USER1,通过SPI外挂CH390H芯片的以太网卡;

无论选择哪种网卡模式,在成功联网后都会发布"NET_CONNECT_OK"事件,用于通知摄像头控制系统启动。
]]

-- 配置选择的网卡模式,取消注释对应行以启用

-- 加载"WIFI STA网卡"驱动模块(默认启用)
require "netdrv_wifi"

-- 加载"通过SPI外挂CH390H芯片的以太网卡"驱动模块
-- require "netdrv_eth_spi"

sdcard_mount_app.lua(SD 卡挂载模块)

--[[
@module  sdcard_mount_app
@summary SD卡挂载功能模块
@version 1.1
@date    2026.03.06
@author  拓毅恒
@usage
SD卡挂载功能模块
功能:等待网络连接成功后挂载SD卡,为摄像头控制功能提供基础环境。

特性:
- 支持Air8101核心板的SD卡挂载
- 自动检测网络连接状态
- 提供SD卡空间信息查询
]]

-- 挂载SD卡
local function sdcard_mount_task()
    -- 等待网络就绪事件
    sys.waitUntil("NET_CONNECT_OK")

    -- 供电控制 (Air8101专用)
    -- gpio13为8101TF卡的供电控制引脚,在挂载前需要设置为高电平,不能省略
    gpio.setup(13, 1)

    -- 在Air8101核心板上TF卡的的pin_cs为gpio3,spi_id为1.请根据实际硬件修改
    local spi_id, pin_cs = 1, 3
    spi.setup(spi_id, nil, 0, 0, 8, 2000000)
    -- 初始化后拉高pin_cs,准备开始挂载TF卡
    gpio.setup(pin_cs, 1)
    -- 开始进行tf卡挂载
    local mount_ok, mount_err = fatfs.mount(fatfs.SPI, "/sd", spi_id, pin_cs, 24 * 1000 * 1000)
    if mount_ok then
        log.info("fatfs.mount", "挂载成功", mount_err)
    else
        log.error("fatfs.mount", "挂载失败", mount_err)
        return false
    end

    -- 获取SD卡的可用空间信息并打印
    local data, err = fatfs.getfree("/sd")
    if data then
        log.info("fatfs", "getfree", json.encode(data))
    else
        log.info("fatfs", "getfree", "err", err)
        return false
    end
end

sys.taskInit(sdcard_mount_task)

cam_control.lua(摄像头控制模块)

--[[
@module  cam_control
@summary 网络摄像头控制模块
@version 1.0
@date    2026.03.06
@author  拓毅恒
@usage
控制网络摄像头的OSD显示、拍照和上传功能
功能:在网络连接成功后,控制网络摄像头设置OSD文字显示内容和位置,进行拍照操作,并根据SD卡状态智能选择保存路径,最后将照片上传到测试服务器。

特性:
- 支持大华摄像头OSD文字显示
- 智能路径选择:SD卡挂载时保存到/sd/,未挂载时保存到/luadb/
- 自动照片上传到air32.cn测试服务器
]]

-- 导入exremotecam模块
local dhcam = require "dhcam"
local exremotecam = require "exremotecam"
-- 引入httpplus扩展库模块用于照片上传
local httpplus = require "httpplus"

-- 保存图片名称
local photo_save_addr = "get_photo.jpeg"

-- 照片上传功能函数
local function upload_photo_task()
    while true do
        -- 等待拍照完成事件,并获取保存路径
        local _, save_path = sys.waitUntil("PHOTO_CAPTURE_DONE")

        -- 读取照片文件
        local photo_data = io.readFile(save_path)
        if photo_data then
            log.info("照片读取成功", "文件大小:", #photo_data, "字节", "路径:", save_path)

            -- 通过网卡状态判断网络是否连接成功
            while not socket.adapter(socket.dft()) do
                log.warn("upload_photo_task", "等待网络连接...")
                sys.waitUntil("IP_READY", 30000)
            end

            -- 将拍摄到的照片数据上传到服务器air32.cn
            local code = httpplus.request({
                url = "http://upload.air32.cn/api/upload/jpg",
                method = "POST",
                body = photo_data
            })

            -- 打印http传输状态
            log.info("照片上传结果", "HTTP状态码:", code)

            -- 根据状态码判断上传结果
            if code == 200 then
                log.info("照片上传成功", "可在 https://www.air32.cn/upload/jpg/ 查看")
            else
                log.warn("照片上传失败", "状态码:", code)
            end
        else
            log.error("照片读取失败", "文件不存在或读取错误", "路径:", save_path)
        end
    end
end

-- 拍照任务
local function camera_start()
    sys.waitUntil("NET_CONNECT_OK")
    log.info("开始运行OSD操作")

    -- 配置大华摄像头OSD,分六行依次显示 1111 2222 3333 4444 5555 6666
    exremotecam.osd({
        brand = "dhcam", 
        host = "192.168.1.108", 
        channel = 0, 
        text = "1111|2222|3333|4444|5555|6666", 
        x = 0, 
        y = 2000
    })

    log.info("开始运行抓图操作")
    -- 判断SD卡状态,选择保存路径
    local save_path
    if io.exists("/sd") then
        save_path = "/sd/" .. photo_save_addr
        log.info("SD卡已挂载", "照片将保存到:", save_path)
    else
        save_path = "/luadb/" .. photo_save_addr
        log.info("SD卡未挂载", "照片将保存到:", save_path)
    end

    -- 执行拍照操作
    local result = exremotecam.get_photo({
        brand = "dhcam", 
        host = "192.168.1.108", 
        channel = 1, 
        save_path = save_path
    })

    if result == 1 then
        log.info("拍照成功", "照片已保存到:", save_path)
        -- 发布拍照完成事件,触发上传任务
        sys.publish("PHOTO_CAPTURE_DONE", save_path)
    else
        log.warn("拍照失败", "返回码:", result)
    end
end

sys.taskInit(camera_start)
sys.taskInit(upload_photo_task)

五、功能演示

5.1 配置参数

netdrv_device.lua 中选择网络连接方式:

-- 加载"WIFI STA网卡"驱动模块(默认启用)
require "netdrv_wifi"

-- 加载"通过SPI外挂CH390H芯片的以太网卡"驱动模块
-- require "netdrv_eth_spi"

netdrv_wifi.lua 中修改 WiFi 连接参数:

-- 连接WIFI网络
wlan.connect("茶室-降功耗,找合宙!", "Air123456")

cam_control.lua 中修改摄像头参数:

-- 配置大华摄像头OSD
exremotecam.osd({
    brand = "dhcam", 
    host = "192.168.1.108", 
    channel = 0, 
    text = "1111|2222|3333|4444|5555|6666", 
    x = 0, 
    y = 2000
})

-- 执行拍照操作
exremotecam.get_photo({
    brand = "dhcam", 
    host = "192.168.1.108", 
    channel = 1, 
    save_path = save_path
})

5.2 启动系统

使用 Luatools 工具烧录项目文件到 Air8101 核心板

5.3 WiFi 连接

设备启动后,自动连接指定的网络(WiFi 或以太网)

5.4 SD 卡挂载

网络连接成功后,自动挂载 SD 卡

5.5 OSD 设置

SD 卡挂载成功后,自动设置摄像头的 OSD 文字显示

5.6 远程拍照

OSD 设置完成后,自动控制摄像头进行拍照,照片保存在 SD 卡中

5.7 查看照片

将 SD 卡从 AirMICROSD_1000 配件板中取出,插入电脑查看拍摄的照片。可以看到左边显示了 OSD 设置的内容

六、总结

本文档详细介绍了基于 Air8101 工业引擎的网络摄像头控制系统实现方法。通过简单的配置和操作,用户可以快速实现对网络摄像头的 OSD 设置和远程拍照功能。

系统具有以下特点:

  • 操作简单:通过配置文件设置参数,设备自动执行所有操作
  • 功能实用:支持 OSD 文字显示设置和远程拍照功能
  • 存储可靠:照片保存在 SD 卡中,方便后续查看和处理

该系统适用于需要远程控制网络摄像头的场景,如视频监控、远程检测、智能安防等应用。

七、常见问题

7.1 无法连接到 WiFi 网络

确保 WiFi 名称和密码正确,设备与路由器之间的距离不要太远,避免信号干扰。

7.2 OSD 设置不生效

确保摄像头品牌为 "Dhua"(当前仅支持大华品牌),摄像头 IP 地址正确,设备与摄像头在同一网络中。

7.3 拍照功能无法保存图片

确保 SD 卡已正确挂载,SD 卡有足够的存储空间,摄像头 IP 地址和通道号正确。