本文开发环境:
- MCU型号:ESP8266
- IDE环境 : Arduino IDE
- TCP 助手:网络调试助手
本文内容:
- esp8266 与 TCP Server 的简单通讯示例
文章目录
简介
TCP Server 和 Client 基础知识
待补充
TCP Server 的建立
本文主要实现了 esp8266 与 TCP Server 的通讯,所以首先需要建立一个TCP Server,测试的时候,可以在PC端使用网络调试助手来建立一个服务(下载方式见文末)。需要注意的是,这需要用到PC的IP。
查看 PC 端 IP 地址
在命令符中输入ipconfig命令查看本机IP地址:
有几个IPv4(v4表示协议版本号)地址,所以需要看描述。上面2个VMware是虚拟机的,下面才是本机的IP地址。
配置网络调试助手
知道本机IP地址以后,就可以配置网路调试助手了。
最后,点击 打开既可以在PC端,建立一个 TCP Server,如下所示:
至此,我们就已经在PC端建立了一个TCP服务。
Esp8266 程序设计
代码示例
主要是连接WiFi,注意连接的WiFi和PC段,即TCP Sever需要在同一个网络中,本文PC段(电脑笔记本)和 ESP8266 都连接到同一个路由器。以下是完整代码,可以直接完整的复制粘贴。
#include <ESP8266WiFi.h>
#define AP_SSID "602" //所用WiFi的名字
#define AP_PSW "602602602" //所用WiFi的密码
const uint16_t port = 8080; //Tcp 服务器的端口
const char * host = "192.168.0.4"; //Tcp 服务器的ip地址
WiFiClient client; //创建一个tcp client连接
void setup() {
Serial.begin(115200);
delay(5000);
WiFi.mode(WIFI_STA); //设置WiFi 为 Station 模式
WiFi.begin(AP_SSID,AP_PSW); //连接WiFi
Serial.println("Connecting to WiFi... ");
//等待wifi连接成功
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Failed!");
delay(500);
}
Serial.println("");
Serial.println("Connected");
Serial.println("Local IP: ");
Serial.println(WiFi.localIP());
delay(500);
}
void loop() {
Serial.println("Connecting to TCP Server :");
Serial.println(host);
if (!client.connect(host, port)) {
Serial.println("Failed");
Serial.println("Reconnect in 5 seconds");
delay(5000);
return;
}
// 发送数据到 Tcp Server
Serial.println("Send The String to TCP Server :\"I am Esp8266\"");
client.println(String("I am Esp8266"));
//读取从 Tcp Server 返回的数据(以回车符结尾)
String line = client.readStringUntil('\n');
Serial.println(line);
//3s 后关闭连接
delay(3000);
Serial.println("");
client.stop();
//等待5s,程序循环运行,即5s后从新开始连接
Serial.println("wait 5 sec...");
delay(5000);
}
串口调试信息
可以看到,esp8266启动以后就开始连接WiFi,根据我们设置的名称和密码,连接成功以后,就开始连接TCP 服务器,再次成功后就发信息给TCP Sever,此时我们可以在网络调试助手看到以下信息:
接着我们还收到了来自TCP Sever的数据,这是因为我在esp8266发送数据完一次后,在网络助手里面点了发送,就把I am TCP Sever
调试:可能的错误及其解决原因
连接 WiFi 失败
当我们的串口助手收到这个消息,表示WiFi连接失败了,通常重复几次后就会成功,如果不成功,则可能是WiFi名称和密码没有正确输入。
连接到 TCP Server 失败
当我们收到这样的信息,表示我们连接到TCP Server失败了,可能的原因:
- 没有打开TCP服务器,所以PC端并不存在一个TCP 服务器:
- TCP Server IP地址错误:需要确定网络助手中,本地主机地址需要填写正确的本机IP地址
- TCP Server IP地址和端口与Esp8266程序设置不同:由于是通过IP地址和端口号连接的,所以需要特备注意,程序中这两处不能写错。
- 防火墙或其他原因:建议关闭防火墙。
Esp8266 收不到 PC 端发送的信息
当我们点击了发送数据后,发现串口助手并没有打印我们发送的数据,说明我们并没正确读取到信息:
- 发送时机不对:由于程序是非堵塞方式读取,所以运行读取函数后,程序会继续运行,当后续的示例代码停止client,就会导致接收不到信息。
- 数据不是以回车符(‘\n’)结尾的,由于我们读取了一行数据,并以回车符作为标记,所以没有回车符会导致数据不能被正常打印。注意发送的数据要带回车,由于按回车后数据直接发送了,所以可以在其他地方复制一段带换行符的数据,比如:
I am TCP Server
/
附件
百度云下载:网络调试助手
提取码:nsxc