Поскольку жестко прописывать в код sketch-а — некорректно, воспользуемся WiFiManager. Код вынесен в отдельный WiFi.ino файл (для создания нажать сочетение Ctrl-Shft-N).
#include "ESP8266WiFi.h" #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> //https://github.com/tzapu/WiFiManager //#include <PersWiFiManager.h> //SSID of your network char ssidWiFi[32]; //SSID of your Wi-Fi router char passWiFi[32]; //Password of your Wi-Fi router //String ssidWiFi = ""; //String passWiFi = ""; //char* host = "api.thingspeak.com"; //ESP8266WebServer server(80); //DNSServer dnsServer; //PersWiFiManager wifiManager(server, dnsServer); //int numOfRepeat = 0; void setupWiFi() { //Static parameters for AP IPAddress _ip = IPAddress(192,168, 1, 5); IPAddress _gw = IPAddress(192, 168, 1, 1); IPAddress _sn = IPAddress(255, 255, 255, 0); //WiFiManager intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; //reset saved settings //wifiManager.resetSettings(); wifiManager.setAPStaticIPConfig(_ip, _gw, _sn); //wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn); //fetches ssid and pass from eeprom and tries to connect //if it does not connect it starts an access point with the specified name //and goes into a blocking loop awaiting configuration if (!wifiManager.autoConnect("ResourcesMeterAP")) { Serial.println("failed to connect, we should reset as see if it connects"); delay(3000); ESP.reset(); delay(5000); } else { String pass = WiFi.psk(); String ssid = WiFi.SSID(); //passWiFi = pass.c_str(); strcpy(passWiFi, pass.c_str()); strcpy(ssidWiFi, ssid.c_str()); Serial.print("Wi-Fi connected to " + String(ssidWiFi) + ". IP address: "); Serial.println(WiFi.localIP()); //IP2STR( WiFi.localIP())); Serial.print("Strength ...: "); Serial.println(WiFi.RSSI()); } } bool connectWiFi() { if (WiFi.status() != WL_CONNECTED) { //Serial.println("Tryng to connect to Wi-Fi AP with SSID [" + String(ssidWiFi) + "]"); WiFi.mode(WIFI_STA); WiFi.begin(ssidWiFi, passWiFi); //WiFi.begin(); int connRes = WiFi.waitForConnectResult(); if (connRes != WL_CONNECTED) { Serial.println("Wi-Fi connection to " + WiFi.SSID() + " failed. Status " + String(WiFi.status()) + ", " + WiFiconnectionStatus(WiFi.status()) + ", Retrying later...\n"); WiFi.disconnect(); return false; } else { Serial.print("Wi-Fi connected to " + WiFi.SSID() + ". IP address: "); Serial.println(WiFi.localIP()); //IP2STR( WiFi.localIP())); Serial.print("Strength ...: "); Serial.println(WiFi.RSSI()); } } return true; } String WiFiconnectionStatus(int which) { switch (which) { case WL_CONNECTED: return "Connected"; break; case WL_NO_SSID_AVAIL: return "Network is not availible"; break; case WL_CONNECT_FAILED: return "Wrong password"; break; case WL_IDLE_STATUS: return "Idle status"; break; case WL_DISCONNECTED: return "Disconnected"; break; default: return "Unknown"; break; } }
Полезные ссылки
- WiFiManager with ESP8266 – Autoconnect, Custom Parameter and Manage your SSID and Password
- http://ryandowning.net/PersWiFiManager/about.html — ещё один проект.