мягкий сброс wdt и ошибка исключения в коде в arduino ide - PullRequest
0 голосов
/ 17 мая 2019

Я выполняю код, и все значения, которые я получаю, верны, и все идет хорошо.Но проблема в «мягкой перезагрузке wdt».После выполнения этого кода в течение 5 минут, последовательный монитор показывает эту ошибку, и он сбрасывает nodemcu, и вся часть кодирования запускается снова.Я хочу полностью удалить эту ошибку.Вы можете увидеть это на картинке ниже: https://ibb.co/wL9TCc9

Мой код arduino ide:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#include <DNSServer.h>
#include <HTTPSRedirect.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>

const char WiFiPassword[] = "12345678";
const char AP_NameChar[] = "Nodemcu2" ;
const char* ssid;  // Enter SSID here
const char* password;  //Enter Password here
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE, 30);
const int ppm_sensor = A0; //A0
int ppmValue;
static const int RXPin = 2, TXPin = 0;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
double Tiny_latitude;
double Tiny_longitude;
int saav;
SoftwareSerial s(D6,D5);
ESP8266WebServer server1(80);
WiFiServer server(80);
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char* host = "iotyui.000webhostapp.com"; 
String url;
const char* host1 = "script.google.com";
const char* googleRedirHost = "script.googleusercontent.com";
const int httpsPort =  443;
HTTPSRedirect client1(httpsPort);
String url1 = "/macros/s/AKfycbx0Y6TsqX042Hg0oYt-YZcGvzuTod3nSvUv4gqSSxyd80Gg67_1/exec?";
const char* fingerprint = "F0 5C 74 77 3F 6B 25 D7 3B 66 4D 43 2F 7E BC 5B E9 28 86 AD";
const int dataPostDelay = 2000;
float h,t,f,hi,hiC,ab,abc;
String Argument_Name, Clients_Response, Clients_Response1;
int button = 16;
int d=0,i,z;
char ss2[20];
char ss1[20];
void setup() {
lcd.begin(16,2);
lcd.init();
lcd.backlight();
Serial.begin(9600);
EEPROM.begin(512);
dht.begin();
pinMode(ppm_sensor,INPUT); 
ss.begin(GPSBaud);
s.begin(9600);
Wire.begin(D2, D1);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("For AP mode");
delay(4000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Press button for");
lcd.setCursor(1,1);
lcd.print("3 seconds");
Serial.println("wait for 3 seconds");
delay(3000);
Serial.println("waited");
pinMode(button, INPUT);
d= digitalRead(button);
if(d==LOW) {
for(i=0;i<4;i++)
{
z=1000;
delay(z);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("button pressed");
Serial.println("Connecting to ");
Serial.println(AP_NameChar);
boolean conn = WiFi.softAP(AP_NameChar, WiFiPassword);
Serial.println(WiFi.softAPIP());
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connect to");
lcd.setCursor(1,1);
lcd.print(AP_NameChar);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(WiFi.softAPIP());
delay(4000);
server1.on("/", handle_OnConnect);
server1.onNotFound(handle_NotFound);
server1.on("/result", ShowClientResponse);
server1.begin();
server.begin();
server1.handleClient();
}
else{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("AP mode not ");
  lcd.setCursor(3,1);
  lcd.print("selected");
  delay(4000);
int fr=(int)EEPROM.read(50);
for(int b=20; b<20+fr; b++){
//Serial.write(EEPROM.read(b));
ss2[b-20] = (char)EEPROM.read(b);
}
String drh(ss2);
ssid=drh.c_str();
Serial.println(ssid);
int from1=(int)EEPROM.read(51);
for(int e=0; e<from1; e++){
//Serial.write(EEPROM.read(e));
ss1[e] = (char)EEPROM.read(e);
}
String drh1(ss1);
password=drh1.c_str();
Serial.println(password);

Serial.println("Connecting to ");
Serial.println(ssid);
net12(); 
Serial.println(WiFi.localIP()); 
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connecting to...");
delay(5000);
//lcd.clear();
lcd.setCursor(1,1);
lcd.print(ssid);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(WiFi.localIP());
delay(4000);
}
sheets();
}

void handle_OnConnect() 
{
server1.send(200, "text/html", SendHTML(ssid, password)); 
}
void handle_NotFound()
{
server1.send(404, "text/html", "Not Found");
}
String SendHTML(const char* ssid,const char* password)
{
String ptr = "<!DOCTYPE html> <html>\n";
ptr += "<head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n";
ptr += "<style> body {font-family: Arial, Helvetica, sans-serif;}\n";
ptr += "form {border: 3px solid #f1f1f1;}\n";
ptr += "input[type=text], input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; }\n";
ptr += "button { background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; }\n";
ptr += "button:hover { opacity: 0.8; }\n";
ptr += ".container { padding: 16px; } span.psw { float: right; padding-top: 16px; } }\n";
ptr += "</style>\n";
ptr += "</head>\n";
ptr += "<body> \n";
String IPaddress = WiFi.softAPIP().toString();
ptr += "<h2>WiFi Login Page</h2>\n";
ptr += "<form action='http://"+IPaddress+"' method='POST'>\n";
ptr += "SSID: <input type='text' name='user_input'><br>\n";
ptr += "Password: <input type='text' name='user_input1'><br>\n";
ptr += "<button onclick=\"myFunction()\" type=\"submit\" id=\"mySubmit\" value=\"Submit\" >Submit</button>\n";
ptr += "</form>\n";
ptr += "<p id=\"demo\"></p>\n";
ptr += "<script>\n";
ptr += "function myFunction() { \n";
ptr += "alert(\"Saved successfully!\")}\n";
ptr += "</script>\n";
ptr += "</body>\n";
ptr += "</html>\n";
server1.send(200, "text/html", ptr); // Send a response to the client asking for input
if (server1.args() > 0 ) { // Arguments were received
for ( uint8_t i = 0; i < server1.args(); i++ ) {
Serial.print(server1.argName(i)); // Display the argument
Argument_Name = server1.argName(i);
if (server1.argName(i) == "user_input") {
Serial.print(" ssid was: ");
Clients_Response = server1.arg(i);
ssid = Clients_Response.c_str();
Serial.println(ssid);

for ( uint8_t j = 0; j < server1.args(); j++ ) {
Serial.print(server1.argName(j)); // Display the argument
Argument_Name = server1.argName(j);
if (server1.argName(j) == "user_input1") {
Serial.print(" password is: ");
Clients_Response1= server1.arg(j);
password = Clients_Response1.c_str();
Serial.println(password);

Serial.println("Connecting to ");
Serial.println(Clients_Response);
net12(); 
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0,0);
lcd.print("New SSID=");
lcd.setCursor(1,1);
lcd.print(ssid);
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connecting to...");
delay(5000);
lcd.setCursor(0,1);
lcd.print(ssid);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(WiFi.localIP());

EEPROM.write(50, Clients_Response.length());
EEPROM.commit();
int ds=20+Clients_Response.length();
Serial.println(ds);
for(int b=20; b<ds; b++){
EEPROM.write(b, Clients_Response[b-20]);
//EEPROM.write(33,Clients_Response);
EEPROM.commit();
}
EEPROM.write(51, Clients_Response1.length());
EEPROM.commit();
for(int e=0; e<Clients_Response1.length(); e++){
EEPROM.write(e, Clients_Response1[e]);
Serial.write(EEPROM.read(e));
//EEPROM.write(33,Clients_Response);
EEPROM.commit();
}

return ptr;
}
}
}
}
}
}
void ShowClientResponse() {
String ptr;
ptr += "<html>";
ptr += "<head>";
ptr += "<style>";
ptr += "body { background-color: #E6E6FA; font-family: Arial, Helvetica, Sans-Serif; Color: blue;}";
ptr += "</style>";
ptr += "</head>";
ptr += "<body>";
ptr += "<h1><br>ESP8266 server1 - This was what the client sent</h1>";
ptr += "<p>ssid was: " + Clients_Response + "</p>";
ptr += "<p>Its password was: " + Clients_Response1 + "</p>";
ptr += "</body>";
ptr += "</html>";
server1.send(200, "text/html", ptr);
}

void postData(String tag, float data1, float data2, float data3, float data4, float data5, float data6, float data7)
{
if (!client1.connected()){
Serial.println("Connecting to client again..."); 
client1.connect(host1, httpsPort);
}
String urlFinal = url1 + "tag=" + tag + "&latitude=" + String(data1) + "&longitude=" + String(data2) + "&humidity=" + String(data3) + "&temperature=" + String(data4) + "&heatindex=" + String(data5) + "&co2ppm=" + String(data6) + "&CO=" + String(data7);
client1.printRedir(urlFinal, host1, googleRedirHost);

}
void sheets() {
Serial.print(String("Connecting to "));
Serial.println(host1);

bool flag = false;
for (int i=0; i<5; i++){
int retval = client1.connect(host1, httpsPort);
if (retval == 1) {
flag = true;
break;
}
else
Serial.println("Connection failed. Retrying...");delay(5000);

Serial.println("Connection Status: " + String(client1.connected()));
Serial.flush();
if (!flag){
Serial.print("Could not connect to server: ");
Serial.println(host1);
Serial.println("Exiting...");
Serial.flush();
return;
}
if (client1.verify(fingerprint, host1)) {
Serial.println("Certificate match.");
} else {
Serial.println("Certificate mis-match");
}   
}
}
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do 
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
static void printFloat(float val, bool valid, int len, int prec)
{
if (!valid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartDelay(0);
}

static void printInt(unsigned long val, bool valid, int len)
{
char sz[32] = "*******";
if (valid)
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0) 
sz[len-1] = ' ';
Serial.print(sz);
smartDelay(0);
}
static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
if (!d.isValid())
{
Serial.print(F("********** "));
}
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
Serial.print(sz);
}

