实验八——通信实验
一、实验目的
在两个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的建立与测试