Nodemcu startet immer wieder neu

Guten Tag zusammen,

ich bekomme beim folgenden Sketch eine mögliche Fehlermeldung vom Nodemcu.

Der Nodemcu startet immer wieder neu , anscheinend hängt er irgendwo.

//Konfiguration für die Datenbank
IPAddress server_addr();  // IP of the MySQL *server* here
char user[] = "";              // MySQL user login username
char* passwordDB = " ";  
char* DB = "Wetterdaten"; 

char query[128];
char temperature[10];

WiFiClient client;               
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  mlx.begin();

  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);

  Serial.println("DB - Connecting...");
   while (conn.connect(server_addr, 3306, user, passwordDB) != true) {
    delay(500);
    Serial.print ( "." );
  } 
  


}

void saveTempData() {
  
       Serial.print("Sky-Temp: ");
       Serial.println(mlx.readObjectTempC());
       Serial.print("Temp: ");
       Serial.println(bme.readTemperature());
       //dtostrf(mlx.readObjectTempC(), 2, 2, temperature);
       sprintf(query, "INSERT INTO Wetterdaten.wetterwerte (Himmelstemperatur) VALUES (%f)",mlx.readObjectTempC());
       cursor->execute(query);
       delete cursor;
       conn.close();  
}

void loop() {
         delay(2000);

  saveTempData();

  }


[code]
20:59:14.768 -> <<<stack<<<
20:59:14.768 -> 
20:59:14.768 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
20:59:14.768 -> 
20:59:14.768 -> load 0x4010f000, len 3456, room 16 
20:59:14.768 -> tail 0
20:59:14.768 -> chksum 0x84
20:59:14.768 -> csum 0x84
20:59:14.768 -> va5432625
20:59:14.768 -> ~ld

[/code]

Was kommt denn im seriellen Monitor an?

da gibt es eine Zeile mlx.begin()
Ich sehe aber keine Definition von mlx

In dem code den du gepostest hast gibt es keinerlei include-dateien.
Ich vermute mal das das nicht der komplette code ist.
Wie soll man das Problem analysieren wenn du nicht den kompletten Code zur Verfügung stellst?
Das Problem könnte sich genau in dem fehlenden Teil verbergen.

Also bitte den Code von der allerersten Zeile bis zur allerletzten Zeile und wen es mehrere Dateien gibt ALLE Dateien posten.
viele Grüße Stefan

lisaeinfachlos:
ich bekomme beim folgenden Sketch eine mögliche Fehlermeldung vom Nodemcu.

Die solltest Du uns mitteilen.

Du schließt in saveTempData() die Connection, öffnest aber keine neue Connection.

Gruß Tommy

Tommy56:
Die solltest Du uns mitteilen.

hängt unten im Sketch:

20:59:14.768 -> <<<stack<<<
20:59:14.768 -> 
20:59:14.768 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
20:59:14.768 -> 
20:59:14.768 -> load 0x4010f000, len 3456, room 16 
20:59:14.768 -> tail 0
20:59:14.768 -> chksum 0x84
20:59:14.768 -> csum 0x84
20:59:14.768 -> va5432625
20:59:14.768 -> ~ld

StefanL38:
Was kommt denn im seriellen Monitor an?

da gibt es eine Zeile mlx.begin()
Ich sehe aber keine Definition von mlx

In dem code den du gepostest hast gibt es keinerlei include-dateien.
Ich vermute mal das das nicht der komplette code ist.
Wie soll man das Problem analysieren wenn du nicht den kompletten Code zur Verfügung stellst?
Das Problem könnte sich genau in dem fehlenden Teil verbergen.

Also bitte den Code von der allerersten Zeile bis zur allerletzten Zeile und wen es mehrere Dateien gibt ALLE Dateien posten.
viele Grüße Stefan

In den oberen Teil stehen nur die Passwörter für das Wlan und für die Datenbank.

Trotzdem, poste ich den gesamten Code, wenn ich Zuhause bin!

Den Mlx benutze ich, nur habe ich den für den Test der Datenbank, den BME280 benutzt.

Bei den Sketch steht noch, dass der Wert von den Mlx in die Datenbank geschrieben wird, das habe ich verändert.

Das verbinden zur Datenbanken funktioniert auch einwandfrei nur danach kommt die Meldung.

Gruß,

Lisa

Hallo Lisa,

du kannst ja SSID und Passwort nach dem Einfügen in das Textfenster rauslöschen aber alles andere drin lassen.
viele Grüße Stefan

#include <ESP8266WiFi.h>          
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <WiFiClient.h>


//Pinbelegung für den BME280
#include <Adafruit_BME280.h>
#include <Adafruit_MLX90614.h>
#include <Wire.h>
#include <SPI.h>
#define SEALEVELPRESSURE_HPA (1013.25)
#define BME_SCL D6
#define BME_SDA D7
Adafruit_BME280 bme;


