Sari la conținut
ELFORUM - Forumul electronistilor

ESP8266 WiFiManager


Untold

Postări Recomandate

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:

 

webserver page.jpg

Link spre comentariu
  • Răspunsuri 41
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

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 de modoran
Link spre comentariu

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
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 de Kreator
Link spre comentariu
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 de Untold
Link spre comentariu

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

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
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
  • 2 săptămâni mai târziu...

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

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 de Untold
Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări