init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
--[[
|
||||
@module iperf_client
|
||||
@summary iperf客户端模式测试模块
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
本模块演示如何初始化CH390以太网并启动iperf客户端模式进行测试。
|
||||
适用于路由器连接场景,设备通过DHCP从路由器获取IP地址。
|
||||
1、初始化SPI接口连接CH390
|
||||
2、设置CH390驱动和网络参数
|
||||
3、配置从路由器获取IP地址
|
||||
4、连接到指定的iperf服务器并进行测试
|
||||
|
||||
本文件没有对外接口,直接在 main.lua 中 require "iperf_client" 即可加载运行。
|
||||
]]
|
||||
|
||||
-- 引入必要的模块
|
||||
local exnetif = require "exnetif"
|
||||
|
||||
-- 配置服务器IP地址(需要根据实际服务器IP进行修改)
|
||||
local SERVER_IP = "192.168.1.3" -- 这里需要修改为实际的服务器IP地址
|
||||
|
||||
-- iperf测试报告处理函数
|
||||
local function iperf_report_handler(bytes, ms_duration, bandwidth)
|
||||
-- 转换为Mbps显示
|
||||
local bandwidth_mbps = bandwidth / 1000
|
||||
log.info("iperf报告", string.format("数据量: %d bytes, 持续时间: %d ms, 带宽: %.2f Mbps", bytes, ms_duration, bandwidth_mbps))
|
||||
end
|
||||
|
||||
-- iperf客户端任务
|
||||
local function iperf_client_task()
|
||||
log.info("iperf测试", "开始初始化网络...")
|
||||
-- 使用exnetif配置SPI外接以太网芯片CH390H
|
||||
exnetif.set_priority_order({
|
||||
{
|
||||
ETHERNET = {
|
||||
pwrpin = 20,
|
||||
tp = netdrv.CH390,
|
||||
opts = {spi = 0, cs = 8}
|
||||
}
|
||||
}
|
||||
})
|
||||
-- 等待IP地址获取成功
|
||||
log.info("iperf测试", "等待获取IP地址...")
|
||||
-- 设置IP获取超时
|
||||
local ip_wait_count = 60
|
||||
while true do
|
||||
local ipv4 = socket.localIP(socket.LWIP_ETH)
|
||||
if ipv4 and ipv4 ~= "0.0.0.0" then
|
||||
log.info("iperf测试", "IP获取成功:", ipv4)
|
||||
break
|
||||
end
|
||||
|
||||
-- 超时检查
|
||||
if ip_wait_count <= 0 then
|
||||
log.error("iperf测试", "获取IP地址超时")
|
||||
return
|
||||
end
|
||||
ip_wait_count = ip_wait_count - 1
|
||||
sys.wait(1000)
|
||||
end
|
||||
|
||||
-- 等待以太网连接
|
||||
while not socket.adapter(socket.LWIP_ETH) do
|
||||
sys.wait(100)
|
||||
end
|
||||
log.info("iperf测试", "以太网连接状态: 已连接")
|
||||
|
||||
-- 启动客户端模式,连接到指定服务器
|
||||
log.info("iperf测试", "启动客户端模式")
|
||||
log.info("iperf测试", "连接到服务器IP:", SERVER_IP, "端口: 5001")
|
||||
|
||||
-- 连接服务器
|
||||
iperf.client(socket.LWIP_ETH, SERVER_IP, 5001)
|
||||
|
||||
-- 订阅iperf测试报告事件
|
||||
sys.subscribe("IPERF_REPORT", iperf_report_handler)
|
||||
|
||||
log.info("iperf测试", "测试开始")
|
||||
|
||||
-- 设置测试循环次数,共测试2分钟
|
||||
local test_count = 24
|
||||
while test_count > 0 do
|
||||
-- 等待IPERF_REPORT事件,超时时间5秒
|
||||
local report_received = sys.waitUntil("IPERF_REPORT", 5000)
|
||||
if report_received then
|
||||
-- 如果收到报告事件,退出循环
|
||||
log.info("iperf测试", "收到报告,结束测试")
|
||||
break
|
||||
else
|
||||
-- 如果超时,继续测试
|
||||
test_count = test_count - 1
|
||||
log.info("iperf测试", "测试进行中...")
|
||||
end
|
||||
end
|
||||
|
||||
-- 测试结束
|
||||
log.info("iperf测试", "测试结束,关闭客户端")
|
||||
iperf.abort()
|
||||
end
|
||||
|
||||
-- 执行iperf客户端模式测试
|
||||
sys.taskInit(iperf_client_task)
|
||||
@@ -0,0 +1,87 @@
|
||||
--[[
|
||||
@module iperf_server
|
||||
@summary iperf服务器模式测试模块
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
本模块演示如何初始化CH390以太网并启动iperf服务器模式进行测试。
|
||||
适用于路由器连接场景,设备通过DHCP从路由器获取IP地址。
|
||||
使用步骤:
|
||||
1、初始化SPI接口连接CH390
|
||||
2、设置CH390驱动和网络参数
|
||||
3、配置从路由器获取IP地址
|
||||
4、启动iperf服务器并处理测试结果
|
||||
|
||||
本文件没有对外接口,直接在 main.lua 中 require "iperf_server" 即可加载运行。
|
||||
]]
|
||||
|
||||
-- 引入必要的模块
|
||||
local exnetif = require "exnetif"
|
||||
|
||||
-- 记录服务器IP
|
||||
local server_ip = "0.0.0.0"
|
||||
|
||||
-- iperf测试报告处理函数
|
||||
local function iperf_report_handler(bytes, ms_duration, bandwidth)
|
||||
-- 转换为Mbps显示
|
||||
local bandwidth_mbps = bandwidth / 1000
|
||||
log.info("iperf报告", string.format("数据量: %d bytes, 持续时间: %d ms, 带宽: %.2f Mbps", bytes, ms_duration, bandwidth_mbps))
|
||||
end
|
||||
|
||||
-- iperf服务器任务
|
||||
local function iperf_server_task()
|
||||
log.info("iperf测试", "开始初始化网络...")
|
||||
-- 使用exnetif配置SPI外接以太网芯片CH390H
|
||||
exnetif.set_priority_order({
|
||||
{
|
||||
ETHERNET = {
|
||||
pwrpin = 20,
|
||||
tp = netdrv.CH390,
|
||||
opts = {spi = 0, cs = 8}
|
||||
}
|
||||
}
|
||||
})
|
||||
-- 等待IP地址获取成功
|
||||
log.info("iperf测试", "等待获取IP地址...")
|
||||
local ip_wait_count = 60
|
||||
while true do
|
||||
local ipv4 = socket.localIP(socket.LWIP_ETH)
|
||||
if ipv4 and ipv4 ~= "0.0.0.0" then
|
||||
log.info("iperf测试", "IP获取成功:", ipv4)
|
||||
server_ip = ipv4
|
||||
break
|
||||
end
|
||||
|
||||
-- 超时检查
|
||||
if ip_wait_count <= 0 then
|
||||
log.error("iperf测试", "获取IP地址超时")
|
||||
return
|
||||
end
|
||||
|
||||
ip_wait_count = ip_wait_count - 1
|
||||
sys.wait(1000)
|
||||
end
|
||||
-- 等待以太网连接
|
||||
while not socket.adapter(socket.LWIP_ETH) do
|
||||
sys.wait(100)
|
||||
end
|
||||
log.info("iperf测试", "以太网连接状态: 已连接")
|
||||
|
||||
-- 连接到路由器场景,不需要配置DHCP服务器
|
||||
log.info("iperf测试", "网络配置完成")
|
||||
|
||||
-- 订阅iperf测试报告事件
|
||||
sys.subscribe("IPERF_REPORT", iperf_report_handler)
|
||||
|
||||
-- 启动iperf服务器
|
||||
log.info("iperf测试", "启动服务器模式")
|
||||
log.info("iperf测试", "服务器IP地址:", server_ip, "端口: 5001")
|
||||
iperf.server(socket.LWIP_ETH)
|
||||
sys.wait(2000)
|
||||
log.info("iperf测试", "服务器已启动,等待客户端连接")
|
||||
log.info("iperf测试", "请在客户端设备上设置服务器IP地址为:", server_ip)
|
||||
end
|
||||
|
||||
-- 执行iperf服务器模式测试
|
||||
sys.taskInit(iperf_server_task)
|
||||
@@ -0,0 +1,59 @@
|
||||
--[[
|
||||
@module main
|
||||
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
|
||||
@version 1.0
|
||||
@date 2025.10.28
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
演示功能概述
|
||||
本demo演示如何使用LuatOS的iperf模块进行网络吞吐量测试。
|
||||
iperf是一种网络性能测试工具,支持服务器模式和客户端模式,可以测试网络的带宽和稳定性。
|
||||
本demo提供了两个独立的测试用例:
|
||||
1、iperf服务器模式 - 设备作为服务器等待客户端连接
|
||||
2、iperf客户端模式 - 设备作为客户端主动连接服务器
|
||||
|
||||
更多说明参考本目录下的readme.md文件
|
||||
]]
|
||||
PROJECT = "IPERF_DEMO"
|
||||
VERSION = "001.999.000"
|
||||
|
||||
|
||||
-- 在日志中打印项目名和项目版本号
|
||||
log.info("main", PROJECT, VERSION)
|
||||
|
||||
|
||||
|
||||
|
||||
-- 如果内核固件支持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)
|
||||
|
||||
-- 加载 iperf 服务器测试模块
|
||||
require "iperf_server"
|
||||
|
||||
-- 加载 iperf 客户端测试模块
|
||||
-- require "iperf_client"
|
||||
|
||||
-- 用户代码已结束---------------------------------------------
|
||||
-- 结尾总是这一句
|
||||
sys.run()
|
||||
-- sys.run()之后后面不要加任何语句!!!!!
|
||||
@@ -0,0 +1,115 @@
|
||||
## 功能模块介绍
|
||||
|
||||
1、main.lua:主程序入口,用于选择加载服务器或客户端模块;
|
||||
|
||||
2、iperf_server.lua:iperf服务器模块,用于初始化网络并启动iperf服务器;
|
||||
|
||||
3、iperf_client.lua:iperf客户端模块,用于初始化网络并连接到服务器进行测试;
|
||||
|
||||
## 演示功能概述
|
||||
|
||||
本项目演示如何使用Air780EPM开发板进行网络性能测试。通过修改后的代码,可以实现两台Air780EPM开发板通过路由器连接,进行网络吞吐量测试。
|
||||
|
||||
1、支持以下功能特性:
|
||||
|
||||
- 支持DHCP客户端模式,自动从路由器获取IP地址
|
||||
- 服务器模式和客户端模式分离,可在不同设备上运行
|
||||
- 增强的错误处理和超时机制
|
||||
- 清晰的日志输出,便于调试和监控
|
||||
- 带宽自动计算并以Mbps显示
|
||||
|
||||
## 演示硬件环境
|
||||
|
||||
1、两台Air780EPM开发板
|
||||
|
||||
2、一台路由器(支持DHCP功能)
|
||||
|
||||
3、一台电脑(用于查看日志和监控)
|
||||
|
||||
4、网线两根
|
||||
|
||||
5、TYPE-C USB数据线两根
|
||||
|
||||
- Air780EPM开发板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)
|
||||
- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
|
||||
|
||||
## 演示软件环境
|
||||
|
||||
1、Luatools下载调试工具
|
||||
|
||||
2、[Air780EPM 固件](https://docs.openluat.com/air780epm/luatos/firmware/version/)
|
||||
|
||||
## 演示核心步骤
|
||||
|
||||
1、搭建好硬件环境
|
||||
|
||||
2、配置服务器端(一台开发板)
|
||||
|
||||
a. 确保`main.lua`中已启用服务器模块,禁用客户端模块:
|
||||
```lua
|
||||
-- 加载 iperf 服务器测试模块
|
||||
require "iperf_server"
|
||||
|
||||
-- 加载 iperf 客户端测试模块
|
||||
-- require "iperf_client"
|
||||
```
|
||||
|
||||
b. 烧录到一台Air780EPM开发板
|
||||
|
||||
c. 连接开发板到路由器的LAN口
|
||||
|
||||
d. 启动开发板,它将自动从路由器获取IP地址并启动iperf服务器
|
||||
|
||||
3、配置客户端(另一台开发板)
|
||||
|
||||
a. 修改`iperf_client.lua`文件中的服务器IP地址为服务器开发板的实际IP地址:
|
||||
|
||||
```lua
|
||||
-- 配置服务器IP地址(需要根据实际服务器IP进行修改)
|
||||
local SERVER_IP = "192.168.1.3" -- 这里需要修改为实际的服务器IP地址
|
||||
```
|
||||
|
||||
b. 确保`main.lua`中已启用客户端模块,禁用服务器模块:
|
||||
|
||||
```lua
|
||||
-- 加载 iperf 服务器测试模块
|
||||
-- require "iperf_server"
|
||||
|
||||
-- 加载 iperf 客户端测试模块
|
||||
require "iperf_client"
|
||||
```
|
||||
|
||||
c. 烧录到另一台Air780EPM开发板
|
||||
|
||||
d. 连接开发板到路由器的LAN口
|
||||
|
||||
e. 启动开发板,它将自动从路由器获取IP地址并尝试连接到服务器
|
||||
|
||||
## 查看测试结果
|
||||
|
||||
测试启动后,可以通过Luatools工具查看测试日志。客户端将显示实时的测试报告,包括数据量、持续时间和带宽(以Mbps为单位)。
|
||||
|
||||
```lua
|
||||
2025-11-06 17:02:24.658][000000013.298] I/user.iperf测试 测试进行中...
|
||||
[2025-11-06 17:02:24.675][000000013.314] D/iperf iperf正常结束, type 1
|
||||
[2025-11-06 17:02:24.677][000000013.314] D/lwiperf iperf_free 88 c1d553c
|
||||
[2025-11-06 17:02:24.678][000000013.316] D/iperf report bytes 5989824 ms_duration 10002 bandwidth 4784 kbps
|
||||
[2025-11-06 17:02:24.680][000000013.317] I/user.iperf报告 数据量: 5989824 bytes, 持续时间: 10002 ms, 带宽: 0.04 Mbps
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1、确保两台开发板和电脑都连接到同一个路由器,并且路由器已启用DHCP功能
|
||||
|
||||
2、服务器的IP地址需要在客户端配置文件中正确设置,否则客户端将无法连接
|
||||
|
||||
3、默认情况下,服务器在端口5001上监听连接请求
|
||||
|
||||
4、测试默认持续2分钟后自动结束
|
||||
|
||||
## 常见问题排查
|
||||
|
||||
1、无法连接到服务器
|
||||
- 确认服务器IP地址是否正确
|
||||
- 检查两台设备是否在同一网段
|
||||
- 检查网线连接是否牢固
|
||||
Reference in New Issue
Block a user