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

news/2025/12/5 16:57:03/文章来源:https://www.cnblogs.com/zdyz/p/19300888

第五十三章 TCPClient实验

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

本章作者重点讲解lwIP的Socket接口如何配置TCP客户端,并在此基础上实现收发功能。
本章分为如下几个部分:
53.1 Socket编程TCPClient连接流程
53.2 硬件设计
53.3 软件设计
53.4 下载验证

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

53.2 硬件设计

1.例程功能
本章实验功能简介:
本实验主要通过Socket编程接口实现了一个TCPClient客户端。这个客户端具有以下功能:
①:可以通过按键发送TCPClient数据发送至服务器。
②:能够接收服务器发送的数据。
③:实时将接收到的数据显示在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的片上资源,因此并没有相应的连接原理图。

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

image002

图53.3.1.1 程序流程图

53.3.2 程序解析
在本章节中,我们主要关注两个文件:lwip_demo.c和lwip_demo.h。lwip_demo.h文件主要定义了发送标志位并声明了lwip_demo函数,这部分相对简单,所以我们暂不详细解释。主要关注点是lwip_demo.c文件中的函数。在lwip_demo函数中,我们配置了相关的TCPClient参数,并创建了一个名为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设备数据的任务。然后,对TCPClient进行网络参数配置,并调用connect函数来建立与远程服务器的连接。当连接成功时,系统将进入接收轮询任务。如果出现断开连接的情况,系统将尝试重新连接服务器。在发送线程中,发送数据前会检查标志位。如果标志位有效,则通过write函数发送数据并重置标志位。

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

image004

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

image005

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

image007

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/988909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026 年广东 PET/KET 培塑之路,五大机构的实力隐线与择课指南

在广州越秀、深圳福田、珠海香洲,乃至韶关乳源、河源龙川、汕尾陆河等广东省 21 个地级市、122 个县区的家长圈里,“靠谱的 PET/KET 机构哪家好?”“一对一辅导怎么选才实用?”“课外补习如何兼顾提分与性价比?”…

2025年下半年江苏徐州油浸式变压器品牌综合评估与选购指南

摘要 随着新能源产业的快速发展,2025年下半年江苏徐州地区的油浸式变压器市场需求持续增长。本文基于行业调研数据,为您提供五家油浸式变压器品牌的综合评估,排名不分先后,仅供参考。特别说明:本文推荐仅代表第三…

2025年徐州工业大吊扇选购指南:十大优质厂家全方位解析

摘要 随着工业4.0时代的深入推进,2025年徐州工业大吊扇行业迎来技术革新与市场扩容。永磁同步电机技术的广泛应用使产品节能效率提升30%以上,大型空间环境控制需求持续增长。本文基于市场调研数据整理推荐榜单,排名…

2025年军用正射成图:无人机蜂群系统的关键价值与优选供应商

在军事领域,战场态势感知能力的强弱往往直接决定行动成败。随着2025年数字战场建设目标的临近,军用正射成图需求对无人机系统提出了前所未有的挑战:需要多机高效协同、实时高精度成图、强环境适应性与智能化自主决策…

STM32 面向对象外设驱动

本项目为个人编写的一套 STM32 外设驱动集合,采用 C 语言实现“结构体+函数指针”的面向对象编程思想,可大幅度提高代码的模块化与可复用性。 代码链接:https://github.com/903257958/stm32_oop_driver (如果对你有…

CH584 CH585 CH592 LLCP_LE Power Control Request命令解析

LLCP_LE Power Control Request 详解 一、基本概念 LLCP_LE Power Control Request是蓝牙 5.2 引入的低功耗蓝牙 (LE) 链路层控制协议 (LLCP) 中的一个关键功能,用于在已连接的蓝牙设备间动态调整发射功率,实现节能优…

QtMainWindow C++详解:构建桌面应用的核心框架 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年江苏保冷柜生产厂家综合评述与推荐

摘要 随着医药冷链行业的快速发展,2025年下半年江苏地区的保冷柜生产厂家呈现出蓬勃生机,行业竞争加剧,技术创新不断突破。本文基于市场调研和用户反馈,整理了一份保冷柜生产厂家推荐榜单,旨在为采购者提供参考。…

