Я установил учетные данные WiFi и подключился по данным TCP. Wi-Fi подключается через MQTT, показывая, что не удалось установить соединение с сбойным состоянием -2 означает, что нет inte rnet. Также создавая одноименные hotspot и mqtt подписывайся topi c через данные tcp сервера. Вот пример кода
#include <ESP8266WiFi.h>
#include<SPI.h>
#include <PubSubClient.h>
#define LED 4
int port = 8888;
WiFiServer server(port);
//Enter your mqtt server configurations
const char* mqttServer = "xx.xx.xx.xx"; //Enter Your mqttServer address
const int mqttPort = 1883; //Port number
const char* mqttUser = "xxxxxxxxx"; //User
const char* mqttPassword = "xxxxxxxxx"; //Password
WiFiClient espClient;
PubSubClient client(espClient);
IPAddress staticIP(192,168,4,1);
IPAddress gateway(192,168,4,0);
IPAddress subnet(255,255,255,0);
void setup() {
delay(500);
pinMode(LED,OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.config(staticIP, gateway, subnet); // (DNS not required)
Serial.println(WiFi.SSID());
Serial.println(WiFi.localIP());
tcp_server_start();
}
void MQTTcallback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
String message;
for (int i = 0; i < length; i++) {
message = message + (char)payload[i]; //Convert *byte to String
}
Serial.print(message);
if(message == "#off") {digitalWrite(LED,LOW);} //LED off
if(message == "#on") {digitalWrite(LED,HIGH);} //LED on
Serial.println();
Serial.println("-----------------------");
}
void loop() {
if (WiFi.status() == WL_CONNECTED){
client.loop();
}
Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum());
delay(1000);
WiFiClient client = server.available();
if (client) {
if(client.connected()){
Serial.println("Client connected");
}
while(client.connected()){
while(client.available()>0){
// read data from the connected client
String data = client.readStringUntil('\n');
Serial.println(data);
if (data.indexOf('|')>0 && data.indexOf(':')>0){
String ssid = data.substring(0, data.indexOf("|"));
String pass = data.substring(data.indexOf("|")+1, data.indexOf(":"));
boolean res = wifi_connect(ssid.c_str(), pass.c_str());
if (res == true){
client.write("SUCCESS");
} else {
client.write("WRONG INPUT");
}
}
if (data.indexOf("SL1")>=0){
const char* hotspot = data.c_str();
if (WiFi.status() == WL_CONNECTED){
client.write("SUCCESS");
mqtt_connect(data.c_str());
create_access_point(data.c_str());
} else {
client.write("WRONG INPUT");
}
} else if (data == "relay_on"){
digitalWrite(LED,HIGH);
client.write("SUCCESS");
} else if (data == "relay_off"){
digitalWrite(LED,LOW);
client.write("SUCCESS");
}
}
}
client.stop();
Serial.println("\nClient disconnected");
}
}
void create_access_point(const char* hotspot){
Serial.print("Setting Soft Access Point ... ");
boolean result = WiFi.softAP(hotspot, "88888888");
if(result == true){
Serial.println("Ready");
} else{
Serial.println("Failed!");
}
}
boolean wifi_connect(const char* ssid, const char* password){
WiFi.begin(ssid, password);
delay(500);
for (int i = 0; i<20; i++){
if (WiFi.status() == WL_CONNECTED){
Serial.println("Connected to WiFi");
return true;
}
Serial.println("Connecting to WiFi...");
delay(500);
}
return false;
}
void tcp_server_start(){
server.begin();
Serial.println("Open Telnet and connect to IP: ");
Serial.println(WiFi.localIP());
Serial.println("on port");
Serial.println(port);
create_access_point("ARNABESP8266");
}
void mqtt_connect(const char* topic_name){
client.setServer(mqttServer, mqttPort);
client.setCallback(MQTTcallback);
delay(500);
for (int i = 0; i<20; i++) {
Serial.println("Connecting to MQTT...");
client.connect("ESP8266", mqttUser, mqttPassword);
if (client.connected()){
Serial.println("connected");
break;
} else {
Serial.print("failed with state ");
Serial.println(client.state()); //If you get state 5: mismatch in configuration
}
}
client.publish(topic_name, "device_notification");
client.subscribe(topic_name);
}
На самом деле, что я хочу, я хочу сделать все через TCP, например, подключиться к WiFi, установить точку доступа и подписаться на MQTT в качестве имени точки доступа hotpost. Я думаю, что может быть проблема с подключением WiFi.