01 Air8101外挂Air780EPM使用4G上网
作者:魏健强 | 最后修改:2026-04-09
一、引言
本指南所演示的是 Air8101 模块通过外挂 Air780EPM 模块,基于 airlink 核心库实现 4G 联网的功能,通过 exnetif 扩展库实现多网卡网络优先级设置功能。
二、准备硬件环境
参考:硬件环境清单,准备以及组装好基本硬件环境。
2.1 Air8101 核心板

2.2 Air780EPM V1.2 开发板

三、准备软件环境
参考:Air8101 软件环境清单,准备好软件环境。
1.烧录工具:参考 Luatools 工具使用说明;
2.本demo开发测试时使用的固件为Air8101 V2002 版本固件,(请使用大于等于 2002 版本号的固件),所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;
脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8101/demo/airlink
LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看烧录 Air8101 核心板的介绍和如何烧录项目文件到 Air780EPM 开发板,将本篇文章中演示使用的项目文件烧录到 Air8101 核心板和 Air780EPM 开发板中。
四、常用 API 接口介绍
本文仅介绍程序中使用到的 API 接口,详细接口说明请查看:LuatOS 库函数开发手册 - 合宙模组资料中心。
4.1 airlink 相关 API 接口介绍
全部 airlink 相关 API 接口介绍可参考:airlink,本文只着重介绍代码中用到的 API 接口。
4.2 netdrv 相关 API 接口介绍
全部 netdrv 相关 API 接口介绍可参考:netdrv,本文只着重介绍代码中用到的 API 接口。
4.3 exnetif 扩展库相关 API 接口介绍
全部 exnetif 扩展库相关 API 接口介绍可参考:exnetif,本文只着重介绍代码中用到的 API 接口。
五、硬件资料及接线说明
5.1 硬件资料说明
Air8101 实现 4G 上网的硬件资料可参考:https://docs.openluat.com/air8101/luatos/hardware/design/4gnet/ 。
5.2 Air8101 与 Air780EPM 接线说明
下列表格为 SPI0 的接线说明,本次测试使用 SPI0 接法进行演示。

5.2 Air8101 实物接线图

5.3 Air780EPM 实物接线图

