以太网
一、演示功能概述
本章节用两个示例演示 Air780EPM 开发板的以太网功能
第一个示例:Air780EPM 开发板通过 CH390 连接路由器,访问公网获取数据。
第二个示例:Air780EPM 开发板通过 CH390 连接电脑,使用 4G 转以太网功能,给电脑提供网络。
二、准备硬件环境
参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。
2.1 Air780EPM V1.3 开发板
2.2 所需配件
2.3 开发板组合演示
2.1.1 LAN 功能硬件连接
2.3.2 WAN 功能硬件连接
三、准备软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools 工具;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V2003_Air780EPM;参考项目使用的内核固件;
3. luatos 需要的脚本和资源文件
脚本和资源文件:https://gitee.com/openLuat/LuatOS/tree/master/demo/netdrv
lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air780EPM 核心板,将本篇文章中演示使用的项目文件烧录到 Air780EPM 核心板中。
四、以太网软硬件资料
4.1 API 接口介绍
netdrv - 网络设备管理 - luatos@air780epm - 合宙模组资料中心
五、代码示例介绍
5.1 代码介绍
5.1.1 main.lua
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "ch390h"
VERSION = "1.0.0"
-- 使用合宙iot平台时需要这个参数
PRODUCT_KEY = "xxx" -- 到 iot.openluat.com 创建项目,获取正确的项目id
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
sysplus = require("sysplus")
log.info("ch390", "打开LDO供电")
gpio.setup(20, 1) --打开以太网模块供电
-- require "lan"
-- require "wan"
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
5.1.2 wan.lua
sys.taskInit(function ()
local result = spi.setup(
0,--spi id
nil,
0,--CPHA
0,--CPOL
8,--数据宽度
25600000--,--频率
-- spi.MSB,--高低位顺序 可选,默认高位在前
-- spi.master,--主模式 可选,默认主
-- spi.full--全双工 可选,默认全双工
)
log.info("main", "open",result)
if result ~= 0 then--返回值为0,表示打开成功
log.info("main", "spi open error",result)
return
end
-- 初始化指定netdrv设备,
-- socket.LWIP_ETH 网络适配器编号
-- netdrv.CH390外挂CH390
-- SPI ID 0, 片选 GPIO8
netdrv.setup(socket.LWIP_ETH, _netdrv.CH390_, {spi=0,cs=8})
-- 开启DHCP功能
netdrv.dhcp(socket.LWIP_ETH, true)
end)
sys.taskInit(function()
-- sys.waitUntil("IP_READY")
while 1 do
sys.wait(6000)
-- 每隔六秒请求4K数据
log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {adapter=socket.LWIP_ETH}).wait())
log.info("lua", rtos.meminfo())
log.info("sys", rtos.meminfo("sys"))
end
end)
5.1.3 lan.lua
dhcps = require "dhcpsrv"
dnsproxy = require "dnsproxy"
sys.taskInit(function ()
local result = spi.setup(
0,--spi id
nil,
0,--CPHA
0,--CPOL
8,--数据宽度
51200000--,--频率
-- spi.MSB,--高低位顺序 可选,默认高位在前
-- spi.master,--主模式 可选,默认主
-- spi.full--全双工 可选,默认全双工
)
log.info("main", "open",result)
if result ~= 0 then--返回值为0,表示打开成功
log.info("main", "spi open error",result)
return
end
-- 初始化指定netdrv设备,
-- socket.LWIP_ETH 网络适配器编号
-- netdrv.CH390外挂CH390
-- SPI ID 0, 片选 GPIO8
netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=0,cs=8})
sys.wait(3000)
-- 设置IPV4地址
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)
-- 获取netdrv的物理连接状态
while netdrv.link(socket.LWIP_ETH) ~= true do
sys.wait(100)
end
while netdrv.link(socket.LWIP_GP) ~= true do
sys.wait(100)
end
dhcps.create({adapter=socket.LWIP_ETH})
dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
netdrv.napt(socket.LWIP_GP)
if iperf then
log.info("启动iperf服务器端")
iperf.server(socket.LWIP_ETH)
end
end)
sys.taskInit(function()
while 1 do
sys.wait(300000)
log.info("lua", rtos.meminfo())
log.info("sys", rtos.meminfo("sys"))
end
end)
5.2 WAN 功能测试
Air780EPM 开发板通过 CH390 连接路由器,访问公网获取数据。
将 main.lua 中的 -- require "wan" 注释打开,然后将脚本烧录进开发板,以太网正常 DHCP 后,获得 IP,6 秒一次循环向 http 服务器请求 4K 数据。
如下图,可以看到运行结果。
5.3 LAN 功能测试
Air780EPM 开发板通过 CH390 连接电脑,使用 4G 转以太网功能,给电脑提供网络。
将 main.lua 中的 -- require "wan" 注释打开,然后将脚本烧录进开发板,将电脑其他上网途径关掉,仅打开以太网上网方式,通过网线将 Air780EPM 开发板与电脑相连。
代码烧录成功,网线连接正常,并且 4G 模块正常联网的情况下,运行结果参考下图。
六、总结
本教程演示了 Air780EPM 以太网功能的两种使用方式,请根据具体场景选择您需要的 demo 即可。