Hieromon / AutoConnect

An Arduino library for ESP8266/ESP32 WLAN configuration at runtime with the Web interface
https://hieromon.github.io/AutoConnect/
MIT License
911 stars 190 forks source link

Startup without network connection #569

Closed Tipmanfrank closed 1 year ago

Tipmanfrank commented 1 year ago

Discussed in https://github.com/Hieromon/AutoConnect/discussions/568

Originally posted by **Tipmanfrank** January 25, 2023 I have below code. When it comes to line 150 code stops until I have connected to a network. The rest of my Serial.print "OK" is not shown. How can I change code, so I can startup without an internet connection? I must be able to start the ESP32 with and without network connection. Code: //After first load Båtomat must connect to Internet to have eeprom updated. // INPUT // I15 - D15 start stand alone // I4 - D4 start homepage data // I17 - TX2 // OUTPUT // O12 - D12 horn (relay) // O27 - D27 device is on and ready after setup (red) // O25 - D25 stand alone running (green) // O32 - D32 kapsejlads data running (blue) // når den ikke kører, så skal den hver 5 s hente Kap data, dette sikrer at data altid er opdateret. #include // Save stand alone settings in eeprom #include // Replace with WiFi.h for ESP32 #include // Replace with WebServer.h for ESP32 #include // For AutoConnect Wifi #include // For NTP time #include // For reading JSON data // For display #include #include #include // DISPLAY #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), ... #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // DISPLAY int x, minX; IPAddress ip; // OUTPUTS int HORN = 12; // Output for horn int LED_ON = 27; // Output for LED, device is on int LED_AUTO_ALONE = 25; // Output for LED, program in stand alone int LED_AUTO_DATA = 32; // Output for LED, program running homepage data // INPUTS int START_ALONE = 15; // Input to start stand alone int START_DATA = 16; // Input to start with homepage data int START_TEST = 18; // Input to start with homepage data int BUTTON_START_ALONE = LOW; int BUTTON_START_DATA = LOW; int BUTTON_START_TEST = LOW; //EEPROM #define EEPROM_SIZE 3 //3 values can be saved i eeprom // SETABLE VARIABLES FROM WEB int KLUBID = 13; //int ALONE_BETWEEN_START = 5; //int ALONE_NUMBER_OF_STARTS = 10; //int ALONE_STARTTIME = 8; int HORN_SHORTTIME = 1000; int HORN_LONGTIME = 3000; int DATA_BETWEEN_START = 5; int DATA_NUMBER_OF_STARTS = 10; int DATA_STARTTIME = 8; // CONST TO RUN PROGRAM int HORN_STARTUPTIME = 50; // Horn time during startup int BLINKTIME = 500; // Time for blinking int STARTDELAY = 0; // int BETWEEN_START_DELAY = 0; int STARTNUM = 0; int FIVEMIN = 0; // Time elapsed by 5 min int FOURMIN = 1 * 60 * 1000; // Time elapsed by 4 min int ONEMIN = 4 * 60 * 1000; // Time elapsed by 1 min int ZEROMIN = 5 * 60 * 1000; // Time elapsed by start // AUTOCONNECT WebServer Server; // Replace with WebServer for ESP32 AutoConnect Portal(Server); AutoConnectConfig Config; // Webside fra ESP void rootPage() { char content[] = "Kapsejlads.nu - HORN"; Server.send(200, "text/plain", content); } // PRINT NTP TIME void printLocalTime() { struct tm timeinfo; // skriv tiden til timeinfo som tidskode if (!getLocalTime(&timeinfo)) // kontroller om tid er modtaget { Serial.println("Failed to obtain time"); return; } Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); // skriv tid til monitor } // SET TIMEZONE void setTimezone(String timezone) { Serial.printf(" Setting Timezone to %s\n", timezone.c_str()); // skriv til monitor setenv("TZ", timezone.c_str(), 1); // Now adjust the TZ. Clock settings are adjusted to show the new local time. Indstil til CPH tzset(); // indstil tidszonen } // GET NTP TIME FROM EUROPE void initTime(String timezone) { struct tm timeinfo; // write time to "timeinfo" Serial.println("Setting up time"); configTime(0, 0, "europe.pool.ntp.org"); // First connect to NTP server, with 0 TZ offset. Ingen tidszone eller sommertidskorrektion if (!getLocalTime(&timeinfo)) // If can't get NTP time { Serial.println(" Failed to obtain time"); return; } Serial.println(" Got the time from NTP"); // NTP has been received // Now we can set the real timezone setTimezone(timezone); // Set timezone } void setup() { Serial.begin(115200); Serial.println("SETUP START"); // Input Output pinMode(START_ALONE, INPUT); pinMode(START_DATA, INPUT); pinMode(START_TEST, INPUT); pinMode(HORN, OUTPUT); pinMode(LED_ON, OUTPUT); pinMode(LED_AUTO_ALONE, OUTPUT); pinMode(LED_AUTO_DATA, OUTPUT); Serial.println("I/O OK"); // AUTOCONNECT Config.apid = "Kapsejlads-horn"; Config.psk = "Kapsejlads.nu"; Portal.config(Config); Serial.println("AUTO CONNECT OK"); // SHOW AUTOCONNECT SCREEN Server.on("/", rootPage); if (Portal.begin()) { Serial.println("WiFi connected: " + WiFi.localIP().toString()); } Serial.println("ROOTPAGE OK"); delay(1000); // Wait 1 s until wifi is ready if (WiFi.status() == WL_CONNECTED) { // GET NTP TIME initTime("CET-1CEST,M3.5.0,M10.5.0/3"); // Get time for Copenhagen, https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv Serial.print("NTP OK"); // SET SERVER NAME AND FILE String serverName = "https://kapsejlads.nu/hide-horn-esp.php"; Serial.print("SERVERNAME OK"); // CONNECT TO KAPSEJLADS HOMEPAGE WiFiClientSecure client; // Use https HTTPClient http; client.setInsecure(); // Get data without certificate Serial.print("KAPSEJLADS CONNECT OK"); /* String serverPath = serverName + "?klubid=13"; //Set server and request data Serial.println(serverPath); //Print server path //GET CLUB NAME http.begin(client, serverPath.c_str()); //Begin request int httpResponseCode = http.GET(); //Get data if (httpResponseCode>0) { //If http runs OK Serial.print("HTTP Response code: "); //Print http code Serial.println(httpResponseCode); String payload1 = http.getString(); //Read http response Serial.println(payload1); //Print http response } else { Serial.print("Error code: "); //Else print http error code Serial.println(httpResponseCode); } //GET HORN SETTINGS STRING serverPath = serverName + "?klubid=13&hornset=J"; //Set server and request data Serial.println(serverPath); //Print server path http.begin(client, serverPath.c_str()); //Begin request httpResponseCode = http.GET(); //Get data if (httpResponseCode>0) { //If http runs OK Serial.print("HTTP Response code: "); //Print http code Serial.println(httpResponseCode); String payload2 = http.getString(); //Read http response Serial.println(payload2); //Print http response } else { Serial.print("Error code: "); //Else print http error code Serial.println(httpResponseCode); } // Free resources http.end(); //End http request //GET CLUB NAME AND HORN SETTINGS String serverPath3 = serverName + "?klubid=13"; //Set server and request data String serverPath4 = serverName + "?klubid=13&hornset=J"; //Set server and request data http.begin(client, serverPath3.c_str()); //Begin request httpResponseCode = http.GET(); //Get data if (httpResponseCode>0) { //If http runs OK String CLUBNAME = http.getString(); //Read http response Serial.println(CLUBNAME); //Print http response http.begin(client, serverPath4.c_str()); //Begin request String payload4= http.getString(); //Read http response Serial.println(payload4); //Print http response } http.end(); //End http request */ // GET HORN_SETTINGS DATA FORMATTED AS JSON String serverPath5 = serverName + "?klubid=13&hornset=J&json=J"; // Set server and request data Serial.println(serverPath5); http.begin(client, serverPath5.c_str()); // Begin request int httpResponseCode = http.GET(); // Get data if (httpResponseCode > 0) { // If http runs OK Serial.print("JSON HTTP Response code: "); // Print http code Serial.println(httpResponseCode); String payload5 = http.getString(); // Read http response Serial.println(payload5); // Print http response //https://arduinojson.org/ --> Assistent menu, to generate json code without nested elements //StaticJsonDocument<512> doc; // Define statid JSON DynamicJsonDocument doc(2048); // Define dynamic JSON DeserializationError error = deserializeJson(doc, payload5); if (error) { Serial.print("deserializeJson() failed: "); Serial.println(error.c_str()); return; } JsonArray nested = doc.as(); String KLUBID1 = nested[0][F("KLUBID")].as(); String KLUBID2 = nested[1][F("KLUBID")].as(); int KLUBID3 = KLUBID2.toInt(); String TIDMLSTART1 = nested[0][F("TIDMLSTART")].as(); String TIDMLSTART2 = nested[1][F("TIDMLSTART")].as(); Serial.println(KLUBID1); Serial.println(KLUBID2); Serial.println(KLUBID3); Serial.println(TIDMLSTART1); Serial.println(TIDMLSTART2); int i = 0; int arrayLength = doc.size(); Serial.print(arrayLength); while (i < arrayLength) { String KLUBID[i] = nested[i][F("KLUBID")].as(); Serial.print(KLUBID[i]); i++; } //GET HORN SETTING FROM WEB Serial.println("HORN SETTINGS OK"); //SAVE HORNSETTINGS TO EEPROM //UDSKIFT VÆRDIER MED VARIABLE EEPROM.begin(EEPROM_SIZE); EEPROM.write(0, 5); //Position 0 = 5 min between start EEPROM.write(1, 10); //Position 1 = 10 starts EEPROM.write(2, 8); //Position 2 = activate 8 min before start EEPROM.commit(); Serial.println("EEPROM WRITTEN OK"); } else { Serial.print("Error code: "); // Else print http error code Serial.println(httpResponseCode); } } else { Serial.println("WiFi Disconnected"); } //READ EEPROM DATA EEPROM.begin(EEPROM_SIZE); int ALONE_BETWEEN_START = EEPROM.read(0); int ALONE_NUMBER_OF_STARTS = EEPROM.read(1); int ALONE_STARTTIME = EEPROM.read(2); Serial.println("ALONE_BETWEEN_START_EPROM= " + String(ALONE_BETWEEN_START)); Serial.println("ALONE_NUMBER_OF_STARTS_EPROM= " + String(ALONE_NUMBER_OF_STARTS)); Serial.println("ALONE_STARTTIME_EPROM= " + String(ALONE_STARTTIME)); Serial.println(); Serial.println("EEPROM READ OK"); //DISPLAY DATA // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); // delay(2000); // Pause for 2 seconds display.setTextSize(1); // font størrelse display.setTextColor(WHITE); // skrift farve display.setTextWrap(false); // skift ikke linje display.clearDisplay(); // ryd display display.setCursor(0, 10); // start position display.print("Kapsejlads.nu"); // sæt tekst display.setCursor(0, 20); // ny position display.print("by Frank Larsen"); // sæt tekst display.display(); // skriv til display x = display.width(); // sæt x = display bredde. Serial.println("DISPLAY OK"); } void loop() { // Show ESP homepage //Portal.handleClient(); // Get local time from ESP struct tm timeinfo; getLocalTime(&timeinfo); // Read input BUTTON_START_ALONE = digitalRead(START_ALONE); BUTTON_START_DATA = digitalRead(START_DATA); BUTTON_START_TEST = digitalRead(START_TEST); // Serial.print(BUTTON_START_ALONE); // Serial.print(BUTTON_START_DATA); // Serial.println(BUTTON_START_TEST); // display rolling text char message[] = "Dette er min tekst"; // Text // minX=-12*strlen(message); //Calculate length of text string minX = -12 * 25; // Set string length to fixed size. display.setTextSize(2); // Font size. Max is 3 display.clearDisplay(); // Clear the display display.setCursor(x, 10); // Set cursor in position display.print(WiFi.localIP().toString() + " - "); // Put IP to display display.print(&timeinfo, "%H:%M:%S"); // Put time to display // display.print(message); //Display text display.display(); // Show in display x = x - 1; // Move on display if (x < minX) { x = display.width(); } // Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); //Print time }
Hieromon commented 1 year ago

It is multi post.