ESP8266 作为Server进行TCP通信

在上一篇中讲述了ESP8266作为client进行TCP通信,这一次讲一下怎么作为server端进行TCP通信。

这里写图片描述
这里和以前差不多,唯一的区别是以前我们是作为client,现在作为server,那么我们需要写一个server_init()函数,来配置一下8266作为sever的结构体;
server_init(&info.ip,1213);//将你查询的自己的ip的地址,以及自己的端口号要初始化;

这里写图片描述

这个函数的东西,如果你看过我的上一个博客你就会感觉很熟悉,前边几个基本不变,只需将local_ip 和 local_port改一下就好,local_ip是指8266的ip,local_port是指你给8266设置的端口号;配置好以后,我们去注册一个监听的函数;在监听函数中,再去注册几个发送,接收,断开连接的回调函数;在接受的回调函数中,一个向串口输出相应的接收的数据,一个是向客户端发一个接收成功的应答;
注册一个重新连接的回调函数
最后将上边配置的esp_conn初始化,调用esconn_accept()函数;
这里写图片描述

这就是结果
相应的代码程序在这TCP通信,Server
如果你没有积分下载该程序,那么我现在把它已经放在github上了,下面的连接是相应的ESP8266的程序:
https://github.com/liyinxin/esp8266_projet

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
ESP8266是一款低成本的Wi-Fi芯片,具有小巧、高可靠性、低功耗等特点。它可以通过TCP/IP协议栈实现TCP通信,下面介绍如何使用ESP8266实现TCP通信。 1. 连接Wi-Fi网络 首先,需要将ESP8266连接到Wi-Fi网络。可以使用AT指令或者编写代码实现。以下是编写代码连接Wi-Fi网络的示例: ```c #include <ESP8266WiFi.h> const char* ssid = "your_SSID"; // Wi-Fi网络名称 const char* password = "your_PASSWORD"; // Wi-Fi网络密码 void setup() { Serial.begin(115200); delay(10); // 连接Wi-Fi网络 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { } ``` 2. 建立TCP连接 连接到Wi-Fi网络后,就可以建立TCP连接了。以下是建立TCP连接的示例: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; // Wi-Fi网络名称 const char* password = "your_PASSWORD"; // Wi-Fi网络密码 const char* host = "your_HOST"; // TCP服务器地址 const int port = 80; // TCP服务器端口号 void setup() { Serial.begin(115200); delay(10); // 连接Wi-Fi网络 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // 建立TCP连接 Serial.print("Connecting to "); Serial.print(host); Serial.print(":"); Serial.println(port); WiFiClient client; if (!client.connect(host, port)) { Serial.println("Connection failed"); return; } Serial.println("Connected"); } void loop() { } ``` 3. 发送数据 建立TCP连接后,可以发送数据到服务器。以下是发送数据的示例: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; // Wi-Fi网络名称 const char* password = "your_PASSWORD"; // Wi-Fi网络密码 const char* host = "your_HOST"; // TCP服务器地址 const int port = 80; // TCP服务器端口号 void setup() { Serial.begin(115200); delay(10); // 连接Wi-Fi网络 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // 建立TCP连接 Serial.print("Connecting to "); Serial.print(host); Serial.print(":"); Serial.println(port); WiFiClient client; if (!client.connect(host, port)) { Serial.println("Connection failed"); return; } Serial.println("Connected"); // 发送数据 String message = "Hello, server!"; client.println("POST / HTTP/1.1"); client.print("Host: "); client.println(host); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(message.length()); client.println(); client.println(message); } void loop() { } ``` 4. 接收数据 发送数据后,服务器可能会返回响应数据。可以通过读取WiFiClient对象的内容来接收数据。以下是接收数据的示例: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; // Wi-Fi网络名称 const char* password = "your_PASSWORD"; // Wi-Fi网络密码 const char* host = "your_HOST"; // TCP服务器地址 const int port = 80; // TCP服务器端口号 void setup() { Serial.begin(115200); delay(10); // 连接Wi-Fi网络 Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // 建立TCP连接 Serial.print("Connecting to "); Serial.print(host); Serial.print(":"); Serial.println(port); WiFiClient client; if (!client.connect(host, port)) { Serial.println("Connection failed"); return; } Serial.println("Connected"); // 发送数据 String message = "Hello, server!"; client.println("POST / HTTP/1.1"); client.print("Host: "); client.println(host); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(message.length()); client.println(); client.println(message); // 接收数据 while (client.connected()) { String line = client.readStringUntil('\n'); Serial.println(line); } } void loop() { } ``` 以上就是使用ESP8266实现TCP通信的简单示例。需要注意的是,ESP8266TCP连接有时会不稳定,需要进行错误处理和重试。另外,TCP通信也需要遵守TCP协议规定的数据格式和通信流程。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值