Sari la conținut
ELFORUM - Forumul electronistilor

NodeMCU


Untold

Postări Recomandate

Bine ca am vazut postarile voastre, mi-am adus aminte ca aveam un nodeMCU cumparat si abandonat.

L-am pus la treaba rapid si acum sunt curios cat timp ramane stabil fara sa aiba nevoie de reset.

 

Am configurat in routerul wireless alocare statica de IP pentru MAC-ul la nodeMCU si apoi am forwardat portul 80 catre acel IP.

Cum RDS ofera serviciu Dynamic RDS, mi-am setat o adresa care se termina in go.ro (domeniul care il ofera ei) pentru abonamentul de internet pe locatia curenta si zbang ... am iesit pe internet si pot controla ESP8266 de pe telefon de oriunde m-as gasi :) cu conditia sa nu se blocheze gandacelu'

Treaba de 15 minute.

 

PS: Va trebui verificat daca ESP8266 are watchdog si daca da cum se configureaza.

PPS: simplu ... are chiar 2 timere watchdog ... https://techtutorialsx.com/2017/01/21/esp8266-watchdog-functions/

 

Pt cei carora le place programarea grafica, :)

http://easycoding.tn/tuniot/demos/code/

si un tutorial aici: 

 

Editat de mars01
Link spre comentariu
Acum 9 ore, mars01 a spus:

Cum RDS ofera serviciu Dynamic RDS, mi-am setat o adresa care se termina in go.ro (domeniul care il ofera ei) pentru abonamentul de internet pe locatia curenta si zbang ... am iesit pe internet si pot controla ESP8266 de pe telefon de oriunde m-as gasi :) 

 

Poti detalia, te rog, cum faci treaba asta? Ar fi fain sa pot controla node-ul din afara retelei wifi de acasa, am activat reteaua mobila de date de pe mobil si nu merge.

Editat de Untold
Link spre comentariu

Idea este ca atunci cand nodemcu se conecteaza la routerul tau wireless, el primeste automat un IP care il are liber dintr-o "caciula" de IP-uri disponibile. IP-urile acestea sunt locale adica nu se pot folosi in afara retelei tale locale, din casa (vorba vine).

 

Probabil ca se poate seta si IP fix la nodeMCU dar eu am preferat sa fac o asociere intre adresa fizica MAC a nodeMCU si un anume IP penrtu ca a fost mai usor sa fac o setare rapida in routerul wireless. Aproape toate routerele wireless actuale au posibilitatea de a seta o asemenea alocare statica in context DHCP.

In acest fel ma asigur ca intotdeauna am aceasi adresa IP alocata pentru nodeMCU.

 

Cumva trebuie facut in asa fel incat toate cererile de pachete pe portul 80 care vin dinspre Internet spre router-ul tau (aplicatia ta pe mobil care o ai de pe site-ul mentionat mai sus, foloseste portul 80 pentru comunicatie) sa fie trimise de routerul wireless (in pozitia acum de "releu") catre IP-ul alocat lui nodeMCU.

Acest proces se numeste "forwardare de pachete" si routerul tau wireless trebuie sa aiba o sectiune de acest gen in interfata sa de configurare unde setezi pe ce port ajung pachetele, la ce IP sa se duca si pe ce port cat si tipul de pachete forwardate (TCP, UDP sau BOTH). Eu aleg BOTH si portul 80 in ambele casute.

 

SI asta este dpdv al routerului. Evident lucrurile sunt diferite de la router wireless la altul.

 

Mai departe, ca sa te conectezi la nodeMCU ai nevoie de adresa ta de IP externa, cea cu care esti vazut in exterior, pe Internet. Majoritatea ISP-urilor (in cazul meu RDS-RCS) ofera alocare dinamica de IP extern ceea ce inseanmna ca "adresa" ta nu este stabila. Astazi poti avea un IP maine altul. Ceea ce face ca sa nu stii pe ce adresa sa te conectezi.

