
Budući da ESPDuino ima ugrađen WiFi čip, idealan je za kreiranje upravljanih uređaja kojima se komande šalju iz web browser-a bilo kojeg uređaja.
Sketch ispod predstavlja kreiran web server na ESPDuino ploči koji se konektuje na podešeni WiFi access point (mojWiFi) i na portu 88 kreria web server.
Taj web server osluškuje konekcije klijenata te iz GET zahtjeva izdvaja komande koje šalje klijent.
Budući da ESPDuino ima ugrađen WiFi čip, idealan je za kreiranje upravljanih uređaja kojima se komande šalju iz web browser-a bilo kojeg uređaja.
Sketch ispod predstavlja kreiran web server na ESPDuino ploči koji se konektuje na podešeni WiFi access point (mojWiFi) i na portu 88 kreria web server.
Taj web server osluškuje konekcije klijenata te iz GET zahtjeva izdvaja komande koje šalje klijent.
U ovom primjeru su podešene dvije komande klijenta:
1. ako klijent pošalje komadnu POCETAK, ESPDuino odgovori sa USPOSTAVLJENA JE KONEKCIJA što je prikazano u prozoru web browser-a iz koga je komanda poslata.

Na slici iznad je screenshot poslate komande i primljenog odgovora iz Mozilla Firefox for mobile browser-a.
2. ako klijent pošalje komandu POSALJI ESPDuino odgovara slanjem podataka (vrijednost varijable strOdgovor) 1556668831;21.10;66.60;8.90;99.90;17.52
U ovom primjeru odgovor sadrži timestamp te vrijednosti izmjerenih temperatura i vlažnosti.

