实验八——通信实验

一、实验目的

在两个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如下图所示

ESP32 mqtt 连接ONENET esp32 tcp client_客户端

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

ESP32 mqtt 连接ONENET esp32 tcp client_ESP32 mqtt 连接ONENET_02

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

ESP32 mqtt 连接ONENET esp32 tcp client_ESP32 mqtt 连接ONENET_03

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

ESP32 mqtt 连接ONENET esp32 tcp client_客户端_04

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

ESP32 mqtt 连接ONENET esp32 tcp client_TCP_05

到这里,就完成了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即可发送消息

ESP32 mqtt 连接ONENET esp32 tcp client_客户端_06

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

ESP32 mqtt 连接ONENET esp32 tcp client_ARDUINO 物联网 智能家居_07

点击Close即可关闭

ESP32 mqtt 连接ONENET esp32 tcp client_服务器_08

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