Aici RDS a venit cu un ajutor oferind un nume de domeniu care este alocat permanent IP-ului tau indiferent daca IP-ul se schimba. Este un serviciu de DDNS (dynamic DNS). Mai sunt si altii care ofera asa ceva (serviciu DDNS) si sunt unele routere care iti ofera aceasta posibilitate direct din interfata lor, dar de regula acele servicii costa bani.

 

Cu alte cuvinte in loc de exemplu sa folosesti o adresa IP externa cum ar fi 86.345.12.233 sau altceva (pentru ca se schimba) vei folosi un nume de genul untold.go.ro.

"untold" ti-l alegi tu, "go.ro" este oferit de RDS.

Acest nume se seteaza in interfata web din contul tau pe www.digiromania.ro si evident iti vei putea alege un nume doar daca este disponibil (ma refer la sectiunea 'untold').

Odata ales numele, trebuie sa astepti cca 24 ore pentru ca sa se propage asocierea DNS (uneori mai repede).

 

Intr-un final, in aplicatia de pe telefon, vei introduce acel nume, de ex: untold.go.ro

Editat de mars01
Link spre comentariu

Ceea ce recomanda mars01 este foarte corect si functioneaza in mod sigur.

Cu toate acestea n-as recomanda forward-ul portului standard HTTP catre o potentiala pagina web gazduita pe un ESP, cu doua butoane gen: ON/OFF radiator incalzire... :).

 

