当前位置: 首页 > news >正文

《ESP32-S3使用指南—IDF版 V1.6》第五十四章 TCPServer实验

第五十四章 TCPServer实验

1)实验平台:正点原子DNESP32S3开发板

2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6

3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子DNESP32S3开发板技术交流群:132780729

155537c2odj87vz1z9vj6l

155537nfqovl2gg9faaol9

本章笔者重点讲解lwIP的Socket接口如何配置TCP服务器,并在此基础上实现收发功能。
本章分为如下几个部分:
54.1 Socket编程TCPServer连接流程
54.2 硬件设计
54.3 软件设计
54.4 下载验证

54.1 Socket编程TCPServer连接流程
在实现TCP协议之前,用户需要按照以下步骤配置结构体sockaddr_in的成员变量,以便建立TCPServer连接:
①:配置ESP32-S3设备连接网络(必须的,因为WiFi是无线通信,所以需搭建通信桥梁)。
②:将sin_family设置为AF_INET,表示使用IPv4网络协议。
③:设置sin_port为所需的端口号,例如8080。
④:设置sin_addr.s_addr为本地IP地址。
⑤:调用函数Socket创建Socket连接。请注意,该函数的第二个参数指定连接类型。SOCK_STREAM表示TCP连接,而SOCK_DGRAM表示UDP连接。
⑥:调用函数bind绑定本地IP地址和端口号。
⑦:调用函数listen 监听连接请求
⑧:调用函数accept监听连接
⑨:调用适当的收发函数来接收或发送数据。
通过遵循这些步骤,用户可成功地配置并建立TCPServer连接,以实现数据的发送和接收。

54.2 硬件设计

1.例程功能
本章实验功能简介:
本实验主要通过Socket编程接口实现了一个TCPServer服务器。这个客户端具有以下功能:
①:可以通过按键发送TCPServer数据发送至客户端。
②:能够接收客户端发送的数据。
③:实时将接收到的数据显示在LCD屏幕上。
通过这个实验,用户可深入了解TCP协议的工作原理,并掌握如何使用Socket编程接口来实现TCP通信。这对于开发基于TCP的网络应用程序非常有用,例如实时传输、文件传输等。

2.硬件资源
1)LED灯
LED-IO1
2)XL9555
IIC_INT-IO0(需在P5连接IO0)
IIC_SDA-IO41
IIC_SCL-IO42
3)SPILCD
CS-IO21
SCK-IO12
SDA-IO11
DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
PWR- IO1_3(XL9555)
RST- IO1_2(XL9555)
4)ESP32-S3内部WiFi

3.原理图
本章实验使用的WiFi为ESP32-S3的片上资源,因此并没有相应的连接原理图。

54.3 软件设计
54.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

image002

图54.3.1.1 程序流程图

54.3.2 程序解析
在本章节中,我们主要关注两个文件:lwip_demo.c和lwip_demo.h。lwip_demo.h文件主要定义了发送标志位并声明了lwip_demo函数,这部分相对简单,所以我们暂不详细解释。主要关注点是lwip_demo.c文件中的函数。在lwip_demo函数中,我们配置了相关的TCPServer参数,并创建了一个名为lwip_send_thread的发送数据线程。这个线程通过调用scokec函数来发送数据到服务器。接下来,我们将分别详细解释lwip_demo函数和lwip_send_thread任务。

