Air8380 默认出厂固件
作者:王城钧 | 最后修改:2026-10-22
本文介绍 Air8380 工业模组默认出厂固件的资源、版本与使用方式。
特别说明
- Air8380 支持二次开发,正式发布的固件会明确标注是出厂演示固件还是量产固件;
- 固件内核基于 Air8000W,Luatools 选择底层时按 Air8000W 选;
- 内核版本说明统一见 Air8000 固件版本,本工程使用的是2054-113号固件(理论上最新版本的113号固件也可以,如果使用最新版本的固件不可以,可以烧录V2054-113固件对比验证){:target="_blank"}。
一、最新版本固件
固件更新说明(2026-10-10)
- 更新第一版出厂固件。
二、历史版本固件
固件更新说明(2026-10-10)
- 更新第一版出厂固件。
三、源码链接
module/Air8380/project/factory · 合宙Luat/LuatOS - 码云 - 开源中国
四、图文使用说明
4.1 AirCloud 上报记录
设备联网后经 excloud 接入合宙 AirCloud,按 app_config.report_interval(默认 60s)周期上报,平台「AirCloud 上报记录」页可逐条查看上行与下行报文:
从记录里能直接读到的信息:
| 现象 | 说明 |
|---|---|
| 类型「上报」、Tag 782 / 783 / 263 / 799 / 269 / 512 / 513 | 一轮周期上报的 7 个字段(信号、ICCID、CPU 温度、VBAT、当前链路、经度、纬度) |
| 类型「下发」、Tag 21 | 平台下发的指令(irtu 下行命令),如 read_link、set_wifi{"ssid":"116","pwd":"wangshuai123"} |
| 类型「上报」、Tag 20 | 设备对下行指令的应答(控制响应),如 {"active":"WiFi"}、{"ok":true} |
269 字段值 Ethernet / WiFi |
当前实际生效的链路,随 exnetif 切换变化 |

4.2 设备管理平台(Web)
合宙设备管理平台:web网页
- 设备列表 / 设备管理:按项目展示设备,卡片直接显示在线状态、最近上报时间、信号值;
- 右上设备面板:设备名称、所属项目、最后上报时间、状态、序号、固件 / 固件版本、首次上报时间;
- 实时数据:Air8380 只上报 CPU 温度与信号,其余项显示
--; - 位置:按上报的经纬度反查地址,可点击「在地图中查看」;

4.3 手机端合宙 IOT(小程序)
- 入口:微信搜索「合宙IOT」小程序,登录同一合宙账号后进入设备详情;
- 顶部:设备号、在线状态、最近上报时间、位置信号原值;
- 最近上报数据:CPU 环境温度
33、4G 信号20、GNSS 经度114.299997°、纬度34.80651°;温度、湿度、电压显示「暂无上报」; - 设备位置:腾讯地图显示定位点,并给出反查地址与坐标、上报时间;
- 页签:概览 / 历史数据 / 控制,控制页可下发查询与配置指令。

