跳转至

02 以太网作为数据出口给WIFI,Air8000上网

作者:魏健强

一、多网融合概述

Air8000 开发板通过多网融合技术实现以太网、4G 与 WiFi 网络的协同工作,构建高效、稳定的物联网通信与定位系统。本篇以以太网作为主供网链路,为 Air8000 提供可靠的有线网络接入,同时通过内置 WiFi 模组开启 AP 热点功能,允许其他终端设备(如移动终端、传感器节点)无线接入,形成覆盖范围广、部署灵活的混合网络架构。

二、准备硬件环境

参考:Air8000 硬件环境清单,准备好硬件环境。

2.1 Air8000 整机开发板

三、准备软件环境

3.1 文章内容应用

1. 烧录工具:Luatools 工具

2. Air8000 烧录需要的固件和脚本文件:

内核固件:https://gitee.com/openLuat/LuatOS/blob/master/module/Air8000/core.md

脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/network_routing/wifi_out_ethernet_in_wifi_in

3. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 开发板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。

3.2 API 介绍

本文仅介绍程序中使用到的 API 接口,详细接口说明请查看:核心库 API 索引 - luatos@air8000 - 合宙模组资料中心

exnetif.setproxy(adapter, main_adapter, other_configs)

配置网络代理实现多网融合;

四、实现功能概述

本小节教你怎么通过以太网和 WIFI 网络,实现 Air8000 工业引擎的配网系统。

4.1 本教程实现的功能定义是:

1. 初始化以太网模块,并通过硬件连接上网。

2. 启用 WiFi 的 AP 模式,使其他设备可以连接。

3. 配置网络共享,将以太网的网络共享给 WiFi。

4. 实现网络状态的监控和维护。

4.2 运行流程图

4.3 代码示例

netif_app.lua

--[[
@module  netif_app
@summary netif_app 网络管理模块,开启多网融合功能,以太网提供网络供wifi和以太网设备上网
@version 1.0
@date    2025.08.05
@author  魏健强
@usage
本文件为网络管理模块,核心业务逻辑为:
1.设置多网融合功能,以太网提供网络供wifi和以太网设备上网
2、http测试以太网网络
本文件没有对外接口,直接在main.lua中require "netif_app"就可以加载运行;
]]

exnetif = require "exnetif"

function netif_app_task_func()
    local res
    --设置多网融合功能,以太网提供网络供wifi设备上网
    res = exnetif.setproxy(socket.LWIP_AP, socket.LWIP_ETH, {
            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
            -- adapter_addr = "192.168.5.1",    -- 自定义LWIP_AP网卡的ip地址(选填),需要自定义ip和网关ip时填写
            -- adapter_gw = { 192, 168, 5, 1 }, -- 自定义LWIP_AP网卡的网关地址(选填),需要自定义ip和网关ip时填写
            main_adapter = {                    -- 提供网络的网卡开启参数
                ethpower_en = 140,              -- 以太网模块的pwrpin引脚(gpio编号)
                tp = netdrv.CH390,              -- 网卡芯片型号(选填参数),仅spi方式外挂以太网时需要填写。
                opts = {spi = 1, cs = 12}
            }
        })

    if res then
        log.info("exnetif", "setproxy success")
    else
        log.info("开启失败,请检查配置项是否正确,日志中是否打印了错误信息")
    end

    --设置多网融合功能,以太网提供网络供以太网设备上网
    res = exnetif.setproxy(socket.LWIP_USER1, socket.LWIP_ETH, {
            ethpower_en = 20,                   -- 以太网模块的pwrpin引脚(gpio编号)
            tp = netdrv.CH390,                  -- 网卡芯片型号(选填参数),仅spi方式外挂以太网时需要填写。
            opts = {spi = 0, cs = 8},           -- 外挂方式,需要额外的参数(选填参数),仅spi方式外挂以太网时需要填写。
            main_adapter = {                    -- 提供网络的网卡开启参数
                ethpower_en = 140,              -- 以太网模块的pwrpin引脚(gpio编号)
                tp = netdrv.CH390,              -- 网卡芯片型号(选填参数),仅spi方式外挂以太网时需要填写。
                opts = {spi = 1, cs = 12}
            }
        })
    if res then
        log.info("exnetif", "setproxy success")
    else
        log.info("开启失败,请检查配置项是否正确,日志中是否打印了错误信息")
    end

    -- 每5秒进行HTTPS连接测试,实时监测以太网网络连接状态, 仅供测试需要,量产不需要,用来判断当前网络是否可用,需要的话可以打开注释
    -- while 1 do
    --     local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_ETH,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和以太网设备上网
更多说明参考本目录下的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 = "ethernet_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 Air8000 开发板连接以太网

实现功能前,首先需要将 Air8000 通过网线连接到路由器 LAN 口。

硬件连接完毕后开始烧录代码,在 luatools 日志打印中我们可以看到以太网的相关打印,当日志输出以太网初始化完毕,则说明以太网准备就绪。

5.2 设备连接 Air8000 WIFI 热点

以太网连接上之后,我们可以用设备来连接 Air8000 的 WiFi 了。

这里用手机来演示,在手机的联网界面可以看到我们 Air8000 的热点,热点名称为:test2,密码为:HZ88888888

连接上之后,能看到我们成功使用 Air8000 的 WiFi 热点在网页上搜索到信息。

六、总结

至此,我们已使用 Air800 开发板 演示了多网融合-以太网供网给 Air8000 WiFi 上网功能。