Croduino NOVA kao server (A.K.A kako spojiti uređaje s Croduino NOVA?)

Uvod

Stigao Vam je Croduino NOVA i vrijeme je za početak rada? Ne znate kako početi te se pitate što sve ova pločica može učiniti? Ovo je pravi tutorijal za vas!
Croduino NOVA pločica može raditi u 3 načina rada; kao klijent, kao server ili oboje (klijent i server). U prošlom tutorijalu opisali smo rad Croduino NOVA pločice kao client. Sada ćemo objasniti rad Croduino NOVE kao server. Konfiguracijom Croduino NOVA pločice za rad kao server omogućuje nam povezivanje pametnog telefona, računala i ostalih uređaja s Croduino NOVA pločicom. Uz to moguće je pomoću spojenih uređaja kontrolirati samu pločicu. Zamislite samo mogućnosti koje je moguće napraviti, od paljenja/gašenja svijetla, kontrole grijanja ili zastora pomoću pametnog telefona do automatizirane kuće u kojoj je moguće sve kontrolirati pomoću WiFi-ja. Mašta je samo granica.
 

Primjer: Osvjetljavanje LED diode preko WiFi-ja

U nastavku tutorijala će se pokazati konfiguriranje Croduino NOVA pločice kao server te na jednostavnom primjeru prikazati kontroliranje osvjetljavanja LED diode pomoću pametnog telefona.

Spajanje

Za izradu samog projekta potrebna je jedna LED dioda i Croduino Nova pločica. Način spajanja je prikazan na slici ispod.
 

Arduino kod

Prije samog korištenja tutorijala potrebno je konfigurirati Arduino programsko okruženje (Arduino IDE) za rad s Croduino NOVA pločicom kako bi pločica ispravno radila (više na linku).
Potrebno je još napomenuti da u ovom tutorijalu s Croduino NOVA pločicom se mogu spojiti samo uređaji koji su spojeni na istu (lokalnu) WiFi mrežu. To znači da nije moguće spojiti uređaje s Croduino NOVA pločicom koji su spojeni na različitoj WiFi mreži ili podatkovnoj mreži. U nastavku će se objasniti novi dijelovi programskog koda koji su potrebni za ispravno konfiguriranje i rad s WiFi mrežom.
 

Prvo je potrebno kreirati „WiFiServer“ objekt naziva „server“ s kojim se stvara server na Croduino NOVA pločici. Parametar unutar zagrada je broj porta na kojem je moguće komunicirati sa serverom.

WiFiServer server(80);

Zatim je potrebno uspostaviti vezu s WiFi mrežom. To je moguće činiti sa WiFi.begin klasom unutar koje unosimo ssid i lozinku WiFi mreže.

WiFi.begin(ssid, password);

Program može nastaviti s radom tek kada se uspješno spoji na definiranu WiFi mrežu. Stvaramo while petlju unutar Setup() funkcije u kojoj provjeravamo status konekcije pomoću funkcije WiFi.status() sve dok ona ne vrati parametar „WL_CONNECTED“. Za ostale parametre koje funkcija WiFi.status() može vratiti pogledajte ovdje LINK.

while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

Nakon što je Croduino NOVA uspješno spojena na WiFi mrežu, program kreće u loop() petlju. U njoj stvaramo „WiFiClient“ objekt i provjeravamo je li neki klijent (uređaj) spojen na Croduino NOVA pločicu. Ako nije, program se vrača na početak loop() funkcije.

WiFiClient client = server.available();
  if (!client) {
    return;
  }

Kada se uređaj spoji s Croduino NOVA pločicom, program čeka klijenta da pošalje neke podatke. Nakon što su podaci poslani, program ih prvo iščitava i ispisuje na serijskom portu te zatim interpretira poslani zahtjev „/LED=ON“ ili „/LED=OFF“ i postavlja LED diodu na HIGH ili LOW.

Serial.println("Novi klijent");
  while(!client.available()){
    delay(1);
  }
 
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

