|
SK LABS Raspberry Pi i drugi SBC (Single-Board Computer), Arduino, hardver, softver, projekti, diskusije... |
|
Alatke vezane za temu | Vrste prikaza |
15.7.2017, 11:02 | #1 |
V.I.P. Recenzent
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
|
NodeMCU, LED & static IP
Na mreži se može naći dosta tutorijala o tome kako programirati NodeMCU i kako upravljati modulima preko web pregledača. Svi su uglavnom sa dinamičkom IP adresom što kao tutorijal i nije loše ali za pravljenje stand alone projekta nije dobro. Svakim resetovanjem rutera se u tom slučaju IP adresa menja i dolazimo u situaciju da svaki put nakon resetovanja teba da priključimo NodeMCU sa računarom da bi videli novu IP adresu. Rešenje je u statičkoj IP adresi u okviru kućne mreže.
Sastojci za ovaj recept su: NodeMCU v1.0 Dupont žice Breadboard LED Povezivanje prema šemi. Pinovi se, naravno mogu koristiti po želji. Ja sam upotrebio D7 i D8, što će reći GPIO13 i GPIO15. Obratite samo pažnju prilikom povezivanja LED. Anoda je duža (+) a katoda je kraća (-). Na redu je skeč. Standardno na početku dodajemo biblioteku za rad sa ESP8266 modulom. Dalje popunjavamo SSID i lozinku naše kućne mreže. Sledeće na redu su adrese. U prvom redu postavljamo statičnu IP adresu. Prilikom odabira ove adrese treba imati na umu limite rutera i broj priključenih wi-fi uređaja. Postavljamo gateway i subnet adrese prema našem ruteru. Dalje je definisanje izlaznih pinova i promenljivih koje će nam kasnije trebati. Na kraju pokrećemo WIfi server. U void setup sekciji postavljamo izlazne pinove na LOW, povezujemo modul na mrežu i sve to ispisujemo na serijal monitor. Serial.println(ip) bi morala da ispiše istu onu adresu koju smo postavili iznad. U void loop sekciji osim ispisivanja trenutnog stanja modula na serijal monitoru što je bitno za otklanjanje eventualnih grešaka, menjamo stanje izlaznih pinova. U zavisnosti šta je poslato preko web pregledača, menjamo svaki pin sa LOW na HIGH i obrnuto. Sledeće na redu je postavljanje html stranice. Za to koristimo client.println funkciju. Stranica se može formatirati po želji ali se mora voditi računa o upotrebi navodnika ("). |
15.7.2017, 11:03 | #2 | |||
V.I.P. Recenzent
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
|
Re: NodeMCU, LED & static IP
-----------------------------------------------
Kod:
#include <ESP8266WiFi.h> const char* ssid = "xxxxxxxxxxxxxxx"; // ssid const char* password = "xxxxxxxxxxxxx";// password IPAddress ip(192, 168, 0, 107); //set static ip IPAddress gateway(192, 168, 0, 1); //set getteway IPAddress subnet(255, 255, 255, 0);//set subnet int led1 = 13; // GPIO13 int led2 = 15; // GPIO15 int stat1; int stat2; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); pinMode(led1, OUTPUT); digitalWrite(led1, LOW); pinMode(led2, OUTPUT); digitalWrite(led2, LOW); // Connection to wireless network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); server.begin(); Serial.println("Server started"); // Print the IP address in serial monitor. It must be the same we entered above Serial.print("Type this address in URL to connect: "); Serial.print("http://"); Serial.println(ip); Serial.println("/"); } void loop() { WiFiClient client = server.available(); if (!client) { return; } 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(); // engine int stat1 = 0; if (request.indexOf("/led1=on") != -1) { digitalWrite(led1, HIGH); stat1 = 1; } if (request.indexOf("/led1=off") != -1) { digitalWrite(led1, LOW); stat1 = 0; } int stat2 = 0; if (request.indexOf("/led2=on") != -1) { digitalWrite(led2, HIGH); stat2 = 1; } if (request.indexOf("/led2=off") != -1) { digitalWrite(led2, LOW); stat2 = 0; } // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<head>"); client.println("<meta charset='UTF-8'>"); client.println("<style>"); client.println(" a {background:#F44336; color:white; padding:25px; text-decoration:none; display:inline-block; width:50%; margin: 20px; text-align:center;}"); client.println("</style>"); client.println("</head>"); client.println("<html>"); client.println("<div align="center">"); /// led1 part. GUI, etc client.print("LED je sada "); if(stat1 == 1) { client.print("upaljena"); } else { client.print("ugašena"); } client.println("<br><br>"); client.println("<a href="/led1=on" >Upali </a>"); client.println("<a href="/led1=off">Ugasi </a><br />"); client.println("<br><br>"); ///led2 part. GUI, etc client.print("LED je sada "); //if(value == HIGH) { if(stat2 == 1){ client.print("upaljena"); } else { client.print("ugašena"); } client.println("<br><br>"); client.println("<a href="/led2=on">Upali </a>"); client.println("<a href="/led2=off">Ugasi </a><br />"); client.println("</div>"); client.println("</html>"); delay(1); Serial.println("Client disonnected"); Serial.println(""); } Kucanjem IP adrese u URL web pregledača dolazimo do html stranice koju smo napravili. Možemo joj pristupiti preko bilo kog računara, tableta, mobilnog telefona... dokle god koriste isti ruter. Bez obzira da li će se ruter iz nekog razloga restartovati, IP adresa će ostati ista.
Kao što vidite, u pitanju je prost projekat sa dosta prostora za proširivanje. Uz osnovno znanje web progamskih jezika se GUI može napraviti po želji. Ja sam kao primer dodao osnovni CSS, podršku za UTF8 slova, ali u principu se stranica može formatirati kako god želite. Za neki eventualni projekat koji će se koristiti na duže staze, trebalo bi razmisliti o responsivnom templejtu zbog ekrana mobilnih uređaja. Moj mali propust je ispisivanje stanja LED u okviru web pregledača, gde postoji mali bag kada se nakon prve upali druga LED. To zahteva upotrebu sesija i vreme za neophodno programiranje a moj dugo očekivani godišnji odmor je konačno došao. Budite slobodni da korigujete skeč po volji i da ispravke postavite ispod. Neću se ljutiti. Toliko od mene do sledećeg skeča. |
|||
Sledeći korisnik se zahvaljuje korisniku Dekip na korisnoj poruci: | ||
JohnnyNT (18.7.2017) |
15.7.2017, 11:04 | #3 |
V.I.P. Recenzent
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
|
Re: NodeMCU, LED & static IP
Drugari, ne tražim lajkove, imam sto godina i to me ne interesuje.
Ali mogli biste malo da prokomentarišete. Bar da znam da vas ne smaram. Svaki komentar neće biti suvišan. |
18.7.2017, 11:48 | #4 |
Član
Član od: 24.9.2012.
Poruke: 489
Zahvalnice: 103
Zahvaljeno 271 puta na 151 poruka
|
Re: NodeMCU, LED & static IP
problem je što je znanje u Srbiji na vrlo niskim granama i da je sistematski uništavano zadnjih 20 godina. Ne možeš očekivati od zaglupljene mase koja odrasta na reality programima da se bavi kreativnim stvarima.
Node MCU ima zaista lep potencijal u odnosu na svoju cenu. Lepo se može iskoristiti u poslovima kućne automatizacije. |
Sledeći korisnik se zahvaljuje korisniku igor7 na korisnoj poruci: | ||
Dekip (18.7.2017) |
18.7.2017, 13:22 | #5 |
Deo inventara foruma
Član od: 15.4.2006.
Lokacija: Srbija
Poruke: 4.037
Zahvalnice: 1.298
Zahvaljeno 1.396 puta na 948 poruka
|
Re: NodeMCU, LED & static IP
Zanimljivo, nisam se interesovao za NodeMCU. Prilično jeftino. Koliko razumem, teoretski je moguće koristiti neki dynamic DNS servis poput No-IP (uz port forwarding itd) kako bi toj strani mogli da pristupamo spolja?
|
18.7.2017, 15:37 | #6 |
Član
Član od: 24.9.2012.
Poruke: 489
Zahvalnice: 103
Zahvaljeno 271 puta na 151 poruka
|
Re: NodeMCU, LED & static IP
Pa sad... ne znam kako bi se mogao implementirati neki klijent za No-IP ali je to teoretski moguće pisanjem koda koji bi obavljao tu funkciju. U pitanju je Wi-Fi uređaj kao i svi ostali, što važi za njih, važi i za njega. Moguće je za prijem i slanje podataka koristiti oblačne IoT servise.
|
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
SFML (C++) problem | GrimReaper | Programiranje | 3 | 27.2.2012 13:42 |
Problem...Joomla | AlfaBeta | Web razvoj | 2 | 16.10.2011 20:19 |
Static IP-problem | Irondacha | Mrežne igre | 6 | 2.6.2010 0:13 |
Java - čitanje | kizaPr | Programiranje | 10 | 29.7.2008 10:40 |
Pitanje u vezi IP adresa | Kisr | Internet tehnologije | 32 | 25.8.2007 23:41 |