Untold Postat August 31, 2023 Partajează Postat August 31, 2023 Va salut. Din multiplele exemple de pe net, am incropit un web server cu nodemcu ce permite conectarea/deconectarea a 6 device-uri (lumina, pompa, ventilator, etc, etc). El se conecteaza la reteaua locala wifi cu ssid si pass scris in sketch. Insa: acest mic proiect vreau sa-l fac pentru un prieten radioamator care nu a lucrat cu Arduino pana acum. Serverul functioneaza perfect, se conecteaza la reteaua mea de wifi, cu un anume IP. Acum, problema e ca nu pot baga in sketch ssid si pass lui de internet, pentru ca se schimba IP-ul node-ului si fara arduino ide cu serial monitor, nu stiu cum sa vada IP-ul ca sa-l acceseze din orice browser, de pe telefon, tableta, laptop, etc. Ar trebui sa fie cu wifimanager, adica sa-si faca un acces point, pe care sa-l poata accesa si sa modifice acolo ssid si pass retelei lui de wifi, sa se poata conecta la wifi-ul lui. Problema e ca, desi am vazut mai multe tutoriale pe youtube cum sa faci asta, am incercat de mai multe ori sa modific sketch-ul pt wifi manager, dar nu mi-a iesit. Ma poate ajuta cineva cu modificare sketch-ului? Nu fac asta pentru comercializare ci pentru un prieten care m-a ajutat cand mi-a crapat maseaua. Atasez mai jos sketch-ul functional pe reteaua mea wifi, multe multumiri celor care ma pot ajuta! // Import required libraries #include "ESP8266WiFi.h" #include "ESPAsyncWebServer.h" // 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 = "My SSID"; const char* password = "My 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 Home Automation</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> De ce nu folositi voi butonul "<>" din editor pentru a posta coduri? Nodemcu_6_Relay_Server_ELForum.ino P.S. Asa arata pagina accesabila din orice browser: Link spre comentariu
modoran Postat August 31, 2023 Partajează Postat August 31, 2023 (editat) Sunt sigur ca prietenul tau are suficienta incredere sa-ti dea user si pass sa o bagi direct in sketch ca sa nu te mai complici. Iar serverul ala va avea acelasi IP daca configurezi serverul DHCP din router sa-i dea mereu aceeasi adresa IP. Simplu si eficient. Editat August 31, 2023 de modoran Link spre comentariu
Kreator Postat August 31, 2023 Partajează Postat August 31, 2023 Fara prea multe complicatii, daca e la DIGI, ei au un serviciu gratuit de DNS Dinamic. Acolo va stabiliti un nume de domeniu (domeniu.go.ro). Apoi ar trebui sa mergeti cu montajul tau acasa la prieten, si il conectezi la reteaua lui WIFI. Accesezi apoi routerul, identifici MAC-ul la NodeMCU si-i setezi un IP fix dupa MAC. Setezi apoi in Port Forward Ip-ul setat si gata. Accesul il veti face din internet cu http://domeniu.go.ro:PPPP. unde PPPP este portul stabilit anterior. Link spre comentariu
modoran Postat August 31, 2023 Partajează Postat August 31, 2023 Numai ca planul prezentat cu port forward depinde daca ai ip public ipv4, ceea ce e posibil sa nu ai. Daca esti in CGN s-a rupt filmul. Link spre comentariu
Kreator Postat August 31, 2023 Partajează Postat August 31, 2023 (editat) 1 oră în urmă, antemir a spus: Eu cred ca @Untold are nevoie ca serverul web să fie accesat din rețeaua internă. Dacă este așa, mDNS pe ESP este suficient pentru a nu fi nevoit să știe adresa IP dinamică și a nu face setări prin router. atunci, rezolvarea e IP dupa MAC, fara alte librarii. Editat August 31, 2023 de Kreator Link spre comentariu
Untold Postat Septembrie 1, 2023 Autor Partajează Postat Septembrie 1, 2023 Acum 14 ore, antemir a spus: Eu cred ca @Untold are nevoie ca serverul web să fie accesat din rețeaua internă. Dacă este așa, mDNS pe ESP este suficient pentru a nu fi nevoit să știe adresa IP dinamică și a nu face setări prin router. Exact, multumesc @antemir Link spre comentariu
Untold Postat Septembrie 4, 2023 Autor Partajează Postat Septembrie 4, 2023 (editat) La 31.08.2023 la 12:21, antemir a spus: #include <ESP8266mDNS.h> iar la final de setup: MDNS.begin("untold"); si accesezi pagina cu http://untold (sau http://untold.local) indiferent ce IP are webserver. Nu-mi iese. Am bagat libraria zip ESP8266mDNS.h si imi da o eroare, zice cu nu a fost gasita.. Daca poti sa inlocuiesti in cod ce trebuie, multumesc. Apoi mai vad cu libraria mDNS... Editat Septembrie 4, 2023 de Untold Link spre comentariu
Untold Postat Septembrie 4, 2023 Autor Partajează Postat Septembrie 4, 2023 Am IDE 2.0 Link spre comentariu
Untold Postat Septembrie 4, 2023 Autor Partajează Postat Septembrie 4, 2023 Am instalat libraria wifimanager si am gasit in IDE un exmplu de cum sa faci asta. Am scris in esp8266 codul din examples si functioneaza, imi permite sa setez wifi router (aka esp8266) sa ii introduc ssid si pass de la reteaua mea locala. Problema mea e ca nu stiu cum sa inserez in codul din examples, codul meu cu 6 relee... Atasez codul din examples, pe al meu l gasiti mai sus, multumesc! #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager void setup() { WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP // it is a good practice to make sure your code sets wifi mode how you want it. // put your setup code here, to run once: Serial.begin(115200); //WiFiManager, Local intialization. Once its business is done, there is no need to keep it around WiFiManager wm; //reset settings - wipe stored credentials for testing // these are stored by the esp library wm.resetSettings(); // Automatically connect using saved credentials, // if connection fails, it starts an access point with the specified name ( "AutoConnectAP"), // if empty will auto generate SSID, if password is blank it will be anonymous AP (wm.autoConnect()) // then goes into a blocking loop awaiting configuration and will return success result bool res; // res = wm.autoConnect(); // auto generated AP name from chipid // res = wm.autoConnect("AutoConnectAP"); // anonymous ap res = wm.autoConnect("Viorel","password"); // password protected ap if(!res) { Serial.println("Failed to connect"); // ESP.restart(); } else { //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); } } void loop() { // put your main code here, to run repeatedly: } Link spre comentariu
Bandi Szasz Postat Septembrie 4, 2023 Partajează Postat Septembrie 4, 2023 Ca mod de functionare ce face WIFIManager este ca in momentul in care apelezi: wm.autoConnect("Viorel","password"); incearca sa se conecteze la WIFI cu credentialele salvate, in caz ca nu reuseste ( nu exita credentiale salvate, sunt gresite, etc.. ) atunci porneste in AP mode ( adica isi face server ) unde poti accesa acea pagina de ales WIFI si pus parola. Ca sa-l integrezi in la tine in app tot ce trb sa faci este sa-l definesti cu WiFiManager wm; Si in loc de // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // Print ESP8266 Local IP Address Serial.println(WiFi.localIP()); pui if (!wm.autoConnect("Viorel","password")) { Serial.println("Faild to connect to WIFI!"); } else { Serial.println(WiFi.localIP()); } Link spre comentariu
Untold Postat Septembrie 6, 2023 Autor Partajează Postat Septembrie 6, 2023 La 04.09.2023 la 15:43, Bandi Szasz a spus: Ca mod de functionare ce face WIFIManager este ca in momentul in care apelezi: wm.autoConnect("Viorel","password"); incearca sa se conecteze la WIFI cu credentialele salvate, in caz ca nu reuseste ( nu exita credentiale salvate, sunt gresite, etc.. ) atunci porneste in AP mode ( adica isi face server ) unde poti accesa acea pagina de ales WIFI si pus parola. Ca sa-l integrezi in la tine in app tot ce trb sa faci este sa-l definesti cu WiFiManager wm; Si in loc de // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // Print ESP8266 Local IP Address Serial.println(WiFi.localIP()); pui if (!wm.autoConnect("Viorel","password")) { Serial.println("Faild to connect to WIFI!"); } else { Serial.println(WiFi.localIP()); } Iti multumesc mult pentru ajutor, dar nu-mi iese. Sketch-rile separat merg, cand le unesc, ciuciu. Am sa renunt la proiect, multumesc inca o data! Link spre comentariu
Untold Postat Septembrie 19, 2023 Autor Partajează Postat Septembrie 19, 2023 Revin, m-am gandit sa nu abandonez proiectul. Am instalat toate librariile si am inlocuit ce mi-ai spus, insa la compilare imi da eroarea: 'wm' was not declared in this scope; did you mean 'tm'? wm nu inseamna WiFiManager? Nu stiu cum sa-l declar, dupa cum zice in mesajul de eroare... Am copiat corect ce mi-ai dat mai sus de inlocuit, am verificat litera cu litera. Link spre comentariu
Bandi Szasz Postat Septembrie 19, 2023 Partajează Postat Septembrie 19, 2023 In postul anterior am pus 3 blocuri cu cod. Vezi la primul am scris ca trebuie definit. Acel "WifiManger wm;" trebuie pus inainte de functia "setup" undeva sus prin cod dupa importuri / define-uri si ar trebuii sa mearga. Link spre comentariu
Untold Postat Septembrie 20, 2023 Autor Partajează Postat Septembrie 20, 2023 (editat) Am pus asa: // Import required libraries #include "ESP8266WiFi.h" #include "ESPAsyncWebServer.h" #include "WiFiManager.h" #include "DNSServer.h" #define WiFiManager wm Si aceeasi eroare imi da: 'wm' was not declared in this scope; did you mean 'tm'? Plus asta: Error while detecting libraries included by C:\Users\PETRUM~1\AppData\Local\Temp\arduino_build_733142\sketch\NodeMCU_6_relays_1.ino.cpp Editat Septembrie 20, 2023 de Untold Link spre comentariu
Bandi Szasz Postat Septembrie 20, 2023 Partajează Postat Septembrie 20, 2023 Nu trebuie cu "#define" pune pur si simplu pe o linie noua (goala) doar atat WiFiManager wm; 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