ESP8266 AP 模式下,建立TCP服务器,开启通信,使用小程序或者APP 进行配网
-
1.AP 模式,固定IP地址是 192.168.4.1,也可以自己设定IP
WiFi.mode(WIFI_AP); //设置为AP模式 WiFi.softAP(ssid, password); //配置AP信息,并开启AP IPAddress softLocal(192,168,128,1); //IP地址,用以设置IP第4字段 IPAddress softGateway(192,168,128,1); //IP网关,用以设置IP第3字段 IPAddress softSubnet(255,255,255,0); WiFi.softAPConfig(softLocal, softGateway, softSubnet); int gotoAP=WiFi.softAPgetStationNum(); //获取当前连接到AP的设备数量
-
2.建立TCP客户端
server.begin(port); //服务器启动监听端口号 serverClients[i].connected()//检查端口 i 是否连接 serverClients[i].read()//从端口号获取数据,返回类型char serverClients[i].print("OK! Got your request."); //回复消息
具体代码如下:
//检测服务器端是否有活动的客户端连接
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端回复
}
}
}
- 完成TCP通信,解析Json数据,可以进行配网\
- client 发送数据
serializeJson(doc, json_send);//将json格式数据,放入发送区
serverClients[i].write(json_send, strlen(json_send));