六、整体功能演示
6.1 功能概述
- Air8101 外挂 Air780EPM 实现 4G 联网。
- Air8101 与 Air780EPM 数据信息互传。
- Air8101 实现 4G 联网后进行 HTTP GET 请求,通过 exnetif 扩展库实现多网卡网络优先级设置功能。
6.2 演示
6.2.1 代码实现
由于本文需要用到的代码内容过多,大家可通过链接跳转到仓库代码中查看,本文只展示 Air8101 和 Air780EPM 的主要功能代码。
Air8101 主要功能代码
下列为
network_airlink.lua文件中代码内容。
--[[
@module network_airlink
@summary airlink多网融合模块
@version 1.0
@date 2025.10.15
@author 魏健强
@usage
本demo演示的核心功能为:
1. 初始化4G和WiFi网络连接。
2. Air8101与对端设备进行数据交互。
3. 自动切换网络连接模式。
4. 通过HTTP GET请求测试网络连接情况。
]]
exnetif = require "exnetif"
-- 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能。
local function init_airlink_net()
exnetif.set_priority_order({
-- {
-- WIFI = { -- WiFi配置
-- ssid = "test", -- WiFi名称(string)
-- password = "HZ88888888" -- WiFi密码(string)
-- }
-- },
{ -- 开启4G虚拟网卡
airlink_4G = {
auto_socket_switch = false -- 切换网卡时是否断开之前网卡的所有socket连接并用新的网卡重新建立连接
}
}})
end
local function netdrv_multiple_notify_cbfunc(net_type,adapter)
if type(net_type)=="string" then
log.info("netdrv_multiple_notify_cbfunc", "use new adapter", net_type, adapter)
elseif type(net_type)=="nil" then
log.warn("netdrv_multiple_notify_cbfunc", "no available adapter", net_type, adapter)
else
log.warn("netdrv_multiple_notify_cbfunc", "unknown status", net_type, adapter)
end
end
-- 设置网卡状态变化通知回调函数netdrv_multiple_notify_cbfunc
exnetif.notify_status(netdrv_multiple_notify_cbfunc)
-- Air8101发送数据信息给Air780EPM。
local function airlink_sdata_Air780EPM()
-- 设置网络时间同步。
socket.sntp()
while true do
-- rtos.bsp():设备硬件bsp型号;os.date():本地时间。
local data = rtos.bsp() .. " " .. os.date()
log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
airlink.sdata(data)
sys.wait(1000)
log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
airlink.statistics()
end
end
-- 一个简单的HTTP GET请求测试程序,用于判断Air8101的网络连接情况。
local function http_get_test()
while true do
sys.wait(10000)
-- 发起一个HTTP GET请求。
log.info("发起HTTP GET请求", "https://httpbin.air32.cn/bytes/2048")
local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {
timeout = 3000
}).wait()
-- 打印HTTP请求的结果,包括响应码code和响应体长度#body。
if code == 200 then
log.info("HTTP请求成功", "响应码", code, "响应体长度", body and #body)
sys.publish("打印网卡信息", "succeeded")
else
log.error("HTTP请求失败", "错误码", code)
sys.publish("打印网卡信息", "failed")
end
end
end
-- 订阅airlink的SDATA事件,打印收到的信息。
local function airlink_sdata(data)
-- 打印收到的信息。
log.info("收到AIRLINK_SDATA!!", data)
end
-- 开启airlink
sys.taskInit(init_airlink_net)
-- Air8101发送数据信息给Air780EPM。
sys.taskInit(airlink_sdata_Air780EPM)
sys.taskInit(http_get_test)
-- 订阅airlink的SDATA事件,打印收到的信息。
sys.subscribe("AIRLINK_SDATA", airlink_sdata)
Air780EPM 主要功能代码
下列为
network_airlink.lua文件中代码内容。
--[[
@module network_airlink
@summary airlink多网融合模块
@version 1.0
@date 2025.10.15
@author 魏健强
@usage
本demo演示的核心功能为:
1. 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能
2. Air780EPM与对端设备进行数据交互。
3. 通过HTTP GET请求测试Air780EPM的网络访问外网是否正常。
]]
-- 加载需要用到的功能模块。
dnsproxy = require("dnsproxy")
-- 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能。
local function init_airlink_net()
-- 延时100毫秒。
sys.wait(100)
-- 初始化airlink。
airlink.init()
-- 创建桥接网络设备。
log.info("创建桥接网络设备")
netdrv.setup(socket.LWIP_GP_GW, netdrv.WHALE)
-- 启动airlink,配置Air780EPM作为SPI主机模式。
airlink.start(airlink.MODE_SPI_SLAVE)
-- 配置IPv4地址。
log.info("配置IPv4地址", "192.168.111.2", "255.255.255.0", "192.168.111.1")
netdrv.ipv4(socket.LWIP_GP_GW, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-- 延时100毫秒。
sys.wait(100)
-- 等待网络就绪,默认事件主题为IP_READY,设置超时时间为10秒。
sys.waitUntil("IP_READY", 10000)
-- 配置网络地址端口转换(NAPT),此处使用4G网络作为主网关出口。
netdrv.napt(socket.LWIP_GP)
-- 设置DNS代理。
dnsproxy.setup(socket.LWIP_GP_GW, socket.LWIP_GP)
end
-- Air780EPM发送数据信息给Air8101。
local function airlink_sdata_Air8101()
while true do
-- rtos.bsp():设备硬件bsp型号;os.date():本地时间。
local data = rtos.bsp() .. " " .. os.date()
log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
airlink.sdata(data)
-- 此处代码用于实现Air780EPM网络状态的持续检测,并持续给对端设备发送网络状态信息,方便对端设备作应对处理。
-- 如果有需要,可以打开注释。
-- local net_state = socket.adapter(socket.LWIP_GP)
-- if net_state then
-- airlink.sdata("Air780EPM_IP_READY!!")
-- else
-- airlink.sdata("Air780EPM_IP_LOSE!!")
-- end
sys.wait(1000)
log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
airlink.statistics()
end
end
-- 一个简单的HTTP GET请求测试程序,用于判断Air780EPM的网络访问外网是否正常。
local function http_get_test()
-- 循环发起HTTP GET请求,测试Air780EPM的网络访问外网是否正常。
while true do
log.info("发起HTTP GET请求", "https://httpbin.air32.cn/bytes/2048")
local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, { timeout = 3000 }).wait()
-- 打印HTTP请求的结果,包括响应码code和响应体长度#body。
if code == 200 then
log.info("HTTP请求成功", "响应码", code, "响应体长度", body and #body)
else
log.error("HTTP请求失败", "错误码", code)
end
-- 加点延时,避免请求过快。
sys.wait(5000)
end
end
-- 订阅airlink的SDATA事件,打印收到的信息。
local function airlink_sdata(data)
log.info("收到AIRLINK_SDATA!!", data)
end
-- 初始化网络,使得Air8101可以外挂Air780EPM实现4G联网功能。
sys.taskInit(init_airlink_net)
-- 一个简单的HTTP GET请求测试程序,用于判断Air780EPM的网络访问外网是否正常。
-- sys.taskInit(http_get_test)
-- Air780EPM发送数据信息给Air8101。
sys.taskInit(airlink_sdata_Air8101)
-- 订阅airlink的SDATA事件,打印收到的信息。
sys.subscribe("AIRLINK_SDATA", airlink_sdata)
6.2.2 程序烧录
- 参考第二、三章节完成硬件与软件环境搭建。
- 参考烧录 Air8101 核心板的介绍和如何烧录项目文件到 Air780EPM 开发板分别烧录测试固件和脚本代码。
6.2.3 演示效果
下图为 Air780EPM 日志输出截图。

下图为 Air8101 日志输出截图。

关闭 wifi 后程序切换网卡为 4G

七、总结
通过该指南,用户可以很方便进行测试和使用 Air8101-4G 上网及数据交互功能。