Avtor: dr. Simon Vavpotič
2020_283_40
ESP8266 Wi-Fi moduli, kot majhna, enostavna in učinkovita 32-bitna osnova za gradnjo naprav in sistemov Internet of Things (IoT), že leta burijo domišljijo programerjev. Čeprav so novi navadno že predprogramirani kot brezžični Wi-Fi modemi, jih lahko z lastno programsko opremo spremenimo v samostojne krmilnike enostavnih IoT naprav.
Zamisel o programiranju ESP8266 je stara že skoraj desetletje, vendar so pri kitajskem proizvajalcu teh miniaturnih dvočipnih modulov z mikrokontrolerjem Tensilica L106 in Flash RAM pomnilnikom, Espressif Systems, šele v zadnjem času uredili prijazno spletno stran, na kateri so objavili tudi dovolj podrobno programersko dokumentacijo v angleškem jeziku (prej samo v kitajščini), ki jo potrebujemo za uspešno načrtovanje elektronskih vezij in programiranje.
V preteklem nadaljevanju smo spoznali, kako namestimo in uporabljamo ESP8266 razvojna okolja s poudarkom na priljubljenem Arduino IDE, strojno opremo za komunikacijo preko v ESP8266 vgrajenega RS-232 vmesnika in kako prenašamo podatke. Analizirali smo tudi osnovni zgradbo in delovanje ESP8266, se lotili njegovega programiranja in napisali enostavna programa, prvega za krmiljenje vhodni/izhodnih priključkov, z drugim pa smo izpisali vse Wi-Fi dostopne točke v dosegu modula. Na koncu smo spoznali tudi Espressif Systemsova orodja za neposredno programiranje binarnih datotek in ponovno namestili AT ukazni interpreter, s katerim lahko ESP8266 uporabljamo podobno kot modem. Tokrat nadaljujemo s programiranjem in spoznavanjem različnih funkcionalnosti ESP8266.
Ta vsebina je samo za naročnike
Doma narejen TTL RS-232 vmesnik
Povezave ESP8266 in PC se lahko lotimo tudi tako, da tiskanino in električno shemo v celoti izdelamo sami. Microchip MCP2200 je predprogramiran mikrokontroler, ki deluje kot most med USB 2.0 in TTL RS-232 s priključki: TxD, RxD, RTS in CTS; ima pa tudi 8 splošno namenskih digitalnih priključkov (GPIO). Če želimo implementirati vse modemske signale po standardu RS-232, lahko za preostale uporabimo priključke od GPIO0 do GPIO7. MCP2200 omogoča tudi indikacijo prenosa oddajnih in sprejemnih podatkov preko GPIO6 in GPIO7, vendar lahko potem ta priključka ne moremo uporabljati v druge namene.
Prenos podatkov in upravljanje RTS in CTS signalov ter določanje trenutne hitrosti prenosa podatkov poteka preko CDC vmesnika, medtem ko ostale lastnosti določamo prek USB HID vmesnika. Izbiramo lahko posebne funkcije, kot je že omenjena možnost, da GPIO6 in GPIO7 delujeta kot indikatorja prenosa podatkov, pa tudi nastavljamo tip posameznih GPIO priključkov (vhodni ali izhodni) ter določamo vrednosti izhodov posameznih GPIO priključkov. Določamo lahko tudi prednastavljene vrednosti ki veljajo, ko MCP2200 priključimo na napajanje. Prav tako določimo prednastavljeno baudno hitrost.
Da je MCP2200 več kot idealen vmesnik za povezavo ESP8266 s PC, sem se prepričal tudi sam, ko sem ugotovil, da zmore ESP8266 programirati z efektivno hitrostjo kar 387.096 baudov; čeprav sem na začetku upal le, da bom lahko dosegel vsaj 74.880 baudov, ki so potrebni za začetek programiranja. Čeprav natančne hitrosti ure 74.880 pri MCP2200 ni mogoče nastaviti, ampak se ji lahko s 75.000 baudi le najbolj približamo, je razlika hitrosti ur ESP8266 in MCP2200 (0,16 %) kljub temu dovolj majhna, da to v nikakor ne moti prenosa podatkov. MCP2200 lahko majhne razlike taktov sproti (za programerja neopazno) kompenzira s pomočjo stop bitov. O tem se lahko prepričamo tudi iz tabele primarno podprtih baudnih hitrosti (tabela 1), ki jo navaja Microchip. Vanjo je dodana le hitrost 74.880 baudov, ki jo potrebujemo, če želimo programirati ESP8266 modul s 26 MHz oscilatorjem. Kot vidimo, bi tudi to hitrost Microchip brez težav uvrstil med primarne hitrosti. Dejansko baudno hitrost in odstopanje dejanske baudne hitrosti od želene baudne hitrosti (napako RS-232 takta MCP2200),
oziroma napako, lahko izračunamo z enačbami (slika enačbe).
ENAČBE:
<želeno delilno razmerje taktov MCP2200>= 12.000.000 Hz / <želena baudna hitrost v Hz> - 1) <dejansko delilno razmerje taktov MCP2200>= CELO_ŠTEVILO(12.000.000 Hz / <želena baudna hitrost v Hz> - 1) <dejanska baudna hitrost MCP2200>= 12.000.000 / (<dejansko delilno razmerje taktov MCP2200> + 1) baudov <napaka oz. odstopanje dejanske in želene baudne hitrosti>= ABSOLUTNA_VREDNOST(1-<želena baudna hitrost>/<dejanska baudna hitrost MCP2200>
Razveseljuje tudi dejstvo, da Microchip celo hitrost 921.600 baudov navaja med primarnimi; kar pomeni, da lahko iz Arduino IDE programiramo ESP8266 celo pri najvišji mogoči hitrosti, če so povezave med njim in MCP2200 dovolj kratke. Zato lahko trdimo, da je MCP2200 odlična izbira. Zdaj, ko smo zanesljivo povezali ESP8266 s PCjem še na alternativni način, pri katerem komunikacijski most med USB 2.0 in RS-232 izdelamo sami in smo matematično preverili usklajenost ur za prenos podatkov pri različnih baudnih hitrostih, se lahko posvetimo samo programiranju ESP8266.
Program za upravljanje MCP2200 vmesnika za krmiljenje in programiranje ESP8266 lahko prenesete iz spletne strani https://sites.google.com/site/pcusbprojects.
Želena hitrost [baud] | Dejanska hitrost [baud] | Napaka v [%] |
300 | 300 | 0,00 |
1200 | 1200 | 0,00 |
2400 | 2400 | 0,00 |
4800 | 4800 | 0,00 |
9600 | 9600 | 0,00 |
19200 | 19200 | 0,00 |
38400 | 38339 | 0,16 |
74880 | 75000 | 0,16 |
57600 | 57692 | 0,16 |
115200 | 115385 | 0,16 |
230400 | 230769 | 0,16 |
460800 | 461538 | 0,16 |
921600 | 923077 | 0,16 |
Tabela 1: Primarno podprte baudne hitrosti MCP2200 in hitrost 74880 baudov
Podrobno o zagonu ESP8266
V preteklem nadaljevanju smo omenili, da morajo biti logične vrednosti GPIO15, GPIO2 in GPIO0 enake: 0, 1 in 1, če želimo normalen ESP8266 zagon in 0, 1, 0, če želimo zagon v načinu za programiranje. Če želimo omenjene priključke uporabljati med delovanje modula tudi za druge namene, jih vsekakor ne smem vezati neposredno na maso ali na napajanje. Pomagati si moramo z ustreznimi upornostmi in pri tem upoštevati, da tok na posameznem priključku ESP8266-13 ne sme preseči 12 mA, obenem pa mora biti upornost proti napajanju ali masi dovolj majhna, da ESP8266 modul ob zagonu na priključku zazna želeno vrednost. Za GPIO02 lahko uporabimo upora 4,7 k Ohm proti napajanju, medtem ko se moramo GPIO0 lotiti drugače, če ga želimo tudi krmiliti. Nekateri v vezja vgrajujejo mikrostikala, s katerimi GPIO0 za kratek čas vežemo na maso, ko želimo, da se ESP8266 zažene v načinu za programiranja, lahko pa krmiljenje izvedemo tudi povsem digitalno, tako da uporabimo upora 330 Ohm in 4,7 kOhm. Pri tem 330 k ohmski upor vežemo neposredno na GPIO0, nanj pa 4,7 k ohmski upor, ki ga vežemo na napajanje. Zdaj je vseeno, če krmilna digitalna naprava po zagonu ESP8266 v načinu za programiranje krmilni signal za GPIO zadrži v nizkem stanju in ga ne postavi v tretje stanje (kot vhod), saj bo tudi primeru napetostne razlike 3,3 V čez 330 k ohmski upor lahko stekel največ tok 10 mA.
Še nekaj besed velja nameniti tudi priključkoma EN (enable) in RST (reset). Oba sta pri ESP8266 samo vhoda, zato ni narobe, če ju spojimo na maso ali napajanje brez dodatne upornosti, vendar moramo upoštevati, da je potrebno RST signal v primerjavi s priklopom 3,3 V napajanja na priključek 3V3 nekoliko zakasniti. Ker ima priključek RST vgrajen Schmittov prožilnik, lahko zakasnitev realiziramo kar s kapacitivnostjo in upornostjo, ali programsko, če RST prožimo iz krmilne naprave.
Priključek EN, ki je aktiven v visokem stanju, lahko uporabimo za programsko ugasnitev delovanja ESP8266 modula, pri čemer ima ta neznatno porabo električne energije. Če ESP8266 ne bomo ugašali, ali EN brez skrbi vežemo tudi na napajanje. Če namesto tega v nizkem stanju držimo le priključek RST, je poraba ESP8266 modula precej višja.
Krmiljenje električnih porabnikov prek Wi-Fi
Čeprav ESP8266 nima prav veliko GPIO priključkov, jih za enostavna krmilja, kot je prižiganje in ugašanje luči in drugih porabnikov v stanovanju, navadno ne potrebujemo veliko. Za krmiljenje relejev lahko uporabimo vmesniško vezje ULN2803 z osnimi ojačevalniki signala, ki omogočajo hkratno krmiljenje do 8 relejev, s tokom do 100 mA in z napetostmi do 50 V , glej program 1.
Sestavljanje strojne opreme je torej preprosto, a potrebujemo še vgrajeno programsko opremo za spletni strežnik, s katero bomo omogočili varno krmiljenje ESP8266 iz osebnega računalnika ali pametnega telefona. V Arduino IDE lahko iz meniju FileExamplesESP8266WebServer poiščemo kopico zanimivih primerov. Za začetek se splača uporabiti kar HelloServer, ki ESP8266 spremeni v enostaven HTTP strežnik, ki ob prijavi klienta v obliki spletne strani iz piše pozdravno sporočilo »hello from esp8266!«, v primeru napake pri povezovanju pa vrne opis napake. Obenem ESP8266 v originalnem primeru tudi pomežikne z LED, ki je vezana na GPIO13. Pogoj za delovanje strežnika je že vzpostavljena Wi-Fi dostopna točka, s kateri se ESP8266 poveže z SSID in geslom. Nato lahko z njim komunicirajo tudi drugi s to dostopno točko povezani računalniki. V primeru je uporabljena tudi DNS storitev, ki jo mora v tem primeru zagotavljati Wi-Fi dostopna točka. Z njo ESP8266 samodejno pridobil svoj IP naslov, IP naslov DNS strežnika ter IP naslov morebitnih komunikacijskih vrat, preko katerih lahko dostopa od drugih internetnih (pod)omrežij, ali celo do interneta. Programska koda primera je enostavna, saj se opira na številne kompleksne programske knjižnice; vseeno pa pojasnimo nekaj ključnih ukazov. WiFi.mode(WIFI_STA) vzpostavi način delovanja delovne postaje W-Fi, ki se lahko poveže z dostopno točko, ki je navadno domači brezžični usmerjevalnik. Povezavo s slednjo vzpostavimo z ukazom WiFi.begin(ssid, password), v katerem kot parametra navedemo SSID omrežja (oz. ime obrežje Wi-Fi) in pristopno geslo (parameter password). Dostopna točka po uspešni prijavi dodeli IP naslov, ki ga lahko preberemo z ukazom WiFi.localIP(). Vsekakor ni slabo, če DNS strežniku v Wi-Fi dostopni točki nato povemo, katero uporabnikom prijazno ime želimo povezati z dodeljenim IP naslovom ESP8266 v lokalnem omrežju; kar storimo, denimo z ukazom MDNS.begin(“ESP8266”), če želimo izbrati ime »ESP8266«. , glej program 2.
Naslednji korak je vzpostavitev storitve HTTP, s katero se lahko ESP8266 drugim računalnikom v Wi-Fi omrežju predstavi kot spletna stran, preko katere lahko upravljamo električne porabnike. Najprej z ukazom server.on(“/”, handleRoot) vzpostavimo povezavo s povratno klicanim podprogramom handleRoot (lahko bi ga poimenovali tudi drugače), ki izpiše korensko spletno stran, iz katere lahko krmilimo električne porabnike. Vendar je v primeru HelloServer spletna stran premalo kompleksna za krmiljenje na daljavo, saj vsakokrat izpiše le pozdravno besedilo: »hello from esp8266!«, glej program 3.
Zdaj potrebujemo še nekoliko kompleksnejšo vsebino spletne strani in programje s katerim bomo lahko upravljali tudi vsaj en digitalni izhod ESP8266, s katerimi bomo lahko krmilili rele za vklop/izklop električnega porabnika. V ta namen spremenimo podprogram handleRoot, kot je prikazano v Programu 3. Slednji zdaj zapiše novo stanje GPIO priključka ESP8266, s katerim krmilimo rele tako, da ustreza vrednosti spremenljivke spletnega strežnika led. Nato oblikuje novo besedilo spletne strani, ki omogoča, da s klikom na povezavo vrednost spremenljivke led invertiramo. Pri tem ne smemo pozabiti, da se podprogram handleRoot izvaja ciklično in se je spremenjena vrednost led upoštevana ob začetku naslednjega cikla, ko se spremeni tudi vrednost izhodnega priključka. Nazadnje moramo v programu 1 le še odkomentirati zakomentirano vrstico, čemer ob zagonu spletnega strežnika v njegovem kontekstu vzpostavimo novo spremenljivko led.
Spletni strežnik in dostopna točka
Zanimivo je, da med številnimi primeri v Arduino IDE ne najdemo niti enega, ki bi združeval funkcionalnosti dostopne točke in spletnega strežnika. Ta funkcionalnost je zanimiva predvsem tam, kjer nimamo vzpostavljene Wi-Fi infrastrukture in želimo le občasno dostopati do ESP8266 iz poljubnega (prenosnega) računalnika ali mobilnega telefona. V ta namen moramo nekoliko spremeniti kodo procedure void setup(void), v kateri v ukazu WiFi.mode zamenjamo parameter WIFI_STA s parametrom WIFI_AP_STA, ki pomeni da bo ESP8266 hkrati Wi-Fi dostopna točka in krati odjemalec za druga Wi-Fi omrežja. Uporabili bi lahko tudi parameter WIFI_AP, s katerim bi ESP8266 postal samo dostopna točka in ne bi mogel, na primer izpisati Wi-Fi omrežj v svojem dosegu.
Nato z ukazom WiFi.softAPConfig podamo še IP naslova WEB strežnika in Wi-Fi dostopne točke ter masko Wi-Fi omrežja. Omenjena IP naslova sta enaka, saj ESP8266 v našem primeru združuje obe funkcionalnosti. Na koncu z ukazom WiFi.softAP poljubno izberemo še SSID našega novega Wi-Fi omrežja in geslo za prijavo vanj. Omenimo še, da moramo pri tem iz podprograma void loop() odstraniti ukaz MDNS.update(), ki je prej osveževal informacije iz DNS strežnika dostopne točke, saj je zdaj ESP8266 samostojna dostopna točka. Če bi hoteli storitev DNS, bi jo morali pred prvim klicem MDNS ustvariti v okviru dostopne točke , glej program 4.
Novoletna jelka malo drugače
Čeprav so božično-novoletni prazniki mimo, je krmiljenje okrasne razsvetljave iz pametnega telefona vsekakor zabavna in sorazmerno enostavna programska aplikacija, v katero lahko vključimo tudi večopravilnost. Pri tem zaradi sorazmerno nizkih krmilnih napetosti (pod 50 V) ne potrebujemo relejev. ESP8266 lahko krmili tudi močnostno tranzistorsko logiko, vendar moramo tu še posebej paziti, da visoke napetosti ne pridejo v 3,3 napajalno napetost. Krmiljenje lučk novoletne jelke je sicer sorazmerno enostavno, saj so navadno povezane v štiri verige, ki jim lahko mikrokontroler zvezno spreminja svetlobno jakost s krmiljenjem tranzistorskega ojačevalnika. Jakost svetlobe vsake verige lahko spreminjamo s pomočjo impulzno-širinske modulacije z osnovno frekvenco nekaj 100 Hz. Problem hkratnega krmiljenja štirih izhodov je zato podoben, kot problem poganjanje večfaznega elektromotorja, le da so veje lučk povsem neodvisne. Programe prižiganja in ugašanja lučk si seveda lahko izmislimo po svojih željah. V primerjavi z enostavnimi krmilniki, zna ESP8266 natančno meriti čas, brez težav pa si zapomni tudi najbolj zapletene programe utripanja, lahko pa ga upravljamo tudi preko pametnega telefona. Zato je bo novoletna jelka prihodnje novo leto vsekakor vredna ogleda. Povejmo še to, da lahko kot osnovo za krmiljenje močnostnih tranzistorjev preko največ 8 digitalnih izhodov uporabimo kar vezja ULN2803, s katerim lahko krmilimo tudi releje. Vendar je potrebno poudariti, da nekateri krmilniki lučk slednje krmilijo z izmenično napetostjo 50 Hz, ki je le transformirana iz 250 V~ na 36 V~. Zato mora tranzistorski ojačevalnik poskrbeti za regulacijo izmenične napetosti. Kakorkoli, v internetu najdemo kopico načrtov za tovrstne regulatorje, ki jih lahko krmilimo z enosmerno napetostjo.
SD kartice in datotečni sistemi
ESP8266 module lahko kupimo posamično, ali vgrajene na razvojnih ploščah različnih proizvajalcev. SD kartice z moduli povežemo prek vodila SPI s štirimi priključki CS, MOSI, CLK in MISO. ESP8266-13 strojno podpira le eno SPI vodilo, katerega priključki se preslikajo na GPIO12 (HSPI_MISO), GPIO13 (HSPI_MOSI), GPIO14 (HSPI_CLK) in GPIO15 (HSPI_CS). Slednjega potrebujemo tudi pri zagonu ESP8266, ko mora imeti logično vrednost 0, razen če želimo ESP8266 zagnati iz SD kartice, za kar pa v internetu za enkrat ne najdemo dovolj podrobnih navodil. Kljub temu je veliko pomembneje, da lahko ESP8266 dostopa do SD kartice kot pogona za masovno hrambo podatkov. Ena izmed možnosti je zato vezava GPIO15 na maso preko 1 k ohmskega upora, kar omogoča njegovo hkratno uporabo kot krmilnega priključka (HSPI_CS), s katerim omogočimo delovanje SD kartice na vodilu SPI. Vsekakor velja poudariti, da imamo lahko krati z ESP8266 preko hitrega vodila SPI povezanih tudi več SD kartic ali celo kak LCD prikazovalnik, če pravilno krmilimo njihove CS priključke, tako da je hkrati aktiven le eden. Morda velja spomniti, da lahko v doma izdelano tiskanino z ESP8266 vgradimo tudi dekoder SPI vodila, ki ustvari 4 ali 8 CS signalov iz dveh ali treh naslovnih bitov. Tako lahko hkrati prihranimo skopo odmerjene GPIO in hkrati povežemo še več naprav. Povejmo še, da uporaba GPIO15 za CS ni obvezna, programska knjižnica SD.h omogoča poljubno izbiro GPIO, razen tistih GPIO, ki so namenjeni signalom SPI vodila. Kljub temu je GPIO15 priporočljivo uporabiti iz dveh razlogov. Prvič zato, ker vezava 1 k ohmskega upora na maso na spremeni njegove uporabnosti za ustvarjanje signala CS, drugič pa zato, ker je večina programskih primerov že prednastavljena za uporabi GPIO15 kot signala CS.
V shemi 1 so predstavljene povezave ESP8266 z različnimi tipi pomnilniških kartic, ki uporabljajo podobne povezave za priklop na SPI vodilo. Vseeno omenimo, da nekatere od prikazanih pomnilniških kartic omogočajo tudi drugačne in hitrejše vrste prenose podatkov, a o tem raje v katerem od prihodnjih nadaljevanj. Gotovo se že sprašujete, koliko stane vtičnica za SD kartice, vendar je zahvaljujoč poplavi adapterjev iz SD na miniSD, skoraj ne potrebujemo. Danes so skoraj vse nove pomnilniške kartice velikosti miniSD, proizvajalci pa jih pogosto prodajajo skupaj z adapterjem iz SD formata na miniSD format. Tako je najpreprostejša rešitev, da povezovalni kabel z ESP8266 preprosto prispajkamo na adapter, kar nam omogoča izmenjavanje miniSD kartic. Tako ne potrebujemo drugega kot povezovalni kabel.
Pester nabor programskih knjižnic za ESP8266 v Arduino IDE omogoča tudi enostaven priklop kartice SD, ki jo lahko uporabljamo kot masovno podatkovni pogon, podobno kot pri Rasberry Pi. V ta namen moramo vključiti programski knjižnici SPI.h in SD.h, ki nudita podporo delovanju zaporednega vodila SPI in delovanju različnih tipov SD kartic. Pohvalno je, da brez težav delujejo pomnilniške kartice z več 10 GB Flash RAM. Tudi programskih primerov v Arduino IDE ne manjka.
Za testiranje pravilnosti povezav ESP8266 s pomnilniško kartico se splača v ESP8266 najprej prenesti in zagnati primer SDInfo, ki se poveže s SD kartico in izpiše njene osnovne podatke, kot so kapaciteta, tip datotečnega sistema in tip pomnilniške kartice. V začetku programa lahko s pomočjo spremenljivke SD_CHIP_SELECT tudi poljubno nastavimo GPIO, ki smo ga uporabili za ustvarjanje CS signala. Prednastavljena vrednost je SS, kar je enako GPIO15. Namesto te lahko podamo številko poljubnega GPIO; denimo za GPIO4 namesto SS zapišemo vrednost 4.
Zdaj se lahko lotimo uporabe pomnilniške kartice. Primer branja in pisanja datotek je poimenovan kar ReadWrite. Zanimiv je zato, ker omogoča enostavno zapisovanje novih podatkov v izbrano datoteko na pomnilniški kartici. Vidimo lahko, da je pravzaprav skoraj vseeno ali podatkovni ukaza print ali println usmerimo na RS-232 ali v datoteko. Vsekakor, moramo pred pisanjem RS-232 opreti in določiti hitrost povezave, medtem ko moramo s SD kartico najprej vzpostaviti povezavo z ukazom SD.begin, pri katerem kot edini parameter podamo GPIO za signal CS. Nato odpremo datoteko z ukazom SD.open, pri čemer podamo tudi tip dostopa (npr. pisalni je FILE_WRITE) in začnemo pisati vanjo. Ukaz vrne objekt datoteke tipa File, ki ga nato uporabljamo za dostop do nje (denimo: MyFile.println(“test”)). Pisanje v datoteko zapremo z ukazom close(), ki ga izvedemo iz objekta datoteke, npr.: MyFile.close(); Celotno programsko kodo primera WiFiSCAN_DEMO lahko prenesete iz spletne strani https://sites.google.com/site/pcusbprojectsdownloads , glej program 5.
Prihodnjič
Tokrat smo spoznali, kako ESP8266 deluje kot dostopna točka in spletni strežnik. Na daljavo smo z relejskim ali tranzistorskim vezjem krmilili električne porabnike. Nazadnje pa smo ESP8266-13 povezali s SD kartico in najprej preverili, njeno pravilnost delovanja, nato pa v datotečnem sistemu FAT32 odprli novo datoteko in vanjo pisali. Prihodnjič nadaljujemo z veliko novimi primeri uporabe ESP8266 modula. Podrobneje si bomo ogledali tudi zgradbo zelo zmogljivega in svojevrstnega Tensilica L106 procesorja v jedru ESP8266 modulov…program 1 – Vzpostavitev Wi-Fi spletnega strežnika
void setup(void){ Serial.begin(115200); while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(».«);} Serial.print(»Connected to »);Serial.println(ssid);Serial.print(»IP address: »); Serial.println(WiFi.localIP()); if(MDNS.begin(»ESP8266«)){Serial.println(»MDNS responder started«);} server.on(»/«, handleRoot); //server.on( »/led=1«, handleRoot);server.on (»/led=0«, handleRoot); server.on(»/inline«,[](){server.send(200, »text/plain«, »this works as well«);}); server.onNotFound(handleNotFound);server.begin(); Serial.println(»HTTP server started«); }
program 2 – Vzpostavitev Wi-Fi spletnega strežnika
void handleRoot() {server.send(200, »text/plain«, »hello from esp8266!«);}
program 3 – Spletna stran za krmiljenje releja
void handleRoot(){ digitalWrite(ledPin, server.arg(»led«).toInt());ledState = digitalRead(ledPin); char ledText[80];if(ledState)strcpy(ledText,«<h2>LED is on. <a href=«/?led=0«>Turn it OFF!</a></h2>«) else strcpy(ledText,«<h2>LED is OFF. <a href=«/?led=1«>Turn it ON!</a></h2>«); char html[2000];int sec=millis()/1000;int min = sec/60;int hr=min/60; snprintf(html, 2000,«<html><head><meta http-equiv='refresh' content='10'/><title>ESP8266 WiFi Network</title><style>body {background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; font-size: 1.5em; Color: #000000; }h1 { Color: #AA00BB; }h2 { background-color: #2011AA; font-family: Arial, Helvetica, Sans-Serif; font-size: 3em; Color: #CCCCCC; }</style></head><body><h1>ESP8266 Wi-Fi Access Point and Web Server TEST v3</h1><p>Uptime: %02d:%02d:%02d</p><p>%s<p><p>Refresh every 10 seconds, or click <a ref=«javascript:window.location.reload();«>here</a> to refresh now. now.</p></body></html>«,hr, min%60, sec%60, ledText); server.send( 200, »text/html«, html ); }
program 4
const char *ssid = »KarNekaj«; const char *password = »MojeGeslo«; IPAddress apIP(192,168,4,1); WiFi.mode(WIFI_AP_STA); WiFi.softAPConfig(apIP,apIP,IPAddress(255,255,255,0)); WiFi.softAP(ssid, password);
program 5
#include <SPI.h> #include »SdFat.h« using namespace sdfat; SdFat SD;File F1; … if(!SD.begin(SS)){Serial.println(»SD initialization failed!«);return;} else {Serial.println(»SD initialization: OK«);} F1 = SD.open(»test.txt«, FILE_WRITE); if(F1){F1.println(»DATA...«);} if(F1){F1.println(»«);F1.close();}