if (!t.isValid())
{
Serial.print(F("******** "));
}
else
{
char sz[32];
sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
Serial.print(sz);
}
printInt(d.age(), d.isValid(), 5);
smartDelay(0);
}
static void printStr(const char *str, int len)
{
int slen = strlen(str);
for(int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
smartDelay(0);
}
void loop() 
{
server1.handleClient();
if(WiFi.status()!=WL_CONNECTED)
{

lcd.clear();
lcd.setCursor(0,0);
lcd.print("No netfiwiwork");
delay(1000);
yield();
}
while(WiFi.status()==WL_CONNECTED)
{

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connected");

dhtsensor();
s.write("s");
if (s.available()>0)
{
mq7sensor();
}
gpsmodule();
mq135sensor();
database12();
postData("SensorValue", Tiny_latitude, Tiny_longitude, h, t, hiC, ppmValue, saav);
delay(dataPostDelay);
yield();
}
}
void dhtsensor() {
h = dht.readHumidity();
t = dht.readTemperature();
f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
hi = dht.computeHeatIndex(f, h);
ab=hi-32;
abc=ab*5;
hiC=abc/9;
Serial.print("Humidity= ");
Serial.println(h);
Serial.print("Temperature= ");
Serial.println(t);
Serial.print("Heat Index= ");
Serial.println(hiC);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Humidity=");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temp=");
lcd.print(t);
lcd.print("*C");

delay(5000);
lcd.clear();

lcd.setCursor(0,0);
lcd.print("HeatInd=");
lcd.print(hiC);
lcd.print("*C");
yield();
}
void mq135sensor() {
ppmValue = analogRead(ppm_sensor);
Serial.print("CO2 level= ");
Serial.print(ppmValue);
Serial.println("ppm");
lcd.setCursor(0,0);
lcd.print("CO2=");
lcd.print(ppmValue);
lcd.print("ppm");
//delay(5000);
}
void gpsmodule() {
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
double Tiny_latitude = (gps.location.lat());
printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
double Tiny_longitude = (gps.location.lng());
//smartDelay(1000);
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("No GPS data received: check wiring"));
Serial.print(F("Latitude:= "));
Serial.println();
Serial.print("Tiny lat:");
Serial.print(Tiny_latitude);   
Serial.println();
Serial.print(F("Longitude:= "));
Serial.println();
Serial.print("Tiny lon:");
Serial.println(Tiny_longitude);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lat.=");
lcd.print(Tiny_latitude);
lcd.print("*C");
lcd.setCursor(0,1);
lcd.print("Lng.=");
lcd.print(Tiny_longitude);
lcd.print("*C");

