ESP8266客户端
//无线发送模块 需要处理DHT11数据
#include <ESP8266WiFi.h>
// 服务器的WiFi配置(必须和服务器端一致)
const char* ssid = "ESP8266_Server"; // 服务器热点名称
const char* password = "12345678"; // 服务器热点密码
const char* serverIP = "192.168.4.1"; // 服务器固定IP(SoftAP模式)
const uint16_t serverPort = 8080; // 服务器端口(和服务器端一致)
WiFiClient client; // 客户端对象
void setup() {
// 初始化串口
Serial.begin(115200);
delay(100);
// 连接到服务器的WiFi热点
Serial.println("连接WiFi热点...");
WiFi.begin(ssid, password);
// 等待WiFi连接
int retry = 0;
while (WiFi.status() != WL_CONNECTED && retry < 20) {
delay(500);
Serial.print(".");
retry++;
}
// 检查WiFi是否连接成功
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nWiFi连接失败!");
return;
}
Serial.println("\nWiFi已连接!");
Serial.print("客户端IP地址: ");
Serial.println(WiFi.localIP());
// 连接到TCP服务器
Serial.print("连接服务器 ");
Serial.print(serverIP);
Serial.print(":");
Serial.println(serverPort);
if (client.connect(serverIP, serverPort)) {
Serial.println("服务器连接成功!");
// 向服务器发送初始消息
client.println("客户端已上线");
} else {
Serial.println("服务器连接失败!");
}
}
void loop() {
// 如果断开连接,尝试重连
if (!client.connected()) {
Serial.println("与服务器断开连接,尝试重连...");
// 重新连接WiFi(可选,防止WiFi断开)
if (WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
delay(1000);
}
// 重新连接服务器
client.connect(serverIP, serverPort);
delay(1000);
return;
}
// 接收服务器数据
if (client.available() > 0) {
String receivedData = client.readStringUntil('\n');
receivedData.trim();
Serial.print("收到服务器数据: ");
Serial.println(receivedData);
}
// 从串口发送数据到服务器
if (Serial.available() > 0) {
String serialData = Serial.readStringUntil('\n');
serialData.trim();
client.println(serialData);
Serial.print("已发送到服务器: ");
Serial.println(serialData);
}
delay(10);
}
esp8266服务端
//服务端,也是数据终端。
#include <ESP8266WiFi.h>
// WiFi热点配置(无需路由器,点对点通讯)
const char* ap_ssid = "ESP8266_Server"; // 热点名称
const char* ap_password = "12345678"; // 热点密码(至少8位)
WiFiServer server(8080); // 监听8080端口
WiFiClient client; // 存储客户端连接
void setup() {
// 初始化串口(调试用,波特率115200)
Serial.begin(115200);
delay(100);
// 启动WiFi热点
Serial.println("启动WiFi热点...");
WiFi.softAP(ap_ssid, ap_password);
// 获取服务器IP(SoftAP模式下固定为192.168.4.1)
IPAddress serverIP = WiFi.softAPIP();
Serial.print("服务器IP地址: ");
Serial.println(serverIP);
// 启动TCP服务器
server.begin();
Serial.println("TCP服务器已启动,等待客户端连接...");
}
void loop() {
// 检查是否有新客户端连接
if (server.hasClient()) {
// 断开旧连接(只保持一个客户端连接)
if (client.connected()) {
Serial.println("断开旧客户端连接");
client.stop();
}
// 接受新连接
client = server.available();
Serial.println("新客户端已连接!");
// 向客户端发送欢迎消息
client.println("已连接到ESP8266服务器");
}
// 接收客户端数据并回复
if (client.connected() && client.available() > 0) {
// 读取客户端发送的字符串(以换行符为结束)
String receivedData = client.readStringUntil('\n');
// 移除换行/回车符(避免乱码)
receivedData.trim();
Serial.print("收到客户端数据: ");
Serial.println(receivedData);
// 向客户端回复数据
client.print("服务器回复: ");
client.println(receivedData);
}
// 从串口发送数据到客户端
if (client.connected() && Serial.available() > 0) {
String serialData = Serial.readStringUntil('\n');
serialData.trim();
client.println(serialData);
Serial.print("已发送到客户端: ");
Serial.println(serialData);
}
delay(10);
}