- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
Air8780P + VL53L1X 激光测距传感器低功耗数据采集与上报 Demo
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口,负责 PRODUCT_KEY 定义、errDump 开启、网络驱动加载和业务模块调度
- app_vl53l1x_main.lua - 业务逻辑主协调模块,实现双任务架构(PSM+超时管理 + 业务逻辑),调用各模块完成完整流程
- sensor_vl53l1x.lua - VL53L1X 传感器驱动封装模块,含初始化、数据采集、关闭接口
- aircloud.lua - 云平台数据上报模块,封装 excloud 和 MQTT 双通道上报,含 payload 构建
- fota_mgr.lua - FOTA 远程升级管理模块,含版本文件管理、首次启动检测、升级检查
- psm_mgr.lua - PSM+ 低功耗模式管理模块,含 LED 指示控制和深度休眠入口
- netdrv_device.lua - 网络驱动设备模块
- netdrv/netdrv_4g.lua - 4G 网卡驱动
1.2 扩展库模块
- exs_vl53l1x - VL53L1X 激光测距传感器扩展库
- libfota2 - 远程升级扩展库
- excloud - 合宙 IoT 平台数据交互扩展库
二、演示流程介绍
本 demo 采用双任务架构:
- 任务1(PSM+超时管理):到设定时间就进入 PSM+,期间等待 FOTA 消息,收到后等待升级结果(最长 10 分钟),超时或失败也进入 PSM+ 下次再试
- 任务2(业务逻辑):传感器采集 → 联网 → 双通道上报 → FOTA 检查 → PSM+
开机 → GPIO27 拉高(LED亮) → 检查FOTA后首次启动 → 传感器初始化 → 采集3次测距数据 → 关闭传感器 → 等待4G网络 → excloud连接 → 双通道(aircloud+MQTT)上报 → FOTA检查 → 进入PSM+模式休眠 → 定时唤醒后重复
三、硬件准备
3.1 硬件清单
- Air8780P 工业模组 × 1
- VL53L1X 激光测距传感器模块 × 1
- SIM 卡 × 1(4G 联网)
- 母对母杜邦线 × 4
- TYPE-C 数据线 × 1
3.2 接线配置
3.2.1 VL53L1X 传感器接线
| Air8780P | VL53L1X |
|---|---|
| 3.3V | VIN |
| GND | GND |
| GPIO1 | SCL |
| GPIO2 | SDA |
说明:VL53L1X 传感器 I2C 地址默认 0x29,支持软件 I2C 和硬件 I2C 两种模式,本 demo 使用 GPIO1/GPIO2 软件 I2C 模式。
3.2.2 指示灯说明
| Air8780P | 功能 |
|---|---|
| GPIO27 | LED 指示灯,正常工作状态拉高点亮,进入 PSM+ 前拉低熄灭 |
四、演示软件环境
4.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
4.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS-SoC_V2046_Air780EPM 1号固件
4.3 脚本文件
- main.lua - 主程序入口
- prj/prj_vl53l1x.lua - 项目编排模块(业务协调/事件驱动)
- drv/netdrv_device.lua - 网络驱动设备模块
- drv/drv_led.lua - LED指示灯驱动(事件订阅:LED_SET_HIGH/LED_SET_LOW)
- drv/drv_psm.lua - PSM+低功耗模式驱动(事件订阅:DRV_SET_PSM)
- sensor/sensor_vl53l1x.lua - VL53L1X 传感器驱动封装模块
- cloud/aircloud.lua - 云平台(excloud + MQTT)数据上报模块
- fota/fota_mgr.lua - FOTA 远程升级管理模块
- netdrv/netdrv_4g.lua - 4G 网卡驱动
- exs_vl53l1x (扩展库) - VL53L1X 测距传感器驱动
- libfota2 (扩展库) - 远程升级
- excloud (扩展库) - 合宙 IoT 平台
五、演示核心步骤
5.1 硬件准备
- 按照接线表将 VL53L1X 传感器模块连接到 Air8780P 模组
- 确认 SIM 卡已正确安装
- 通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
5.2 软件配置
在 main.lua 中配置 PRODUCT_KEY:
PRODUCT_KEY = "PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ" -- 请改为实际的PRODUCT_KEY
在 app_vl53l1x_main.lua 中可根据需求调整以下参数:
local CFG = {
psm_entry_max_s = 90, -- 开机到进入PSM+的超时上限(秒)
psm_sleep_min_s = 15, -- PSM+休眠时间(分钟),唤醒后重新开始循环
fota_wait_max_s = 600, -- FOTA等待最长时间(秒),默认10分钟
sensor_samples = 3, -- 每次唤醒后采集传感器的次数
}
如需更换 MQTT 服务器,修改 app_vl53l1x_main.lua 中 CFG 的 mqtt_broker 和 mqtt_port。
5.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
5.4 功能流程说明
5.4.1 双任务架构
本 demo 同时运行两个任务:
任务1(PSM+超时管理):开机后立即启动计时,最大等待 psm_entry_max_s 秒。期间等待 FOTA 消息:
- 未收到 FOTA 消息 → 到时间直接进入 PSM+
- 收到
FOTA_UPGRADING→ 延长等待 FOTA 结果,最长fota_wait_max_s秒(默认 10 分钟)- FOTA 成功 → 上报升级结果后重启
- FOTA 失败或超时 → 进入 PSM+,下次唤醒再试
任务2(业务逻辑):完成传感器采集、联网上报、FOTA 检查后进入 PSM+
两个任务任意一个先到 PSM+ 入口时,系统在所有任务都阻塞后自动进入深度休眠。
5.4.2 开机自检
- 设备启动后,GPIO27 拉高(LED 点亮),表示进入正常工作状态
- 检查版本标记文件:如果检测到 FOTA 升级后的首次启动,会在日志中打印升级前后版本信息
- 初始化 VL53L1X 传感器,等待固件就绪、写入预设模式配置
5.4.2 数据采集
- 传感器初始化成功后,开始采集测距数据,默认采集 3 次
- 每次采集间隔 500ms,日志中会打印每次采集的距离值和状态
- 计算有效数据的平均值作为本次上报的测距结果
5.4.3 数据上报
- 等待 4G 网络就绪
- 连接合宙 IoT 平台(aircloud)
- 通过 aircloud 和 MQTT 双通道上报传感器数据:
- aircloud:上报平均距离
- MQTT:上报 JSON 格式完整数据,Topic 为
IMEI/vl53l1x/up
5.4.4 FOTA 升级
- 非 FOTA 后首次启动时,任务2检查 libfota2 远程升级,同时发布
FOTA_UPGRADING消息通知任务1 - 任务1收到消息后延长 PSM+ 等待时间,最长
fota_wait_max_s秒(默认 10 分钟) - 任务2上报"FOTA: 正在检查/升级中"状态
- 升级包下载成功后上报升级结果,然后重启模块
- 重启后首次运行会上报升级前后版本对比信息,上报完成后删除版本标记文件
- FOTA 超时(如网络不好)→ 进入 PSM+,下次唤醒再试
5.4.5 PSM+ 低功耗
- 所有业务处理完成后,配置深度休眠定时器
- GPIO27 拉低(LED 熄灭)
- 调用
pm.power(pm.WORK_MODE, 3)进入 PSM+ 模式 - 定时唤醒后系统重新启动,从 main.lua 开始执行
5.5 预期效果
- 数据采集:每次开机自动采集 3 次距离数据,日志实时打印
- 联网上报:aircloud 和 MQTT 双通道同时上报,数据格式完整
- 低功耗:上报完成后进入 PSM+ 模式,功耗降至 uA 级别
- 定时唤醒:默认 15 分钟(可配置)后唤醒,重复整个流程
- 日志如下:
[2026-07-21 16:50:57.264][000000000.000] main_entry 708:SDK base line V017_p001.026
[2026-07-21 16:50:57.267][000000000.007] am_service_init 1372:Air780EPM_A11
[2026-07-21 16:50:57.268][000000000.007] am_get_chip_type 868:6bef6,8,4,31,8,EC718PM
[2026-07-21 16:50:57.270][000000000.007] am_service_init 1380:APB MP 102400000
[2026-07-21 16:50:57.273][000000000.048] bsp_user_init_io 417:io volt 3.3v 21
[2026-07-21 16:50:57.276][000000000.048] BSP_CustomInit 558:hardfault mode init 4
[2026-07-21 16:50:57.278][000000000.049] Uart_ChangeBR 1461:uart0, 6000000 6028985 26000000 69
[2026-07-21 16:50:57.284][000000000.070] I/pm poweron: Power/Reset
[2026-07-21 16:50:57.287][000000000.070] luat_pm_get_poweron_reason 336:ap 1, cp 1
[2026-07-21 16:50:57.290][000000000.070] I/pm poweron reason: 0 0 0
[2026-07-21 16:50:57.293][000000000.178] self_info 125:model Air780EPM_A11 imei 864317083866528 dbversion 0x405e3b06
[2026-07-21 16:50:57.295][000000000.178] self_info 127:firmware[1] BASIC fs 168kbyte script 256kbyte
[2026-07-21 16:50:57.300][000000000.178] I/main LuatOS@Air780EPM base 26.04 bsp V2046 32bit
[2026-07-21 16:50:57.304][000000000.178] I/main ROM Build: Jul 7 2026 20:39:17
[2026-07-21 16:50:57.307][000000000.180] W/pins /luadb/pins_air780epm.json not exist!!
[2026-07-21 16:50:57.311][000000000.182] D/main loadlibs luavm 1048568 14784 14784
[2026-07-21 16:50:57.315][000000000.183] D/main loadlibs sys 2366664 82956 89556
[2026-07-21 16:50:57.318][000000000.183] D/main loadlibs psram 2366664 82956 89556
[2026-07-21 16:50:57.320][000000000.200] I/user.main Air8780P_VL53L1X 001.999.000
[2026-07-21 16:50:57.322][000000000.236] D/user.libfota2 version -> 202607021200
[2026-07-21 16:50:57.327][000000000.272] D/user.httpplus version -> 202607021200
[2026-07-21 16:50:57.330][000000000.284] D/user.exmtn version -> 202607021200
[2026-07-21 16:50:57.332][000000000.289] D/user.excloud version -> 202607091431
[2026-07-21 16:50:57.334][000000000.293] I/user.app_vl53l1x ========== Air8780P VL53L1X 主任务启动 ==========
[2026-07-21 16:50:57.337][000000000.294] I/user.app_vl53l1x 配置: wait=60s psm=5min samples=3
[2026-07-21 16:50:57.343][000000000.294] I/user.app_vl53l1x GPIO27 HIGH
[2026-07-21 16:50:57.347][000000000.301] I/user.app_vl53l1x 保存版本信息到文件: 001.999.000,Air8780P_VL53L1X
[2026-07-21 16:50:57.373][000000000.302] I/user.app_vl53l1x 正在初始化VL53L1X传感器...
[2026-07-21 16:50:57.384][000000000.318] I/user.exs_vl53l1x 固件就绪 0x00E5=0x03
[2026-07-21 16:50:57.394][000000000.436] I/user.exs_vl53l1x 预设模式配置写入完成 (mode=standard)
[2026-07-21 16:50:57.402][000000000.440] I/user.exs_vl53l1x 芯片 MID=0xEA MT=0xCC
[2026-07-21 16:50:57.418][000000000.642] I/user.exs_vl53l1x 初始化完成,Standard Ranging 测距已启动
[2026-07-21 16:50:57.424][000000000.643] I/user.app_vl53l1x VL53L1X初始化成功
[2026-07-21 16:50:57.429][000000000.643] I/user.app_vl53l1x 开始采集传感器数据,采集次数=3
[2026-07-21 16:50:57.878][000000001.195] I/user.app_vl53l1x 采集[1/3] 距离=267mm 状态=测距成功
[2026-07-21 16:50:58.147][000000001.704] I/user.app_vl53l1x 采集[2/3] 距离=261mm 状态=测距成功
[2026-07-21 16:50:58.158][000000002.215] I/user.app_vl53l1x 采集[3/3] 距离=267mm 状态=测距成功
[2026-07-21 16:50:58.166][000000002.215] I/user.app_vl53l1x 采集完成: 有效3帧, 平均距离=265mm
[2026-07-21 16:50:58.177][000000002.216] I/user.app_vl53l1x 测距结果 = 265 mm (有效3帧, 原始数据=267,261,267)
[2026-07-21 16:50:58.188][000000002.216] I/user.app_vl53l1x 关闭VL53L1X传感器
[2026-07-21 16:50:58.196][000000002.222] I/user.exs_vl53l1x 传感器已关闭
[2026-07-21 16:50:58.208][000000002.222] I/user.app_vl53l1x 等待4G网络就绪...
[2026-07-21 16:50:58.214][000000002.222] W/user.app_vl53l1x 等待IP_READY 1 1
[2026-07-21 16:50:58.465][000000002.250] I/mobile sim0 sms ready
[2026-07-21 16:50:58.474][000000002.251] D/mobile cid1, state0
[2026-07-21 16:50:58.483][000000002.252] D/mobile bearer act 0, result 0
[2026-07-21 16:50:58.493][000000002.252] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-21 16:50:58.503][000000002.253] I/user.netdrv_4g IP_READY 10.51.56.19 255.255.255.255 0.0.0.0 nil
[2026-07-21 16:50:58.522][000000002.254] I/user.app_vl53l1x 4G网络已就绪 10.51.56.19 255.255.255.255 0.0.0.0 nil
[2026-07-21 16:50:58.538][000000002.255] I/user.app_vl53l1x 正在初始化excloud...
[2026-07-21 16:50:58.549][000000002.255] W/user.excloud.setup 不再需要主动配置use_getip
[2026-07-21 16:50:58.562][000000002.255] W/user.excloud.setup 不再需要主动配置device_type
[2026-07-21 16:50:58.582][000000002.257] I/mobile l_mobile_muid called
[2026-07-21 16:50:58.587][000000002.263] I/mobile l_mobile_muid ret=32
[2026-07-21 16:50:58.600][000000002.263] I/user.[excloud]4G设备 IMEI: 864317083866528 MUID: 20260702152525A860510A9885483051
[2026-07-21 16:50:58.613][000000002.265] I/user.[excloud]setup 初始化成功 设备ID: 864317083866528
[2026-07-21 16:50:58.626][000000002.265] I/user.[excloud]首次连接,获取服务器信息...
[2026-07-21 16:50:58.635][000000002.266] I/mobile l_mobile_muid called
[2026-07-21 16:50:58.652][000000002.267] I/mobile l_mobile_muid ret=32
[2026-07-21 16:50:58.670][000000002.268] I/user.[excloud]getip 类型: 3 key: unusedkey-864317083866528-20260702152525A860510A9885483051
[2026-07-21 16:50:58.680][000000002.278] D/socket connect to gps.openluat.com,443
[2026-07-21 16:50:58.694][000000002.279] dns_run 676:gps.openluat.com state 0 id 1 ipv6 0 use dns server0, try 0
[2026-07-21 16:50:58.707][000000002.297] D/mobile TIME_SYNC 0 tm 1784623860
[2026-07-21 16:50:58.716][000000002.321] dns_run 693:dns all done ,now stop
[2026-07-21 16:50:58.936][000000003.217] I/user.httpplus 服务器已完成响应
[2026-07-21 16:50:58.945][000000003.219] I/user.[excloud]getip响应 HTTP: 200 Body:
[2026-07-21 16:50:58.950][000000003.220] {"msg":"ok","conninfo":{"ipv4":"124.71.128.165","port":9108,"auth_key":"PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ"},"imginfo":{"url":"https://api.luatos.com/iot/air_up/image","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}},"audinfo":{"url":"https://api.luatos.com/iot/air_up/audio","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}},"mtninfo":{"url":"https://api.luatos.com/iot/air_up/file","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}}}
[2026-07-21 16:50:58.968][000000003.221] I/user.[excloud]TCP/UDP连接信息 host: 124.71.128.165 port: 9108 key: nil
[2026-07-21 16:50:58.973][000000003.221] I/user.[excloud]获取到图片上传信息
[2026-07-21 16:50:58.979][000000003.222] I/user.[excloud]获取到音频上传信息
[2026-07-21 16:50:58.994][000000003.222] I/user.[excloud]获取到运维日志上传信息
[2026-07-21 16:50:59.005][000000003.222] W/user.[excloud]未获取到二维码信息
[2026-07-21 16:50:59.012][000000003.223] I/user.[excloud]自动获取到auth_key
[2026-07-21 16:50:59.022][000000003.223] I/user.[excloud]getip 更新配置: 124.71.128.165 9108
[2026-07-21 16:50:59.029][000000003.223] I/user.[excloud]getip 成功: true
[2026-07-21 16:50:59.038][000000003.224] I/user.[excloud]服务器信息获取成功 host: 124.71.128.165 port: 9108 transport: tcp
[2026-07-21 16:50:59.043][000000003.224] I/user.[excloud]创建TCP连接
[2026-07-21 16:50:59.056][000000003.225] D/socket connect to 124.71.128.165,9108
[2026-07-21 16:50:59.067][000000003.227] I/user.[excloud]TCP连接结果 true false
[2026-07-21 16:50:59.071][000000003.227] I/user.[excloud]excloud service started
[2026-07-21 16:50:59.081][000000003.228] I/user.[excloud]excloud 自动心跳已启动,间隔 300 秒
[2026-07-21 16:50:59.088][000000003.282] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554449 0
[2026-07-21 16:50:59.093][000000003.282] I/user.[excloud]TCP socket TCP连接成功
[2026-07-21 16:50:59.103][000000003.283] I/user.app_vl53l1x excloud连接成功
[2026-07-21 16:50:59.111][000000003.283] I/mobile l_mobile_muid called
[2026-07-21 16:50:59.117][000000003.285] I/mobile l_mobile_muid ret=32
[2026-07-21 16:50:59.120][000000003.285] I/user.[excloud] 发送鉴权请求
[2026-07-21 16:50:59.126][000000003.286] I/user.[excloud]构建发送数据 field: 16 type: 3 value: PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ-864317083866528-20260702152525A860510A9885483051
[2026-07-21 16:50:59.134][000000003.287] I/user.[excloud]tlv发送数据长度4 85
[2026-07-21 16:50:59.137][000000003.287] I/user.[excloud]构建消息头 seq: 2 len: 85 flags: 18 dev: 0186431708386652
[2026-07-21 16:50:59.147][000000003.290] I/user.app_vl53l1x excloud发送成功, 流水号: 2
[2026-07-21 16:50:59.151][000000003.290] I/user.[excloud]数据发送成功 101 字节
[2026-07-21 16:50:59.155][000000003.351] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554450 0
[2026-07-21 16:50:59.161][000000003.352] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:50:59.165][000000003.411] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554452 0
[2026-07-21 16:50:59.171][000000003.412] I/user.[excloud]TCP socket 收到数据 22 字节 01864317083866520001000600000000301100026F6B 44
[2026-07-21 16:50:59.181][000000003.413] I/user.[excloud]解析消息头 设备ID: 864317083866528 序列号: 1 消息长度: 6 协议版本: 0 需要回复: false UDP承载: false 包含auth_key: false
[2026-07-21 16:50:59.187][000000003.414] I/user.[excloud]鉴权成功 ok
[2026-07-21 16:50:59.193][000000003.415] I/user.app_vl53l1x excloud认证成功
[2026-07-21 16:50:59.198][000000003.417] I/user.[excloud]构建发送数据 field: 20 type: 5 value: 265
[2026-07-21 16:50:59.204][000000003.418] I/user.[excloud]tlv发送数据长度4 7
[2026-07-21 16:50:59.207][000000003.419] I/user.[excloud]构建消息头 seq: 3 len: 7 flags: 2 dev: 0186431708386652
[2026-07-21 16:50:59.211][000000003.421] I/user.app_vl53l1x excloud发送成功, 流水号: 3
[2026-07-21 16:50:59.215][000000003.421] I/user.[excloud]数据发送成功 23 字节
[2026-07-21 16:50:59.222][000000003.422] I/user.app_vl53l1x excloud数据上报成功
[2026-07-21 16:50:59.227][000000003.424] I/user.app_vl53l1x MQTT上报数据到: 864317083866528/vl53l1x/up
[2026-07-21 16:50:59.231][000000003.428] dns_run 676:lbsmqtt.airm2m.com state 0 id 2 ipv6 0 use dns server0, try 0
[2026-07-21 16:50:59.238][000000003.461] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554450 0
[2026-07-21 16:50:59.243][000000003.462] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:50:59.247][000000003.471] dns_run 693:dns all done ,now stop
[2026-07-21 16:50:59.313][000000003.599] I/user.app_vl53l1x MQTT事件: conack nil
[2026-07-21 16:50:59.322][000000003.599] I/user.app_vl53l1x MQTT连接成功
[2026-07-21 16:50:59.328][000000003.601] I/user.app_vl53l1x MQTT已发布: {"distance_mm":265,"project":"Air8780P_VL53L1X","distances":[267,261,267],"imei":"864317083866528","valid_samples":3,"ts":1784623861,"version":"001.999.000"}
[2026-07-21 16:50:59.391][000000003.679] I/user.app_vl53l1x MQTT事件: sent 1
[2026-07-21 16:50:59.399][000000003.679] I/user.app_vl53l1x MQTT数据发送成功
[2026-07-21 16:50:59.405][000000003.681] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:3
[2026-07-21 16:50:59.414][000000003.682] I/user.app_vl53l1x MQTT事件: disconnect 0
[2026-07-21 16:50:59.418][000000003.682] W/user.app_vl53l1x MQTT断开
[2026-07-21 16:50:59.429][000000003.683] I/user.app_vl53l1x MQTT事件: close nil
[2026-07-21 16:50:59.899][000000004.181] W/mqtt network_tx ret -1, closing socket
[2026-07-21 16:50:59.903][000000004.182] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:0
[2026-07-21 16:50:59.907][000000004.182] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:0
[2026-07-21 16:50:59.912][000000004.183] I/user.app_vl53l1x MQTT短连接结束,发送 成功
[2026-07-21 16:50:59.919][000000004.183] I/user.app_vl53l1x 开始检查FOTA升级...
[2026-07-21 16:50:59.924][000000004.186] I/user.app_vl53l1x 保存版本信息到文件: 001.999.000,Air8780P_VL53L1X
[2026-07-21 16:50:59.929][000000004.186] I/user.[excloud]构建发送数据 field: 20 type: 5 value: FOTA: 正在检查/升级中
[2026-07-21 16:50:59.940][000000004.188] I/user.[excloud]tlv发送数据长度4 32
[2026-07-21 16:50:59.944][000000004.188] I/user.[excloud]构建消息头 seq: 4 len: 32 flags: 2 dev: 0186431708386652
[2026-07-21 16:50:59.949][000000004.190] I/user.app_vl53l1x excloud发送成功, 流水号: 4
[2026-07-21 16:50:59.953][000000004.191] I/user.[excloud]数据发送成功 48 字节
[2026-07-21 16:50:59.957][000000004.191] I/user.app_vl53l1x 已上报FOTA升级状态
[2026-07-21 16:50:59.962][000000004.192] I/user.app_vl53l1x FOTA期间同时上报传感器数据: 265 mm
[2026-07-21 16:50:59.970][000000004.194] I/user.libfota2.url GET http://iot.openluat.com/api/site/firmware_upgrade?imei=864317083866528&project_key=PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ&firmware_name=Air8780P_VL53L1X_LuatOS-SoC_Air780EPM&version=2046.001.000
[2026-07-21 16:50:59.974][000000004.194] I/user.libfota2.imei/mac imei=864317083866528
[2026-07-21 16:50:59.978][000000004.195] I/user.libfota2.project_key PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ
[2026-07-21 16:50:59.982][000000004.195] I/user.libfota2.firmware_name Air8780P_VL53L1X_LuatOS-SoC_Air780EPM
[2026-07-21 16:50:59.985][000000004.195] I/user.libfota2.version 2046.001.000
[2026-07-21 16:50:59.988][000000004.197] dns_run 676:iot.openluat.com state 0 id 3 ipv6 0 use dns server0, try 0
[2026-07-21 16:50:59.995][000000004.241] dns_run 693:dns all done ,now stop
[2026-07-21 16:51:00.003][000000004.243] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554450 0
[2026-07-21 16:51:00.006][000000004.243] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:51:00.149][000000004.393] I/fota write common data
[2026-07-21 16:51:00.573][000000004.809] I/fota common data done, now checking 0
[2026-07-21 16:51:00.583][000000004.815] I/fota common data md5 ok
[2026-07-21 16:51:00.586][000000004.815] I/fota only common data
[2026-07-21 16:51:00.590][000000004.815] I/fota 脚本地址匹配
[2026-07-21 16:51:00.594][000000004.849] I/fota fota type 0 ok!, wait reboot
[2026-07-21 16:51:00.599][000000004.852] I/http http close c1d7174
[2026-07-21 16:51:00.604][000000004.853] I/user.app_vl53l1x FOTA回调 ret= 0
[2026-07-21 16:51:00.611][000000004.853] I/user.app_vl53l1x FOTA升级包下载成功,准备重启
[2026-07-21 16:51:00.615][000000004.854] I/user.app_vl53l1x FOTA升级包已下载,重启模块
[2026-07-21 16:51:00.619][000000004.855] I/user.[excloud]构建发送数据 field: 20 type: 5 value: FOTA升级包下载成功, 升级前版本: 001.999.000
[2026-07-21 16:51:00.623][000000004.856] I/user.[excloud]tlv发送数据长度4 59
[2026-07-21 16:51:00.627][000000004.856] I/user.[excloud]构建消息头 seq: 5 len: 59 flags: 2 dev: 0186431708386652
[2026-07-21 16:51:00.633][000000004.859] I/user.app_vl53l1x excloud发送成功, 流水号: 5
[2026-07-21 16:51:00.646][000000004.859] I/user.[excloud]数据发送成功 75 字节
[2026-07-21 16:51:00.650][000000004.859] I/user.app_vl53l1x excloud数据上报成功
[2026-07-21 16:51:00.654][000000004.901] I/user.[excloud]TCP socket cb userdata: 0C185A00 33554450 0
[2026-07-21 16:51:00.657][000000004.902] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:51:01.663] 工具提示: diag com USB 断开连接 COM12 CommError,[WinError 22] 设备不识别此命令。
[2026-07-21 16:51:03.048] 工具提示: soc log port COM10打开成功
[2026-07-21 16:51:03.147] 工具提示: ap log port COM12打开成功
[2026-07-21 16:51:03.170] 工具提示: 用户虚拟串口 COM11
[2026-07-21 16:51:04.039][000000000.000] main_entry 708:SDK base line V017_p001.026
[2026-07-21 16:51:04.045][000000000.007] am_service_init 1372:Air780EPM_A11
[2026-07-21 16:51:04.050][000000000.007] am_get_chip_type 868:6bef6,8,4,31,8,EC718PM
[2026-07-21 16:51:04.064][000000000.007] am_service_init 1380:APB MP 102400000
[2026-07-21 16:51:04.078][000000000.048] bsp_user_init_io 417:io volt 3.3v 21
[2026-07-21 16:51:04.088][000000000.049] BSP_CustomInit 558:hardfault mode init 4
[2026-07-21 16:51:04.098][000000000.049] Uart_ChangeBR 1461:uart0, 6000000 6028985 26000000 69
[2026-07-21 16:51:04.105][000000000.070] I/pm poweron: Power/Reset
[2026-07-21 16:51:04.110][000000000.071] luat_pm_get_poweron_reason 336:ap 3, cp 2
[2026-07-21 16:51:04.121][000000000.071] I/pm poweron reason: 0 0 3
[2026-07-21 16:51:04.129][000000000.180] self_info 125:model Air780EPM_A11 imei 864317083866528 dbversion 0x405e3b06
[2026-07-21 16:51:04.144][000000000.180] self_info 127:firmware[1] BASIC fs 168kbyte script 256kbyte
[2026-07-21 16:51:04.151][000000000.181] I/main LuatOS@Air780EPM base 26.04 bsp V2046 32bit
[2026-07-21 16:51:04.156][000000000.181] I/main ROM Build: Jul 7 2026 20:39:17
[2026-07-21 16:51:04.161][000000000.183] W/pins /luadb/pins_air780epm.json not exist!!
[2026-07-21 16:51:04.177][000000000.185] D/main loadlibs luavm 1048568 14784 14784
[2026-07-21 16:51:04.184][000000000.185] D/main loadlibs sys 2366664 82956 89556
[2026-07-21 16:51:04.191][000000000.185] D/main loadlibs psram 2366664 82956 89556
[2026-07-21 16:51:04.206][000000000.203] I/user.main Air8780P_VL53L1X 001.999.001
[2026-07-21 16:51:04.216][000000000.241] D/user.libfota2 version -> 202607021200
[2026-07-21 16:51:04.228][000000000.276] D/user.httpplus version -> 202607021200
[2026-07-21 16:51:04.236][000000000.290] D/user.exmtn version -> 202607021200
[2026-07-21 16:51:04.249][000000000.294] D/user.excloud version -> 202607091431
[2026-07-21 16:51:04.272][000000000.298] I/user.app_vl53l1x ========== Air8780P VL53L1X 主任务启动 ==========
[2026-07-21 16:51:04.286][000000000.299] I/user.app_vl53l1x 配置: wait=60s psm=5min samples=3
[2026-07-21 16:51:04.300][000000000.299] I/user.app_vl53l1x GPIO27 HIGH
[2026-07-21 16:51:04.308][000000000.302] I/user.app_vl53l1x 检测到FOTA升级后的首次启动 升级前: PROJECT=Air8780P_VL53L1X VERSION=001.999.000 ; 升级后: PROJECT=Air8780P_VL53L1X VERSION=001.999.001
[2026-07-21 16:51:04.314][000000000.308] I/user.app_vl53l1x 保存版本信息到文件: 001.999.001,Air8780P_VL53L1X
[2026-07-21 16:51:04.321][000000000.309] I/user.app_vl53l1x FOTA升级后首次启动: 升级前: PROJECT=Air8780P_VL53L1X VERSION=001.999.000 ; 升级后: PROJECT=Air8780P_VL53L1X VERSION=001.999.001
[2026-07-21 16:51:04.336][000000000.309] I/user.app_vl53l1x 正在初始化VL53L1X传感器...
[2026-07-21 16:51:04.342][000000000.327] I/user.exs_vl53l1x 固件就绪 0x00E5=0x03
[2026-07-21 16:51:04.347][000000000.446] I/user.exs_vl53l1x 预设模式配置写入完成 (mode=standard)
[2026-07-21 16:51:04.361][000000000.449] I/user.exs_vl53l1x 芯片 MID=0xEA MT=0xCC
[2026-07-21 16:51:04.369][000000000.652] I/user.exs_vl53l1x 初始化完成,Standard Ranging 测距已启动
[2026-07-21 16:51:04.375][000000000.652] I/user.app_vl53l1x VL53L1X初始化成功
[2026-07-21 16:51:04.382][000000000.652] I/user.app_vl53l1x 开始采集传感器数据,采集次数=3
[2026-07-21 16:51:04.868][000000001.205] I/user.app_vl53l1x 采集[1/3] 距离=260mm 状态=测距成功
[2026-07-21 16:51:05.189][000000001.713] I/user.app_vl53l1x 采集[2/3] 距离=258mm 状态=测距成功
[2026-07-21 16:51:05.556][000000002.194] I/mobile sim0 sms ready
[2026-07-21 16:51:05.572][000000002.195] D/mobile cid1, state0
[2026-07-21 16:51:05.585][000000002.196] D/mobile bearer act 0, result 0
[2026-07-21 16:51:05.593][000000002.196] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-21 16:51:05.614][000000002.197] I/user.netdrv_4g IP_READY 10.32.104.76 255.255.255.255 0.0.0.0 nil
[2026-07-21 16:51:05.619][000000002.227] I/user.app_vl53l1x 采集[3/3] 距离=257mm 状态=测距成功
[2026-07-21 16:51:05.628][000000002.228] I/user.app_vl53l1x 采集完成: 有效3帧, 平均距离=258mm
[2026-07-21 16:51:05.640][000000002.229] I/user.app_vl53l1x 测距结果 = 258 mm (有效3帧, 原始数据=260,258,257)
[2026-07-21 16:51:05.654][000000002.229] I/user.app_vl53l1x 关闭VL53L1X传感器
[2026-07-21 16:51:05.669][000000002.234] I/user.exs_vl53l1x 传感器已关闭
[2026-07-21 16:51:05.682][000000002.234] I/user.app_vl53l1x 等待4G网络就绪...
[2026-07-21 16:51:05.695][000000002.234] I/user.app_vl53l1x 4G网络已就绪 10.32.104.76 255.255.255.255 0.0.0.0 nil
[2026-07-21 16:51:05.712][000000002.235] I/user.app_vl53l1x 正在初始化excloud...
[2026-07-21 16:51:05.724][000000002.235] W/user.excloud.setup 不再需要主动配置use_getip
[2026-07-21 16:51:05.734][000000002.236] W/user.excloud.setup 不再需要主动配置device_type
[2026-07-21 16:51:05.745][000000002.237] I/mobile l_mobile_muid called
[2026-07-21 16:51:05.753][000000002.239] I/mobile l_mobile_muid ret=32
[2026-07-21 16:51:05.768][000000002.239] I/user.[excloud]4G设备 IMEI: 864317083866528 MUID: 20260702152525A860510A9885483051
[2026-07-21 16:51:05.775][000000002.242] I/user.[excloud]setup 初始化成功 设备ID: 864317083866528
[2026-07-21 16:51:05.782][000000002.242] I/user.[excloud]首次连接,获取服务器信息...
[2026-07-21 16:51:05.794][000000002.243] I/mobile l_mobile_muid called
[2026-07-21 16:51:05.801][000000002.244] I/mobile l_mobile_muid ret=32
[2026-07-21 16:51:05.816][000000002.245] I/user.[excloud]getip 类型: 3 key: unusedkey-864317083866528-20260702152525A860510A9885483051
[2026-07-21 16:51:05.822][000000002.252] D/socket connect to gps.openluat.com,443
[2026-07-21 16:51:05.827][000000002.253] dns_run 676:gps.openluat.com state 0 id 1 ipv6 0 use dns server0, try 0
[2026-07-21 16:51:05.836][000000002.254] D/mobile TIME_SYNC 0 tm 1784623867
[2026-07-21 16:51:05.842][000000002.290] dns_run 693:dns all done ,now stop
[2026-07-21 16:51:05.848][000000003.123] I/user.httpplus 服务器已完成响应
[2026-07-21 16:51:05.862][000000003.125] I/user.[excloud]getip响应 HTTP: 200 Body:
[2026-07-21 16:51:05.867][000000003.126] {"msg":"ok","conninfo":{"ipv4":"124.71.128.165","port":9108,"auth_key":"PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ"},"imginfo":{"url":"https://api.luatos.com/iot/air_up/image","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}},"audinfo":{"url":"https://api.luatos.com/iot/air_up/audio","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}},"mtninfo":{"url":"https://api.luatos.com/iot/air_up/file","data_key":"f","data_param":{"key":"7nTSPfh2Pcporb2dNDrS2jforVJaacDWfQbuA","tip":""}}}
[2026-07-21 16:51:05.877][000000003.127] I/user.[excloud]TCP/UDP连接信息 host: 124.71.128.165 port: 9108 key: nil
[2026-07-21 16:51:05.888][000000003.127] I/user.[excloud]获取到图片上传信息
[2026-07-21 16:51:05.898][000000003.128] I/user.[excloud]获取到音频上传信息
[2026-07-21 16:51:05.912][000000003.128] I/user.[excloud]获取到运维日志上传信息
[2026-07-21 16:51:05.917][000000003.129] W/user.[excloud]未获取到二维码信息
[2026-07-21 16:51:05.923][000000003.129] I/user.[excloud]自动获取到auth_key
[2026-07-21 16:51:05.944][000000003.129] I/user.[excloud]getip 更新配置: 124.71.128.165 9108
[2026-07-21 16:51:05.951][000000003.130] I/user.[excloud]getip 成功: true
[2026-07-21 16:51:05.958][000000003.130] I/user.[excloud]服务器信息获取成功 host: 124.71.128.165 port: 9108 transport: tcp
[2026-07-21 16:51:05.977][000000003.131] I/user.[excloud]创建TCP连接
[2026-07-21 16:51:05.981][000000003.132] D/socket connect to 124.71.128.165,9108
[2026-07-21 16:51:05.987][000000003.133] I/user.[excloud]TCP连接结果 true false
[2026-07-21 16:51:05.997][000000003.133] I/user.[excloud]excloud service started
[2026-07-21 16:51:06.008][000000003.134] I/user.[excloud]excloud 自动心跳已启动,间隔 300 秒
[2026-07-21 16:51:06.018][000000003.170] I/user.[excloud]TCP socket cb userdata: 0C1859C8 33554449 0
[2026-07-21 16:51:06.024][000000003.170] I/user.[excloud]TCP socket TCP连接成功
[2026-07-21 16:51:06.028][000000003.171] I/user.app_vl53l1x excloud连接成功
[2026-07-21 16:51:06.038][000000003.171] I/mobile l_mobile_muid called
[2026-07-21 16:51:06.048][000000003.173] I/mobile l_mobile_muid ret=32
[2026-07-21 16:51:06.053][000000003.173] I/user.[excloud] 发送鉴权请求
[2026-07-21 16:51:06.056][000000003.173] I/user.[excloud]构建发送数据 field: 16 type: 3 value: PhbD7kCQg9Jt7vwCGgtdjQ6jIscQ2gJJ-864317083866528-20260702152525A860510A9885483051
[2026-07-21 16:51:06.061][000000003.175] I/user.[excloud]tlv发送数据长度4 85
[2026-07-21 16:51:06.069][000000003.175] I/user.[excloud]构建消息头 seq: 2 len: 85 flags: 18 dev: 0186431708386652
[2026-07-21 16:51:06.082][000000003.177] I/user.app_vl53l1x excloud发送成功, 流水号: 2
[2026-07-21 16:51:06.087][000000003.178] I/user.[excloud]数据发送成功 101 字节
[2026-07-21 16:51:06.090][000000003.230] I/user.[excloud]TCP socket cb userdata: 0C1859C8 33554450 0
[2026-07-21 16:51:06.094][000000003.230] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:51:06.104][000000003.275] I/user.[excloud]TCP socket cb userdata: 0C1859C8 33554452 0
[2026-07-21 16:51:06.109][000000003.276] I/user.[excloud]TCP socket 收到数据 22 字节 01864317083866520001000600000000301100026F6B 44
[2026-07-21 16:51:06.115][000000003.277] I/user.[excloud]解析消息头 设备ID: 864317083866528 序列号: 1 消息长度: 6 协议版本: 0 需要回复: false UDP承载: false 包含auth_key: false
[2026-07-21 16:51:06.120][000000003.278] I/user.[excloud]鉴权成功 ok
[2026-07-21 16:51:06.124][000000003.279] I/user.app_vl53l1x excloud认证成功
[2026-07-21 16:51:06.127][000000003.281] I/user.[excloud]构建发送数据 field: 20 type: 5 value: 258
[2026-07-21 16:51:06.137][000000003.282] I/user.[excloud]构建发送数据 field: 20 type: 5 value: FOTA升级成功: 升级前: PROJECT=Air8780P_VL53L1X VERSION=001.999.000 ; 升级后: PROJECT=Air8780P_VL53L1X VERSION=001.999.001
[2026-07-21 16:51:06.140][000000003.283] I/user.[excloud]tlv发送数据长度4 142
[2026-07-21 16:51:06.149][000000003.284] I/user.[excloud]构建消息头 seq: 3 len: 142 flags: 2 dev: 0186431708386652
[2026-07-21 16:51:06.154][000000003.286] I/user.app_vl53l1x excloud发送成功, 流水号: 3
[2026-07-21 16:51:06.158][000000003.287] I/user.[excloud]数据发送成功 158 字节
[2026-07-21 16:51:06.166][000000003.287] I/user.app_vl53l1x excloud数据上报成功
[2026-07-21 16:51:06.170][000000003.289] I/user.app_vl53l1x MQTT上报数据到: 864317083866528/vl53l1x/up
[2026-07-21 16:51:06.174][000000003.293] dns_run 676:lbsmqtt.airm2m.com state 0 id 2 ipv6 0 use dns server0, try 0
[2026-07-21 16:51:06.181][000000003.339] I/user.[excloud]TCP socket cb userdata: 0C1859C8 33554450 0
[2026-07-21 16:51:06.186][000000003.340] I/user.[excloud]TCP socket 发送完成
[2026-07-21 16:51:06.191][000000003.356] dns_run 693:dns all done ,now stop
[2026-07-21 16:51:06.196][000000003.476] I/user.app_vl53l1x MQTT事件: conack nil
[2026-07-21 16:51:06.200][000000003.476] I/user.app_vl53l1x MQTT连接成功
[2026-07-21 16:51:06.205][000000003.478] I/user.app_vl53l1x MQTT已发布: {"fota_info":"FOTA升级成功: 升级前: PROJECT=Air8780P_VL53L1X VERSION=001.999.000 ; 升级后: PROJECT=Air8780P_VL53L1X VERSION=001.999.001","distance_mm":258,"project":"Air8780P_VL53L1X","distances":[260,258,257],"imei":"864317083866528","valid_samples":3,"ts":1784623867,"version":"001.999.001"}
[2026-07-21 16:51:06.215][000000003.550] I/user.app_vl53l1x MQTT事件: sent 1
[2026-07-21 16:51:06.219][000000003.551] I/user.app_vl53l1x MQTT数据发送成功
[2026-07-21 16:51:06.229][000000003.552] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:3
[2026-07-21 16:51:06.233][000000003.554] I/user.app_vl53l1x MQTT事件: disconnect 0
[2026-07-21 16:51:06.240][000000003.554] W/user.app_vl53l1x MQTT断开
[2026-07-21 16:51:06.244][000000003.555] I/user.app_vl53l1x MQTT事件: close nil
[2026-07-21 16:51:06.610][000000004.054] W/mqtt network_tx ret -1, closing socket
[2026-07-21 16:51:06.616][000000004.054] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:0
[2026-07-21 16:51:06.621][000000004.054] I/mqtt mqtt closing socket netc:c1b7f28 mqtt_state:0
[2026-07-21 16:51:06.625][000000004.055] I/user.app_vl53l1x MQTT短连接结束,发送 成功
[2026-07-21 16:51:06.635][000000004.055] I/user.app_vl53l1x 发送完成,进入PSM+模式
[2026-07-21 16:51:06.639][000000004.055] I/user.app_vl53l1x 准备进入PSM+模式,休眠5分钟后唤醒
[2026-07-21 16:51:06.651][000000004.056] I/user.app_vl53l1x 关闭VL53L1X传感器
[2026-07-21 16:51:06.655][000000004.056] I/user.app_vl53l1x GPIO27 LOW
[2026-07-21 16:51:06.663][000000004.057] I/user.app_vl53l1x 深度休眠定时器已设置: 300000 ms
[2026-07-21 16:51:06.922][000000004.367] net_lwip_tcp_err_cb 662:adapter 1 socket 1 not closing, but error -13
5.6 故障排除
-
VL53L1X 传感器初始化失败:
- 检查 I2C 接线是否正确(GPIO1-SCL、GPIO2-SDA、3.3V、GND)
- 确认传感器供电正常(3.3V)
- 检查传感器 I2C 地址是否默认 0x29(可通过读写 0x010F 寄存器验证,应返回 0xEA)
-
测距数据一直为无效(串扰信号):
- 传感器前方可能有遮挡物
- 传感器距离目标过近(< 10mm)
- 环境光太强或目标表面反射率过低
- 可通过
calibrate_xtalk()API 进行串扰校准
-
无法联网:
- 检查 SIM 卡是否正确安装、是否有流量
- 检查天线是否连接
- 检查网络信号强度
-
无法进入 PSM+ 模式:
- 检查是否有其他任务未阻塞
- 确认
pm.power(pm.WORK_MODE, 3)已执行
-
PSM+ 模式下传感器功耗偏高(320µA):
- 传感器模块始终上电,软件待机下模块上的 LDO/电平转换芯片仍会消耗电流
- 如需降低,可使用 VL53L1X 的 XSHUT 引脚(硬件断电),接线时把 XSHUT 接到模组空闲 GPIO,
setup时传入{xshut = GPIO号},进入 PSM+ 前会自动拉低 XSHUT 彻底关断传感器
-
MQTT 数据未收到:
- 确认 Topic 正确(格式:
IMEI/vl53l1x/up) - 检查 MQTT 服务器地址和端口配置是否正确
- 日志中查看
MQTT数据发送成功是否打印
- 确认 Topic 正确(格式:
5.7 扩展功能建议
- 串扰校准:使用
exs_vl53l1x.calibrate_xtalk()API 配合白纸板进行校准,校准值传入setup({xtalk_offset = value})即可 - 中断模式:VL53L1X 支持 GPIO1 中断,可配置为回调模式或轮询模式,详见 exs_vl53l1x 扩展库说明
- 三档测距模式:支持 standard(约 2.9m)/ short(约 1.36m,抗强光)/ long(约 4.6m)三种模式,在
setup时通过range_mode参数设置
