基于Arduino 的 ESP32 TCP Server 建立

需要用到“有人调试助手app”

链接:https://pan.baidu.com/s/1W7_jb8FkUSkzD8BfsHZY2Q 
提取码:qm7k

注意事项:

1、建立热点,通过使用ESP32开发板建立热点。

2、建立服务器链接,这里ESP32作为服务器使用,有人调试助手作为客户端使用。

/**
 * Demo:
 *    演示WiFiServer功能
 *    打开有人调试助手app  模拟TCP client请求
 */
#include <WiFi.h>
//定义可连接的客户端数目最大值
#define MAX_SRV_CLIENTS 1
const char* ssid = "ESP32";
const char* password = "12345678";

WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];

void setup() {
  Serial.begin(115200);
  WiFi.softAP(ssid, password);
  Serial.println();
  Serial.print("IP address: ");
  Serial.println(WiFi.softAPIP());
 //  WiFi.mode(AP);
 /*
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to ");
  Serial.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21){ //超时(20x500=10000,10秒钟),提示连接失败
    Serial.print("Could not connect to ");
    Serial.println(ssid);
    while(1) delay(500);
  }

//此处没有用
  */
  //启动UART传输和服务器
  server.begin();
  server.setNoDelay(true);
  
  Serial.print("Ready! Use 'telnet ");
  Serial.print(WiFi.localIP());//获得服务器本地IP
  Serial.println("23' to connect");
}

void loop() {
  uint8_t i;
  //检测服务器端是否有活动的客户端连接
  if (server.hasClient()){
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      //查找空闲或者断开连接的客户端,并置为可用
      if (!serverClients[i] || !serverClients[i].connected()){
        if(serverClients[i]) serverClients[i].stop();
        serverClients[i] = server.available();
        Serial.print("New client: "); Serial.println(i);
        continue;
      }
    }
    //若没有可用客户端,则停止连接
    WiFiClient serverClient = server.available();
    serverClient.stop();
  }
  //检查客户端的数据
  for(i = 0; i < MAX_SRV_CLIENTS; i++){
    if (serverClients[i] && serverClients[i].connected()){
      if(serverClients[i].available()){
        //从Telnet客户端获取数据,并推送到URAT端口
        while(serverClients[i].available()) Serial.write(serverClients[i].read());
      }
    }
  }
  //检查UART端口数据
  if(Serial.available()){
    size_t len = Serial.available();
    unsigned char sbuf[len];
    Serial.readBytes(sbuf, len);
    //将UART端口数据推送到所有已连接的telnet客户端,实现双向通信
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      if (serverClients[i] && serverClients[i].connected()){
        serverClients[i].write(sbuf, len);
        delay(1);
      }
    }
  }
}

 

在arduino串口监视界面查看链接消息和进行数据发送。

基于Arduino 的 ESP32 TCP Server 建立

基于Arduino 的 ESP32 TCP Server 建立