4.4 网络与外设电源
网络(由 exnetif 统一调度):
| 项目 | 说明 |
|---|---|
| 优先级 | 默认 网口 > WiFi > 4G,可在 app_config.priority 调整 |
| 网口(CH390H) | 默认静态 192.168.1.183,可切 DHCP;LDO 使能 GPIO1,IRQ = GPIO17 |
| WiFi | STA 模式;未配置 SSID 时不进优先级表(否则 WiFi 连不上会把 4G 一起拖死) |
| 4G | 插 Micro-SIM + 接好 LTE 天线后自动拨号 |
| 连通性判定 | need_ping = false,IP 就绪即视为可用(工业现场常无外网) |
| AP 热点 / 内置网页 | 不提供,配置入口 = app_config 预置 + AirCloud set_wifi |
外设电源(三路 3.3V LDO,board.lua 里唯一改引脚的地方):
| LDO | 用途 | 使能脚 |
|---|---|---|
| U230 | 外供 3.3V(邮票孔引出,给客户外设) | GPIO20(AGPIO,低功耗/PSM+ 保持) |
| U200 | 板载 SPI NAND 供电 | GPIO2 |
| U401 | CH390H 网口供电 | GPIO1 |
gpio.setup(20, 1) -- 外供 3.3V
gpio.setup(2, 1) -- 板载 SPI NAND 供电
gpio.setup(1, 1) -- CH390H 网口供电
顺序要求:三路 LDO 先上电 → 等 50ms → 再
spi.setup(SPI1, 26MHz);上电前先把两路片选(GPIO12 / GPIO16)置高,否则 CH390H 会抢总线导致 NAND 识别失败。main.lua已按此实现。
4.5 AirCloud 下行指令
| 项 | 内容 |
|---|---|
| 下行通道 | excloud 下行 TLV,字段 CONTROL_COMMAND / IRTU_DOWN / RANDOM_DATA 任一命中即可 |
| 载荷格式 | JSON 字符串;另兼容 命令名{json参数} 与纯命令名 |
| 应答通道 | CONTROL_RESPONSE(ASCII 型,值为 JSON 字符串) |
| 应答编码 | 仅 ASCII,中文经该通道必然乱码,因此应答里不放中文 |
| 前置条件 | 设备已联网并连上 AirCloud(use_getip 自动认证,不需要 project_key) |
| 执行环境 | excloud C 回调内,命令本身不阻塞(耗时动作已投递 sys.taskInit / sys.timerStart) |
| 应答保证 | 尽力发送,失败只记 log.warn,平台侧表现为无应答 |
三种下发写法:
read_flash ← 纯命令名(无参数命令可用)
read_flash{"bytes":50} ← 命令名 + JSON 参数(平台现用写法)
{"type":"read_flash"} ← 标准 JSON
带参数的命令同理:
set_wifi{"ssid":"Luats_5G","pwd":"12345678"}
{"type":"set_wifi","ssid":"Luats_5G","pwd":"12345678"}
无法解析的载荷(既不是 JSON,也不符合
命令名{...})不会回包,设备串口只打印忽略无法解析的下行。
指令总表:
| # | type | 参数 | 成功应答 | 失败应答 |
|---|---|---|---|---|
| 1 | read_status |
— | 全量快照(见下) | — |
| 2 | read_csq |
— | {"csq":19} |
— |
| 3 | read_imei |
— | {"imei":"86..."} |
— |
| 4 | read_iccid |
— | {"iccid":"8986..."} |
— |
| 5 | read_version |
— | {"version":"001.999.001","core":"..."} |
— |
| 6 | read_link |
— | {"active":"Ethernet"} |
— |
| 7 | read_location |
— | {"lat":23.1,"lng":113.3} |
未定位时 null |
| 8 | read_flash |
— | {"val":"1234567890","len":10} |
{"val":"","err":"..."} |
| 9 | set_wifi |
ssid pwd |
{"ok":true} |
— |
| 10 | sync_time |
— | {"ok":true} |
— |
| 11 | reboot |
— | {"ok":true} |
— |
| — | 其他 | — | — | {"error":"未知命令","cmd":"xxx"} |
read_status 全量快照:
{
"device": { "model":"Air8380", "mcu":"Air8000W", "project":"Air8380_Factory",
"version":"001.999.001", "core":"V2054", "imei":"...", "muid":"...",
"iccid":"...", "imsi":"...", "operator":"中国移动" },
"network": { "active":"Ethernet", "eth_ready":true, "wifi_ready":false, "gprs_ready":true,
"eth_ip":"192.168.1.183", "wifi_ip":"--", "csq":19, "rssi":0, "wifi_ssid":"" },
"system": { "cpu_temp":34, "vbat":3954, "mem_used":0, "mem_total":0,
"psram_used":0, "psram_total":0, "uptime":67,
"time":"2026-10-20 15:16:41", "flash_mounted":true },
"config": { "device_name":"Air8380", "eth_ip":"192.168.1.183",
"wifi_pwd":"****", "project_key":"****" }
}
- 应答体积最大,平台若限制单条 TLV 长度可能整条发不出,日常排障建议用单项查询;
config中wifi_pwd/project_key已打码;- 内部会读 ADC 与内存信息,不要在 C 回调里高频连发。
逐条要点:
| 命令 | 要点 |
|---|---|
read_csq |
0~31,越大越好,99 表示未知 |
read_imei / read_iccid |
返回模组 IMEI / SIM 的 ICCID |
read_version |
version 是脚本版本、core 是内核版本(rtos.version()) |
read_link |
取值 Ethernet / WiFi / 4G / 无,由 exnetif 切换回调更新 |
read_location |
airlbs 最近一次定位结果,未定位过为 null;间隔由 lbs_interval(默认 600s)控制,不是实时定位 |
read_flash |
读 /little_flash/fixed.txt 的固定值,用于远程验证 NAND 通路;失败回 flash_not_mounted / fixed_missing;旧指令 read_log 已删除 |
set_wifi |
写 fskv → 发布 APP_CONFIG_UPDATED → 500ms 后重建网络;ok:true 只表示受理,不代表已连上,要看 read_status.network.wifi_ready 或 read_link;ssid 传空等于关 WiFi;已有 socket 不切换,配完建议再发 reboot |
sync_time |
调一次 socket.sntp(),不等待结果;时区由 app_config.timezone(默认 UTC+8)决定 |
reboot |
先回应答,2 秒后重启 |
下发了没反应怎么查(按顺序看串口日志):
| 日志 | 含义 | 处理 |
|---|---|---|
无 下行 TLV |
命令没到设备 | 检查设备是否在线、平台是否选对设备 |
忽略无法解析的下行: xxx |
载荷格式不对 | 改成 {"type":"xxx"} 或 xxx{...} |
收到命令: xxx 后无应答 |
应答发送失败 | 看 [excloud]数据发送成功/失败 |
返回 {"error":"未知命令"} |
指令名拼错或已删除 | 对照上面的指令总表 |
五、相关文档
- 烧录与日志:下载和调试
- 板级电路与管脚:电路和使用说明
- 产品总体说明:Air8380 产品资料
- 免写代码方案:LuatOS-iRTU 介绍