01 4G作为数据出口给WIFI,以太网设备上网
一、多网融合概述
Air8000 开发板通过多网融合技术将不同类型的通信网络(4G、WiFi、以太网)整合在一起,从而形成统一、高效、互操作性强的网络系统。
本文基于 Air8000 模块,通过 4G 移动网络为 WiFi 和以太网设备提供统一的上网接入服务。
二、准备硬件环境
参考:Air8000 硬件环境清单,准备好硬件环境。
2.1 Air8000 整机开发板
本文以 Air8000 整机开发板为例进行演示。可通过 淘宝 进行购买。
三、准备软件环境
参考:Air8000 软件环境清单,准备好软件环境。
1. 烧录工具:参考 Luatools 工具使用说明 ;
2. Air8000 烧录需要的固件和脚本文件:
内核固件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/core
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 - 合宙模组资料中心。
wlan.init()
初始化
wlan.createAP(ssid, passwd, gateway, netmask, channel, opts)
启动 AP
netdrv.ipv4(id, addr, mark, gw)
设置或读取 ipv4 地址
netdrv.napt(id)
开启或关闭 NAPT
4.2 以太网电路介绍
以太网电路介绍请查看:10 以太网 RJ45 电路 - luatos@air8000 - 合宙模组资料中心
五、整体功能概述
5.1 功能概述
以 4G 为供网数据出口,通过 Air8000 模组实现以下两种功能:
1. WiFi 热点创建,WiFi 设备连接热点实现 4G 上网。
2. 有线连接,以太网设备通过网线连接实现 4G 上网。
5.2 源码展示
程序中已详细注释代码用处,如有不懂可咨询合宙技术人员。
Air8000_ap_lan.lua
--[[
本功能模块演示的内容为:
1. 软件配置 Air8000 的 WiFi AP 功能,然后烧录到 Air8000 模块中,最后使用 WiFi 设备连接对应热点,最终实现 4G 上网。
2. 软件配置 Air8000 的 Ethernet LAN功能,然后烧录到 Air8000 模块中,最后使用以太网设备通过网线与 Air8000 模块连接,最终实现 4G 上网。
功能演示使用 Air8000 整机开发板进行。
]]
-- 加载三个用到的库:dnsproxy 用于 DNS 代理服务,dhcpsrv 用于 DHCP 服务器服务,httpplus 用于 HTTP 请求相关的操作。
dnsproxy = require("dnsproxy")
dhcpsrv = require("dhcpsrv")
httpplus = require("httpplus")
-- 打开 CH390 供电
gpio.setup(140, 1, gpio.PULLUP)
-- 配置 WiFi AP 功能,使得 WiFi 设备实现 4G上网
function test_ap()
log.info("执行AP创建操作", airlink.ready() , "正常吗?")
-- 设置 WiFi 热点的名称和密码
wlan.createAP("uiot5678", "12345678")
-- 设置 AP 的 IP 地址、子网掩码、网关地址
netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-- 获取 WiFi AP 网络状态,连接后返回 true,否则返回 false,如果不存在就返回 nil。
log.info("netdrv", "等待AP就绪")
while netdrv.ready(socket.LWIP_AP) ~= true do
-- log.info("netdrv", "等待AP就绪")
sys.wait(100)
end
-- 创建 DHCP 服务器,为连接到 WiFi AP 的设备分配 IP 地址。
log.info("netdrv", "创建dhcp服务器, 供AP使用")
dhcpsrv.create({adapter=socket.LWIP_AP})
-- 获取 4G 网络状态,连接后返回 true,否则返回 false,如果不存在就返回 nil。
log.info("netdrv", "等待4G就绪")
while netdrv.ready(socket.LWIP_GP) ~= true do
-- log.info("netdrv", "等待4G就绪")
sys.wait(100)
end
-- 创建 DNS 代理服务,使得 WiFi AP 上的设备可以通过 4G 网络访问互联网。
log.info("netdrv", "创建dns代理服务, 供AP使用")
dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
end
-- 订阅系统事件"PING_RESULT",当系统执行 PING 命令时,会触发此事件并将 PING 的结果打印出来。
function handlePingResult(id, time, dst)
log.info("ping.result", id, time, dst);
end
sys.subscribe("PING_RESULT", handlePingResult)
-- WiFi AP 相关事件
-- 订阅系统事件"WLAN_AP_INC",当有设备连接或断开连接到 WiFi AP 时,会触发此事件并将连接状态和对应 MAC 地址打印出来。
function handleWlanApInc(evt, data)
-- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-- 当 evt=CONNECTED, data 是连接的 AP 的新 STA 的 MAC 地址
-- 当 evt=DISCONNECTED, data 是断开与 AP 连接的 STA 的 MAC 地址
log.info("收到AP事件", evt, data and data:toHex())
end
sys.subscribe("WLAN_AP_INC", handleWlanApInc)
-- 每隔6秒打印一次 airlink 统计数据,调试用
-- sys.taskInit(function()
-- while 1 do
-- sys.wait(6000)
-- airlink.statistics()
-- end
-- end)
-- 配置 Ethernet LAN 功能,为以太网设备实现 4G 上网
function eth_lan()
-- sys.wait(3000)
-- 配置 SPI 参数,Air8000 使用 SPI 接口与以太网模块进行通信。
local result = spi.setup(
1,--spi id
nil,
0,--CPHA
0,--CPOL
8,--数据宽度
51200000--,--波特率
)
log.info("main", "open spi",result)
if result ~= 0 then--返回值为 0,表示打开成功
log.info("main", "spi open error",result)
return
end
-- 初始化以太网,Air8000 指定使用 CH390 芯片。
log.info("netdrv", "初始化以太网")
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12,irq=255})
log.info("netdrv", "等待以太网就绪")
sys.wait(1000)
-- 设置以太网的 IP 地址、子网掩码、网关地址
netdrv.ipv4(socket.LWIP_ETH, "192.168.5.1", "255.255.255.0", "0.0.0.0")
-- 获取以太网网络状态,连接后返回 true,否则返回 false,如果不存在就返回 nil。
while netdrv.ready(socket.LWIP_ETH) ~= true do
-- log.info("netdrv", "等待以太网就绪") -- 若以太网设备没有连上,可打开此处注释排查。
sys.wait(100)
end
log.info("netdrv", "以太网就绪")
-- 创建 DHCP 服务器,为连接到以太网的设备分配 IP 地址。
log.info("netdrv", "创建dhcp服务器, 供以太网使用")
dhcpsrv.create({adapter=socket.LWIP_ETH, gw={192,168,5,1}})
-- 创建 DNS 代理服务,使得以太网接口上的设备可以通过 4G 网络访问互联网。
log.info("netdrv", "创建dns代理服务, 供以太网使用")
dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
end
-- 初始化 Ethernet LAN 和 WiFi AP。
function wifi_ap_eth_lan()
while airlink.ready() ~= true do
sys.wait(100)
end
wlan.init()
sys.taskInit(eth_lan)
sys.taskInit(test_ap)
while 1 do
-- 当 4G 网络就绪后,开启 NAPT (网络端口地址转换)功能,使 4G 网络作为 WiFi AP 上设备的网关。
if netdrv.ready(socket.LWIP_GP) then
log.info("netdrv", "4G作为网关")
netdrv.napt(socket.LWIP_GP)
break
end
sys.wait(1000)
end
end
sys.taskInit(wifi_ap_eth_lan)
main.lua
--[[
必须定义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进行远程升级,根据自己项目的需求,自定义格式即可
本demo演示的功能是:
1. 创建AP, 提供wifi设备, 通过4G上网
2. 创建以太网, 为局域网内的设备, 通过4G上网
]]
PROJECT = "Air8000_wifi_ap_eth_lan"
VERSION = "001.000.000"
-- 在日志中打印项目名和项目版本号
log.info("main", PROJECT, VERSION)
-- 加载必须用到的sys功能模块
-- sys功能模块是LuatOS运行框架的基础模块
_G.sys = require("sys")
-- 加载大部分情况下会用到的sysplus功能模块
-- sysplus功能模块是sys功能模块的强力补充
-- 如果项目脚本中用到了sysplus的接口,则打开此处的注释
-- _G.sysplus = require("sysplus")
-- 如果内核固件支持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 "Air8000_ap_lan"
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
5.3 程序流程图展示
六、功能演示
6.1 4G 作为数据出口给 WiFi 设备上网
测试环境:Air8000 整机开发板、Windows10 以上系统版本电脑。
测试结果:可以正常连接到 WiFi 热点,也可以正常上网。
6.2 4G 作为数据出口给以太网设备上网
测试环境:Air8000 整机开发板、Windows10 以上系统版本电脑。
测试结果:电脑能正常识别到以太网网络适配器,也可以正常上网。
七、总结
至此,Air8000 多网融合系列中以 4G 作为数据出口,分别为 WiFi 和以太网设备供网的功能已经结束。如果大家在实际操作中遇到技术难题,欢迎联系合宙技术人员。