Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Drive > SK LABS

SK LABS Raspberry Pi i drugi SBC (Single-Board Computer), Arduino, hardver, softver, projekti, diskusije...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 15.7.2017, 11:02   #1
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.114
Zahvalnice: 716
Zahvaljeno 973 puta na 534 poruka
Određen forumom 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 (").
Dekip je offline   Odgovor sa citatom ove poruke
Stara 15.7.2017, 11:03   #2
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.114
Zahvalnice: 716
Zahvaljeno 973 puta na 534 poruka
Određen forumom 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.

x


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.
Dekip je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Dekip na korisnoj poruci:
JohnnyNT (18.7.2017)
Stara 15.7.2017, 11:04   #3
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.114
Zahvalnice: 716
Zahvaljeno 973 puta na 534 poruka
Određen forumom 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.
Dekip je offline   Odgovor sa citatom ove poruke
Stara 18.7.2017, 11:48   #4
igor7
Član
 
Član od: 24.9.2012.
Poruke: 462
Zahvalnice: 96
Zahvaljeno 249 puta na 141 poruka
Određen forumom 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.
igor7 je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku igor7 na korisnoj poruci:
Dekip (18.7.2017)
Stara 18.7.2017, 13:22   #5
JohnnyNT
Deo inventara foruma
 
Član od: 15.4.2006.
Lokacija: Srbija
Poruke: 4.020
Zahvalnice: 1.289
Zahvaljeno 1.391 puta na 944 poruka
Određen forumom 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?
JohnnyNT je offline   Odgovor sa citatom ove poruke
Stara 18.7.2017, 15:37   #6
igor7
Član
 
Član od: 24.9.2012.
Poruke: 462
Zahvalnice: 96
Zahvaljeno 249 puta na 141 poruka
Određen forumom 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.
igor7 je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


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


Sva vremena su po Griniču +2 h. Sada je 2:14.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2021, vBulletin Solutions, Inc.
Hosted by Beograd.com