一、概述
合宙 LuatOS 集成高速通信、外設(shè)驅(qū)動(dòng)、UI 交互與視覺處理功能,可縮短行業(yè)產(chǎn)品開發(fā)周期,相比傳統(tǒng)串口屏 + DTU 方案及安卓方案,功耗降低 50%,成本降至其三分之一以下。
Air780EPM 支持 4G、以太網(wǎng)通信,低功耗模式功耗為 1.5~2mA,PSM + 模式功耗低至 3~12uA。netdrv 庫(kù)用于網(wǎng)絡(luò)設(shè)備初始化與管理,適配多種聯(lián)網(wǎng)方式并具備路由功能,可實(shí)現(xiàn)不同網(wǎng)絡(luò)連接融合;exnetif 庫(kù)在 netdrv 基礎(chǔ)上封裝,簡(jiǎn)化網(wǎng)絡(luò)功能開發(fā)流程,網(wǎng)絡(luò)相關(guān)開發(fā)建議采用 exnetif。
二、準(zhǔn)備硬件環(huán)境
2.1 所需硬件
Air780EPM V1.3 開發(fā)板一塊。
TYPE-C USB 數(shù)據(jù)線一根。
可上網(wǎng)的 SIM 卡一張。
4G 天線一根。
網(wǎng)線一根。
sim 卡插入開發(fā)板的 sim 卡槽
天線裝到開發(fā)板上
2.2 網(wǎng)線接線說明
netdrv_eth_wan 模塊以太網(wǎng)口接路由器 LAN 口或交換機(jī)
netdrv_eth_lan 模塊以太網(wǎng)口接電腦或需要上網(wǎng)的設(shè)備
netdrv_4g_multiple 模塊以太網(wǎng)口接電腦或需要上網(wǎng)的設(shè)備
netdrv_eth_multiple 模塊以太網(wǎng) WAN 接路由器 LAN 口或交換機(jī),AirETH_1000 配件板 LAN 口接需要上網(wǎng)的設(shè)備
AirETH_1000 配件板接到開發(fā)板上 可以用電腦接 AirETH_1000 配件板網(wǎng)口
- TYPE-C USB 數(shù)據(jù)線直接插到核心板的 TYPE-C USB 座子,另外一端連接電腦 USB 口;
三、準(zhǔn)備軟件環(huán)境
3.1 文章內(nèi)容應(yīng)用
- 燒錄工具:Luatoos工具
- 所需固件和腳本:
內(nèi)核固件:Air780EPM_ V2016版本固件((建議使用 2025 年 10 月 24 日后發(fā)布的固件))
腳本文件: gitee.com/openLuat/LuatOS/tree/master/module/Air780EPM/demo/netdrv
- LuatOS 庫(kù)文件:燒錄時(shí)勾選“添加默認(rèn) lib”選項(xiàng)。
3.2 API 介紹
本文僅介紹程序中使用到的 API 接口,詳細(xì)接口說明請(qǐng)查看:合宙資料中心 netdrv 核心庫(kù)。
四、實(shí)現(xiàn)功能概述
4.1 主要文件
main.lua:主程序入口。
netdrv_eth_wan.lua:以太網(wǎng) WAN 功能實(shí)現(xiàn)。
netdrv_eth_lan.lua:以太網(wǎng) LAN 功能實(shí)現(xiàn)。
netdrv_4g_multiple.lua:4G 連接外部網(wǎng)絡(luò),生成 WiFi 熱點(diǎn)為 WiFi 終端設(shè)備提供接入,支持以太網(wǎng) lan 模式為其他以太網(wǎng)設(shè)備提供接入
netdrv_eth_multiple.lua:以太網(wǎng)連接外部網(wǎng)絡(luò),并提供 WiFi 熱點(diǎn)。
4.2 運(yùn)行流程
初始化網(wǎng)絡(luò)設(shè)備(如以太網(wǎng)或 4G)。
配置 IP 地址(動(dòng)態(tài) DHCP 或靜態(tài) IP)。
設(shè)置 DNS 和路由。
處理網(wǎng)絡(luò)事件(如 IP_READY 和 IP_LOSE)。
實(shí)現(xiàn)附加功能(如 ping 測(cè)試)。
4.3 代碼示例分析:netdrv_eth_wan.lua
--[[
@module netdrv_eth_wan
@summary “通過SPI外掛CH390H芯片的以太網(wǎng)卡”驅(qū)動(dòng)模塊
@version 1.0
@date 2025.10.20
@usage
本文件為“通過SPI外掛CH390H芯片的以太網(wǎng)卡”驅(qū)動(dòng)模塊 ,核心業(yè)務(wù)邏輯為:
1、開啟以太網(wǎng)wan;
直接使用Air780EPM V1.3開發(fā)板硬件測(cè)試即可;
本文件沒有對(duì)外接口,直接在其他功能模塊中require "netdrv_eth_wan"就可以加載運(yùn)行;
]]
local static_ip = false
local function ip_ready_func(ip, adapter)
if adapter == socket.LWIP_ETH then
-- 在位置1和2設(shè)置自定義的DNS服務(wù)器ip地址:
-- "223.5.5.5",這個(gè)DNS服務(wù)器IP地址是阿里云提供的DNS服務(wù)器IP地址;
-- "114.114.114.114",這個(gè)DNS服務(wù)器IP地址是國(guó)內(nèi)通用的DNS服務(wù)器IP地址;
-- 可以加上以下兩行代碼,在自動(dòng)獲取的DNS服務(wù)器工作不穩(wěn)定的情況下,這兩個(gè)新增的DNS服務(wù)器會(huì)使DNS服務(wù)更加穩(wěn)定可靠;
-- 如果使用專網(wǎng)卡,不要使用這兩行代碼;
-- 如果使用國(guó)外的網(wǎng)絡(luò),不要使用這兩行代碼;
socket.setDNS(adapter, 1, "223.5.5.5")
socket.setDNS(adapter, 2, "114.114.114.114")
log.info("netdrv_eth_wan.ip_ready_func", "IP_READY", socket.localIP(socket.LWIP_ETH))
end
end
local function ip_lose_func(adapter)
if adapter == socket.LWIP_ETH then
log.warn("netdrv_eth_wan.ip_lose_func", "IP_LOSE")
end
end
-- 本功能在2025.9.3新增
local function ping_test()
-- 要等聯(lián)網(wǎng)了才能ping
sys.waitUntil("IP_READY")
while true do
-- 必須指定使用哪個(gè)網(wǎng)卡
netdrv.ping(socket.LWIP_ETH, "112.125.89.8")
sys.waitUntil("PING_RESULT", 3000)
sys.wait(3000)
end
end
local function ping_res(id, time, dst)
log.info("ping", id, time, dst); -- 獲取到響應(yīng)結(jié)果
end
-- 以太網(wǎng)聯(lián)網(wǎng)成功(成功連接路由器,并且獲取到了IP地址)后,內(nèi)核固件會(huì)產(chǎn)生一個(gè)"IP_READY"消息
-- 各個(gè)功能模塊可以訂閱"IP_READY"消息實(shí)時(shí)處理以太網(wǎng)聯(lián)網(wǎng)成功的事件
-- 也可以在任何時(shí)刻調(diào)用socket.adapter(socket.LWIP_ETH)來獲取以太網(wǎng)是否連接成功
-- 以太網(wǎng)斷網(wǎng)后,內(nèi)核固件會(huì)產(chǎn)生一個(gè)"IP_LOSE"消息
-- 各個(gè)功能模塊可以訂閱"IP_LOSE"消息實(shí)時(shí)處理以太網(wǎng)斷網(wǎng)的事件
-- 也可以在任何時(shí)刻調(diào)用socket.adapter(socket.LWIP_ETH)來獲取以太網(wǎng)是否連接成功
-- 此處訂閱"IP_READY"和"IP_LOSE"兩種消息
-- 在消息的處理函數(shù)中,僅僅打印了一些信息,便于實(shí)時(shí)觀察“通過SPI外掛CH390H芯片的以太網(wǎng)卡”的連接狀態(tài)
-- 也可以根據(jù)自己的項(xiàng)目需求,在消息處理函數(shù)中增加自己的業(yè)務(wù)邏輯控制,例如可以在連網(wǎng)狀態(tài)發(fā)生改變時(shí)更新網(wǎng)絡(luò)圖標(biāo)
sys.subscribe("IP_READY", ip_ready_func)
sys.subscribe("IP_LOSE", ip_lose_func)
local function eth_wan_setup()
-- 本demo使用Air8000開發(fā)板測(cè)試,開發(fā)板上的硬件配置為:
-- GPIO140為CH390H以太網(wǎng)芯片的供電使能控制引腳
-- 使用spi1,片選引腳使用GPIO12
-- 如果使用的硬件不是Air8000開發(fā)板,根據(jù)自己的硬件配置修改以下參數(shù)
log.info("ch390", "打開LDO供電")
gpio.setup(20, 1, gpio.PULLUP) -- 打開ch390供電
local result = spi.setup(0, -- spi_id
nil, 0, -- CPHA
0, -- CPOL
8, -- 數(shù)據(jù)寬度
25600000 -- ,--頻率
-- spi.MSB,--高低位順序 可選,默認(rèn)高位在前
-- spi.master,--主模式 可選,默認(rèn)主
-- spi.full--全雙工 可選,默認(rèn)全雙工
)
log.info("main", "open", result)
if result ~= 0 then -- 返回值為0,表示打開成功
log.info("main", "spi open error", result)
return
end
-- 初始化指定netdrv設(shè)備,
-- socket.LWIP_ETH 網(wǎng)絡(luò)適配器編號(hào)
-- netdrv.CH390外掛CH390
-- SPI ID 1, 片選 GPIO12
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {
spi = 0,
cs = 8
})
sys.wait(1000) -- 等待以太網(wǎng)模塊初始化完成,去掉會(huì)導(dǎo)致以太網(wǎng)初始化失敗
if static_ip then
-- 靜態(tài)ip配置
log.info("靜態(tài)ip", netdrv.ipv4(socket.LWIP_ETH, "192.168.4.100", "255.255.255.0", "192.168.4.1"))
else
-- 使用dhcp動(dòng)態(tài)獲取ip地址
netdrv.dhcp(socket.LWIP_ETH, true)
end
log.info("LWIP_ETH", "mac addr", netdrv.mac(socket.LWIP_ETH))
sys.taskInit(ping_test)
sys.subscribe("PING_RESULT", ping_res)
end
local function http_test()
-- sys.waitUntil("IP_READY")
while true do
sys.wait(6000)
log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {
adapter = socket.LWIP_ETH
}).wait()) -- adapter指定為以太網(wǎng)聯(lián)網(wǎng)方式
log.info("lua", rtos.meminfo())
log.info("sys", rtos.meminfo("sys"))
end
end
sys.taskInit(eth_wan_setup)
sys.taskInit(http_test)
netdrv_eth_multiple.lua
--[[
@module netdrv_eth_multiple
@summary 雙以太網(wǎng)驅(qū)動(dòng)模塊
@version 1.0
@date 2025.10.20
@author 魏健強(qiáng)
@usage
本文件為多網(wǎng)卡驅(qū)動(dòng)模塊 ,核心業(yè)務(wù)邏輯為:
1、以太網(wǎng)WAN連接外部網(wǎng)絡(luò), 其他需要上網(wǎng)的設(shè)備連接模塊以太網(wǎng)LAN口上網(wǎng);
直接使用Air780EPM V1.3開發(fā)板硬件測(cè)試即可;
本文件沒有對(duì)外接口,直接在其他功能模塊中require "netdrv_eth_multiple"就可以加載運(yùn)行;
]]
dhcpsrv = require "dhcpsrv"
dnsproxy = require "dnsproxy"
local static_ip = false
local function eth_wan_setup()
log.info("ch390", "打開LDO供電")
gpio.setup(20, 1, gpio.PULLUP) -- 打開ch390供電
local result = spi.setup(0, -- spi_id
nil, 0, -- CPHA
0, -- CPOL
8, -- 數(shù)據(jù)寬度
25600000 -- ,--頻率
-- spi.MSB,--高低位順序 可選,默認(rèn)高位在前
-- spi.master,--主模式 可選,默認(rèn)主
-- spi.full--全雙工 可選,默認(rèn)全雙工
)
log.info("main", "open", result)
if result ~= 0 then -- 返回值為0,表示打開成功
log.info("main", "spi open error", result)
return
end
-- 初始化指定netdrv設(shè)備,
-- socket.LWIP_ETH 網(wǎng)絡(luò)適配器編號(hào)
-- netdrv.CH390外掛CH390
-- SPI ID 1, 片選 GPIO12
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {
spi = 0,
cs = 8
})
sys.wait(1000) -- 等待以太網(wǎng)模塊初始化完成,去掉會(huì)導(dǎo)致以太網(wǎng)初始化失敗
if static_ip then
-- 靜態(tài)ip配置
log.info("靜態(tài)ip", netdrv.ipv4(socket.LWIP_ETH, "192.168.4.100", "255.255.255.0", "192.168.4.1"))
else
-- 使用dhcp動(dòng)態(tài)獲取ip地址
netdrv.dhcp(socket.LWIP_ETH, true)
end
log.info("LWIP_ETH", "mac addr", netdrv.mac(socket.LWIP_ETH))
end
local function eth_lan_setup()
log.info("ch390", "打開LDO供電")
gpio.setup(21, 1, gpio.PULLUP) -- 打開ch390供電
local result = spi.setup(1, -- spi_id
nil, 0, -- CPHA
0, -- CPOL
8, -- 數(shù)據(jù)寬度
25600000 -- ,--頻率
)
log.info("main", "open", result)
if result ~= 0 then -- 返回值為0,表示打開成功
log.info("main", "spi open error", result)
return
end
-- 初始化指定netdrv設(shè)備,
-- socket.LWIP_USER0 網(wǎng)絡(luò)適配器編號(hào)
-- netdrv.CH390外掛CH390
-- SPI ID 1, 片選 GPIO12
netdrv.setup(socket.LWIP_USER0, netdrv.CH390, {
spi = 1,
cs = 12
})
-- 確保ch390初始化完成,否則會(huì)出現(xiàn)netdrv.ipv4設(shè)置失敗的情況
sys.wait(1000)
-- 設(shè)置ip, 子網(wǎng)掩碼,網(wǎng)關(guān)
local ipv4, mark, gw = netdrv.ipv4(socket.LWIP_USER0, "192.168.5.1", "255.255.255.0", "192.168.5.1")
log.info("ipv4", ipv4, mark, gw)
-- 開啟dhcp服務(wù)器
dhcpsrv.create({
adapter = socket.LWIP_USER0
})
end
local function netdrv_multiple_task_func()
eth_wan_setup()
eth_lan_setup()
-- 設(shè)置dns轉(zhuǎn)發(fā)
dnsproxy.setup(socket.LWIP_USER0, socket.LWIP_ETH)
-- 設(shè)置以太網(wǎng)為數(shù)據(jù)出口
netdrv.napt(socket.LWIP_ETH)
end
local function http_test()
-- sys.waitUntil("IP_READY")
while true do
sys.wait(6000)
log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {
adapter = socket.LWIP_ETH
}).wait()) -- adapter指定為以太網(wǎng)聯(lián)網(wǎng)方式
log.info("lua", rtos.meminfo())
log.info("sys", rtos.meminfo("sys"))
end
end
-- 啟動(dòng)一個(gè)task,task的處理函數(shù)為netdrv_multiple_task_func
sys.taskInit(netdrv_multiple_task_func)
sys.taskInit(http_test)
netdrv_eth_lan.lua
--[[
@module netdrv_eth_lan
@summary “通過SPI外掛CH390H芯片的以太網(wǎng)卡”驅(qū)動(dòng)模塊
@version 1.0
@date 2025.10.20
@author 魏健強(qiáng)
@usage
本文件為“通過SPI外掛CH390H芯片的以太網(wǎng)卡”驅(qū)動(dòng)模塊 ,核心業(yè)務(wù)邏輯為:
1、開啟以太網(wǎng)lan;
直接使用Air780EPM V1.3開發(fā)板硬件測(cè)試即可;
本文件沒有對(duì)外接口,直接在其他功能模塊中require "netdrv_eth_lan"就可以加載運(yùn)行;
]]
dhcps = require "dhcpsrv"
local function eth_lan_setup()
-- 本demo使用Air8000開發(fā)板測(cè)試,開發(fā)板上的硬件配置為:
-- GPIO140為CH390H以太網(wǎng)芯片的供電使能控制引腳
-- 使用spi1,片選引腳使用GPIO12
-- 如果使用的硬件不是Air8000開發(fā)板,根據(jù)自己的硬件配置修改以下參數(shù)
log.info("ch390", "打開LDO供電")
gpio.setup(20, 1, gpio.PULLUP) -- 打開ch390供電
local result = spi.setup(0, -- spi_id
nil, 0, -- CPHA
0, -- CPOL
8, -- 數(shù)據(jù)寬度
25600000 -- ,--頻率
)
log.info("main", "open", result)
if result ~= 0 then -- 返回值為0,表示打開成功
log.info("main", "spi open error", result)
return
end
-- 初始化指定netdrv設(shè)備,
-- socket.LWIP_ETH 網(wǎng)絡(luò)適配器編號(hào)
-- netdrv.CH390外掛CH390
-- SPI ID 1, 片選 GPIO12
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {
spi = 0,
cs = 8
})
-- 確保ch390初始化完成,否則會(huì)出現(xiàn)netdrv.ipv4設(shè)置失敗的情況
sys.wait(1000)
-- 設(shè)置ip, 子網(wǎng)掩碼,網(wǎng)關(guān)
local ipv4, mark, gw = netdrv.ipv4(socket.LWIP_ETH, "192.168.4.1", "255.255.255.0", "192.168.4.1")
log.info("ipv4", ipv4, mark, gw)
-- 開啟dhcp服務(wù)器
dhcps.create({
adapter = socket.LWIP_ETH
})
end
sys.taskInit(eth_lan_setup)
netdrv_4g_multiple.lua
--[[
@module netdrv_4g_multiple
@summary 多網(wǎng)卡(4G網(wǎng)卡、通過SPI外掛CH390H芯片的以太網(wǎng)卡)驅(qū)動(dòng)模塊
@version 1.0
@date 2025.10.20
@author 魏健強(qiáng)
@usage
本文件為多網(wǎng)卡驅(qū)動(dòng)模塊 ,核心業(yè)務(wù)邏輯為:
1、4G連接外部網(wǎng)絡(luò),以太網(wǎng)lan模式為其他以太網(wǎng)設(shè)備提供接入 ;
直接使用Air780EPM V1.3開發(fā)板硬件測(cè)試即可;
本文件沒有對(duì)外接口,直接在其他功能模塊中require "netdrv_4g_multiple"就可以加載運(yùn)行;
]]
dhcpsrv = require "dhcpsrv"
dnsproxy = require "dnsproxy"
local function lte_eth_setup()
log.info("ch390", "打開LDO供電")
gpio.setup(20, 1, gpio.PULLUP) -- 打開ch390供電
local result = spi.setup(0, -- spi_id
nil, 0, -- CPHA
0, -- CPOL
8, -- 數(shù)據(jù)寬度
25600000 -- ,--頻率
)
log.info("main", "open", result)
if result ~= 0 then -- 返回值為0,表示打開成功
log.info("main", "spi open error", result)
return
end
-- 初始化指定netdrv設(shè)備,
-- socket.LWIP_ETH 網(wǎng)絡(luò)適配器編號(hào)
-- netdrv.CH390外掛CH390
-- SPI ID 1, 片選 GPIO12
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {
spi = 0,
cs = 8
})
-- 確保ch390初始化完成,否則會(huì)出現(xiàn)netdrv.ipv4設(shè)置失敗的情況
sys.wait(1000)
-- 設(shè)置ip, 子網(wǎng)掩碼,網(wǎng)關(guān)
local ipv4, mark, gw = netdrv.ipv4(socket.LWIP_ETH, "192.168.4.1", "255.255.255.0", "192.168.4.1")
log.info("LWIP_ETH", ipv4, mark, gw)
-- 開啟dhcp服務(wù)器
dhcpsrv.create({adapter = socket.LWIP_ETH})
-- 設(shè)置dns轉(zhuǎn)發(fā)
dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
end
local function netdrv_multiple_task_func()
-- 等待4G網(wǎng)絡(luò)連接成功
while not socket.adapter() do
-- 在此處阻塞等待4G網(wǎng)卡連接成功的消息"IP_READY"
-- 或者等待1秒超時(shí)退出阻塞等待狀態(tài);
-- 注意:此處的1000毫秒超時(shí)不要修改的更長(zhǎng);
sys.waitUntil("IP_READY", 1000)
end
-- 開啟4G->以太網(wǎng)的多網(wǎng)融合
lte_eth_setup()
-- 設(shè)置4G為數(shù)據(jù)出口
netdrv.napt(socket.LWIP_GP)
end
-- 啟動(dòng)一個(gè)task,task的處理函數(shù)為netdrv_multiple_task_func
sys.taskInit(netdrv_multiple_task_func)
main.lua
--[[
@module main
@summary LuatOS用戶應(yīng)用腳本文件入口,總體調(diào)度應(yīng)用邏輯
@version 1.0
@date 2025.10.20
@author 魏健強(qiáng)
@usage
本demo演示的核心功能為:
1.開啟以太網(wǎng)功能
2.開啟多網(wǎng)融合功能
更多說明參考本目錄下的readme.md文件
]]
--[[
必須定義PROJECT和VERSION變量,Luatools工具會(huì)用到這兩個(gè)變量,遠(yuǎn)程升級(jí)功能也會(huì)用到這兩個(gè)變量
PROJECT:項(xiàng)目名,ascii string類型
可以隨便定義,只要不使用,就行
VERSION:項(xiàng)目版本號(hào),ascii string類型
如果使用合宙iot.openluat.com進(jìn)行遠(yuǎn)程升級(jí),必須按照"XXX.YYY.ZZZ"三段格式定義:
X、Y、Z各表示1位數(shù)字,三個(gè)X表示的數(shù)字可以相同,也可以不同,同理三個(gè)Y和三個(gè)Z表示的數(shù)字也是可以相同,可以不同
因?yàn)闅v史原因,YYY這三位數(shù)字必須存在,但是沒有任何用處,可以一直寫為000
如果不使用合宙iot.openluat.com進(jìn)行遠(yuǎn)程升級(jí),根據(jù)自己項(xiàng)目的需求,自定義格式即可
]]
PROJECT = "netdrv"
VERSION = "001.000.000"
-- 在日志中打印項(xiàng)目名和項(xiàng)目版本號(hào)
log.info("main", PROJECT, VERSION)
-- 如果內(nèi)核固件支持wdt看門狗功能,此處對(duì)看門狗進(jìn)行初始化和定時(shí)喂狗處理
-- 如果腳本程序死循環(huán)卡死,就會(huì)無法及時(shí)喂狗,最終會(huì)自動(dòng)重啟
if wdt then
--配置喂狗超時(shí)時(shí)間為9秒鐘
wdt.init(9000)
--啟動(dòng)一個(gè)循環(huán)定時(shí)器,每隔3秒鐘喂一次狗
sys.timerLoopStart(wdt.feed, 3000)
end
-- 如果內(nèi)核固件支持errDump功能,此處進(jìn)行配置,【強(qiáng)烈建議打開此處的注釋】
-- 因?yàn)榇斯δ苣K可以記錄并且上傳腳本在運(yùn)行過程中出現(xiàn)的語(yǔ)法錯(cuò)誤或者其他自定義的錯(cuò)誤信息,可以初步分析一些設(shè)備運(yùn)行異常的問題
-- 以下代碼是最基本的用法,更復(fù)雜的用法可以詳細(xì)閱讀API說明文檔
-- 啟動(dòng)errDump日志存儲(chǔ)并且上傳功能,600秒上傳一次
-- if errDump then
-- errDump.config(true, 600)
-- end
-- 使用LuatOS開發(fā)的任何一個(gè)項(xiàng)目,都強(qiáng)烈建議使用遠(yuǎn)程升級(jí)FOTA功能
-- 可以使用合宙的iot.openluat.com平臺(tái)進(jìn)行遠(yuǎn)程升級(jí)
-- 也可以使用客戶自己搭建的平臺(tái)進(jìn)行遠(yuǎn)程升級(jí)
-- 遠(yuǎn)程升級(jí)的詳細(xì)用法,可以參考fota的demo進(jìn)行使用
-- 啟動(dòng)一個(gè)循環(huán)定時(shí)器
-- 每隔3秒鐘打印一次總內(nèi)存,實(shí)時(shí)的已使用內(nèi)存,歷史最高的已使用內(nèi)存情況
-- 方便分析內(nèi)存使用是否有異常
-- sys.timerLoopStart(function()
-- log.info("mem.lua", rtos.meminfo())
-- log.info("mem.sys", rtos.meminfo("sys"))
-- end, 3000)
-- 開啟以太網(wǎng)wan
require "netdrv_eth_wan"
-- 開啟以太網(wǎng)lan
-- require "netdrv_eth_lan"
-- 4G連接外部網(wǎng)絡(luò),支持以太網(wǎng)lan模式為其他以太網(wǎng)設(shè)備提供接入
-- require "netdrv_4g_multiple"
-- 雙網(wǎng)口模式,以太網(wǎng)wan連接外部網(wǎng)絡(luò),以太網(wǎng)lan口為其他以太網(wǎng)設(shè)備提供接入
-- require "netdrv_eth_multiple"
-- 用戶代碼已結(jié)束---------------------------------------------
-- 結(jié)尾總是這一句
sys.run()
-- sys.run()之后后面不要加任何語(yǔ)句!!!!!
關(guān)鍵點(diǎn)解釋:
初始化:使用 netdrv.setup 配置以太網(wǎng)設(shè)備(如 CH390 芯片)。
IP 配置:支持動(dòng)態(tài) DHCP 或靜態(tài) IP,通過 netdrv.dhcp 或 netdrv.ipv4 實(shí)現(xiàn)。
DNS 設(shè)置:在 IP_READY 事件中自定義 DNS 服務(wù)器。
事件處理:訂閱 IP_READY 和 IP_LOSE 事件來響應(yīng)網(wǎng)絡(luò)狀態(tài)變化。
附加功能:如 ping 測(cè)試,用于網(wǎng)絡(luò)連通性驗(yàn)證。
五、功能演示
如果需要開啟以太網(wǎng) lan,打開 require “netdrv_eth_lan”,其余注釋掉, 模塊以太網(wǎng)口接電腦,模塊以太網(wǎng)口接電腦,
如果需要開啟以太網(wǎng) wan,打開 require “netdrv_eth_wan”,其余注釋掉 模塊以太網(wǎng)口接路由器,模塊成功聯(lián)網(wǎng)并 http 請(qǐng)求成功
如果需要開啟 4G 轉(zhuǎn)以太網(wǎng)的多網(wǎng)融合,打開 require “netdrv_4g_multiple”,其余注釋掉 4G 作為數(shù)據(jù)出口,需要上網(wǎng)的設(shè)備連接模塊以太網(wǎng)接口上網(wǎng)
如果需要開啟以太網(wǎng)轉(zhuǎn) wifi 的多網(wǎng)融合,打開 require “netdrv_eth_multiple.lua”,其余注釋掉 模塊以太網(wǎng) WAN 接路由器 LAN 口或交換機(jī),電腦連接模塊以太網(wǎng) LAN,DHCP 獲取 IP,測(cè)試網(wǎng)絡(luò)正常。
注意:每次僅啟用一個(gè)功能,其余腳本需注釋掉。
六、常見問題
IP 獲取失敗:確認(rèn)路由器 DHCP 服務(wù)正常,或靜態(tài) IP 設(shè)置無誤。
以太網(wǎng)初始化失?。簷z查 sys.wait(1000) 是否添加
多網(wǎng)融合不通:確認(rèn) netdrv.napt() 指向正確的出口網(wǎng)卡
DNS 解析失?。簷z查 dnsproxy.setup() 參數(shù)順序(LAN, WAN) 通過以上步驟,您可以高效實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備管理。如需進(jìn)一步幫助,請(qǐng)參考 exnetif 擴(kuò)展庫(kù)文檔或提供具體問題場(chǎng)景。
Air780EPM 依托 netdrv 與 exnetif 庫(kù)可實(shí)現(xiàn)多網(wǎng)融合管理,同時(shí)具備低功耗運(yùn)行特性;合宙 LuatOS 提供一站式物聯(lián)網(wǎng)解決方案,集成多項(xiàng)功能以縮短產(chǎn)品開發(fā)周期,相較傳統(tǒng)方案功耗降低 50%、成本不足其三分之一。