实验8——通信实验

本文详细介绍了如何使用ESP32实现TCP客户端与服务器的建立及测试,包括代码示例与工具PacketSender的使用,展示了TCP双向通讯的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验八——通信实验

一、实验目的

在两个ESP32上实现TCP协议的测试

二、实验内容

1. 应用ESP32建立TCP Server及TCP Client

2. 实现TCP Server及TCP Client的简单测试

三、实验设备

ESP32

四、实验步骤

1) TCP Client的建立及测试

TCP Client主要是用来访问服务器的,很多可以通过外网访问的物联网设备主要就是工作在TCP Client下。设备主动去访问外部的服务器,与服务器建立连接,用户的app也是去访问这个服务器,这样变相实现了用户对设备的访问

TCP Client按如下方式使用:

1.引用相关库#include <WiFi.h>
2.连上WiFi
3.声明WiFiClient对象用于连接服务器
4.使用connect方法连接服务器
5. 进行数据读写通讯

2)TCP Client实现源代码

#include <WiFi.h>

const char *ssid = "********";
const char *password = "********";

const IPAddress serverIP(192,168,50,14); //欲访问的地址
uint16_t serverPort = 50037; //服务器端口号

WiFiClient client; //声明一个客户端对象,用于与服务器进行连接

void setup()
{
Serial.begin(115200);
Serial.println();

WiFi.mode(WIFI_STA);
WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
}

void loop()
{
Serial.println("尝试访问服务器");
if (client.connect(serverIP, serverPort)) //尝试访问目标地址
{
Serial.println("访问成功");

client.print("Hello world!");//向服务器发送数据
while (client.connected() || client.available()) //如果已连接或有收到的未读取的数据
{
if (client.available()) //如果有数据可读取
{
String line = client.readStringUntil('\n'); //读取数据到换行符
Serial.print("读取到数据:");
Serial.println(line);
client.write(line.c_str()); //将收到的数据回发
}
}
Serial.println("关闭当前连接");
client.stop(); //关闭客户端
}
else
{
Serial.println("访问失败");
client.stop(); //关闭客户端
}
delay(5000);
}

以上代码实现了TCP Client的建立,下面我们将使用工具PacketSender搭建的服务器进行通讯测试

1.首先要先下载PacketSender,附上下载网址https://packetsender.com/download#show,安装过程较为简易,这里不再详述

2.接下来使用下载好的PacketSender进行测试

下载好的PacketSender如下图所示

界面

接下来将TCP端口以及IPs地址与代码同步(必须在同一WiFi条件下)

完成上述操作后,服务器会自动弹出界面,显示将要传输的信息,可通过Arduino串口监视器进行查看

下面就显现出了TCP双向通讯的优点,我们可以通过服务端向客户端发送消息(点击send发送消息),客户端可以查看到接收的消息

如需退出,点击Close即可,并在串口监视器上查看到关闭当前连接的通知

关闭连接

到这里,就完成了TCP Client的建立及测试

3)TCP Server的建立及测试

TCP Server按如下方式使用:

1.引用相关库#include <WiFi.h>;

2.声明WiFiServer对象;

3.使用begin方法启动监听;

4.监听客户端连接并处理数据通讯

4)TCP Server实现源代码

#include <WiFi.h>

const char *ssid = "********";
const char *password = "********";

WiFiServer server; //声明服务器对象

void setup()
{
Serial.begin(115200);
Serial.println();

WiFi.mode(WIFI_STA);
WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());

server.begin(22333); //服务器启动监听端口号22333
}

void loop()
{
WiFiClient client = server.available(); //尝试建立客户对象
if (client) //如果当前客户可用
{
Serial.println("[Client connected]");
String readBuff;
while (client.connected()) //如果客户端处于连接状态
{
if (client.available()) //如果有可读数据
{
char c = client.read(); //读取一个字节
//也可以用readLine()等其他方法
readBuff += c;
if(c == '\r') //接收到回车符
{
client.print("Received: " + readBuff); //向客户端发送
Serial.println("Received: " + readBuff); //从串口打印
readBuff = "";
}
}
}
client.stop(); //结束当前连接:
Serial.println("[Client disconnected]");
}
} 

使用Packetsender,将代码中的端口号以及服务端返回的IP地址填入启动边框,点击send即可发送消息

发送

发送消息即可在串口监视器上查看

串口监视器上看

点击Close即可关闭

关闭连接

到这里就完成了TCP Server的建立与测试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值