ESP8266作为TCPServer与其他设备建立一个tcp网络进行局域网通讯

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Lianxingjie_1024/article/details/78225166
1.把一个8266作为服务端,其他的多个8266或者其他设备(手机、PC等)作为客户端,建立一个TCP网络

2.用8266建立热点让其他设备进行连接

                           

3.具体操作实现:
        a. 建立8266wifi(热点)并设置wifi密码

        b. 设置端口号并获取AP模式下的IP

        c. 其他的多个8266或者其他设备(手机、PC等)作为客户端,找到服务端8266发出的WIFI后,通过密码进行连接

                         

        d. PC机通过TCP网络助手连接到8266服务端,即可发送指令到8266服务端,通过串口等信息,可知server与client两端已经建成通讯


#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 3               //最大同时连接数,即可接入的设备数量的最大值,
                                        //8266 tcpserver只能接入5个(此数据不确定,网上是这么说的)

WiFiServer server(8266);                //端口号,范围  0-65535
WiFiClient serverClients[MAX_SRV_CLIENTS];

const char WiFiAPPSW[] = "12345678";    //设置AP模式下模块所发出的WIFI的密码
char data[1500];
int ind = 0;

void setupWiFi()
{
  WiFi.mode(WIFI_AP);
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();

 //设置AP模式下的WIFI名称:12345678_ + MAC地址后六位  
  String AP_NameString = "12345678" + macID;
   
  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, AP_NameString.length() + 1, 0);
   
  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);
   
  WiFi.softAP(AP_NameChar, WiFiAPPSW);
 
  Serial.println();
  Serial.print ( "IP address: " );
  Serial.println ( WiFi.softAPIP() );

  server.begin();
    
}
void setup() 
{
  Serial.begin(115200);
  Serial.println ("\nBegin now!!!");
  setupWiFi();
}
 
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())
            {
                Serial.println("Connected to client !!! ");
                 //从Telnet客户端获取数据
                while (serverClients[i].available()) {
                    data[ind] = serverClients[i].read(); //读取client端发送的字符
                    ind++;
                         
                }
            for(int j=0;j < ind; j++)
            {
              Serial.print(data[j]);
            }
            Serial.println();
            ind = 0;
            serverClients[i].print("OK! Got your request.");        //在client端回复       
            }     
        }
    }
}


展开阅读全文

没有更多推荐了,返回首页