Air780EPM netdrv 多網(wǎng)融合實(shí)現(xiàn)與應(yīng)用手冊(cè)

一、概述

合宙 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)用

  1. 燒錄工具: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 主要文件

  1. main.lua:主程序入口。

  2. netdrv_eth_wan.lua:以太網(wǎng) WAN 功能實(shí)現(xiàn)。

  3. netdrv_eth_lan.lua:以太網(wǎng) LAN 功能實(shí)現(xiàn)。

  4. netdrv_4g_multiple.lua:4G 連接外部網(wǎng)絡(luò),生成 WiFi 熱點(diǎn)為 WiFi 終端設(shè)備提供接入,支持以太網(wǎng) lan 模式為其他以太網(wǎng)設(shè)備提供接入

  5. netdrv_eth_multiple.lua:以太網(wǎng)連接外部網(wǎng)絡(luò),并提供 WiFi 熱點(diǎn)。

4.2 運(yùn)行流程

  1. 初始化網(wǎng)絡(luò)設(shè)備(如以太網(wǎng)或 4G)。

  2. 配置 IP 地址(動(dòng)態(tài) DHCP 或靜態(tài) IP)。

  3. 設(shè)置 DNS 和路由。

  4. 處理網(wǎng)絡(luò)事件(如 IP_READY 和 IP_LOSE)。

  5. 實(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%、成本不足其三分之一。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容