/* 需要自己设置远程IP地址 */
#define IP_ADDR   "192.168.101.33"#define LWIP_DEMO_RX_BUFSIZE	100              		/* 最大接收数据长度 */
#define LWIP_DEMO_PORT      	8080                	/* 连接的本地端口号 */
#define LWIP_SEND_THREAD_PRIO	( tskIDLE_PRIORITY + 3 )	/* 发送数据线程优先级 */
/* 接收数据缓冲区 */
uint8_t g_lwip_demo_recvbuf[LWIP_DEMO_RX_BUFSIZE]; /* 发送数据内容 */
uint8_t g_lwip_demo_sendbuf[] = "ALIENTEK DATA \r\n";
/* 数据发送标志位 */
uint8_t g_lwip_send_flag;
int g_sock = -1;
int g_lwip_connect_state = 0;
static void lwip_send_thread(void *arg);/*** @brief       发送数据线程* @param       无* @retval      无*/
void lwip_data_send(void)
{
xTaskCreate(lwip_send_thread, "lwip_send_thread", 4096, 
NULL, LWIP_SEND_THREAD_PRIO, NULL);
}/*** @brief       lwip_demo实验入口* @param       无* @retval      无*/
void lwip_demo(void)
{struct sockaddr_in atk_client_addr;err_t err;int recv_data_len;char *tbuf;lwip_data_send();                           	/* 创建发送数据线程 */while (1){
sock_start:g_lwip_connect_state = 0;atk_client_addr.sin_family = AF_INET;             	/* 表示IPv4网络协议 */atk_client_addr.sin_port = htons(LWIP_DEMO_PORT);	/* 端口号 */atk_client_addr.sin_addr.s_addr = inet_addr(IP_ADDR);	/* 远程IP地址 */g_sock = socket(AF_INET, SOCK_STREAM, 0);/* 可靠数据流交付服务既是TCP协议 */memset(&(atk_client_addr.sin_zero), 0,sizeof(atk_client_addr.sin_zero));tbuf = malloc(200);                                     /* 申请内存 */sprintf((char *)tbuf, "Port:%d", LWIP_DEMO_PORT);       /* 客户端端口号 */lcd_show_string(5, 170, 200, 16, 16, tbuf, MAGENTA);/* 连接远程IP地址 */err = connect(g_sock, (struct sockaddr *)&atk_client_addr, 
sizeof(struct sockaddr));if (err == -1){lcd_show_string(5, 190, 200, 16, 16, "State:Disconnect", MAGENTA);g_sock = -1;closesocket(g_sock);free(tbuf);vTaskDelay(10);goto sock_start;}lcd_show_string(5,190,200,16,16,"State:Connection Successful", MAGENTA);g_lwip_connect_state = 1;while (1){recv_data_len = recv(g_sock,g_lwip_demo_recvbuf,LWIP_DEMO_RX_BUFSIZE,0);if (recv_data_len <= 0 ){closesocket(g_sock);g_sock = -1;lcd_fill(5, 190, lcd_self.width,320, WHITE);lcd_show_string(5,190,200,16,16,"State:Disconnect", MAGENTA);free(tbuf);goto sock_start;}printf("%s\r\n",g_lwip_demo_recvbuf);vTaskDelay(10);}}
}/*** @brief       发送数据线程函数* @param       pvParameters : 传入参数(未用到)* @retval      无*/
void lwip_send_thread(void *pvParameters)
{pvParameters = pvParameters;err_t err;while (1){while (1){if(((g_lwip_send_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) 
&& (g_lwip_connect_state == 1)) /* 有数据要发送 */{err = write(g_sock, g_lwip_demo_sendbuf,sizeof(g_lwip_demo_sendbuf));if (err < 0){break;}g_lwip_send_flag &= ~LWIP_SEND_DATA;}vTaskDelay(10);}closesocket(g_sock);}
}

上述源码中,我们首先创建一个发送任务,用来发送ESP32-S3设备的数据,然后配置TCPServer网络参数,并调用函数connect连接远程服务器,当连接成功时,系统进入接收轮询任务,反次,重新连接客户端。发送线程在发送前会检查标志位,有效时则通过write发送数据并重置标志位。

54.4 下载验证
在程序中,首先需要设置好能够连接的网络账号和密码。然后,使用笔记本电脑作为终端,确保它与ESP32-S3设备处于同一网络段内。当ESP32-S3设备成功连接到网络时,它的LCD显示屏上会显示相应的内容:

image004

图54.4.1 设备连接到网络时,LCD显示的信息
打开网络调试助手,然后配置网络参数,如TCPClient 协议、端口号等,设置内容如下图所示。

image005

在确保网络连接正常后,可以通过按下开发板上的KEY0按键来发送数据至网络调试助手。当网络调试助手接收到“ALIENTEK DATA”字符串时,它会在显示区域展示这个信息。此外,用户还可以在调试助手的发送区域自行输入要发送的数据,然后点击发送键,将数据发送至ESP32-S3设备。此时,ESP32-S3的串口将打印接收到的数据,具体操作和输出如下图所示。

image007

图54.4.3 接收网络调试助手的数据

http://www.jsqmd.com/news/69057/

相关文章:

  • 2025年乳化机设备订制厂家权威推荐榜单:高剪切混合乳化机‌/真空制膏机‌/实验室乳化机源头厂家精选
  • 集成 react-resizable
  • 文书深度打磨!留学机构排名TOP10适配名校偏好
  • 集成 react-resizable
  • 2025年12月软件开发公司权威推荐榜:小程序开发、APP开发,创新技术团队与高效交付实力深度解析
  • 2025年青岛初三辅导班机构权威推荐榜单:高一辅导班‌/高二辅导班‌/高三辅导班源头机构精选
  • nim语言遍历文件夹
  • 混沌系统控制、庞加莱截面分析、分岔图绘制及微分方程求解的实现方案
  • 多重比较校正
  • 2025年等截面薄壁四点接触球轴承定做厂家权威推荐榜单:公制等截面轴承‌/转台轴承现货‌/转台轴承构造源头厂家精选
  • 小动物影像分析资源
  • 2025年12月方形散热风扇,小型散热风扇,高速散热风扇厂家权威推荐,技术实力与市场口碑深度解析​
  • 微算法科技(NASDAQ MLGO)部署后量子加密算法,保护链上数据传输
  • 【自用-nim语言】批量删除文件夹里的.png图片命令行(语言版本2.2.2)
  • 快递单号生成器-谷歌扩展程序
  • 高效解决海外仓一件代发业务,海外仓管理系统破解方案!
  • 2025年啤酒厂设备生产厂家权威推荐榜单:大型啤酒厂设备/大型工业化啤酒厂设备/精酿啤酒设备源头工厂精选
  • 2025 年多品类杯盘成型设备厂家优选手册:超声波纸杯机、纸咖啡杯机、杯盖机及纸盘机核心性能对比
  • 2025 年移民咨询公司最新推荐榜,聚焦企业综合实力与核心竞争力深度剖析及优质服务机构解析巴拿马移民/多米尼克移民/快速移民/圣基茨移民/瓦努阿图移民/土耳其移民/美国移民 /希腊移民咨询公司推荐
  • FY3D/MERSI 哈默投影 NDVI/EVI - EPSG:4326 投影转换 - Littlefish
  • 02_mysql数据库的数据类型
  • 为你的STM32毕设项目加点“料”:AI智能照明助手光环境自适应控制系统
  • 2025 年选制杯设备不踩坑:纸杯机、全伺服纸杯机、纸碗机、杯盖机及纸盘机厂家实力与设备稳定性评测
  • 北京抵押担保律师所法律服务测评排行榜:3 大微信小程序 VS2 家律所 权威解析靠谱之选
  • 2025 年 12 月北京下水道疏通/疏通马桶服务权威推荐榜:朝阳区高效上门,专业解决管道堵塞难题
  • 甘肃全屋定制五大推荐,欧比亚全屋定制公司领衔品质之选:涵盖旧房改造、装修公司、家具定制、全屋整装
  • 2025 年烟台网站建设 / 外贸站建设服务商推荐榜:数字化转型优质合作伙伴指南
  • 2025 十大图库网站精选推荐,找图片看这篇!可下载的图片素材
  • 2025 十大免费版权图库推荐:高清图片素材下载优质网站合集
  • 2026 北京建设工程律师 TOP8 精选排名榜:工程诉讼专业顾问权威推荐