Explorar o código

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker hai 1 mes
pai
achega
5f51f4524c

+ 29 - 0
module/Air8101/project/control_network_camera/cam_control.lua

@@ -0,0 +1,29 @@
+
+--[[
+@module  cam_control
+@summary 网络摄像头控制模块
+@version 1.0
+@date    2025.12.30
+@author  拓毅恒
+@usage
+控制网络摄像头的OSD显示和拍照功能
+功能:在网络连接成功后,控制网络摄像头设置OSD文字显示内容和位置,并进行拍照操作,照片保存在SD卡中。
+
+本文件没有对外接口,直接在main.lua中require "cam_control"就可以加载运行。
+]]
+
+-- 导入exremotecam模块
+local exremotecam = require "exremotecam"
+
+local function camera_start()
+    sys.waitUntil("WIFI_CONNECT_OK")
+    log.info("开始运行OSD操作")
+    -- 配置大华摄像头OSD,分六行依次显示 1111 2222 3333 4444 5555 6666
+    exremotecam.OSDsetup("Dhua","192.168.1.108", 0, "1111|2222|3333|4444|5555|6666", 0, 2000)
+    -- 等待OSD配置完成再进行拍照
+    sys.wait(1000) 
+    log.info("开始运行抓图操作")
+    exremotecam.getphoto("Dhua", "192.168.1.108", 1)
+end
+
+sys.taskInit(camera_start)

+ 42 - 0
module/Air8101/project/control_network_camera/init_app.lua

@@ -0,0 +1,42 @@
+--[[
+@module  init_app
+@summary 网络摄像头控制系统初始化模块
+@version 1.0
+@date    2025.12.30
+@author  拓毅恒
+@usage
+初始化网络连接和SD卡挂载
+功能:自动连接指定的WiFi网络,并在联网成功后挂载SD卡,为摄像头控制功能提供基础环境。
+
+本文件没有对外接口,直接在main.lua中require "init_app"就可以加载运行。
+]]
+
+-- 挂载SD卡
+local function sdcard_mount_task()
+    local mount_result
+    -- gpio13为8101TF卡的供电控制引脚,在挂载前需要设置为高电平,不能省略
+    gpio.setup(13, 1)
+    mount_result = fatfs.mount(fatfs.SDIO, "/sd", 24 * 1000 * 1000)
+    log.info("SDCARD", "挂载SD卡结果:", mount_result)
+end
+
+-- Air8101 连接网络
+local function wifi_connect_task()
+    -- 连接WIFI网络
+    log.info("执行STA连接操作")
+    -- 模组需和摄像头连接同一网络
+    wlan.connect("@PHICOMM_75", "li19760705")
+    -- 等待wifi_sta网络连接成功
+    while not socket.adapter(socket.LWIP_STA) do
+        -- 在此处阻塞等待wifi连接成功的消息"IP_READY"
+        -- 或者等待1秒超时退出阻塞等待状态;
+        -- 注意:此处的1000毫秒超时不要修改的更长;
+        sys.waitUntil("IP_READY", 1000)
+    end
+    -- 联网成功后发送消息
+    sys.publish("WIFI_CONNECT_OK")
+    -- 开始挂载SD卡
+    sdcard_mount_task()
+end
+
+sys.taskInit(wifi_connect_task)

+ 84 - 0
module/Air8101/project/control_network_camera/main.lua

@@ -0,0 +1,84 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.1
+@date    2025.12.30
+@author  拓毅恒
+@usage
+演示功能概述
+1.1 网络摄像头控制
+网络摄像头控制系统是一种基于Air8101模组的轻量级摄像头控制解决方案,通过连接WiFi网络,实现对网络摄像头的OSD文字显示设置和拍照功能。
+1.2 系统工作原理
+设备启动后,自动连接指定的WiFi网络,初始化SD卡挂载。然后控制网络摄像头,设置OSD文字显示并进行拍照操作,照片保存在SD卡中。
+1.3 核心功能特性
+- 自动联网:设备自动连接指定的WiFi网络
+- SD卡管理:自动挂载SD卡,用于存储摄像头拍摄的照片
+- OSD控制:设置摄像头的OSD文字显示内容和位置
+- 远程拍照:控制网络摄像头进行拍照,并将照片保存到SD卡
+
+本示例基于合宙 Air8101 模组,演示 STA + 网络摄像头控制 的完整实现流程。设备连接到WiFi网络后,自动控制网络摄像头进行OSD设置和拍照操作。
+更多说明参考本目录下的readme.md文件
+]]
+
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+PROJECT = "CONTROL_NETWORK_CAMERA"
+VERSION = "001.000.000"
+
+
+-- 在日志中打印项目名和项目版本号
+log.info("main", PROJECT, VERSION)
+
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- 开启初始化配置功能模块
+require "init_app" 
+
+-- 引入任务控制模块
+require "cam_control"
+
+-- 用户代码已结束--------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 151 - 0
module/Air8101/project/control_network_camera/readme.md

