esp笔记(5)esp8266 与 TCP Sever 建立通讯

本文开发环境:

  • MCU型号:ESP8266
  • IDE环境 : Arduino IDE
  • TCP 助手:网络调试助手

本文内容:

  1. 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失败了,可能的原因:

  1. 没有打开TCP服务器,所以PC端并不存在一个TCP 服务器:
    在这里插入图片描述
  2. TCP Server IP地址错误:需要确定网络助手中,本地主机地址需要填写正确的本机IP地址
  3. TCP Server IP地址和端口与Esp8266程序设置不同:由于是通过IP地址和端口号连接的,所以需要特备注意,程序中这两处不能写错。
    4. **加粗样式**
  4. 防火墙或其他原因:建议关闭防火墙。

Esp8266 收不到 PC 端发送的信息

当我们点击了发送数据后,发现串口助手并没有打印我们发送的数据,说明我们并没正确读取到信息:

  1. 发送时机不对:由于程序是非堵塞方式读取,所以运行读取函数后,程序会继续运行,当后续的示例代码停止client,就会导致接收不到信息。
  2. 数据不是以回车符(‘\n’)结尾的,由于我们读取了一行数据,并以回车符作为标记,所以没有回车符会导致数据不能被正常打印。注意发送的数据要带回车,由于按回车后数据直接发送了,所以可以在其他地方复制一段带换行符的数据,比如:

I am TCP Server

/

附件

百度云下载:网络调试助手
提取码:nsxc

要使用ESP8266的STA模式将ADC采集到的值发送给TCP服务器,你可以按照以下步骤进行操作: 1. 配置ESP8266的STA模式连接到你的Wi-Fi网络。你可以使用ESP8266的AT指令或者ESP8266的API库来实现这一步骤。确保ESP8266成功连接到Wi-Fi网络。 2. 使用适当的ADC库或者代码获取ADC的采样值。这取决于你使用的具体硬件和编程语言。确保你可以获取到正确的ADC采样值。 3. 使用TCP客户端代码将ADC采样值发送到TCP服务器。以下是一个示例代码,使用ESP8266的AT指令将数据发送到TCP服务器: ```c #include <SoftwareSerial.h> SoftwareSerial esp(10, 11); // 设置ESP8266的串口引脚 void setup() { Serial.begin(9600); // 设置串口波特率 esp.begin(9600); // 初始化ESP8266的串口通信 delay(1000); // 等待ESP8266启动 // 连接到Wi-Fi网络 esp.println("AT+CWJAP=\"你的WiFi名称\",\"你的WiFi密码\""); delay(5000); // 等待连接成功 // 建立TCP连接 esp.println("AT+CIPSTART=\"TCP\",\"服务器IP地址\",服务器端口"); delay(5000); // 等待建立连接 } void loop() { // 获取ADC采样值 int adcValue = analogRead(A0); // 发送ADC采样值到TCP服务器 esp.print("AT+CIPSEND="); esp.println(adcValue); delay(1000); // 等待发送完成 // 断开TCP连接 esp.println("AT+CIPCLOSE"); delay(5000); // 等待断开连接 delay(5000); // 等待一段时间再进行下一次采样和发送 } ``` 在上述示例代码中,我们使用了SoftwareSerial库来实现与ESP8266的串口通信。你需要根据实际连接的引脚进行修改。 在`setup`函数中,我们首先连接到Wi-Fi网络,并等待连接成功。然后,建立TCP连接,并等待连接建立完成。 在`loop`函数中,我们获取ADC采样值,并使用AT指令将其发送到服务器。然后,断开TCP连接,并等待一段时间再进行下一次采样和发送。 请注意,你需要将代码中的以下部分替换为你的实际值: - `"你的WiFi名称"`:你的Wi-Fi网络名称 - `"你的WiFi密码"`:你的Wi-Fi密码 - `"服务器IP地址"`:TCP服务器的IP地址 - `"服务器端口"`:TCP服务器的端口号 这是一个基本的示例,你可以根据需要进行修改和扩展。同时,建议使用更可靠的方法(如使用ESP8266的API库)来实现与ESP8266的通信,以提高稳定性和灵活性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值