03 WIFI连接外部网络,支持以太网lan模式为其他以太网设备提供接入,支持生成WiFi热点为WiFi终端设备提供接入
作者:魏健强
一、多网融合概述
Air8101 核心板通过多网融合技术实现以太网、4G 与 WiFi 网络的协同工作,构建高效、稳定的物联网通信与定位系统。本篇以 WIFI连接外部网络,支持以太网lan模式为其他以太网设备提供接入,支持生成WiFi热点为WiFi终端设备提供接入
二、准备硬件环境
1、Air8101 核心板一块
2、TYPE-C USB 数据线一根
3、USB 转串口数据线一根
4、Air8101 核心板和数据线的硬件接线方式为
- Air8101 核心板通过 TYPE-C USB 口供电;(核心板背面的功耗测试开关拨到 OFF 一端)
- 如果测试发现软件频繁重启,重启原因值为:poweron reason 0,可能是供电不足,此时再通过直流稳压电源对核心板的 vbat 管脚进行 4V 供电,或者 VIN 管脚进行 5V 供电;
- TYPE-C USB 数据线直接插到核心板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;
- USB 转串口数据线,一般来说,白线连接核心板的 12/U1TX,绿线连接核心板的 11/U1RX,黑线连接核心板的 gnd,另外一端连接电脑 USB 口;
5、可选 AirPHY_1000 配件板一块,Air8101 核心板和 AirPHY_1000 配件板的硬件接线方式为:
**Air8101核心板** | **AirPHY_1000配件板** |
59/3V3 | 3.3v |
gnd | gnd |
5/D2 | RX1 |
72/D1 | RX0 |
71/D3 | CRS |
4/D0 | MDIO |
6/D4 | TX0 |
74/PCK | MDC |
70/D5 | TX1 |
7/D6 | TXEN |
不接 | NC |
69/D7 | CLK |
6、可选 AirETH_1000 配件板一块,Air8101 核心板和 AirETH_1000 配件板的硬件接线方式为:
**Air8101核心板** | **AirETH_1000配件板** |
59/3V3 | 3.3v |
gnd | gnd |
28/DCLK | SCK |
54/DISP | CSS |
55/HSYN | SDO |
57/DE | SDI |
14/GPIO8 | INT |
7、可选 Air780EHM/Air780EHV/Air780EGH/Air780EPM 核心板或者开发板一块,Air8101 核心板和 Air780EHM/Air780EHV/Air780EGH/Air780EPM 核心板或者开发板的硬件接线方式为:
**Air8101核心板** | **Air780EHM/Air780EHV/Air780EGH/Air780EPM核心板** |
gnd | GND |
54/DISP | 83/SPI0CS |
55/HSYN | 84/SPI0MISO |
57/DE | 85/SPI0MOSI |
28/DCLK | 86/SPI0CLK |
43/R2 | 19/GPIO22 |
75/GPIO28 | 22/GPIO1 |
**Air8101核心板** | **Air780EHM/Air780EHV/Air780EGH/Air780EPM开发板** |
gnd | GND |
54/DISP | SPI_CS |
55/HSYN | SPI_MISO |
57/DE | SPI_MOSI |
28/DCLK | SPI_CLK |
43/R2 | GPIO22 |
75/GPIO28 | GPIO1 |
三、准备软件环境
1. 烧录工具:Luatools 下载调试工具
2. 内核固件:Air8101 V1005 版本固件(理论上,2025 年 7 月 26 日之后发布的固件都可以)
3. 脚本文件:Air8101 脚本文件
5. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
四、以太网的概述
本小节教你怎么使用 luatos 脚本语言,就可以让合宙 4G 模组通过 LAN8720 网络模块连接网络并且 GET"http://httpbin.air32.cn/get"。
4.1 api
本文仅介绍程序中使用到的 API 接口,详细接口说明请查看:核心库 API 索引 - luatos@air8101 - 合宙模组资料中心。
exnetif.setproxy(adapter, main_adapter, other_configs)
配置网络代理实现多网融合;
4.3 功能验证:图文全面展示
4.3.1 运行结果展示
4.3.2 完整实例
netif_app.lua
--[[
@module netif_app
@summary netif_app 网络管理模块,开启多网融合功能,wifi提供网络供以太网和wifi设备上网
@version 1.0
@date 2025.08.05
@author 魏健强
@usage
本文件为网络管理模块,核心业务逻辑为:
1.设置多网融合功能,wifi提供网络供wifi和以太网设备上网
2、http测试wifi网络
本文件没有对外接口,直接在main.lua中require "netif_app"就可以加载运行;
]]
exnetif = require "exnetif"
function netif_app_task_func()
local res
-- 设置多网融合功能,wifi提供网络供wifi设备上网
res = exnetif.setproxy(socket.LWIP_AP, socket.LWIP_STA, {
ssid = "test2", -- AP热点名称(string),网卡包含wifi时填写
password = "HZ88888888", -- AP热点密码(string),网卡包含wifi时填写
ap_opts = { -- AP模式下配置项(选填参数)
hidden = false, -- 是否隐藏SSID, 默认false,不隐藏
max_conn = 4
}, -- 最大客户端数量, 默认4
channel = 6, -- AP建立的通道, 默认6
main_adapter = { -- 提供网络的网卡开启参数
ssid = "test",
password = "HZ88888888"
}
})
-- 设置多网融合功能,wifi提供网络供以太网设备上网,RMII方式外挂
res = exnetif.setproxy(socket.LWIP_ETH, socket.LWIP_STA, {
ethpower_en = 13, -- 以太网模块的pwrpin引脚(gpio编号)
main_adapter = { -- 提供网络的网卡开启参数
ssid = "test",
password = "HZ88888888"
}
})
-- 设置多网融合功能,wifi提供网络供以太网设备上网,SPI方式外挂
-- res = exnetif.setproxy(socket.LWIP_USER1, socket.LWIP_STA, {
-- tp = netdrv.CH390, -- 网卡芯片型号(选填参数),仅spi方式外挂以太网时需要填写。
-- opts = { -- 外挂方式,需要额外的参数(选填参数),仅spi方式外挂以太网时需要填写。
-- spi = 0,
-- cs = 15
-- },
-- main_adapter = { -- 提供网络的网卡开启参数
-- ssid = "test",
-- password = "HZ88888888"
-- }
-- })
if res then
log.info("exnetif", "setproxy success")
else
log.info("开启失败,请检查配置项是否正确,日志中是否打印了错误信息")
end
-- 每5秒进行HTTPS连接测试,实时监测wifi网络连接状态, 仅供测试需要,量产不需要,用来判断当前网络是否可用,需要的话可以打开注释
-- while 1 do
-- local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_STA,timeout=5000,debug=false}).wait()
-- log.info("http执行结果", code, headers, body and #body)
-- sys.wait(5000)
-- end
end
sys.taskInit(netif_app_task_func)
main.lua
--[[
@module main
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
@version 1.0
@date 2025.08.05
@author 魏健强
@usage
本demo演示的核心功能为:
1.设置多网融合功能,wifi提供网络供wifi和以太网设备上网
更多说明参考本目录下的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 = "wifi_out_ethernet_in_wifi_in"
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 "netif_app"
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
五、功能演示
5.1 开启 WIFI 热点
如图,设置 WIFI 热点,ssid:test,password:HZ88888888
5.2 Air8101 开发板连接以太网
实现功能前,首先需要将 Air8101 通过网线连接到电脑网口。
5.3 烧录代码 查看日志
硬件连接完毕后开始烧录代码,烧录完毕后,在 luatools 日志打印中我们可以看到 WIFI STA 的打印。
等待以太网就绪。
数据开始传输。
测试可以正常打开网页。
同时可以在手机的联网界面可以看到我们 Air8101 的热点,热点名称为:test2,密码为:HZ88888888
连接上之后,能看到我们成功使用 Air8101 的 WiFi 热点在网页上搜索到信息。
六、总结
至此,我们已使用 Air8101 开发板 演示了多网融合WIFI连接外部网络,支持以太网lan模式为其他以太网设备提供接入,支持生成WiFi热点为WiFi终端设备提供接入的功能