Zatim vraćamo odgovor klijentu (uređaju) prema odgovarajućem HTML kodu. Za to koristimo client.print() funkciju u koju unosimo točan redoslijed HTML koda kako bi on bio ispravan. U ovom djelu moguće je promijeniti dijelove HTML koda i time promijeniti izgled web stranice.

client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("");
  client.println("");
 
  client.print("LED dioda je sada ");
 
  if(value == HIGH) {
    client.print("upaljena");
  } else {
    client.print("ugasena");
  }
  client.println("

"); client.println(""); client.println("
"); client.println("");

Više informacija o ESP8266WiFi.h library-u i ostalim klasama možete pronaći na linku.
Kompletan kod se nalazi ispod.

#include "ESP8266WiFi.h"
  
const char* ssid = "e-radionica"; //Unesite naziv vaše wifi mreže
const char* password = "password"; //Unesite vašu lozinku
  
int ledPin = 13; //Pin na kojem se LED dioda nalazi
 
WiFiServer server(80); 
  
void setup() {
  Serial.begin(115200); //POZOR! promjeniti u Serial monitoru baud rate na 115200 baud. 
                        //U suprotnom će se dobiveni znakovi krivo interpretirati te se neće moći razumjeti.
  delay(10);
  
  pinMode(ledPin, OUTPUT); //Definiranje pina LED diode kao izlaz
  digitalWrite(ledPin, LOW); //Postavljanje pina LED diode na LOW 
  
  //Spajanje na WiFi mrežu
  Serial.println();
  Serial.println();
  Serial.print("Spajanje na ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {  //Ispisivanje "." znaka sve dok se ne spoji na definiranu WiFi mrežu
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi spojen");
  
  //Pokreni server
  server.begin();
  Serial.println("Server pokrenut");
  
  //Ispiši IP adresu
  Serial.print("Kopiraj ovu adresu u preglednik: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
  
}
  
void loop() {
  // Provjeri je li klijent spojen
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Čekaj dok klijent ne pošalje neke podatke
  Serial.println("Novi klijent");
  while(!client.available()){
    delay(1);
  }
  
  // Pročitaj prvu liniju zahjeva
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  
  // Interpretiraj zahtjev
  
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }
  
// Postavi stanje LED diode po zahtjevu
  
  // Vrati odgovor klijentu
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("");
  client.println("");
  
  client.print("LED dioda je sada ");
  
  if(value == HIGH) {
    client.print("upaljena");
  } else {
    client.print("ugasena");
  }
  client.println("

"); client.println(""); client.println("
"); client.println(""); delay(1); Serial.println("Klijent je iskljucen"); Serial.println(""); }

Rezultat

Nakon što ste ispravno spojili LED diodu s Croduino NOVA pločicom i uspješno prebacili kod u pločicu, kliknite na Serial Monitor u Arduino IDE programu.

POZOR, potrebno je promijeniti u Serial Monitoru postavke baud rate-a na 115200 baud. U suprotnom će se dobiveni znakovi krivo interpretirati te se neće moći razumjeti.

Prilikom pokretanja Croduino NOVA pločice, ona će se pokušati spojiti na WiFi mrežu koju ste naveli u kodu. U Serial Monitoru će vam pisati status je li Croduino NOVA uspješno spojena ili ne. Nakon što se pločica spoji na WiFi mrežu, ispisat će se IP adresa koju je potrebno upisati u web pregledniku (na pametnom telefonu, računalu, laptopu, itd.). Nakon toga će vam se pojaviti web stranica kao na slici dolje. Pritiskom miša na neku od dvije tipke promijenit će se tekst u web pregledniku i u isto vrijeme promijeniti status LED diode. To je to, uspjeli ste!

Što dalje?

Došli smo do kraja ovog tutorijala no ovdje produktivnost ne prestaje. Moguće je spojiti bilo koji ulaz/izlaz (modul ili senzor) na Croduino NOVA pločicu. Isto tako moguće je programirati Croduino NOVA pločicu na razne načine da kontrolira komponente spojene na nju. Vjerojatno već sami imate neke ideje za projekte koje želite izraditi. Ekipa iz E-radionice vas podržava u bilo kakvom „ludom“ projektu kojeg ste zamislili.

Leave a Reply