Hello,
im a bginner to play with the NodeMUC ESP8266.
I write a code and i have a problem.
i use this code and load it into the NodeMUC ESP8266. After some time the ESP restarts and I don't know why. Is there an error in the code that I don't see during compiler?
Program funktion:
if no login to WLAN open an AP.
SSID and PW can be entered in the web interface.
I know there are ready made examples with this function but I wanted to have a simpler and smaller program.
Can you help me get a stable program?
thanks
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>
#include <EEPROM.h>
#include <WiFiUDP.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
#include "APwebserver.h"
void ioPorts()
{
//Set Inputs Outputs
pinMode (D5, INPUT_PULLUP);
pinMode (D6, OUTPUT); //LED Call aktiv
pinMode (D7, OUTPUT); //LED on the way
pinMode (LED_BUILTIN, OUTPUT);
pinMode (D3, INPUT); //Reset Input
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(500);
EEPROM.begin(512); //EEPROM initalisieren
WiFi.mode(WIFI_STA); //WIFI Modus
Serial.println(WiFi.hostname());
////////////////////////////UDP Start//////////////////////////////////////////////
/*
Udp.begin(localPort);
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
*/
////////////////////////////UDP Start//////////////////////////////////////////////
////////////////////////////Reading EEProm SSID-Password//////////////////////////////////////////////
for (int i = 0; i < 32; ++i) //Reading SSID
{
ssidEEPROM += char(EEPROM.read(0+i));
}
for (int i = 32; i < 96; ++i) //Reading Password
{
passwordEEPROM += char(EEPROM.read(0+i));
}
if ( ssidEEPROM.length() > 1 )
{
ssidEEPROM = ssidEEPROM.c_str();
passwordEEPROM = passwordEEPROM.c_str();
Serial.println(ssidEEPROM); //Print SSID
Serial.println(passwordEEPROM); //Print Password
delay(5000);
WiFi.begin(ssidEEPROM, passwordEEPROM);
delay(10000); //Wait for IP to be assigned to Module by Router
IPAddress ip = WiFi.localIP(); //Get ESP8266 IP Adress
Serial.print("IP=");
Serial.print(ip); //Print Ip on serial monitor or any serial debugger
}
////////////////////////////Reading EEProm SSID-Password//////////////////////////////////////////////
}
void loop() {
ioPorts(); //IO Ports
if (WiFi.status() != WL_CONNECTED)
{
delay(10000);
Serial.println("not connected. Start AP");
IPAddress ip = WiFi.softAPIP();
WiFi.mode(WIFI_AP);
}
APModeIsEnable();
server.handleClient();
////////////////////////Reset Device//////////////////////////
int counter = 0;
while(digitalRead(0) == LOW)
{
counter++;
delay(1000);
if (digitalRead(0) == LOW && counter > 5)
{
counter = 0;
for (int i = 0; i < 100; ++i) { EEPROM.write(i, 0); }
EEPROM.commit();
Serial.println("Reset");
WiFi.disconnect(true);
ESP.eraseConfig();
ESP.restart();
}
}
////////////////////////Reset Device///////////////////////////
}
///////////////////////////////////////////WEBSERVER AP MODE////////////////////////////////////////
String ssidEEPROM = ""; //EEPROM Network SSID
String passwordEEPROM = ""; //EEPROM Network Password
String ssidWEB = ""; //WEB SSID
String passwordWEB = ""; //WEB Password
void APWebserverStart()
{
String st="",s=""; //String array to store the SSID's of available networks
/*
int Tnetwork=0,i=0,len=0;
Tnetwork = WiFi.scanNetworks(); //Scan for total networks available
st = "<ul>";
for (int i = 0; i < Tnetwork; ++i)
{
// Print SSID and RSSI for each network found
st += "<li>";
st +=i + 1;
st += ": ";
st += WiFi.SSID(i);
st += " (";
st += WiFi.RSSI(i);
st += ")";
st += (WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*";
st += "</li>";
}
*/
st += "</ul>";
IPAddress ip = WiFi.softAPIP(); //Get ESP8266 IP Adress
//String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
s = "\n\r\n<!DOCTYPE HTML>\r\n<html><h1>Angelus</h1> ";
//s += ipStr;
s += "<p>";
s += st;
s += "<form method='get' action='a'><label>SSID: </label><input name='ssid' length=32><label>Paswoord: </label><input name='pass' length=64><input type='submit'></form>";
s += "</html>\r\n\r\n";
server.send( 200 , "text/html", s);
}
////////////////////////////////////WEBSERVER AP MODE///Get SSID & Password////////////////////////////////////////
void APWEBInfo(){
if (server.hasArg("ssid") && server.hasArg("pass"))
{
ssidWEB=server.arg("ssid");//Get SSID
passwordWEB=server.arg("pass");//Get Password
}
if(ssidWEB.length()>1 && passwordWEB.length()>1) //Save SSID & PW to EEPROM
{
for (int i = 0; i < 96; ++i) { EEPROM.write(i, 0); }
delay(10);
for (int i = 0; i < ssidWEB.length(); ++i)
{
EEPROM.write(0+i, ssidWEB[i]);
}
for (int i = 0; i < passwordWEB.length(); ++i)
{
EEPROM.write(32+i, passwordWEB[i]);
}
EEPROM.commit();
delay(1000);
String s = "\r\n\r\n<!DOCTYPE HTML>\r\n<html><h1>Angelus</h1> ";
s += "<p>Password Saved... Reset to boot into new wifi</html>\r\n\r\n";
server.send(200,"text/html",s);
delay(1000); //Restart ESP8266 after 1 second
WiFi.disconnect();
WiFi.mode(WIFI_STA);
ESP.restart();
}
}
/////////////////////////////////WEBSERVER AP MODE/// Get SSID & Password//////////////////////////
void APModeIsEnable(){
delay(100); //Stable AP
server.on("/",APWebserverStart); //if
//If submit button is pressed get the new SSID and Password and store it in EEPROM
server.on("/a",APWEBInfo);
server.begin();
delay(300);
}
----Error----
12:03:17.550 -> Abort called
12:03:17.550 ->
12:03:17.550 -> >>>stack>>>
12:03:17.550 ->
12:03:17.550 -> ctx: cont
12:03:17.550 -> sp: 3ffffcf0 end: 3fffffc0 offset: 01b0
12:03:17.550 -> 3ffffea0: 00000000 0000014e 3ffffef0 402034f9
12:03:17.550 -> 3ffffeb0: 402082e8 00000000 00000000 402108f4
12:03:17.596 -> 3ffffec0: 40201038 0000000d 402082fc 402082e8
12:03:17.596 -> 3ffffed0: 4023ebbe 0000000d 3ffef694 3ffee678
12:03:17.596 -> 3ffffee0: 402082e8 3fffff60 3ffee428 40203570
12:03:17.596 -> 3ffffef0: 00000009 00000001 00000000 3ffee678
12:03:17.596 -> 3fffff00: 40201038 00000001 402082fc 402082e8
12:03:17.596 -> 3fffff10: 00000000 3ffee6d4 3fffff60 402056dc
12:03:17.596 -> 3fffff20: 3fffdad0 3ffee428 3fffff60 402035a9
12:03:17.596 -> 3fffff30: 40201038 00000064 402082fc 402082e8
12:03:17.596 -> 3fffff40: 40233342 402082fc 3ffee428 402013d4
12:03:17.596 -> 3fffff50: 40201038 00000000 402082fc 402082e8
12:03:17.596 -> 3fffff60: 0000002f 00000000 00fee41c 40201372
12:03:17.645 -> 3fffff70: 3fffdad0 3ffee510 3ffee648 40201466
12:03:17.645 -> 3fffff80: 0000005f 00000060 feefeffe feefeffe
12:03:17.645 -> 3fffff90: 00000000 00000000 00000001 3ffee678
12:03:17.645 -> 3fffffa0: 3fffdad0 00000000 3ffee648 402065c8
12:03:17.645 -> 3fffffb0: feefeffe feefeffe 3ffe8508 40100531
12:03:17.645 -> <<<stack<<<
12:03:17.645 ->
12:03:17.645 -> last failed alloc call: 4021010E(56)
12:03:17.645 ->
12:03:17.645 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
12:03:17.645 ->
12:03:17.645 -> load 0x4010f000, len 1384, room 16
12:03:17.645 -> tail 8
12:03:17.692 -> chksum 0x2d
12:03:17.692 -> csum 0x2d
12:03:17.692 -> v8b899c12
12:03:17.692 -> ~ld
12:03:18.246 -> ESP_050AF5
12:03:18.246 -> TP-Link_4800
12:03:18.246 -> 26304007
12:03:33.243 -> IP=192.168.0.100