combie:
Wenn der WDT zuschlägt siehst du das bei den BootMeldungen.
Da wird dir der ResetGrund mitgeteilt.
Er hat aber nicht resetet, sondern ist 1,5 h in der Messroutine hängen geblieben (LED an und keine Sätze an DB geschickt) bis ich ihm kurz den Strom geklaut habe.
Hier der Sketch:
// zyperngras
/* Überwachung Zyperngras Belegung NodeMCU
GPIO4 (A0) Analog in Wasservorrat
GPIO15 (D8) Spannung für Wasservorrat
GPIO14 (D5) Spannung für Feuchte
GPIO13 (D7) Input Feuchte (Interrupt Frequenzmessung)
GPIO12 (D6) (LED)
GPIO4 (D2) I2C SDA
GPIO5 (D1) I2C SCL
*/
#include <Wire.h>
#include <SHT21.h>
#include <ESP8266WiFi.h>
#include <Hash.h>
#include <MySQL.h>
#include "settings.h"
//#define debug
#ifdef debug
#define sbeg Serial.begin(115200);
#define sp Serial.print
#define spn Serial.println
#else
#define sp
#define spn
#define sbeg
#endif
const byte LED = D6;
const uint32_t MESSINTERVALL = 15 * 60 * 1000; // 15 Minuten
byte isBoot = 1;
SHT21 SHT21;
Connector my_conn;
float luftfeuchte, temperatur, vorrat, feuchte;
int pumpe, valCnt;
void setup() {
char puffer[40];
int erg;
digitalWrite(LED,LOW);
pinMode(LED,OUTPUT);
sbeg(115200);
spn("\nStart");
SHT21.begin();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
sp(".");
}
spn("\nConnected to Wifi. Connecting to database . . .");
if (my_conn.mysql_connect(dbhost, 3306, user, dbpassword)) {
spn("DB-Connection ok.");
delay(500);
}
else
spn("DB-Connection failed.");
strcpy(puffer,"use ");
strcat(puffer,db);
erg = my_conn.cmd_query(puffer);
sp("Ergebnis: "); spn(erg);
spn(puffer);
}
///////////////////// DB-Hilfefunktionen ////////////////////////////
// fügt Komma vor Value ein
void addSeperator(char *buf) {
if (valCnt != 0) {
strcat(buf,",");
}
valCnt++;
}
void appendFloatVal(char *buf, const float val, int nachkomma = 2) {
char lbuf[20];
addSeperator(buf);
// Länge 1, damit keine führenden Blank angelegt werden
dtostrf(val,1,nachkomma,lbuf);
strcat(buf,lbuf);
}
void appendIntVal(char *buf, const int val) {
char lbuf[20];
addSeperator(buf);
strcat(buf,itoa(val,lbuf,10));
}
///////////////////// Messen ///////////////////////////////////////////
void senden() {
char puffer[80];
int erg;
boolean isTimeOut;
// SQL-Statement
valCnt = 0;
strcpy(puffer, "insert into pflanze values (now(),");
appendFloatVal(puffer,feuchte);
appendFloatVal(puffer,temperatur);
appendFloatVal(puffer,luftfeuchte);
appendFloatVal(puffer,vorrat);
appendIntVal(puffer,pumpe);
appendIntVal(puffer,isBoot);
strcat(puffer,")");
spn(puffer);
erg = my_conn.cmd_query(puffer);
sp("Ergebnis: "); spn(erg);
// Wenn Verbindung weg, Neustart versuchen
isTimeOut = my_conn.isTimeout();
if (isTimeOut) ESP.restart();
}
void messen() {
static uint32_t lastMillis = -MESSINTERVALL;
uint32_t aktMillis;
boolean isTimeOut;
aktMillis = millis();
// wenn Zeit nicht rum nix tun
if (!(aktMillis - lastMillis >= MESSINTERVALL)) return;
digitalWrite(LED,HIGH);
lastMillis = aktMillis;
luftfeuchte = SHT21.getHumidity();
temperatur = SHT21.getTemperature();
sp("Humidity(%RH): ");
sp(luftfeuchte);
sp(" Temperature(C): ");
spn(temperatur);
senden();
isBoot = 0;
digitalWrite(LED,LOW);
}
void loop() {
messen();
}
Gruß Tommy