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.











