Untold Postat Septembrie 20, 2023 Autor Partajează Postat Septembrie 20, 2023 Tot nu vrea: Link spre comentariu
Bandi Szasz Postat Septembrie 21, 2023 Partajează Postat Septembrie 21, 2023 Momentan sunt plecat si n-am acces la un PC, o sa ma uit in weekend si revin cu un cod complet. Link spre comentariu
fratello Postat Septembrie 21, 2023 Partajează Postat Septembrie 21, 2023 Iti multumesc si eu anticipat. Parca m-ar interesa si pe mine acest mod de abordare ... Link spre comentariu
Untold Postat Septembrie 21, 2023 Autor Partajează Postat Septembrie 21, 2023 Acum 5 ore, Bandi Szasz a spus: Momentan sunt plecat si n-am acces la un PC, o sa ma uit in weekend si revin cu un cod complet. Multumesc frumos! Link spre comentariu
nico_2010 Postat Septembrie 21, 2023 Partajează Postat Septembrie 21, 2023 Era suficient sa scrii asta: WiFiManager wm; Inainte de " void setup()", nu cum ai scris tu: #define WiFiManager wm . Inca odata iti spun: foloseste butonul "<>" din editor pentru inserarea de cod! Link spre comentariu
Untold Postat Septembrie 22, 2023 Autor Partajează Postat Septembrie 22, 2023 (editat) Acum 12 ore, nico_2010 a spus: Era suficient sa scrii asta: WiFiManager wm; Inainte de " void setup()", nu cum ai scris tu: #define WiFiManager wm . Inca odata iti spun: foloseste butonul "<>" din editor pentru inserarea de cod! Acum 11 ore, antemir a spus: Posteaza codul sursa. // Import required libraries #include "ESP8266WiFi.h" #include "ESPAsyncWebServer.h" #include "WiFiManager.h" #include "DNSServer.h" WiFiManager wm; // Set to true to define Relay as Normally Open (NO) #define RELAY_NO true // Set number of relays #define NUM_RELAYS 6 // Assign each GPIO to a relay int relayGPIOs[NUM_RELAYS] = {5, 4, 14, 12, 13, 2}; // Replace with your network credentials const char* ssid = "********"; const char* password = "***********"; const char* PARAM_INPUT_1 = "relay"; const char* PARAM_INPUT_2 = "state"; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML><html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> html {font-family: Arial; display: inline-block; text-align: center;} h2 {font-size: 3.0rem;} p {font-size: 3.0rem;} body {max-width: 600px; margin:0px auto; padding-bottom: 25px;} .switch {position: relative; display: inline-block; width: 120px; height: 68px} .switch input {display: none} .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 34px} .slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 68px} input:checked+.slider {background-color: #2196F3} input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)} </style> </head> <body> <h2>Viorel Web Server</h2> %BUTTONPLACEHOLDER% <script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/update?relay="+element.id+"&state=1", true); } else { xhr.open("GET", "/update?relay="+element.id+"&state=0", true); } xhr.send(); }</script> </body> </html> )rawliteral"; // Replaces placeholder with button section in your web page String processor(const String& var){ //Serial.println(var); if(var == "BUTTONPLACEHOLDER"){ String buttons =""; for(int i=1; i<=NUM_RELAYS; i++){ String relayStateValue = relayState(i); buttons+= "<h4>Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"" + String(i) + "\" "+ relayStateValue +"><span class=\"slider\"></span></label>"; } return buttons; } return String(); } String relayState(int numRelay){ if(RELAY_NO){ if(digitalRead(relayGPIOs[numRelay-1])){ return ""; } else { return "checked"; } } else { if(digitalRead(relayGPIOs[numRelay-1])){ return "checked"; } else { return ""; } } return ""; } void setup(){ // Serial port for debugging purposes Serial.begin(115200); // Set all relays to off when the program starts - if set to Normally Open (NO), the relay is off when you set the relay to HIGH for(int i=1; i<=NUM_RELAYS; i++){ pinMode(relayGPIOs[i-1], OUTPUT); if(RELAY_NO){ digitalWrite(relayGPIOs[i-1], HIGH); } else{ digitalWrite(relayGPIOs[i-1], LOW); } } // Connect to Wi-Fi if (!wm.autoConnect("Viorel","password")) { Serial.println("Faild to connect to WIFI!"); } else { Serial.println(WiFi.localIP()); } // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); // Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=<inputMessage2> server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) { String inputMessage; String inputParam; String inputMessage2; String inputParam2; // GET input1 value on <ESP_IP>/update?relay=<inputMessage> if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) { inputMessage = request->getParam(PARAM_INPUT_1)->value(); inputParam = PARAM_INPUT_1; inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); inputParam2 = PARAM_INPUT_2; if(RELAY_NO){ Serial.print("NO "); digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt()); } else{ Serial.print("NC "); digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt()); } } else { inputMessage = "No message sent"; inputParam = "none"; } Serial.println(inputMessage + inputMessage2); request->send(200, "text/plain", "OK"); }); // Start server server.begin(); } void loop() { } Editat Septembrie 22, 2023 de Untold Link spre comentariu
Untold Postat Septembrie 25, 2023 Autor Partajează Postat Septembrie 25, 2023 #define ENA 14 // Enable/speed motors Right GPIO14(D5) #define ENB 12 // Enable/speed motors Left GPIO12(D6) #define IN_1 D1 // L298N in1 motors Right GPIO15(D8) #define IN_2 D2 // L298N in2 motors Right GPIO13(D7) #define IN_3 D3 // L298N in3 motors Left GPIO2(D4) #define IN_4 D4 // L298N in4 motors Left GPIO0(D3) #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> String command; //String to store app command state. int speedCar = 800; // 400 - 1023. int speed_Coeff = 3; const char* ssid = "NodeMCU Car"; ESP8266WebServer server(80); void setup() { pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN_1, OUTPUT); pinMode(IN_2, OUTPUT); pinMode(IN_3, OUTPUT); pinMode(IN_4, OUTPUT); Serial.begin(115200); // Connecting WiFi WiFi.mode(WIFI_AP); WiFi.softAP(ssid); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); // Starting WEB-server server.on ( "/", HTTP_handleRoot ); server.onNotFound ( HTTP_handleRoot ); server.begin(); } void goAhead(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar); } void goBack(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar); } void goRight(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar); } void goLeft(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar); } void goAheadRight(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar/speed_Coeff); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar); } void goAheadLeft(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar/speed_Coeff); } void goBackRight(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar/speed_Coeff); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar); } void goBackLeft(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar/speed_Coeff); } void stopRobot(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar); } void loop() { server.handleClient(); command = server.arg("State"); if (command == "F") goAhead(); else if (command == "B") goBack(); else if (command == "L") goLeft(); else if (command == "R") goRight(); else if (command == "I") goAheadRight(); else if (command == "G") goAheadLeft(); else if (command == "J") goBackRight(); else if (command == "H") goBackLeft(); else if (command == "0") speedCar = 400; else if (command == "1") speedCar = 470; else if (command == "2") speedCar = 540; else if (command == "3") speedCar = 610; else if (command == "4") speedCar = 680; else if (command == "5") speedCar = 750; else if (command == "6") speedCar = 820; else if (command == "7") speedCar = 890; else if (command == "8") speedCar = 960; else if (command == "9") speedCar = 1023; else if (command == "S") stopRobot(); } void HTTP_handleRoot(void) { if( server.hasArg("State") ){ Serial.println(server.arg("State")); } server.send ( 200, "text/html", "" ); delay(1); } Asta e bun? Ca am facut o masinuta cu nodmcu, am bagat sketch-ul asta si merge! Link spre comentariu
Untold Postat Septembrie 26, 2023 Autor Partajează Postat Septembrie 26, 2023 (editat) Se pare ca a mers, s-a compilat si apoi l-am scris in NodeMcu. Acum, mai am o nelamurire: Eu, cand am facut teste cu exemplul din IDE si a mers, cand mi-a aparut fereastra aia cu configuration, i-am dat ssid si pass de la reteaua mea wifi . Acum, cu sketch-ul actual, nu mi-a mai aparut node-ul in retele la laptop ci s-a conectat direct la wifi-ul meu. Asta inseamna ca routerul meu a retinut ip-ul node-ului si acum il conecteaza automat cand ala apare ca AP? Daca e asa, ar trebui sa incerc sa merg unde e alta retea de wifi si sa-l pornesc, teoretic ar trebui sa apara acea fereastra de configurare si eu sa-i bag ssid si pass acele retele, nu? Am luat poza asta de aici: https://www.martyncurrey.com/esp8266-and-the-arduino-ide-part-5-adding-wifimanager/ Editat Septembrie 26, 2023 de Untold Link spre comentariu
Untold Postat Septembrie 26, 2023 Autor Partajează Postat Septembrie 26, 2023 (editat) Da, acum m-am lamurit, e prima oara cand lucrez cu asa ceva. Cand am scris nodul cu exemplul din IDE, el a salvat credentialele de aici si acum se autoconecteaza. Am scris un nod nou, ce nu era folosit niciodata, si acum imi apare AP-ul lui, si anume Viorel, cum este in sketch, iar cand ii dau connect, imi apare ferastra aia cu configuration unde sa ii bag credentialele de la reteaua mea de wifi. Ceea ce inseamna ca jucarica functioneaza, drept pt care iti multumesc din suflet pentru ajutor si sunt happy ca am mai invatat ceva! Editat Septembrie 26, 2023 de Untold Link spre comentariu
Bandi Szasz Postat Septembrie 26, 2023 Partajează Postat Septembrie 26, 2023 ssid si password se salveaza in memoria lui Node, se poate pornii acea pagina de config si la cerere prin apasarea unui buton in caz ca vrei sa-l treci pe alt router din casa. Link spre comentariu
zvonacfirst Postat Ianuarie 21, 2024 Partajează Postat Ianuarie 21, 2024 (editat) Deoarece subiectul pe care il propun pentru discutie este legat tot de WiFiManager, imi permit sa folosesc acest topic pentru a posta, cu speranta ca @Untold nu se va supara. Daca este o problema am sa solicit adminului stergerea sau mutarea. Lucrez la un proiect personal pentru care am scris un cod. Proiectul este un ceas NTP cu WEMOS si cu afisarea orei si temperaturii pe un afisaj printat 3D cu leduri adresabile WS2812B, este deja functional si urmeaza a fi prezentat pe forum. Sunt incepator in programare si m-am lovit de o problema pe care nu o pot rezolva desi incerc de o saptamana sa gasesc o solutie. Un filmulet cu ceasul: https://imgur.com/aqH4R5t Ideea este urmatoarea: este eleganta configurarea wireles pentru credentialele de conectare la reteaua WiFi iar biblioteca WiFiManager ofera solutia. Dar, fiind vorba despre un ceas NTP, mai este un parametru care ar putea fi introdus in interfata de configurare: offset-ul pentru fusul orar. Offset-ul pentru ora de iarna/vara l-am rezolvat printrun switch care pune un pin al WEMOS-ului la HIGH sau LOW. Ce am facut: am pregatit un cod de test in care am adaugat in interfata oferita de WiFiManager un al treilea parametru, asa cum se poate vedea in poza urmatoare, si anume offset-ul pentru fusul orar: Urmarind afisarile din Serial Monitor, totul functioneaza bine pana la citirea offsetului stocat in EEPROM, desi cred ca de fapt problema este la scriere. *wm:AP IP address: 192.168.4.1 Conecteaza-te pentru configurarea Wi-Fi si pentru a seta fusul orar. *wm:Starting Web Portal *wm:10 networks found *wm:Connecting to NEW AP: George_ *wm:connectTimeout not set, ESP waitForConnectResult... *wm:Connect to new AP [SUCCESS] *wm:Got IP Address: *wm:192.168.01.152 Configurarile salvate! Offset scris in EEPROM: 7200 *wm:config portal exiting Read timeZoneOffset = 0.00 ********************** rlb|⸮⸮⸮rb⸮b⸮nnlnnb *wm:Connecting to SAVED AP: George_ *wm:connectTimeout not set, ESP waitForConnectResult... *wm:AutoConnect: SUCCESS *wm:STA IP Address: 192.168.01.152 Read timeZoneOffset = 0.00 ********************** Dupa cum se vede citirea EEPROM-ului returneaza o valoare nula. Aceasta este problema pentru care nu reusesc sa gasesc solutia. Citind acest topic si vazand ca initiatorul a primit ajutor pentru rezolvarea problemei pe care o intampina, sper ca si eu sa primesc suportul necesar. Nu trebuie sa-mi dati un peste, ci doar o undita cu care sa il prind. La final, daca nu voi fi in stare sa pesuiesc, voi accepta si pestele. Important este sa invat ceva. Multumesc in avans. Codul pe care l-am pregatit pentru acest exercitiu este urmatorul: #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> #include <NTPClient.h> #include <EEPROM.h> const char* WebServerName = "MyClock"; const char* WebServerPass = "********"; #define EEPROM_SIZE 512 WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); int timeZoneOffset = 0; // Offsetul implicit in secunde WiFiManagerParameter timeZoneParam("fus_orar", "Fus orar (ore):", "", 10); void configModeCallback(WiFiManager *myWiFiManager) { Serial.println("Conecteaza-te pentru configurarea Wi-Fi si pentru a seta fusul orar."); } void saveConfigCallback() { Serial.println("Configurarile salvate!"); // Verifica daca campul fusului orar este gol String timeZoneValue = timeZoneParam.getValue(); if (!timeZoneValue.isEmpty()) { timeZoneOffset = timeZoneValue.toFloat() * 3600; // Converteste offsetul din ore in secunde EEPROM.put(1, timeZoneOffset); EEPROM.commit(); Serial.print("Offset scris in EEPROM: "); Serial.println(timeZoneOffset); } } void setup() { Serial.begin(115200); EEPROM.begin(EEPROM_SIZE); // Adauga parametrii pentru WiFiManager WiFiManager wifiManager; wifiManager.setAPCallback(configModeCallback); wifiManager.setSaveConfigCallback(saveConfigCallback); wifiManager.addParameter(&timeZoneParam); // Optional, doar daca se doreste resetarea setarilor la fiecare pornire // wifiManager.resetSettings(); // Reseteaza setarile salvate anterior // Seteaza timpul de asteptare pentru conectarea in modul configurare wifiManager.setConfigPortalTimeout(180); // Incepe conectarea la WiFi // Seteaza numele retelei (SSID) si parola pentru serverul web if (!wifiManager.autoConnect(WebServerName, WebServerPass)) { Serial.println("Nu s-a putut realiza conexiunea la WiFi si nu s-a putut crea serverul web."); delay(3000); ESP.reset(); delay(5000); } // Read data from EEPROM float TimeZoneOffset; EEPROM.get(1, TimeZoneOffset); Serial.print("Read timeZoneOffset = "); Serial.println(TimeZoneOffset); Serial.print("**********************"); // Seteaza fusul orar dupa conectarea la WiFi timeZoneOffset = String(timeZoneParam.getValue()).toFloat() * 3600; timeClient.begin(); timeClient.setTimeOffset(timeZoneOffset); EEPROM.end(); } void loop() { // Actualizare timp de la serverul NTP timeClient.update(); } Editat Ianuarie 21, 2024 de zvonacfirst Link spre comentariu
Viorel A Postat Ianuarie 21, 2024 Partajează Postat Ianuarie 21, 2024 (editat) Salut! Pare incomplet setup-ul. Am adaugat si eu alti parametri si a mers fara probleme. Am plecat de la un exemplu de utilizare a bibliotecii WiFiManager(https://github.com/tzapu/WiFiManager). Atasez un exemplu utilizat de mine : void setup() { Serial.begin(115200); Serial.print(__FILE__); Serial.print(" ");Serial.println(__DATE__); // display.clear(); // Clear the display: pinMode(dstPin, INPUT_PULLUP); delay(1000); Serial.setDebugOutput(true); Serial.println("\n Starting"); WiFi.setSleepMode(WIFI_NONE_SLEEP); // disable sleep, can improve ap stability Serial.println("Error - TEST"); Serial.println("Information- - TEST"); Serial.println("[ERROR] TEST"); Serial.println("[INFORMATION] TEST"); wm.setDebugOutput(true); wm.debugPlatformInfo(); //reset settings - for testing // wm.resetSettings(); // wm.erase(); // setup some parameters WiFiManagerParameter custom_html("<p style=\"color:pink;font-weight:Bold;\">This Is Custom HTML</p>"); // only custom html WiFiManagerParameter custom_mqtt_server("server", "mqtt server", "", 40); WiFiManagerParameter custom_mqtt_port("port", "mqtt port", "", 6); WiFiManagerParameter custom_mqtt_user("mqtt_user", "mqtt user", "", 16); WiFiManagerParameter custom_mqtt_pass("mqtt_pass", "mqtt pass", "", 16); // id is invalid, cannot contain spaces WiFiManagerParameter custom_local_tz("local_tz", "Local TZ", "", 2);//,"pattern='\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}'"); // custom input attrs (ip mask) // callbacks wm.setAPCallback(configModeCallback); wm.setWebServerCallback(bindServerCallback); wm.setSaveConfigCallback(saveWifiCallback); wm.setSaveParamsCallback(saveParamCallback); wm.setPreOtaUpdateCallback(handlePreOtaUpdateCallback); // add all your parameters here wm.addParameter(&custom_html); wm.addParameter(&custom_mqtt_server); wm.addParameter(&custom_mqtt_port); wm.addParameter(&custom_mqtt_user); wm.addParameter(&custom_mqtt_pass); wm.addParameter(&custom_local_tz); // set values later if you want custom_html.setValue("test",4); custom_mqtt_server.setValue("test.ro",12); custom_mqtt_port.setValue("5883",6); custom_mqtt_user.setValue("user",8); // set custom html menu content , inside menu item "custom", see setMenu() const char* menuhtml = "<form action='/custom' method='get'><button>Custom</button></form><br/>\n"; wm.setCustomMenuHTML(menuhtml); // invert theme, dark wm.setDarkMode(true); // show scan RSSI as percentage, instead of signal stength graphic // wm.setScanDispPerc(true); std::vector<const char *> menu = {"wifi","wifinoscan","info","param","custom","close","sep","erase","update","restart","exit"}; wm.setMenu(menu); // custom menu, pass vector wm.setHostname(("WM_"+wm.getDefaultAPName()).c_str()); // wm.setHostname("WM_RANDO_1234"); if(!WMISBLOCKING){ wm.setConfigPortalBlocking(false); } //sets timeout until configuration portal gets turned off //useful to make it all retry or go to sleep in seconds wm.setConfigPortalTimeout(120); wm.setBreakAfterConfig(true); // needed to use saveWifiCallback wifiInfo(); if(!wm.autoConnect("WM_AutoConnectAP","12345678")) { Serial.println("failed to connect and hit timeout"); } else if(TEST_CP) { // start configportal always delay(1000); Serial.println("TEST_CP ENABLED"); wm.setConfigPortalTimeout(TESP_CP_TIMEOUT); wm.startConfigPortal("WM_ConnectAP","12345678"); } else { //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); } wifiInfo(); pinMode(ONDDEMANDPIN, INPUT_PULLUP); seg.begin(); Wire.setClock(100000); seg.displayOn(); seg.setDigits(4); // configTime(MY_TZ, MY_NTP_SERVER); timeClient.begin(); #ifdef USEOTA ArduinoOTA.begin(); #endif } Sigur, se poate simplifica dupa nevoile tale. Succes! Editat Ianuarie 21, 2024 de Viorel A Link spre comentariu
zvonacfirst Postat Ianuarie 21, 2024 Partajează Postat Ianuarie 21, 2024 (editat) Rezolvat. Acum afiseaza in Serial monitor offsetul salvat. Prima data am introdus offsetul de 2 ore si am salvat, ca urmare a citit 7200 secunde. Apoi am modificat offsetul la 3 ore si a citit 10800 secunde. Dupa reset a citit tot 10800 secunde. Read timeZoneOffset = 7200 *wm:AutoConnect *wm:Connecting to SAVED AP: George_ *wm:connectTimeout not set, ESP waitForConnectResult... *wm:AutoConnect: FAILED for 9342 ms *wm:StartAP with SSID: MyClock *wm:AP IP address: 192.168.4.1 Conecteaza-te pentru configurarea Wi-Fi si pentru a seta fusul orar. *wm:Starting Web Portal *wm:12 networks found *wm:13 networks found *wm:Connecting to NEW AP: George_ *wm:connectTimeout not set, ESP waitForConnectResult... *wm:Connect to new AP [SUCCESS] *wm:Got IP Address: *wm:192.168.01.116 Configurarile salvate! Offset scris in EEPROM: 10800 *wm:config portal exiting rl⸮r$⸮n⸮l⸮b|⸮⸮⸮rb⸮ *wm:AutoConnect *wm:Connecting to SAVED AP: George_ *wm:connectTimeout not set, ESP waitForConnectResult... *wm:AutoConnect: SUCCESS *wm:STA IP Address: 192.168.01.116 Read timeZoneOffset = 10800 Ideea mi-a dat-o @antemir, drept pentru care adanca plecaciune. Nu avea ce sa caute acea linie acolo si mai aveam float pe undeva unde trebuia sa fie int. Ca urmare postez codul care functioneaza. L-am integrat si in codul ceasului si functioneaza corect. Multumesc pentru ajutor. #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> #include <NTPClient.h> #include <EEPROM.h> const char* WebServerName = "MyClock"; const char* WebServerPass = "********"; #define EEPROM_SIZE 512 WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); int timeZoneOffset = 0; WiFiManagerParameter timeZoneParam("fus_orar", "Fus orar (ore):", "", 10); void configModeCallback(WiFiManager *myWiFiManager) { Serial.println("Conecteaza-te pentru configurarea Wi-Fi si pentru a seta fusul orar."); } void saveConfigCallback() { Serial.println("Configurarile salvate!"); // Verifica daca campul fusului orar este gol String timeZoneValue = timeZoneParam.getValue(); if (!timeZoneValue.isEmpty()) { timeZoneOffset = timeZoneValue.toInt() * 3600; EEPROM.put(1, timeZoneOffset); EEPROM.commit(); delay(100); Serial.print("Offset scris in EEPROM: "); Serial.println(timeZoneOffset); } } void setup() { Serial.begin(115200); delay(100); EEPROM.begin(EEPROM_SIZE); // Read data from EEPROM EEPROM.get(1, timeZoneOffset); Serial.print("Read timeZoneOffset = "); Serial.println(timeZoneOffset); // Adauga parametrii pentru WiFiManager WiFiManager wifiManager; wifiManager.setAPCallback(configModeCallback); wifiManager.setSaveConfigCallback(saveConfigCallback); wifiManager.addParameter(&timeZoneParam); // Optional, doar daca se doreste resetarea setarilor la fiecare pornire // wifiManager.resetSettings(); // Reseteaza setarile salvate anterior // Seteaza timpul de asteptare pentru conectarea in modul configurare wifiManager.setConfigPortalTimeout(180); if (!wifiManager.autoConnect(WebServerName, WebServerPass)) { Serial.println("Nu s-a putut realiza conexiunea la WiFi si nu s-a putut crea serverul web."); delay(3000); ESP.reset(); delay(5000); } // Seteaza fusul orar dupa conectarea la WiFi timeClient.begin(); timeClient.setTimeOffset(timeZoneOffset); EEPROM.end(); } void loop() { // Verifica starea conexiunii la WiFi if (WiFi.status() == WL_CONNECTED) { // Actualizare timp de la serverul NTP timeClient.update(); } } EDIT: As vrea sa vin cu o constatare referitoere la aceasta linie de cod: wifiManager.resetSettings(); Reseteaza numai salvarile referitoare la WiFi, adica SSID si PASS, nu si parametrii adaugati, cum este offsetul in cazul meu. Pentru a curata eepromul am folosit un eeprom cleaner pentru ca voiam sa il am curat, sa il citesc, apoi sa il scriu si sa il citesc iar. Dupa resetare am citit ultima valoare salvata si asa am stiut ca este totul in regula. Editat Ianuarie 21, 2024 de zvonacfirst Link spre comentariu
gabitzu2006 Postat Martie 4, 2024 Partajează Postat Martie 4, 2024 Salutare! Sunt si eu interesat de acest subiect, ba chiar de proiectul colegului @Untold pe care-l rog sa incarce sketch-ul final, functional, daca se poate. Multumesc! Link spre comentariu
Untold Postat Martie 12, 2024 Autor Partajează Postat Martie 12, 2024 (editat) La 04.03.2024 la 20:23, gabitzu2006 a spus: Salutare! Sunt si eu interesat de acest subiect, ba chiar de proiectul colegului @Untold pe care-l rog sa incarce sketch-ul final, functional, daca se poate. Multumesc! Salut, sigur:GPIO'S.txt Aici scrii ce vrei tu, iti denumesti iesirile cum vrei tu. String nameRELAYS[NUM_RELAYS] = {"WC Curte", "Bec Curte", "Hidrofor", "Lumina Garaj", "Lumina Magazie Lemne", "Lumina Foisor"}; Petru-1_Last_good.ino Editat Martie 12, 2024 de Untold Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum