两块esp8266wifi通讯

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);
}
相关推荐
EatFan7 天前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网·esp32
攸尔的笔记本~10 天前
ESP32-C3的WIFI信号飘忽不定、连接不了
esp32·射频·硬件设计
乐鑫科技 Espressif12 天前
案例研究:基于 ESP32-C5 与 ESP RainMaker 构建符合 EN 18031 标准的 IoT 解决方案
esp32·乐鑫科技·rainmaker
jianqiang.xue14 天前
ESP-IDF保姆级入门41|产品级故障排查与稳定性优化全解:死机复位排查/内存泄漏定位/性能瓶颈分析/长期稳定性测试,掌握量产运维问题定位方法论
单片机·mcu·物联网·esp32
jianqiang.xue15 天前
ESP-IDF保姆级入门40|量产烧录与产线测试全解:批量烧录方案/校准流程/功能测试/不良分拣/产线追溯,掌握工业级量产交付全流程
单片机·物联网·esp32
jianqiang.xue15 天前
ESP-IDF保姆级入门39|固件安全与安全启动全解:签名校验/Flash加密/防回滚/OTP密钥/知识产权保护,掌握工业级固件安全防护体系
单片机·物联网·esp32
jianqiang.xue16 天前
ESP-IDF保姆级入门38|电源管理与锂电池充电全解:充电拓扑/电源路径控制/充放电保护/电量检测/低功耗策略,掌握嵌入式电池供电系统设计
单片机·嵌入式·esp32
jianqiang.xue17 天前
ESP-IDF保姆级入门35|SDMMC高速SD卡全解:SDIO接口/4位高速模式/FATFS文件系统/热插拔检测/磨损均衡,掌握嵌入式大容量存储扩展
单片机·esp32
国产化创客17 天前
创客开发入门(五)Arduino IDE 编程基础
单片机·嵌入式硬件·物联网·esp32
智码看视界18 天前
Edge AI 与 IoT 全栈系列:Edge AI 全栈 2:ESP32 + MQTT + Flink 实时 IoT 数据管道
物联网·flink·esp32·全栈开发·iot平台·实时流处理·edgeai