跳转至

01 4G作为数据出口给WIFI,以太网设备上网

作者:魏健强

一、多网融合概述

Air8000 开发板通过多网融合技术将不同类型的通信网络(4G、WiFi、以太网)整合在一起,从而形成统一、高效、互操作性强的网络系统。

本文基于 Air8000 模块,通过 4G 移动网络为 WiFi 和以太网设备提供统一的上网接入服务。

二、准备硬件环境

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

2.1 Air8000 整机开发板

本文以 Air8000 整机开发板为例进行演示。可通过 淘宝 进行购买。

三、准备软件环境

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

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/4g_out_ethernet_in_wifi_in

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

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

4. 注意事项:如果需要升级 WiFi 固件请参考此链接文档进行操作:https://docs.openluat.com/air8000/luatos/app/updatwifi/update/

四、软硬件资料

4.1 API 介绍

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

exnetif.setproxy(adapter, main_adapter, other_configs)

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

4.2 以太网电路介绍

以太网电路介绍请查看:10 以太网 RJ45 电路 - luatos@air8000 - 合宙模组资料中心

五、整体功能概述

5.1 功能概述

以 4G 为供网数据出口,通过 Air8000 模组实现以下两种功能:

1. WiFi 热点创建,WiFi 设备连接热点实现 4G 上网。

2. 有线连接,以太网设备通过网线连接实现 4G 上网。

5.2 源码展示

程序中已详细注释代码用处,如有不懂可咨询合宙技术人员。

netif_app.lua

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

function netif_app_task_func()
    local res
    -- 等待4G网络连接成功
    while not socket.adapter() do
        -- 在此处阻塞等待4G网卡连接成功的消息"IP_READY"
        -- 或者等待1秒超时退出阻塞等待状态;
        -- 注意:此处的1000毫秒超时不要修改的更长;
        sys.waitUntil("IP_READY", 1000)
    end
    --设置多网融合功能,4G提供网络供wifi设备上网
    res = exnetif.setproxy(socket.LWIP_AP, socket.LWIP_GP, {
            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时填写
        })
    if res then
        log.info("exnetif", "setproxy success")
    else
        log.info("开启失败,请检查配置项是否正确,日志中是否打印了错误信息")
    end
    --设置多网融合功能,4G提供网络供以太网设备上网
    res = exnetif.setproxy(socket.LWIP_ETH, socket.LWIP_GP, {
            ethpower_en = 140,              -- 以太网模块的pwrpin引脚(gpio编号)
            tp = netdrv.CH390,              -- 网卡芯片型号(选填参数),仅spi方式外挂以太网时需要填写。
            opts = { spi = 1, cs = 12 },    -- 外挂方式,需要额外的参数(选填参数),仅spi方式外挂以太网时需要填写。
            -- adapter_addr = "192.168.2.1",   -- 自定义LWIP_ETH网卡的ip地址(选填),需要自定义ip和网关ip时填写
            -- adapter_gw = { 192, 168, 2, 1 } -- 自定义LWIP_ETH网卡的网关地址(选填),需要自定义ip和网关ip时填写
        })
    if res then
        log.info("exnetif", "setproxy success")
    else
        log.info("开启失败,请检查配置项是否正确,日志中是否打印了错误信息")
    end    
    -- 每5秒进行HTTPS连接测试,实时监测4G网络连接状态, 仅供测试需要,量产不需要,用来判断当前网络是否可用,需要的话可以打开注释
    -- while 1 do
    --     local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil,
    --         { adapter = socket.LWIP_GP, 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.设置多网融合功能,4G提供网络供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 = "4g_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.3 程序流程图展示

六、功能演示

6.1 4G 作为数据出口给 WiFi 设备上网

测试环境:Air8000 整机开发板、Windows10 以上系统版本电脑。

测试结果:可以正常连接到 WiFi 热点,也可以正常上网。

I7qabQmYuoaqMHxMc2Vcn0W7nkg

6.2 4G 作为数据出口给以太网设备上网

测试环境:Air8000 整机开发板、Windows10 以上系统版本电脑。

测试结果:电脑能正常识别到以太网网络适配器,也可以正常上网。

PGCYbqb56oBKAgxwM3VcrONon5c

七、总结

至此,Air8000 多网融合系列中以 4G 作为数据出口,分别为 WiFi 和以太网设备供网的功能已经结束。如果大家在实际操作中遇到技术难题,欢迎联系合宙技术人员。