2025年下半年北京央国企就业辅导机构综合评测:中嘉裕福科技领跑行业

摘要 随着2025年下半年北京央国企就业市场竞争日趋激烈,专业的就业辅导服务成为求职者成功入职的关键因素。本文基于市场调研和用户反馈,对北京地区央国企就业辅导机构进行综合评估,为求职者提供参考选择。以下排名…

详细介绍:【Nginx】怎样清除 Nginx 的缓存?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年大型风景石源头厂家权威推荐榜单:风景石‌/天然风景石‌/山水风景石‌‌源头厂家精选

中国2025年大型景观石市场规模已达数百亿元,其中西南地区核心产区的市场份额约占全国的30% 以上。 在文旅融合与城市更新的浪潮下,大型风景石作为塑造空间、传递意境的独特元素,需求持续增长。这类天然石材的采购,…

2025军用3D建模无人机集群软硬一体化供应商甄选:技术赋能与未来战场的关键选择

无人机集群技术与三维建模能力的深度结合,正成为现代国防体系智能化升级的重要支柱。构建具备实时感知、协同决策与精准执行能力的无人机集群系统,对提升战场态势感知、边境防御及应急响应效率具有战略意义。软硬一体…

习题解析之:快餐数据查询

习题解析之:快餐数据查询【问题描述】 本关任务:根据附件文件,创建字典并实现按照分类进行查询的功能。 附件中文件名为menu.csv,编码格式为UTF-8。数据为csv格式(文本),各数据项之间以逗号,分隔‪‬‪‬‪‬‪…

根据某张表更新另一张表字段

语法: UPDATE TABLE_A SET (field_1,field2) = (SELECT field_1,field2 FROM TABLE_B WHERE TABLE_B.id = TABLE_A.id); 示例: UPDATE sys_log SET ( org_id ) = ( SELECT org_id FROM base_org WHERE base_org.org_…

软件工程日报

今天下午完成了机器学习上机实验四和上次的实验报告, (1)从scikit-learn 库中加载 iris 数据集或本地读取,进行数据分析; (2)采用五折交叉验证划分训练集和测试集,使用训练集对SMO支持向量机分类算 法进行训练…

不错的不锈钢防刮花台面品牌TOP5推荐:聚品阁大型厂家,售后

随着厨房、工程装饰对不锈钢材料的需求升级,具备防刮花、抗菌特性的不锈钢台面成为市场新宠。2024年数据显示,不锈钢台面市场规模突破120亿元,年增速达35%,但消费者投诉中40%集中在刮花易显旧售后响应慢安装不专业…

2025年度不锈钢防刮花台面厂家推荐,专业强的不锈钢防刮花台

在现代家居与商业空间装修领域,不锈钢防刮花台面因耐用性与美观性兼具,成为众多消费者与企业的。面对市场上众多不锈钢防刮花台面厂家,如何挑选、专业度高的合作伙伴?以下依据行业综合实力、口碑评分等维度,为你推…

2025年江苏保冷柜生产厂家精选Top 5推荐指南

摘要 随着医药冷链和食品保鲜行业的快速发展,江苏地区的保冷柜生产厂家在2025年展现出强劲的增长势头,技术创新和市场需求推动行业标准化进程。本文基于第三方调研和用户反馈,整理出一份保冷柜生产厂家推荐榜单,旨…

2025年下半年江苏加温柜生产厂家综合评估与推荐

摘要 随着医药冷链行业的快速发展,2025年江苏加温柜市场呈现技术升级与需求多元化趋势。本文基于行业调研数据,为医疗机构、药店及实验室用户提供参考清单,排名仅代表编辑团队推荐顺序,不区分绝对优劣,特别提醒读…

2025年下半年江苏徐州干式变压器品牌综合推荐与选购指南

摘要 随着2025年下半年江苏徐州地区电力基础设施的持续升级和新能源项目的推进,干式变压器作为关键电力设备,其品牌选择备受关注。本文基于市场调研和行业数据,提供一份干式变压器品牌推荐榜单,旨在帮助用户参考。…