ESP32-TCP服务端(Arduino)
将ESP32设置为TCP服务器
介绍
TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的(一个客户端对应一个服务端)、可靠的传输层协议。在TCP的工作原理中,它会将消息或文件分解为更小的片段,称为数据包,然后通过Internet发送。这些数据包被TCP层接收后,重新组合成完整的文件或消息。此外,为了确保数据的传递成功,TCP还会对数据流进行错误检查。如果发现错误,TCP会请求重新传输丢失或损坏的数据包。
基本方法
ESP32设置为TCP服务器的流程:
-
包含必要的库:
在Arduino项目中,首先需要包含与ESP32和网络通信相关的必要库:#include <Arduino.h> #include <WiFi.h> -
配置网络参数:
设置用于ESP32访问点(Access Point,AP)的网络参数,如SSID(Wi-Fi名称)和密码。const char *ssid = "esp32_tcp"; const char *password = "987654321"; -
创建TCP服务器对象:
使用WiFiServer类创建一个TCP服务器对象,并指定服务器监听的端口。WiFiServer server(1133);这里的
1133是服务器监听的端口号,你可以根据需要选择一个未被占用的端口。 -
设置服务器:
在setup()函数中进行服务器的初始化和启动。void setup() {Serial.begin(115200);WiFi.softAP(ssid, password);server.begin();Serial.print("IP:");// 串口打印AP_IPSerial.println(WiFi.softAPIP()); }这里,
WiFi.softAP(ssid, password)将ESP32配置为访问点,server.begin()启动TCP服务器,并使用Serial.println(WiFi.softAPIP())打印ESP32的IP地址。 -
处理客户端连接和通信:
在loop()函数中,通过server.available()检查是否有新的客户端连接。如果有新连接,通过WiFiClient对象处理通信。void loop() { // 循环检测有无客户端 有请求-能连接-有数据WiFiClient client = server.available();// client指向发出请求的客户端对象if (client) {// 处理新客户端连接while (client.connected()) {if (client.available()) {//检测有无数据可读// 处理客户端发送的数据char val = client.read();// 读取一个字节数据Serial.println(val);client.print(val); // 回发数据给客户端}}} else {client.stop();delay(2000);} }server.available();此函数用于检查是否有客户端试图连接到服务器。如果有客户端可用,它将返回一个WiFiClient对象,表示新的客户端连接。如果没有客户端试图连接,则返回一个WiFiClient对象,其值为false。
在循环检测新的客户端连接,如果有新连接,就在连接建立的状态下处理客户端发送的数据。
常用API
ESP32的Arduino核心库(Arduino core for ESP32)提供了一组用于TCP通信的API。以下是关于ESP32 Arduino库中与TCP相关的一些重要函数和类的总结:
-
WiFiServer 类:
- 构造函数:
WiFiServer(uint16_t port) - 成员函数:
begin(): 启动服务器,开始监听指定端口。available(): 检查是否有客户端请求连接,返回一个WiFiClient对象表示新的连接。status(): 返回服务器状态。stop(): 关闭服务器。
- 构造函数:
-
WiFiClient 类:
- 构造函数:
WiFiClient() - 成员函数:
connect(IPAddress ip, uint16_t port): 连接到指定IP地址和端口的服务器。connect(const char *host, uint16_t port): 连接到指定主机名和端口的服务器。connected(): 检查是否与服务器建立了连接。available(): 检查是否有数据可用于读取。read(): 读取一个字节的数据。readBytes(char *buffer, size_t length): 读取指定长度的数据。print()/println(): 向服务器发送数据。stop(): 关闭连接。
- 构造函数:
-
WiFi 操作相关:
WiFi.softAP(ssid, password): 将ESP32配置为Access Point(热点)。WiFi.softAPIP(): 获取ESP32 Access Point的IP地址。WiFi.localIP(): 获取ESP32的本地IP地址。
这些是ESP32 Arduino核心库中与TCP通信相关的一些重要函数和类。详细的文档可以查看ESP32 Arduino文档。
完整程序和测试效果
#include <Arduino.h>
#include <WiFi.h>
// ESP32作为tcp服务端,手机或者电脑的调试助手
// 作为客户端,进行通信const char *ssid = "esp32_tcp";
const char *password = "987654321";
// tcp服务端对象
WiFiServer server(1133);void setup()
{Serial.begin(115200);WiFi.softAP(ssid, password);server.begin();// 串口打印AP_IPSerial.print("IP:");Serial.println(WiFi.softAPIP());
}void loop()
{// 循环检测有无客户端 有请求-能连接-有数据WiFiClient client = server.available(); // client指向发出请求的客户端对象if (client){Serial.println("新客户端.");Serial.println(client.localIP());while (client.connected()){// 连接成功进入循环if (client.available())//检测有无数据可读{char val = client.read(); // 读取一个字节数据Serial.println(val);client.print(val); // 回发数据给客户端}}}else{client.stop();delay(2000);}
}
串口发送且得到返回

相关文章:
ESP32-TCP服务端(Arduino)
将ESP32设置为TCP服务器 介绍 TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的(一个客户端对应一个服务端)、可靠的传输层协议。在TCP的工作原理中,它会将消息或文件分解为更小的片段&a…...
HCIA-HarmonyOS设备开发认证-序
序 最近涉及到HarmonyOS鸿蒙系统设备开发,在网络上已经有很多相关资料,视频教程,我也移植了公司的一个stm32G474板卡,运行LiteOS-m L0系统。 一面看资料一面移植,遇到不少坑,当看到运行的LOGO时࿰…...
Med-YOLO:3D + 医学影像 + 检测框架
Med-YOLO:3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码:加强小目标检测总结 提出背景 论文链接:https://arxiv.org/abs/2312.07729 代码链接:https://github.com/JDSobek/MedYOLO 提出背景&…...
Docker部署Golang服务
不管是开发还是生产环境,通过 docker 方式部署服务都是一种不错的选择,能够解决不同开发环境一致性的问题。 本文以项目:https://github.com/johncxf/go-api 为例。 Dockerfile 构建 Go 运用环境 在项目根目录下添加 Dockerfile 文件&…...
C#,字符串匹配(模式搜索)Sunday算法的源代码
Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配&…...
makefile 编译动态链接库使用(.so库文件)
makefile 编译动态链接库使用(.so库文件) 动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享 动态链接库 动态&#…...
Hive 数仓及数仓设计方案
数仓(Data Warehouse) 数据仓库存在的意义在于对企业的所有数据进行汇总,为企业各个部门提供一个统一、规范的出口。做数仓就是做方案,是用数据治理企业的方案。 数据仓库的特点 面向主题集成 公司中不同的部门都会去数据仓库中拿数据,把独…...
Ubuntu使用docker-compose安装redis
ubuntu环境搭建专栏🔗点击跳转 Ubuntu系统环境搭建(十三)——使用docker-compose安装redis 文章目录 Ubuntu系统环境搭建(十三)——使用docker-compose安装redis1.搭建文件夹2.docker-compose.yaml配置文件3.redis.co…...
大数据安全 | 期末复习(上)| 补档
文章目录 📚概述⭐️🐇大数据的定义、来源、特点🐇大数据安全的含义🐇大数据安全威胁🐇保障大数据安全🐇采集、存储、挖掘环节的安全技术🐇大数据用于安全🐇隐私的定义、属性、分类、…...
Kylin 安装novnc 远程访问
noVNC可以使用浏览器直接访问服务器,而不需要使用VNC客户端。 1.初始环境 关闭防火墙或允许IP访问本机 2.安装依赖 dnf install -y tigervnc-server git 3.git下载novnc git clone https://github.com/novnc/noVNC.git git clone https://gitee.com/yangyizhao…...
神经网络算法与逻辑回归:优势与差异
神经网络算法和逻辑回归都是预测模型中的重要工具,但它们在处理复杂和非线性问题时表现出不同的性能。本文将深入探讨神经网络算法相对于逻辑回归的优势,以及它们在不同场景下的适用性。 一、引言 神经网络算法和逻辑回归都是预测模型中的重要工具&…...
【蓝桥杯冲冲冲】动态规划初步[USACO2006 OPEN] 县集市
蓝桥杯备赛 | 洛谷做题打卡day13 文章目录 蓝桥杯备赛 | 洛谷做题打卡day13题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例说明数据规模与约定 思路:方程: 题解代码我的一些话 [USACO2006 OPEN] 县集市 The County Fair 题目描述 每年…...
C#,入门教程(30)——扎好程序的笼子,错误处理 try catch
上一篇: C#,入门教程(29)——修饰词静态(static)的用法详解https://blog.csdn.net/beijinghorn/article/details/124683349 程序员语录:凡程序必有错,凡有错未必改! 程序出错的原因千千万&…...
操作教程|JumpServer堡垒机结合Ansible进行批量系统初始化
运维人员常常需要对资产进行系统初始化的操作,而初始化服务器又是一项繁琐的工作,需要花费运维人员大量的时间和精力。为了提高效率,许多组织会使用自动化工具和脚本来简化这些任务。自动化工具的运用可以大幅降低运维人员的工作量࿰…...
序列化VS反序列化
序列化、反序列化定义 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。 序列化(Serialization)是指将对象转换为字节序列的过程,也可以称之为对象的持…...
新数智空间:阿里云边缘云持续保持中国公有云市场第一
全球领先的 IT 市场研究和咨询公司 IDC 发布 《中国边缘云市场解读(2023H1)》报告 中国边缘公有云服务市场 阿里云持续第一 稳居市场第一,“边缘”逆势生长 近日,全球领先的 IT 市场研究和咨询公司 IDC 最新发布《中国边缘云市…...
【开源】基于JAVA语言的陕西非物质文化遗产网站
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…...
C++(Qt)软件调试---静态分析工具clang-tidy(18)
C(Qt)软件调试—静态分析工具clang-tidy(18) 文章目录 C(Qt)软件调试---静态分析工具clang-tidy(18)1、概述2、clang-tidy基本用法3、目前已有检查项4、Qt Creator中安装clang-tidy5、Qt Creator中使用clang-tidy6、Clang-Tidy配置…...
2401llvm,clang的重构引擎
Clang的重构引擎 展示如何使用重构API中的各种原语来实现不同的重构. LibTooling库提供了几个在开发重构操作时,使用的其他API. 可用重构引擎来实现,用编辑器或IDE中的选择启动的本地重构.可结合AST匹配器和重构引擎,以实现不适合源选择和/或必须查询某些指定节点的AST的重构…...
【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解
追求本质,不断进步 本文由睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 这里写目录标题 一、空间的申请1.变量定义1.1变量定义的概念:1.2变…...
如何快速部署Uvicorn ASGI服务器到AWS Lightsail:终极云服务器配置指南 [特殊字符]
如何快速部署Uvicorn ASGI服务器到AWS Lightsail:终极云服务器配置指南 🚀 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn是一个轻量级、高性能的A…...
手把手教你用Hive SQL搞定电影评分数据分析(附完整数据集和避坑指南)
手把手教你用Hive SQL搞定电影评分数据分析(附完整数据集和避坑指南) "为什么《肖申克的救赎》常年霸占IMDb Top 250榜首?"这个问题背后隐藏着海量用户评分数据的秘密。作为数据分析师,我们如何从原始评分数据中挖掘出这…...
Rainmeter皮肤主题用户行为分析:使用数据统计
Rainmeter皮肤主题用户行为分析:使用数据统计 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter Rainmeter作为一款强大的Windows桌面自定义工具,允许用户通过皮肤主题…...
HunyuanVideo-Foley音效生成:支持SMPTE时间码对齐视频关键帧
HunyuanVideo-Foley音效生成:支持SMPTE时间码对齐视频关键帧 1. 产品概述 HunyuanVideo-Foley是一款专为影视后期制作设计的AI音效生成工具,其核心创新在于支持SMPTE时间码精确对齐视频关键帧。这意味着音效师可以基于视频时间轴上的特定帧,…...
从 POST 到落库回写:彻底讲透 SAP Gateway 中 Create Operation 的实现
在经典的 SAP Gateway 开发里,Create Operation 看上去只是一次新增动作,真正落到运行时,却牵涉到一条非常完整的链路:客户端发起 HTTP POST 请求,请求体里的 OData 数据被 Gateway 运行时反序列化成 ABAP 结构,开发者在对应的 <Entity Set>_CREATE_ENTITY 方法里接…...
Unity游戏翻译神器XUnity.AutoTranslator全攻略:从入门到精通
Unity游戏翻译神器XUnity.AutoTranslator全攻略:从入门到精通 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 问题导入:当游戏语言成为体验障碍 你是否曾遇到这样的困境ÿ…...
告别特征工程:用Python+Matplotlib把EEG脑电信号直接变成CNN能吃的时频图
从原始EEG到CNN输入:Python自动化生成时频图全流程解析 深夜的实验室里,显示器上跳动的脑电波形正被转化为一张张彩色图像——这不是科幻场景,而是现代脑机接口研究的日常。传统EEG分析中繁琐的特征工程正在被一种更直观的方法取代࿱…...
CAD工程师必看:如何用De Boor算法优化B样条曲线设计(附NURBS对比)
CAD工程师必看:如何用De Boor算法优化B样条曲线设计(附NURBS对比) 在工业设计领域,曲线建模的精度与效率直接决定了产品从概念到成品的转化质量。作为CAD工程师,我们常常需要在设计自由度和计算效率之间寻找平衡点——…...
如何快速将Blender模型导入Unreal Engine?免费Datasmith插件完整指南
如何快速将Blender模型导入Unreal Engine?免费Datasmith插件完整指南 【免费下载链接】bl_datasmith Blender addon to export UE4 Datasmith format 项目地址: https://gitcode.com/gh_mirrors/bl/bl_datasmith Blender Datasmith Export是一款开源免费的Bl…...
保姆级拆解:MIT-BEVFusion中Swin Transformer如何高效处理多相机图像(附代码逐行分析)
多相机BEV感知中的Swin Transformer实战:从原理到MIT-BEVFusion代码精要 在自动驾驶感知系统中,如何高效处理多相机输入并构建统一的鸟瞰视图(BEV)表征一直是核心挑战。本文将深入探讨Swin Transformer在多相机BEV感知中的创新应用…...