@@ -0,0 +1,151 @@
+## 演示功能概述
+
+### 1.1 网络摄像头控制系统概述
+
+网络摄像头控制系统是一种基于Air8101模组的轻量级摄像头控制解决方案,通过连接WiFi网络,实现对网络摄像头的OSD文字显示设置和拍照功能。
+
+### 1.2 系统工作原理
+
+设备启动后,自动连接指定的WiFi网络,初始化SD卡挂载。然后控制网络摄像头,设置OSD文字显示并进行拍照操作,照片保存在SD卡中。
+
+### 1.3 核心功能特性
+
+- **自动联网**:设备自动连接指定的WiFi网络
+- **SD卡管理**:自动挂载SD卡,用于存储摄像头拍摄的照片
+- **OSD控制**:设置摄像头的OSD文字显示内容和位置
+- **远程拍照**:控制网络摄像头进行拍照,并将照片保存到SD卡
+
+本示例基于合宙 Air8101 模组,演示 **STA + 网络摄像头控制** 的完整实现流程。设备连接到WiFi网络后,自动控制网络摄像头进行OSD设置和拍照操作。
+
+#### 1、系统启动流程
+
+- **初始化阶段**:系统启动后,自动连接指定的WiFi网络
+- **环境准备**:联网成功后,自动挂载SD卡,为拍照功能做准备
+- **摄像头控制**:设置摄像头的OSD文字显示内容和位置
+- **拍照操作**:控制网络摄像头进行拍照,照片保存在SD卡中
+
+#### 2、WiFi连接配置
+
+使用 wlan.connect() 连接指定的WiFi网络,默认配置为名称"@PHICOMM_75",密码"li19760705"。
+
+#### 3、SD卡初始化与挂载
+
+- 设置GPIO13为高电平,为SD卡供电
+- 将SD卡挂载到文件系统,挂载点为`/sd`
+- 用于存储摄像头拍摄的照片
+
+#### 4、摄像头控制功能
+
+- **OSD设置**:设置摄像头的OSD文字显示内容和位置
+- **拍照功能**:控制摄像头进行拍照,照片保存为`/sd/1.jpeg`
+
+#### 5、运行效果
+
+- **WiFi连接成功**:设备成功连接到指定的WiFi网络
+- **SD卡挂载成功**:SD卡成功挂载到文件系统
+- **OSD设置完成**:摄像头的OSD文字显示设置成功
+- **拍照成功**:照片成功保存到SD卡中
+
+## 演示硬件环境
+
+![](https://docs.openluat.com/air8101/luatos/app/image/8101-AirMICROSD_1000.jpg)
+
+1、Air8101核心板一块
+
+2、TYPE-C USB数据线一根,Air8101核心板和数据线的硬件接线方式为:
+
+- Air8101核心板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+3、AirMICROSD_1000配件板一个+micro SD卡一张
+
+4、Air8101核心板与AirMICROSD_1000配件板直插,对应管脚为
+
+| Air8101核心板 | AirMICROSD_1000配件板 |
+| ------------- | ----------------- |
+| 59/3V3        | 3V3               |
+| gnd           | gnd               |
+| 9/GPIO6       | CD                |
+| 67/GPIO4      | D0                |
+| 66/GPIO3      | CMD               |
+| 65/GPIO2      | CLK               |
+
+5、支持OSD功能的网络摄像头一台(目前仅支持大华摄像头)
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、Air8101固件[Air8101 版本固件](https://docs.openluat.com/air8101/luatos/firmware/)(需确保固件版本≥V2001)
+
+## 演示核心步骤
+
+1、搭建好硬件环境,确保Air8101核心板和网络摄像头连接同一WiFi网络。
+
+2、如果需要测试SD卡功能,需要外挂SD卡来测试。
+
+3、通过Luatools将本工程代码与固件烧录到Air8101核心板中
+
+4、烧录完成后,给设备上电,观察串口日志确认系统正常启动
+
+系统启动日志示例:
+
+```lua
+[2025-12-30 15:45:09.929] luat:U(2090):I/user.main CONTROL_NETWORK_CAMERA 001.000.000
+[2025-12-30 15:45:09.960] luat:U(2113):I/user.执行STA连接操作
+[2025-12-30 15:45:12.007] luat:D(4165):wlan:STA connected @PHICOMM_75 
+[2025-12-30 15:45:12.279] luat:U(4434):I/user.SDCARD 挂载SD卡结果: true
+[2025-12-30 15:45:12.279] luat:U(4436):I/user.开始运行OSD操作
+[2025-12-30 15:45:12.279] luat:U(4436):I/user.osdsetup 检测到大华摄像头,开始初始化
+[2025-12-30 15:45:12.279] luat:U(4438):I/user.元素解析 索引 1 值 1111
+[2025-12-30 15:45:12.279] luat:U(4439):I/user.元素解析 索引 2 值 2222
+[2025-12-30 15:45:12.279] luat:U(4439):I/user.元素解析 索引 3 值 3333
+[2025-12-30 15:45:12.279] luat:U(4440):I/user.元素解析 索引 4 值 4444
+[2025-12-30 15:45:12.279] luat:U(4440):I/user.元素解析 索引 5 值 5555
+[2025-12-30 15:45:12.292] luat:U(4441):I/user.元素解析 索引 6 值 6666
+[2025-12-30 15:45:12.292] luat:D(4449):net:adapter 2 connect 192.168.1.108:80 TCP
+[2025-12-30 15:45:16.708] luat:U(8863):I/user.DHosd 第一次请求http,code: 401 table: 609B1CB8
+[2025-12-30 15:45:16.708] luat:U(4303):l/user.DigestAuth 鉴权信息重组完成
+[2025-12-30 15:45:16.708] luat:U(8863):I/user.DHosd 第二次请求http,code:200 OK
+[2025-12-30 15:45:17.695] luat:U(9864):I/user.开始运行抓图操作
+[2025-12-30 15:45:17.695] luat:U(9865):I/user.getphoto 检测到大华摄像头,开始初始化
+[2025-12-30 15:45:17.695] luat:U(9865):I/user.DHPicture 开始执行
+[2025-12-30 15:45:17.695] luat:D(9869):net:adapter 2 connect 192.168.1.108:80 TCP
+[2025-12-30 15:45:18.695] luat:U(5406):/user.DHPicture 第一次请求http,code: 401 table: 609AFFBO
+[2025-12-30 15:45:18.695] luat:U(5408):l/user.DigestAuth 鉴权信息重组完成
+[2025-12-30 15:45:18.695] luat:U(5408):/user.DHPicture 鉴权信息重组完成
+[2025-12-30 15:45:18.695] luat:U(8224):l/user.DHPicture 第二次请求http,code: 200
+[2025-12-30 15:45:19.413] luat:U(8256):l/user.DHpicture 拍照完成
+```
+
+5、拍照完成后,照片保存在SD卡中,路径为`/sd/1.jpeg`
+
+## 系统参数说明
+
+### WiFi参数
+
+- SSID:@PHICOMM_75(可在init_app.lua中修改)
+- 密码:li19760705(可在init_app.lua中修改)
+
+### 摄像头参数
+
+- 品牌:Dhua(大华)
+- IP地址:192.168.1.108(可在cam_control.lua中修改)
+- 通道号:0(OSD设置),1(拍照)
+- OSD内容:1111|2222|3333|4444|5555|6666(可在cam_control.lua中修改)
+- OSD位置:X=0, Y=2000(可在cam_control.lua中修改)
+
+### 存储参数
+
+- 照片路径:/sd/1.jpeg
+- 存储介质:SD卡(需FAT32格式)
+
+## 注意事项
+
+1、确保Air8101核心板和网络摄像头连接同一WiFi网络
+
+2、如需修改WiFi名称、密码或摄像头参数,请修改init_app.lua和cam_control.lua中的相关参数
+
+3、拍照前请确保SD卡已成功挂载,否则照片无法保存
+
+4、OSD文字内容需用竖线分隔,格式如"1111|2222|3333|4444"

+ 3 - 3
script/libs/airlbs.lua

@@ -1,8 +1,8 @@
 --[[
 @module airlbs
 @summary airlbs 定位服务(收费服务,需自行联系销售申请)
-@version 1.0
-@date    2024.11.01
+@version 1.1
+@date    2024.12.30
 @author  Dozingfiretruck
 @usage
 -- lbsloc 是异步回调接口,
@@ -31,7 +31,7 @@ local airlbs = {}
 
 local function airlbs_task(task_name, buff, timeout, adapter)
     local netc = socket.create(nil, lib_name)
-    socket.config(netc, adapter, true) -- udp
+    socket.config(netc, nil, true) -- udp
 
     sysplus.cleanMsg(lib_name)
     local result = libnet.connect(lib_name, 15000, netc, airlbs_host, airlbs_port)