//MLX
Adafruit_MLX90614 mlx = Adafruit_MLX90614();



//Wlan und Telegram
const char* ssid = "";
const char* password = "";


//static IP-Adresse
IPAddress ip(192,168,0,06);
IPAddress gateway(192,168,0,1);
IPAddress subnet(225,225,255,0);


//Konfiguration für die Datenbank
IPAddress server_addr();  // IP of the MySQL *server* here
char user[] = "";              // MySQL user login username
char* passwordDB = "";  
char* DB = ""; 

char query[128];
char temperature[10];

WiFiClient client;               
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  mlx.begin();

  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);

  Serial.println("DB - Connecting...");
   while (conn.connect(server_addr, 3306, user, passwordDB) != true) {
    delay(500);
    Serial.print ( "." );
  } 
  


}

void saveTempData() {
  
       Serial.print("Sky-Temp: ");
       Serial.println(mlx.readObjectTempC());
       Serial.print("Temp: ");
       Serial.println(bme.readTemperature());
       //dtostrf(mlx.readObjectTempC(), 2, 2, temperature);
       sprintf(query, "INSERT INTO Wetterdaten.wetterwerte (Himmelstemperatur) VALUES (%f)",mlx.readObjectTempC());
       cursor->execute(query);
       delete cursor;
       conn.close();
       delay(2000);
  
}

void loop() {
         delay(2000);

  saveTempData();

  }

Hallo Lisa,

wow umfangreiches Projekt.
Ich habe in der setup-function serial-output eingebaut.

...Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  Serial.println("direkt vor mlx.begin();");
  mlx.begin();
  Serial.println("direkt nach mlx.begin();");

  // create MySQL cursor object
  Serial.println("direkt vor cursor = new MySQL_Cursor(&conn);");
  cursor = new MySQL_Cursor(&conn);
  Serial.println("direkt nach cursor = new MySQL_Cursor(&conn);");

/*
  Serial.println("DB - Connecting...");
   while (conn.connect(server_addr, 3306, user, passwordDB) != true) {
    delay(500);
    Serial.print ( "." );
  }
*/ 

}

die letzten Befehle musste ich ausklammern weil mir da der compiler eine Fehlermeldung ausgespuckt und das compilieren abgebrochen hat.

Mit dem Serial-output sieht die Fehlermeldung jetzt so aus

20:55:06.175 -> Connected to WLANBuero
20:55:06.175 -> IP address: 192.168.178.105
20:55:06.175 -> direkt vor mlx.begin();
20:55:06.209 -> direkt nach mlx.begin();
20:55:06.209 -> direkt vor cursor = new MySQL_Cursor(&conn);
20:55:06.209 -> direkt nach cursor = new MySQL_Cursor(&conn);
20:55:08.196 -> Sky-Temp: 1037.55
20:55:08.196 -> Temp: 
20:55:08.196 -> Exception (28):
20:55:08.196 -> epc1=0x40202fa0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
20:55:08.196 -> 
20:55:08.196 -> >>>stack>>>
20:55:08.196 -> 
20:55:08.196 -> ctx: cont
20:55:08.196 -> sp: 3ffffdc0 end: 3fffffc0 offset: 01a0
20:55:08.196 -> 3fffff60:  40203848 3ffee79c 3ffe86c7 40203b29  
20:55:08.230 -> 3fffff70:  3fffdad0 3ffee530 3ffee534 4020308c  
20:55:08.230 -> 3fffff80:  402051b1 3ffee530 3ffee79c 4020117d  
20:55:08.230 -> 3fffff90:  feefeffe 00000000 3ffee7d4 402011e7  
20:55:08.230 -> 3fffffa0:  3fffdad0 00000000 3ffee7d4 402045c8  
20:55:08.230 -> 3fffffb0:  feefeffe feefeffe 3ffe84f8 40100f41  
20:55:08.230 -> <<<stack<<<
20:55:08.264 -> 
20:55:08.264 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
20:55:08.264 -> 
20:55:08.264 -> load 0x4010f000, len 1392, room 16 
20:55:08.264 -> tail 0
20:55:08.264 -> chksum 0xd0
20:55:08.264 -> csum 0xd0
20:55:08.264 -> v3d128e5c
20:55:08.264 -> ~ld

Eine Exception (28)
Damit habe ich dann gegoogelt und folgendes gefunden

Das trifft jetzt nicht ganz genau deinen Code könnte aber etwas ähnliches sein.
Da ich deine hardware und auch keinen SQL-Server habe musst du jetzt selber mal weiter recherchieren.
Evtl. ist es nur das was in dem zweiten link zitiert wird