delay(5000);
lcd.clear();
}
void mq7sensor() {
s.write("s");
if (s.available()>0)
{
saav=s.read();
Serial.print("CO=");
Serial.print(saav);
Serial.println("ppm");
} 
lcd.setCursor(0,1);
lcd.print("CO=");
lcd.print(saav);
lcd.print("ppm");
delay(5000);
}
void database12() {
Serial.print("connecting to "); 
Serial.print(host); 
Serial.print(':'); //Serial.println(port);
WiFiClient client; 

const int httpPort=80;
if (!client.connect(host, httpPort)) { 
  Serial.println("connection failed"); 
  return;
}
  url="/main12.php?"; 
  url+="id1=";
  url += h; 
  url +="&id2=";
  url += t;
  url +="&id3=";
  url += hiC;
  url +="&id4=";
  url += ppmValue;
  url +="&id5=";
  url += saav;
  url +="&id6=";
  url += Tiny_latitude;
  url +="&id7=";
  url += Tiny_longitude;
  client.print(String("GET ")+url+" HTTP/1.1\r\n"+"HOST: "+host+"\r\n\r\n");
//wait for data to be available
unsigned long timeout = millis(); 
while (client.available() == 0) {

if (millis() - timeout > 5000) { 
  Serial.println(">>> Client Timeout !"); 
  client.stop();
return;
}
}
//Read all the lines of the reply from server and print them to Serial 
Serial.println("receiving from remote server");
//not testing 'client.connected()' since we do not need to send data here 
if(client.available()) {
  Serial.print("Requesting URl: "); 
Serial.println(url);

String line = client.readStringUntil('\r');
//delay(2000); 
}
}
void net12()
{
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: ");   
}

Этот код в основном собирает данные датчика, отправляет их на листы и базу данных Google и отображает ихна жк.Может кто-нибудь, пожалуйста, помогите мне устранить эту ошибку?Будем благодарны за любую помощь.

...