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



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

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端回复
}
}
}
}

———————
作者:lianxingjie_1024
来源:CSDN
原文:https://blog.csdn.net/Lianxingjie_1024/article/details/78225166
版权声明:本文为博主原创文章,转载请附上博文链接!