You're missing some setup on the MQTT client. Unfortunately, this MQTT library isn't clever enough to notice you didn't set a server name and crashes when you call
connect()

without it being fully set up.
You need a call to the
begin()

method before you call
connect()

.
Try rewriting your
connect()

function like this:

void connect() {

Serial.print("Connecting to broker...");

client.begin("MQTT-SERVER-HOSTNAME", net);

while (!client.connect("arduino")) {




If you need to specify a port number other than the default (1883) you can specify an integer port number after the server's domain name in the 
`begin()`

method.

viele Grüße Stefan

Jetzt wird auch eine Exception-nummer ausgespuckt.

StefanL38:
Hallo Lisa,

wow umfangreiches Projekt.
Ich habe in der setup-function serial-output eingebaut.

...Serial.println(ssid);

Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

Serial.println(“direkt vor mlx.begin();”);
  mlx.begin();
  Serial.println(“direkt nach mlx.begin();”);

// create MySQL cursor object
  Serial.println(“direkt vor cursor = new MySQL_Cursor(&conn);”);
  cursor = new MySQL_Cursor(&conn);
  Serial.println(“direkt nach cursor = new MySQL_Cursor(&conn);”);

/*
  Serial.println(“DB - Connecting…”);
  while (conn.connect(server_addr, 3306, user, passwordDB) != true) {
    delay(500);
    Serial.print ( “.” );
  }
*/

}





die letzten Befehle musste ich ausklammern weil mir da der compiler eine Fehlermeldung ausgespuckt und das compilieren abgebrochen hat.

Mit dem Serial-output sieht die Fehlermeldung jetzt so aus


20:55:06.175 → Connected to WLANBuero
20:55:06.175 → IP address: 192.168.178.105
20:55:06.175 → direkt vor mlx.begin();
20:55:06.209 → direkt nach mlx.begin();
20:55:06.209 → direkt vor cursor = new MySQL_Cursor(&conn);
20:55:06.209 → direkt nach cursor = new MySQL_Cursor(&conn);
20:55:08.196 → Sky-Temp: 1037.55
20:55:08.196 → Temp:
20:55:08.196 → Exception (28):
20:55:08.196 → epc1=0x40202fa0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
20:55:08.196 →
20:55:08.196 → >>>stack>>>
20:55:08.196 →
20:55:08.196 → ctx: cont
20:55:08.196 → sp: 3ffffdc0 end: 3fffffc0 offset: 01a0
20:55:08.196 → 3fffff60:  40203848 3ffee79c 3ffe86c7 40203b29 
20:55:08.230 → 3fffff70:  3fffdad0 3ffee530 3ffee534 4020308c 
20:55:08.230 → 3fffff80:  402051b1 3ffee530 3ffee79c 4020117d 
20:55:08.230 → 3fffff90:  feefeffe 00000000 3ffee7d4 402011e7 
20:55:08.230 → 3fffffa0:  3fffdad0 00000000 3ffee7d4 402045c8 
20:55:08.230 → 3fffffb0:  feefeffe feefeffe 3ffe84f8 40100f41 
20:55:08.230 → <<<stack<<<
20:55:08.264 →
20:55:08.264 → ets Jan  8 2013,rst cause:2, boot mode:(3,6)
20:55:08.264 →
20:55:08.264 → load 0x4010f000, len 1392, room 16
20:55:08.264 → tail 0
20:55:08.264 → chksum 0xd0
20:55:08.264 → csum 0xd0
20:55:08.264 → v3d128e5c
20:55:08.264 → ~ld




Eine Exception (28)
Damit habe ich dann gegoogelt und folgendes gefunden
https://byte-style.de/2018/02/exceptions-und-fehlermeldungen-eines-esp-mikrocontroller-entschluesseln/

https://stackoverflow.com/questions/55176201/nodemcu-esp8266-exception-28-when-connecting-to-mqtt-broker

Das trifft jetzt nicht ganz genau deinen Code könnte aber etwas ähnliches sein.
Da ich deine hardware und auch keinen SQL-Server habe musst du jetzt selber mal weiter recherchieren.
Evtl. ist es nur das was in dem zweiten link zitiert wird
viele Grüße Stefan

Jetzt wird auch eine Exception-nummer ausgespuckt.

WoW, vielen Dank für deine Mühe, Stefan!

Gruß,

Lisa

So jetzt habe ich wirklich überall serial-debug-output reingepackt
Da ich keinen SQL-Server habe musste ich die Zeilen mit dem SQL-connect ausklammern, damit die codeausführung überhaupt über die setup-function hinauskommt

#include <ESP8266WiFi.h>         
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <WiFiClient.h>


//Pinbelegung für den BME280
#include <Adafruit_BME280.h>
#include <Adafruit_MLX90614.h>
#include <Wire.h>
#include <SPI.h>
#define SEALEVELPRESSURE_HPA (1013.25)
#define BME_SCL D6
#define BME_SDA D7
Adafruit_BME280 bme;


//MLX
Adafruit_MLX90614 mlx = Adafruit_MLX90614();



//Wlan und Telegram
const char* ssid = "WLANBuero";
const char* password = "xxx";

//static IP-Adresse
IPAddress ip(192,168,178,6);
IPAddress gateway(192,168,178,1);
IPAddress subnet(225,225,255,0);

//Konfiguration für die Datenbank
IPAddress server_addr(192,168,178,1);  // IP of the MySQL *server* here
char user[] = "myself";              // MySQL user login username
char* passwordDB = "MyPassw"; 
char* DB = "TestDB";

char query[128];
char temperature[10];

WiFiClient client;               
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  Serial.println("direkt vor mlx.begin();");
  mlx.begin();
  Serial.println("direkt nach mlx.begin();");

  // create MySQL cursor object
  Serial.println("direkt vor cursor = new MySQL_Cursor(&conn);");
  cursor = new MySQL_Cursor(&conn);
  Serial.println("direkt nach cursor = new MySQL_Cursor(&conn);");
  Serial.println("DB - Connecting...");
/* 
   while (conn.connect(server_addr, 3306, user, passwordDB) != true) {
    delay(500);
    Serial.print ( "." );
  }
*/ 

}

