The error I get in the console: ets Jan 8 2013,rst cause:4, boot mode:(3,2)
Followed by standart load xyz stuff and some cryptic characters.
//sdm live page example by reaper7
#define READSDMEVERY 2000 //read sdm every 2000ms
#define NBREG 5 //number of sdm registers to read
#define USE_STATIC_IP
/* WEMOS D1 Mini
______________________________
| L T L T L T L T L T L T |
| |
RST| 1|TX HSer
A0| 3|RX HSer
D0|16 5|D1
D5|14 4|D2
D6|12 10kPUP_0|D3
RX SSer/HSer swap D7|13 LED_10kPUP_2|D4
TX SSer/HSer swap D8|15 |GND
3V3|__ |5V
| |
|___________________________|
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESPAsyncTCP.h> //https://github.com/me-no-dev/ESPAsyncTCP
#include <ESPAsyncWebServer.h> //https://github.com/me-no-dev/ESPAsyncWebServer
#include <SDM.h> //https://github.com/reaper7/SDM_Energy_Meter
#include "index_page.h"
#if !defined ( USE_HARDWARESERIAL )
#error "This example works with Hardware Serial on esp8266, please uncomment #define USE_HARDWARESERIAL in SDM_Config_User.h"
#endif
//------------------------------------------------------------------------------
AsyncWebServer server(80);
SDM sdm(Serial, 2400, 7, SERIAL_8N1, false); //HARDWARE SERIAL
//------------------------------------------------------------------------------
String devicename = "PWRMETER";
#if defined ( USE_STATIC_IP )
IPAddress ip(192, 168, 178, 150);
IPAddress gateway(192, 168, 178, 1);
IPAddress subnet(255, 255, 255, 0);
#endif
const char* wifi_ssid = "WLan-Kabel";
const char* wifi_password = "xxxxxxxx";
String lastresetreason = "";
unsigned long readtime;
//------------------------------------------------------------------------------
typedef volatile struct {
volatile float regvalarr;
const uint16_t regarr;
} sdm_struct;
volatile sdm_struct sdmarr[NBREG] = {
{0.00, SDM120C_VOLTAGE}, //V
{0.00, SDM120C_CURRENT}, //A
{0.00, SDM120C_POWER}, //W
{0.00, SDM120C_POWER_FACTOR}, //PF
{0.00, SDM120C_FREQUENCY}, //Hz
};
//------------------------------------------------------------------------------
void xmlrequest(AsyncWebServerRequest *request) {
String XML = F("<?xml version='1.0'?><xml>");
for (int i = 0; i < NBREG; i++) {
XML += "<response" + (String)i + ">";
XML += String(sdmarr[i].regvalarr,2);
XML += "</response" + (String)i + ">";
ESP.wdtFeed();
}
ESP.wdtFeed();
XML += F("<freeh>");
XML += String(ESP.getFreeHeap());
XML += F("</freeh>");
XML += F("<rst>");
XML += lastresetreason;
XML += F("</rst>");
XML += F("</xml>");
ESP.wdtFeed();
request->send(200, "text/xml", XML);
}
//------------------------------------------------------------------------------
void indexrequest(AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_page);
ESP.wdtFeed();
}
//------------------------------------------------------------------------------
void ledOn() {
digitalWrite(LED_BUILTIN, LOW);
}
//------------------------------------------------------------------------------
void ledOff() {
digitalWrite(LED_BUILTIN, HIGH);
}
//------------------------------------------------------------------------------
void ledSwap() {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
//------------------------------------------------------------------------------
void otaInit() {
ArduinoOTA.setHostname(devicename.c_str());
ESP.wdtFeed();
ArduinoOTA.onStart([]() {
ledOn();
});
ESP.wdtFeed();
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
ledSwap();
});
ESP.wdtFeed();
ArduinoOTA.onEnd([]() {
ledOff();
});
ESP.wdtFeed();
ArduinoOTA.onError([](ota_error_t error) {
ledOff();
});
ESP.wdtFeed();
ArduinoOTA.begin();
ESP.wdtFeed();
}
//------------------------------------------------------------------------------
void serverInit() {
server.on("/", HTTP_GET, indexrequest);
ESP.wdtFeed();
server.on("/xml", HTTP_PUT, xmlrequest);
ESP.wdtFeed();
server.onNotFound([](AsyncWebServerRequest *request){
request->send(404);
ESP.wdtFeed();
});
server.begin();
ESP.wdtFeed();
}
//------------------------------------------------------------------------------
static void wifiInit() {
WiFi.persistent(false); // Do not write new connections to FLASH
ESP.wdtFeed();
WiFi.mode(WIFI_STA);
#if defined ( USE_STATIC_IP )
WiFi.config(ip, gateway, subnet); // Set fixed IP Address
#endif
ESP.wdtFeed();
WiFi.begin(wifi_ssid, wifi_password);
ESP.wdtFeed();
while( WiFi.status() != WL_CONNECTED ) { // Wait for WiFi connection
ledSwap();
ESP.wdtFeed();
delay(100);
}
}
//------------------------------------------------------------------------------
void sdmRead() {
float tmpval = NAN;
for (uint8_t i = 0; i < NBREG; i++) {
tmpval = sdm.readVal(sdmarr[i].regarr);
ESP.wdtFeed();
if (isnan(tmpval))
sdmarr[i].regvalarr = 0.00;
else
sdmarr[i].regvalarr = tmpval;
ESP.wdtFeed();
}
}
//------------------------------------------------------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
ledOn();
ESP.wdtFeed();
lastresetreason = ESP.getResetReason();
ESP.wdtFeed();
otaInit();
ESP.wdtFeed();
serverInit();
ESP.wdtFeed();
sdm.begin();
ESP.wdtFeed();
readtime = millis();
ESP.wdtFeed();
ledOff();
}
//------------------------------------------------------------------------------
void loop() {
ArduinoOTA.handle();
ESP.wdtFeed();
if (millis() - readtime >= READSDMEVERY) {
ESP.wdtFeed();
sdmRead();
readtime = millis();
}
ESP.wdtFeed();
}