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文件夹内的三种网卡(单wifi ap网卡,单wifi sta网卡,单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_wifi_ap:WIFI AP网卡

(2) netdrv_wifi_sta:WIFI STA网卡

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

演示硬件环境

1、Air8000开发板一块+wifi天线一根+网线一根:

  • 天线装到开发板上

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

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

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

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

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

演示软件环境

1、Luatools下载调试工具

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

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

演示核心步骤

1、搭建好硬件环境

2、demo脚本代码netdrv_device.lua中,按照自己的网卡需求启用对应的Lua文件

  • 如果需要单WIFI AP网卡,打开require "netdrv_wifi_ap",其余注释掉;同时netdrv_wifi_ap.lua中的wlan.createAP("LuatOS" .. mobile.imei(), "12345678"),表示创建wifi的名称和密码,根据自己需求改动即可;

  • 如果需要单WIFI STA网卡,打开require "netdrv_wifi_sta",其余注释掉;注意:仅支持2.4G的wifi,不支持5G的wifi

  • 如果需要以太网卡,打开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接口中,此处演示WIFI_STA网卡的情况下,如何找到创建的TCP server的ip

local function ip_ready_func(ip, adapter)
    if adapter == socket.LWIP_STA then
        log.info("netdrv_wifi.ip_ready_func", "IP_READY: ", ip, json.encode(wlan.getInfo()))
    end
end

luatools日志打印如下:

image

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

端口号:选择TCPCLient

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

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

image

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

image

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

(4)PC端的串口工具输入一段数据 "hello client!",点击发送,在作为TCP客户端的SSCOM上可以收到此数据;在作为TCP 客户端的SSCOM输入一段数据 "i am tcp 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(ip, adapter)
    if adapter == socket.LWIP_STA then
        log.info("netdrv_wifi.ip_ready_func", "IP_READY: ", ip, json.encode(wlan.getInfo()))
    end
end

luatools日志打印如下:

image

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

端口号:选择UDP

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

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

image

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

image

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

(4)PC端的串口工具输入一段数据 "hello udp server!",点击发送,在作为UDP客户端的SSCOM上可以收到此数据;在作为UDP 客户端的SSCOM输入一段数据 "i am udp 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连接。