void saveTempData() {
 
       Serial.print("Sky-Temp: ");
       Serial.println(mlx.readObjectTempC());
       Serial.print("Temp: ");
       Serial.println("direkt vor Serial.println(bme.readTemperature());");
       Serial.println(bme.readTemperature());
       Serial.println("direkt nach Serial.println(bme.readTemperature());");
       //dtostrf(mlx.readObjectTempC(), 2, 2, temperature);
       sprintf(query, "INSERT INTO Wetterdaten.wetterwerte (Himmelstemperatur) VALUES (%f)",mlx.readObjectTempC());
       Serial.println("direkt vor cursor->execute(query);");
       cursor->execute(query);
       Serial.println("direkt nach cursor->execute(query);");
       delete cursor;
       Serial.println("direkt nach delete cursor;");
       conn.close();
       Serial.println("direkt nach conn.close();");
       delay(2000); 
}

void loop() {
  Serial.println("loop start");
  delay(2000);
  Serial.println("loop nach delay(2000)");

  saveTempData();
  Serial.println("direkt nach saveTempData();");
}

Die letzte Debug-Ausgabe ist vor der Zeile

Serial.println(bme.readTemperature());

dann kommt der crash

kann es sein das das BME-objekt auch erst mal einen Aufruf
bme.begin oder bme.start oder so etwas braucht?

Ich kenne mich mit SQL überhaupt nicht aus aber für das Object cursor delete aufrufen

delete cursor;

ohne je wieder irgendetwas in der art wie "create" aufzurufen kommt mir komisch vor

und wie Tommy schon angemerkt hat

conn.close();

aufzurufen ohne wieder zu öffnen ist auch eine potentielle Ursache für den crash

viele Grüße Stefan

Guten Morgen zusammmen,

vielen Dank für eure Hilfe nun klappt alles einwandfrei.

Gruß,

Lisa

Hallo Lisa,

jetzt habe ich noch eine bitte: Kannst du noch schreiben an was genau es denn gelegen hat?
bme.begin() eingefügt oder hast du noch mehr geändert?

Am besten den funktioniererenden Sketch (ohne SSID und PW) noch mal als attachement posten.
Dann können andere deinen Sketch als Vorlage benutzen. Das ist einer der Zwecke dieses Forums

viele Grüße Stefan

Eine Exception (28)
Damit habe ich dann gegoogelt und folgendes gefunden

Wäre es nicht viel sinnvoller sich den "ESP Exception Decoder" zu fangen und den darauf los zu lassen, als Google?
Denn der Decoder kennt deinen Code. Google nicht.

StefanL38:
Hallo Lisa,

jetzt habe ich noch eine bitte: Kannst du noch schreiben an was genau es denn gelegen hat?
bme.begin() eingefügt oder hast du noch mehr geändert?

Am besten den funktioniererenden Sketch (ohne SSID und PW) noch mal als attachement posten.
Dann können andere deinen Sketch als Vorlage benutzen. Das ist einer der Zwecke dieses Forums

viele Grüße Stefan

Morgen Stefan,

ich habe gesehen durch deinen Post, dass ich den Bme nicht angesprochen habe,deswegen habe ich noch 'bme.begin()' hinzugefügt.

Gruß,

Lisa