wangshihao cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
..
netdrv cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
tcp cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
udp cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
main.lua cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
netdrv_device.lua cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
readme.md cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
timer_app.lua cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци
uart_app.lua cc54cddd11 add: 提交Air780EXX/Air8000/Air8101的socket server代码 пре 4 месеци

readme.md

功能模块介绍

1、main.lua:主程序入口;

2、netdrv_device.lua:网卡驱动设备,可以配置使用netdrv文件夹内的单spi以太网卡;

3、tcp文件夹:tcp server以及数据收发处理逻辑;

4、udp文件夹:udp server以及数据收发处理逻辑;

5、timer_app.lua:通知server定时发送数据给client;

6、uart_app.lua:server和uart外设之间透传数据;

注意:

一个tcp server仅支持一路client连接;

UDP 协议本身是无连接的,这意味着任何在同一局域网下的客户端都可以向服务器的 IP 和端口发送数据包;

系统消息介绍

1、"IP_READY":某种网卡已经获取到ip信息,仅仅获取到了ip信息,能否和外网连通还不确认;

2、"IP_LOSE":某种网卡已经掉网;

用户消息介绍

1、"RECV_DATA_FROM_CLIENT":tcp/udp server收到客户端上发的数据后,通过此消息发布出去,给其他应用模块处理;

2、"SEND_DATA_REQ":其他应用模块发布此消息,通知tcp/udp server发送数据给客户端;

演示功能概述

1、创建tcp/udp server,在目录中对应两个文件夹详情如下

  • TCP文件夹功能为创建一个tcp server,等待tcp client连接;

  • UDP文件夹功能为创建一个udp server,等待udp client连接;

2、tcp/udp server 与client连接成功后,server按照以下几种逻辑发送数据给client

  • 串口应用功能模块uart_app.lua,通过uart1接收到串口数据,将串口数据增加send from uart: 前缀后发送给client;

  • 定时器应用功能模块timer_app.lua,定时产生数据,将数据增加send from timer:前缀后发送给client;

3、netdrv_device:配置连接外网使用的网卡,目前支持以下一种选择

(1) netdrv_eth_spi:通过SPI外挂CH390H芯片的以太网卡

演示硬件环境

1、Air780EXX核心板一块+网线一根:

  • 网线一端插入核心板网口,另外一端连接可以上外网的路由器网口

2、TYPE-C USB数据线一根 + USB转串口数据线一根,Air780EXX核心板和数据线的硬件接线方式为:

  • Air780EXX核心板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)

  • TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;

  • USB转串口数据线,一般来说,白线连接核心板的UART1_TX,绿线连接核心板的UART1_RX,黑线连接核心板的GND,另外一端连接电脑USB口;

3、可选AirPHY_1000配件板一块,Air780EXX核心板和AirETH_1000配件板的硬件接线方式为:

Air780EXX核心板 AirETH_1000配件板
3V3 3.3v
gnd gnd
86/SPI0CLK SCK
83/SPI0CS CSS
84/SPI0MISO SDO
85/SPI0MOSI SDI
107/GPIO21 INT

演示软件环境

1、Luatools下载调试工具

2、Air780Exx V2016版本固件(理论上,2025年8月10日之后发布的固件都可以)

3、PC端的串口工具,建议使用SSCOM(SSCOM可以创建TCP客户端或UDP客户端,测试TCP/UDP 通信功能)

演示核心步骤

1、搭建好硬件环境

2、demo脚本代码netdrv_device.lua中,打开require "netdrv_eth_spi" (默认打开)

3、demo脚本代码中,测试TCP server和UDP server时,需要修改的地方如下:

  • 测试TCP server时,main.lua打开 require "tcp_server_main",注释掉 require "udp_server_main";同时timer_app.lua和uart_app.lua中的enable_tcp设为true,enable_udp设为false。

  • 测试UDP server时,main.lua打开 require "udp_server_main",注释掉 require "tcp_server_main";同时timer_app.lua和uart_app.lua中的enable_udp设为true,enable_tcp设为false。

4、Luatools烧录内核固件和修改后的demo脚本代码

5、烧录成功后,自动开机运行

6、TCP演示:

(1)根据烧录日志,找到TCP server的ip,此外 port 在示例代码中默认是50003

ip获取方式,是在每个netdrv网卡文件中的 ip_ready_func接口中,此处演示以太网卡的情况下,如何找到创建的TCP server的ip

local function ip_ready_func()
    log.info("netdrv_eth_spi.ip_ready_func", "IP_READY: ", socket.localIP(socket.LWIP_ETH))
end

luatools日志打印如下:

image

(2)PC 端打开一个TCP客户端,连接到Air780EXX核心板创建的TCP server (本例使用SSCOM打开一个TCP客户端):

端口号:选择TCPCLient

远程:填写TCP server的ip地址 和TCP监听的port ,默认是50003

本地:填写本地PC端的IP地址

image

成功连接之后,即可收到TCP server主动发送的第一条消息:

image

(3)另外再打开一个PC端的串口工具连接到Air780EXX核心板的uart1, 做串口收发,选择对应的端口,配置波特率115200,数据位8,停止位1,无奇偶校验位

(4)PC端的串口工具输入一段数据 "hello!",点击发送,在作为TCP客户端的SSCOM上可以收到此数据;在作为TCP 客户端的SSCOM输入一段数据 "i am client",点击发送,在PC端的串口工具上可以收到此数据,如下所示:

image

7、UDP演示:

(1)根据烧录日志,找到UDP server的ip,此外 port 在示例代码中默认是50003

ip获取方式,是在每个netdrv网卡文件中的 ip_ready_func接口中,此处演示WIFI_STA网卡的情况下,如何找到创建的UDP server的ip

local function ip_ready_func()
    log.info("netdrv_eth_spi.ip_ready_func", "IP_READY: ", socket.localIP(socket.LWIP_ETH))
end

luatools日志打印如下:

image

(2)PC 端打开一个UDP客户端,连接到Air780EXX核心板创建的UDP server (本例使用SSCOM打开一个UDP客户端):

端口号:选择UDP

远程:填写UDP server的ip地址 和UDP监听的port ,默认是50003

本地:填写本地PC端的IP地址, 本例填写的port是50000

image

成功连接之后,即可收到UDP server主动发送的第一条消息:

image

(3)另外再打开一个PC端的串口工具连接到Air780EXX核心板的uart1, 做串口收发,选择对应的端口,配置波特率115200,数据位8,停止位1,无奇偶校验位

(4)PC端的串口工具输入一段数据 "hello!",点击发送,在作为UDP客户端的SSCOM上可以收到此数据;在作为UDP 客户端的SSCOM输入一段数据 "i am client",点击发送,在PC端的串口工具上可以收到此数据,如下所示:

image

8、注意事项

UDP server 在未收到 client发的数据时,会每隔15秒向255.255.255.255 发送一条心跳广播消息,同时timer_app定时发送功能 由于无法确定客户端的ip和port, 会打印 "尚未收到客户端数据, 无法确定目标IP和端口" 的错误提示;

UDP server 在收到client 发的数据后,会记录下来发送消息的client的ip和port,然后通过timer_app 每隔5秒向client发送数据。

目前只能支持局域网内的client连接,不支持公网ip连接。