Bitno je napomenuti da su komande case sensitive što znači da je bitno da poslata komanda bude potpuno ista kao ona u Arduino sketch-u, inače će biti ignorisana.
Za slanje komande je, u web browser, potrebno upisati IP adresu ESPDuino ploče, port na kome radi server (nije potrebno za port 80) te kosu crtu i komadnu.
Npr.: 192.168.1.123:88/POSALJI
Kada ESPDuino primi ovaj http zahtjev, odgovoriće na njega slanjem vrijednosti varijable strOdgovor.
Ispod je cijeli Arduino sketch.
//////////////////////////////////////////////////////////// //// ESPDuino se povezuje na WiFi mrežu i podatke šalje //// http klijentu na njegov zahtjev //// //// //// Verzija: 1.0. //// Datum: 4. V 2019. //// //// Autor: Samir Gutić, http://amicus.ba //// ////////////////////////////////////////////////////////////#include <SPI.h>#include <ESP8266WiFi.h> // Biblioteka za ESP8266 WiFi modul
const char* WiFi_mreza = "mojWiFi"; // Ime WiFi mrežeconst char* WiFi_sifra = "sifraZaMojWifi"; // Password WiFi mreželong lngJacinaSignala; // Jačina WiFi signala
// Za WiFi serverWiFiServer server(88); // Definisanje servera na portu 88 (moguće je izabrati port po želji)
String strLinija = ""; // Kreirati string koji će sadržavati podatke koji dolaze od klijentaString strOdgovor = "0;0;0;0;0;0"; // Unaprijed podešeni tekst za slučaj da komanda klijenta nije shvaćenaString strKomanda = ""; // String koji će sadržavati komandu koju je poslao klijent
void setup(){ Serial.begin(115200); // Pokretanje serijske komunikacije
// Konfigurisanje fiksne IP adrese WiFi shield-a IPAddress ip(192, 168, 1, 123); // IP adresa za WiFi shield IPAddress dns(208, 67, 222, 222); // DNS server za WiFi shield IPAddress gateway(192, 168, 1, 1); // Default gateway IPAddress subnet(255, 255, 255, 0); // Subnet maska const char* charHostname = "httpKomande"; // Ime ESPDuina
// Brisanje postojeće konfiguracije WiFi.disconnect(); WiFi.softAPdisconnect(); WiFi.mode(WIFI_OFF); delay(500);
WiFi.hostname(charHostname); // Hostname ESPDuina WiFi.mode(WIFI_STA); // Postavljanje modusa rada na klijent WiFi.config(ip, gateway, subnet, dns); // Podešavanje fiksne konfiguracije WiFi shield-a WiFi.begin(WiFi_mreza, WiFi_sifra); // Startanje klijent konekcije
// Konektovanje na WiFi mrežu Serial.println("Konektovanje na WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(250);
// Prikaz tačkica u prozoru serial monitora dok traje konektovanje na WiFi mrežu Serial.print("."); }
// Prazna linija poslije tačkica za konekciju Serial.println("\n");
// Ispis podataka o WiFi konekciji na serial monitor Serial.print("Konektovan na: "); Serial.println(WiFi_mreza); Serial.print("IP adresa: "); Serial.println(WiFi.localIP()); lngJacinaSignala = WiFi.RSSI(); // Printaj jačinu WiFi signala: Serial.print("Jacina signala (RSSI):"); Serial.println(lngJacinaSignala); Serial.println("-------------------------------------------------");
// Pokretanje web servera server.begin();}
void loop(){ if (WiFi.isConnected()) { // Pauza da se spriječi prebrzo slanje naredbi delay(500);
WiFiClient klijent = server.available(); // Osluškivanje klijenata
if (klijent) // Dobijen je klijent { while (klijent.connected()) // Izvršavati petlju dok je klijent konektovan { if (klijent.available()) // Ako postoje podaci za čitanje koje je poslao klijent { char charZnak = klijent.read(); // Pročitaj byte
if (charZnak == '\n') // Ako je pročitani byte znak za novu liniju (newline character) { // Ako je trenutna linija prazna, uzastopno su primljena dva znaka za novu liniju. // To je kraj klijentovog HTTP zahtjeva. Znači, pošalji odgovor. if (strLinija.length() == 0) { // Slanje odgovora klijentu samo ako je poslao odgovarajuću komandu if (strKomanda == "POCETAK" || strKomanda == "POSALJI") { // HTTP zaglavlje klijent.println("HTTP/1.1 200 OK");// HTTP zaglavlja uvijek počinju sa kodom odgovora (npr. HTTP/1.1 200 OK) klijent.println("Content-type:text/html;charset=UTF-8"); // Zatim ide tip sadržaja tako da klijent zna šta dolazi // i charset da se omogući prikaz znakova čćđšž (UTF). klijent.println();
// Sadržaj HTTP odgovora klijent.print(strOdgovor); // Sadržaj HTTP odgovora ide iza zaglavlja klijent.println(); // HTTP odgovor završava praznom linijom
// Reset zadnje komande strKomanda =""; } break; // Izlazak iz while petlje } else { strLinija = ""; // Ako je primljena nova linija, izbrisati trenutnu liniju } } else if (charZnak != '\r') { // Ako je primljeno bilo šta osim znaka za novu liniju (carriage return znaka) strLinija += charZnak; // Dodati znak na kraj trenutne linije }
// Formiranje odgovora klijentu na osnovu primljene komande if (strLinija.endsWith("GET /POCETAK")) // Poslata je komanda za provjeru konekcije { // Formiranje odgovora ako je poslat zahtjev za provjeru konekcije strOdgovor = "USPOSTAVLJENA JE KONEKCIJA";
// Setovanje komande strKomanda="POCETAK"; } else if (strLinija.endsWith("GET /POSALJI")) // Poslata je komanda za slanje podataka { // Slanje podataka klijentu // Formiranje odgovora klijentu u slučaju komade za slanje podataka (primljeno POSALJI) // strOdgovor može biti formiran od pročitanih stanja ESPDuino ulaza/izlaza ili podaci sa SD kartice... strOdgovor = "1556668831;21.10;66.60;8.90;99.90;17.52";
// Setovanje komande strKomanda="POSALJI"; } } // if (klijent.available) } // While (klijent.connected) } // If (klijent)
// Zatvaranje konekcije klijent.stop();
} // if (WiFi.IsConnected)}// Loop
Tokom pokretanja u Serial monitor prozoru Arduino IDE je mogiće vidjeti sljedeći tekst:
Konektovanje na WiFi.............
Konektovan na: mojWiFiIP adresa: 192.168.100.10Jacina signala (RSSI):-62-------------------------------------------------
Ako bi unutar else if (strLinija.endsWith("GET /POSALJI")) postavili While ili For petlju, onda bi bilo moguće poslati više podataka - npr. sadržaj cijelog niza ili čak dokumenta pročitanog sa SD kartice.
Treba napomenuti da u ovom sketch-u nije implementirana nikakva autentifikacija. Svako ko poznaje IP adresu, port i komande može poslati naredbu ESPDuino ploči i ona će biti izvršena.
Umjesto iz web browser-a komande je moguće slati i iz Android aplikacije čime se kreira dvosmjerna komunikacija između aplikacije i ESPDuina.