Ca un exemplu de posibila solutie am instalat pe o placa gen "RPi" un server nginx, folosit ca reverse proxy. In conditiile astea se poate seta autentificarea cu user/password iar functie de calea specificata in adresa cu care-i apelat nginx-u`, se poate face redirectarea request-ului catre orice masina din LAN, pe orice port.

Deasemenea conexiunea poate fi criptata (https) chiar daca nu se foloseste un certificat original ci unul self signed (apare un mesaj de avertizare in browser dar se poate seta ca exceptie).

Link spre comentariu
  • 4 săptămâni mai târziu...

Eu sunt habarnist rau la chestiile astea. Tot ce va pot spune este ca eu am net de la Telekom in locatia unde vreau sa fie nodeMCU si am IP fix. Am solicitat asta deoarece am si doua camere de supraveghere in aceeasi locatie pe care le pot urmari de oriunde. La fel as vrea sa fie si cu nodMCu: sa-i pot transmite comenzi de pe telefon de oriunde as fi, din orice retea, wifi sau data mobile. Cum fac asta? Tin minte ca in setarile routerului am alocat IP-ul si mac-ul camerelor plus alte niste setari pe care mi le-a facut un prieten prin Teamviewer. La fel trebuie facut si pt nodeMCU? Ca, am schimbat ideea, acum la acea locatie (unde nu sunt decat rar), as vrea ca in afara de camere, sa pot aprinde/stinge un bec de pe telefon sau dintr-o interfata pe un browser. 

Link spre comentariu

Se aloca un IP intern fix pentru nodeMCU folosind adresa MAC, in felul acesta de fiecare data cand nodeMCU se contecteaza la router va primi acelasi IP intern. Dupa care se ruteaza un port extern catre IP-ul intern alocat la nodeMCU. In felul acesta cand se acceseaza "IP_extern:5000" routerul va redirecta catre IP_Alocat:5000 ( sau orice alt port, nu e obligatoriu sa fie exact acelasi ca si portul extern).

 

Alocarea de IP intern se face de obicei in setarile "DHCP->Address Reservation" unde se introduce adresa mac ( care poate fi gasit la DHCP -> DHCP Client List unde apar toate deviceurile care sunt conectate la router) si o adresa ip interna gen 192.168.0.200. Dupa care la sectiunea Forwarding -> Virtual Server sau Port Forward ( depinde de router ) se introduce portul extern dorit, IP ul intern ales anterior si portul intern ales pt Node ( care este deasemenea specificat in NodeMCU cand se configureaza Wifi-ul) 

Editat de Bandi Szasz
Link spre comentariu

Am inteles acum, sper sa ma descurc, multumesc mult pentru explicatii. Insa, mai intai de a face toate astea, in sketch-ul din nodeMCU, trebuie sa pun la SSID si Pass, numele si parola wifi-ului Telekom  de la locatie, caci acum am in el numele si pass routerului de UPC de acasa. Maine voi incerca toate astea, revin cu rezultate. Multumesc inca o data!

Link spre comentariu

Inca nu am ajuns la locatie, insa pana atunci as vrea sa rezolv cu partea hardware. La nodeMCU pe iesire/iesiri trebuie sa pun niste relee, stiu ca trebuie un tranzistor, iesirile lui node nu au capabilitate de curent pt releu. Dar, se intampla un fenomen si nu-l inteleg. Cand am rel on, pe iesirea respectiva am 0,05 V, iar cand am rel off, pe iesire am 3,3 V,  taman invers.  Poate ca asa lucreaza node-ul, insa nu stiu cum o sa fac releul sa lucreze...sau trebuie releu cu doua contacte, normal inchis si normal deschis, sa pun sarcina/becul pe normal inchis??

Am rezolvat cu partea de carcasa si sursa, voi folosi un incarcator de 5V de telefon scos din carcasa lui, iar pt carcasa am una de la o sursa in comutatie de 12v/2A, carcasa in care incap perfect nodeMCU-ul si sursa de 5V, plus ca arata ca un stecher, are borne de bagat in priza. O sa revin cu poze cand va fi gata, multumesc anticipat pentru ajutor.

Editat de Untold
Link spre comentariu
18 minutes ago, Untold said:

La nodeMCU pe iesire/iesiri trebuie sa pun niste relee, stiu ca trebuie un tranzistor, iesirile lui node nu au capabilitate de curent pt releu. Dar, se intampla un fenomen si nu-l inteleg. Cand am rel on, pe iesirea respectiva am 0,05 V, iar cand am rel off, pe iesire am 3,3 V,  taman invers.  Poate ca asa lucreaza node-ul, insa nu stiu cum o sa fac releul sa lucreze...sau trebuie releu cu doua contacte, normal inchis si normal deschis, sa pun sarcina/becul pe normal inchis??

NodeMCU functioneaza exact asa cum e scris codul... :).
Diferenta poate fi doar ca anumiti pini, LA RESET, sunt in 1 logic fata de alte uC-uri unde sunt intrari sau highZ... dar asta repet, la RESET sau pana cand sunt configurati corespunzator din soft, la pornire.

Pe de alta parte vezi ca sunt module cu releu active LOW (aclanseaza releul cand intrarea este pe 0V). Am unele asa cu intrarea "separata" cu optocuplor dar parca si unele cu tranzistor conectat direct... pot sa-ti atasez ceva poze, eventual.

Link spre comentariu

Pun aici codul, poate ma ajuta cineva cu modificare pentru rel active HIGH:

//Visit www.roboshala.com for more details on NodeMCU and other projects.

#include <ESP8266WiFi.h>
 
const char* ssid = "************"; // SSID i.e. Service Set Identifier is the name of your WIFI
const char* password = "************"; // Your Wifi password, in case you have open network comment the whole statement.
 
int R1=D1; // GPIO13 or for NodeMCU you can directly write D7 
int R2=D2;
int R3=D3;
int R4=D4;
WiFiServer server(80); // Creates a server that listens for incoming connections on the specified port, here in this case port is 80.
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  
  digitalWrite(R1,HIGH);
  digitalWrite(R2,HIGH);
  digitalWrite(R3,HIGH);
  digitalWrite(R4,HIGH);

  
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP()); //Gets the WiFi shield's IP address and Print the IP address of serial monitor
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
 
  if (request.indexOf("/Relay1On") != -1)  {
    digitalWrite(R1,LOW);
     
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println("");
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");
      client.println("Relay 1 is ON");
      client.println("</html>

Foloseste butonul <> din editor pentru a insera codul!

Editat de nico_2010
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