ESP8266 WiFi 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 navadno že predprogramirani kot brezžični WiFi 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.
Ta vsebina je samo za naročnike
Razvojno okolje (IDE)
Predpogoja za namestitev razvojnega okolja za ESP8266 sta nameščena programski jezik Python 2.7 ali novejši, ki ga lahko prenesemo iz spletne stani https://www.python.org/downloads, in programsko orodje Git za sinhronizacijo datotek z GitHubom (javni spletni portal za objavljaje programske kode), ki ga v operacijski sistem Windows prenesemo iz spletne strani https://gitforwindows.org, medtem ko ga v Linux namestimo kar s pomočjo izbire ustrezne standardne posodobitve. Namestitveni programi razvojnih okolij za ESP8266 navadno ponudijo tudi možnost samodejnega prenosa in njune namestitve.
Večina se odloči za Arduinovo razvojno okolje (za Windows, Mac OS in Linux), ki je v osnovi namenjeno programiranju priljubljenih istoimenskih razvojnih plošč. Zato moramo vanj dodati ustrezne prevajalnike in programske knjižnice za izbrani ESP8266 modul. Nameščanje programske opreme je pretežno avtomatizirano pod pogojem, da imamo med namestitvijo na voljo internetno povezavo. V nasprotnem lahko razvojno okolje namestimo v računalnik z internetno povezavo ter ga kasneje v obliki datotečne strukture, ki jo lahko zapakiramo tudi v strnjeno datoteko (npr. tipa *.ZIP), prenesemo v drug računalnik. Ob tem dodajmo, da je potrebno razvojno okolje prenesti za vsakega uporabnika Microsoftovih Windows posebej, saj so programske knjižnice nameščene v imeniku C:Users<ime uporabnika>AppDataLocalArduino15packagesesp8266. Več o Arduino IDE v nadaljevanju.
Aplikacije za ESP8266 lahko razvijamo tudi v Espressif Systemsovem odprtokodnem razvojnem okolju ESP-IDF za Linux in Windows, ki ga poganjamo iz ukazne vrstice, lahko pa ga tudi sami integriramo v razvojno okolje Eclipse in si s tem olajšamo prehod med pisanjem in prevajanjem programske opreme. Namestitveno datoteko trenutno aktualne različice razvojnega lahko prenesemo iz naslednje spletne povezave:
https://dl.espressif.com/dl/esp-idf-tools-setup-2.0.exe.
Namestitveni program zna sam iz interneta prenesti in namestiti tako programski jezik Python, Git pa tudi zadnjo različico razvojnega okolja ESP-IDF, obenem odkrije tudi morebiti že nameščene različice in ponudi njihovo uporabo namesto ponovnega prenosa iz interneta. Omenimo še, da lahko razvojno okolje ESP-IDF prenesemo iz interneta tudi v oblike strnjene datoteke *.ZIP, da razširimo v poljuben datotečni imenik in tako namestitvenemu programu zgolj podamo pot do datotek ESP-IDF.
Strojna oprema
Pomembno vlogo pri namestitvi igra tudi strojna oprema, saj potrebujemo različna razvojna orodja tudi glede na vrsto in tip izbranega ESP8266 modula ter razvojne plošče z mostom med USB in TTL RS-232. Uporaba in programiranje ESP8266 sta sicer sorazmerno enostavni, saj v internetu najdemo veliko miniaturnih razvojnih plošč, ki na istem tiskanem vezju združujejo ESP8266 modul, most iz USB na TTL RS-232 ter napetostni regulator iz 5 V na 3,3 V, ki omogoča napajanje ESP8266 iz USB vtičnice.
Če se gradnje razvojne plošče lotimo sami, moramo mostu iz USB na TTL RS-232 in ESP8266 dodati le še nekaj uporov in kondenzatorjev ter mikrostikalo, s katerim ob zagonu ESP8266 povemo, ali ga želimo programirati in opcijsko še mikrostikalo za reset. Na sliki prikazana izvedba uporablja tudi zunanji 5 V napajalnik, s pomočjo katerega zagotovi 3,3 V napetostni regulator, LM317, stabilno napajalno napetost. Vsekakor pa to ni edina možnost. ESP8266 lahko napajamo tudi iz zmogljivejšega priključka USB (denimo USB 3.0, ki zmore do 900 mA).
Sam sem za napajanje in upravljanje ESP8266-13 modula uporabil kar ATSAMV71 Xplained Ultra razvojno ploščo, ki smo jo spoznali v 7. delu serije člankov Pametni mikrokontrolerji z arhitekturo ARM, za programiranje pa most iz USB na RS-232, CH341. Vsekakor je taka konfiguracija nastala zgolj zato, ker sem uporabil elektroniko in programje, ki sem jih imel pri roki.
Namestitev razvojnega okolja Arduino
Osnovno namestitveno datoteko za Arduino integrirano razvojno okolje (Arduino IDE), v katerem programiramo s C/C++ podobnim programskim jezikom, lahko prenesemo iz spletne strani https://www.arduino.cc/en/Main/Software. Po njegovi namestitvi odpremo meni Files-Preferences, kliknemo na zavihek Settings in v rubriko Additional Boards Manager URLs vnesemo spletni naslov https://arduino.esp8266.com/stable/package_esp8266com_index.json. V kolikor imamo ima Aduino IDE težave z dostopom do interneta, velja pregledati tudi nastavitve v zavihku Network. Zdaj v meniju ToolsBoard opazimo novo sekcijo ESP8266 Boards. Tu izberemo svojo različico ESP8266, kar vključuje tudi zmogljivost vgrajenega Flash RAMa. Obenem upoštevamo tudi zmogljivost in način implementacije mosta med USB in TTL RS232.
Namesto osnovne različice Arduino IDE lahko iz spletne strani https://github.com/esp8266/Arduino prenesemo tudi za ESP8266 že prilagojeno različico z vgrajenimi komponentami za programiranje in osnovno programsko knjižnico ESP8266WiFi in takoj začnemo z delom. Iz spleta nato po potrebi dodamo programske knjižnice, s katerimi dostopamo do pestrega nabora ostalih dodatnih funkcionalnosti ESP8266, za katere je na voljo tudi obilica primerov.
Dodajanje knjižnic izvedemo iz menija SketchInclude Library, v katerem kliknemo na Manage libraries, s čemer odpremo Library manager, v katerem vidimo pregled nameščenih in razpoložljivih programskih knjižnic, ki ga Arduino IDE obnovi vsakokrat, ko je na voljo spletna povezava. Seznam nameščenih in razpoložljivih knjižnic za ESP8266 prenese iz spletnega naslova, ki ga vnesemo v rubriko Additional Boards Manager URLs v nastavitvah. Druga možnost je dodajanje programskih knjižnic v obliki *.ZIP strnjenih datotek. Pri tem iz menija SketchInclude Library kliknemo Add .ZIP Libraries, kar odpre okno za nameščanje programskih knjižnic iz *.ZIP datotek.
Nove programske knjižnice v programske sketche (oz. enostavne programe) vključimo podobno kot v programskih jezikih C/C++; s stavki #include <ime programske knjižnice.h>, pri čemer ime programske knjižnice nadomestimo z dejanskim imenom programske knjižnice, denimo #include <ESP8266WiFi.h>. Omenimo še, da moramo pri nameščanju dodatnih programskih prevajalnikov in programskih knjižnic Arduino IDE ponovno zagnati, kar pa vseeno ne predstavlja večjih težav, saj je zagon sorazmerno hiter.
Zgradba in osnovno delovanje ESP8266
Srce ESP8266 je že od vsega začetka zmogljiv 32-bitni Tensilica mikrokontroler, L106, z vgrajenim statičnim RAMom (SRAM), vendar brez lastnega trajnega pomnilnika, ki so ga snovalci miniaturnih tiskanih vezij ESP8266-<različica modula> vsakokrat dodajo v obliki posebnega Flash RAM čipa z zaporednim dostopom preko hitrega SPI vodila. Različice modulov se tako razlikujejo predvsem po zmogljivosti Flash RAM čipa, številu krmilnih priključkov pa tudi hitrosti vgrajenega generatorja taktnih impulzov. Vse skupaj se tako pod kovinskim pokrovom na miniaturnem tiskanem vezju ESP8266 skriva nekaj uporov in kondenzatorjev, kristalni oscilator, SPI Flash čip in L106 mikrokontrolerski čip. Novejši ESP8266 moduli različic 13,14,15 itn. imajo lahko tako na voljo več zunanjih krmilnih priključkov, kot starejše različice.
ESP8266 pozna več načinov zagona. Za našo uporabo sta pomembna način normalnega delovanja in način za nalaganje nove programske opreme, ki ju izberemo z vrednostmi na vhodnih priključkih GPIO0, GPIO2 in GPIO15. Za normalno delovanje nastavimo logične vrednosti GPIO0=1, GPIO2=1 in GPIO15=0, za programiranje pa moramo nastaviti GPIO0=0, GPIO2=1, GPIO15=0. Med testiranjem sem preveril tudi kombinacije z GPIO15=1, ki omogočajo dodatne načine zagone L106 mikrokontrolerja.
Prenos podatkov
Če smo včasih protokole za asinhroni zaporedni prenos podatkov, med katerimi je najbolj znan RS232, uporabljali zgolj za žično komunikacijo med klasičnimi analognimi modemi in računalniki redkeje pa tudi za terminalsko komunikacijo, je danes ESP8266 najpogostejši razlog, zaradi katerega razvijalci nove strojne in programske opreme potrebujemo računalnik z ustreznim komunikacijskim vmesnikom ali pa most iz USB vodila na RS232 s 3,3 V napetostnimi TTL nivoji. V ta namen lahko uporabimo tudi kako obstoječo razvojno ploščo z zmogljivim mikrokontrolerjem, ali kar Raspberry Pi, ki že imajo vgrajen RS232 vmesnik z ustreznimi TTL nivoji. Vsekakor pa za slednje potrebujemo tudi pravšnji gonilnik za operacijski sistem, saj lahko le tako zagotovimo ustrezno mero sodelovanja med mostom in operacijskim sistemom osebnega računalnika za nemoten pretok podatkov. Uporaba standardnih gonilnikov (npr. Microchipovega iz programske knjižnice Harmony) pogosto zadošča le za enostavne projekte, medtem ko se pri hitrem prenosu podatkov hitro kaj zatakne. Po drugi strani, so standardnim mostom iz USB na RS232 (kot so FT232RL, CH341 ali MCP2200) že priloženi tudi ustrezni gonilniki.
Nemoten pretok podatkov zahteva tudi pravilno izvedbo žičnih povezav med TTL RS-232 vmesnikom in ESP8266 modulom. Zaradi visokih hitrosti prenosa podatkov moramo paziti da dolžina povezave za signala RX in TX na preseže 10 cm (skupaj s povezavami na tiskanem vezju), saj pri uporabi 3,3 V napetostnih nivojev prenos podatkov hitro postane nezanesljiv zaradi vpliva parazitnih kapacitivnosti. Če bi hoteli uporabiti daljši kabel, bi morali dodati ojačevalnike signala, kot jih poznamo pri klasičnih modemskih RS232 implementacijah, pri katerih uporabljamo napetostna razpona od -12 V do -5 V in +5 V do +12 V ter dovolj zmogljive tokovne gonilnike, kar omogoča hiter prenos podatkov tudi preko dvometrskega kabla. Vsekakor se lahko za tako implementacijo odločimo, če ima naš računalnik že vgrajen klasični priključek RS232 z omenjenimi nivoji. V tem primeru potrebujmo le še vhodno prilagoditveno vezje na strani ESP8266. Dobro je izbrati takega (npr. proizvajalca Maxim, ki na potrebuje dodatnega zunanjega napajanja) z negativno napetostjo.
Morda menite, da lahko težave zaobidete tudi s kakovostnejšim kablom, denimo Ethernet kablom kategorije 6, a to brez dodatne elektronike ne pomaga, saj so parice kljub fizični ločitvi za sorazmerno šibke signale še vedno preblizu skupaj. Prenos podatkov preko dodatnih 10 cm (skupaj 20 cm) žice je deloval le, ko sta bila vodnika TX in RX dovolj daleč narazen (kakšne 3 cm), krati pa sta bila oba prepletena z ozemljitvenim vodnikom. Zato je tako najbolje, da se držimo omejitve dolžine vodnikov na približno 10 cm, saj sicer sinhronizacije med ESP8266 in osebnim računalnikom, ki je potrebna za programiranje ESP8266, ni mogoče zagotoviti.
Sam sem nekaj časa preizkušal žične povezave z različnimi tipi po dveh paric, vendar sem na koncu prišel do zaključka, da je veliko bolje komunikacijski most povsem približati ESP8266 modulu in za povezavo z računalnikom raje uporabiti daljši USB 2.0 kabel (do 2 m). Potem ni težav. Podobno delujejo tudi razne razvojne plošče, na katere je poleg ESP8266 modula prispajkan tudi USB komunikacijski most s TTL RS-232 vmesnikom.
Nastavitev hitrosti prenosa podatkov
ESP8266 omogoča nastavitev različnih prenosnih hitrosti, med katerimi najpogosteje uporabljamo 115.200 baudov. Če želimo uporabljati nekoliko daljše žične povezave, lahko izberemo tudi nižje prenosne hitrosti, vse do 9600 baudov. V načinu za programiranje pa je hitrost TTL RS232 povezave med ESP8266 modulom in TTL RS-232 vmesnikom fiksno določena s hitrostjo kristalnega oscilatorja ESP8266. Denimo, pri ESP8266-13 lahko prenosa podatkov za programiranje znaša eksotičnih 74.880 baudov. Le boljši komunikacijski mostovi med USB in RS232 omogočajo izbiro natanko take hitrosti prenosa podatkov, drugi se ji lahko le približajo. Denimo, pri MCP2200 lahko nastavimo najbližjo vrednost na 75.000 baudov, kar predstavlja napako približno 0,16 %, ki jo komunikacijski most zlahka kompenzira s pomočjo stop bitov.
Povejmo še to, da lahko v razvojnem okolju izbiramo med COM vrati, oziroma med vmesniki RS-232, če jih imamo več. Vsekakor, moramo izbrati tistega, ki ustrezna tistemu, s katerim je povezan ESP8266. Izbiramo lahko tudi hitrost RS-232 povezave med programiranjem, ki znaša med 9600 baudi in 1.500.000 baudi. Slednjo sem po omenitvi povezav med ESP8266 in USB na TTL RS-232 mostom na manj kot 10 cm (oz. le na tiskano vezje) dosegel brez težav. Vsekakor pridejo najvišje hitrosti komunikacije še kako prav pri pogostem testiranju novih programov. Po drugi strani lahko, če imamo težave, izberemo nižjo hitrost; kljub temu pa začetna sinhronizacija ESP8266 in vmesnika RS-232 poteka po prednastavljeni hitrosti za programiranje, ki je dokaj visoka (npr. 74.880 baudov ali 115.200 baudov). Zato moramo vsaj v prvem koraku programiranje zagotoviti dovolj zmogljivo TTL RS-232 povezavo. Kasneje lahko prenos podatkov v serijski Flash RAM ESP8266 poteka pri nižji ali višji hitrosti, od 9600 do 921.600 baudov; sodeč po mogočih nastavitvah v Arduino IDE.
Programiranje
Zdaj, ko nam je uspelo ESP8266 modul zanesljivo povezati s PC, se lahko lotimo programiranja. Programsko kodo vnašamo in urejamo v zgornjem delu okna Arduino IDE, spodnji del s črnim ozadjem pa je namenjen sporočilom prevajalnika in programatorja, s katerim v ESP8266 prenesemo novo programsko kodo. Zanimivo je, da lahko v enem Arduino IDE hkrati pregledujemo in urejamo le en program (s končnico *.INO). Če želimo odpreti še enega, se ta samodejno odpre v kopiji okolja Arduino IDE. Kljub temu, je razvojno okolje sorazmerno enostavno za uporabo.
Ko ESP8266 modul povežemo z enimi od logičnih COM vrat osebnega računalnika, s katerimi ta komunicira s TTL RS-232 vmesnikom, preizkus delovanja povezave in programiranja opravimo v dveh korakih. Najprej v Arduino IDE iz menija Tools odpremo Serial Monitor, ki omogoča neposredni vnos sporočil in branje odgovorov preko RS-232 povezave. Pri tem lahko ESP8266 modul zaženemo v načinu normalnega delovanja, s čemer zaženemo modemski način delovanja, pri katerem uporabljamo zelo kratke ukaze in sprejemamo odgovore z nekaj 100 bajti, denimo pri pregledu WiFi dostopnih točk z ukazom AT+CWLAP. A to ni zagotovilo za siceršnje pravilno delovanje ESP8266 v načinu za programiranje. Če želimo, lahko pokusimo z orodji Espressif Systems, ki jih bomo spoznali v nadaljevanju, iz ESP8266, pred kakršnimkoli programiranjem, preko WiFi shraniti v prednaloženo originalno izvedljivo programsko kodo interpreterja za modemski način delovanja. Hkrati pravilen prenos programske kode pokaže, da TTL RS-232 deluje hitro in zanesljivo. Nato lahko prevedemo, zaprogramiramo in preizkusimo tudi svoj prvi program za ESP8266, ali pa namesto tega prenesemo gotovo vgrajeno programsko opremo, denimo posodobljeno različico AT ukaznega interpreterja, ki ga najdemo na spletni strani https://www.espressif.com/en/products/hardware, če prej poiščemo programsko opremo, ki je na voljo za našo različico ESP8266. Denimo, za ESP8266-13 (ESP8266EX) je programska oprema na voljo na spletni strani: https://www.espressif.com/en/products/hardware/esp8266ex/resources.
Orodja za neposredno programiranje Flash RAM
Poleg lastnega razvojnega okolja so pri Espressif Systems izdelali tudi programsko orodje za nalaganje programov v ESP8266, Flash download tools, ki v različico 3.6.7 prvič združuje vse štiri skupine različic ESP8266. Najstarejša je ESP8266, ki ji sledijo ESP8285 ter najnovejši ESP32 in ESP32D2WD. Po zagonu orodja za programiranje moramo tako najprej izbrati skupino, ki ustrezna našemu WiFi modulu, nakar izberemo ustrezen način programiranja in sestavimo konfiguracijo vgrajene programske opreme. Pri tem si lahko pomagamo s številnimi primeri s spleta. Sam sem se lotil ponovne vgradnje vgrajene programske opreme za AT-ukazni interpreter.
Primer iz navodil za Flash download tools v3.6.7 ni prilagojen za ESP8266-13, zato pa lahko uporabimo primer na spletni strani https://www.electrodragon.com/w/ESP8266_AT-Command_firmware, s katerim mi je uspelo sprogramirati ESP8266_AT_V1.6.2 različico AT-ukaznega interpreterja. Vsekakor so nastavitve orodja odvisne od različice modula in velikosti njegovega pomnilnika, kar še posebej velja pri tudi izbiri pomnilniških lokacij za posamezne binarne datoteke (tipa *.BIN).
Po drugi strani, lahko orodje za programiranje uporabljamo tudi za prenos lastne že prevedene programske kode iz razvojnih različnih okolij, kot sta Arduino IDE in Espressif Systemovo razvojno okolje. Je pa gotovo lažje programsko kodo iz omenjenih razvojnih okolij namestiti preko njunih vgrajenih samodejnih nalagalnikov programov, pri katerih je dovolj, da izberemo ustrezno različico modula.
Enostavni programski primeri
Z razširitvijo okolja Arduino IDE za programiranje ESP8266 modulov dobimo na voljo tudi kopico novih primerov uporabe, ki nam olajšajo pripravo lastne programske kode za različne načine njegove porabe. Če nimamo poprejšnjih izkušen s programiranje v okolju Arduino IDE, se splača začeti kar s primerom Blink, ki ga najdemo v meniju FilesExamplesESP8266. Program izmenično prižiga (logična 1) in ugaša (logična 0) digitalni vhoda/izhod IO02, na katerega je na razvojnih ploščah običajno vezana LED. Res pa je, da je isti vhod/izhod uporabljen tudi pri zagonu ESP8266 za izbiro načina delovanja ob zagonu ESP8266, zato je preko upora vezan na maso. Vendar lahko brez težav vzporedno preko upora vežemo tudi LED, ki zasveti, ko programsko spremenimo način delovanja priključka IO02 v izhodnega in nastavimo visok logični nivo, glej program 1.
Kot lahko vidimo, je programska koda v Arduino IDE vedno sestavljena iz procedure z začetnimi nastavitvami (setup) in glavne programske zanke, v kateri, ki izvaja želene funkcionalnost ESP8266 modula (loop). V našem primeru najprej z ukazom pinMode spremenimo način delovanja vhodno/izhodnega priključka IO02 v izhodnega, nato pa v programski zanki spremenimo njegovo stanje na nizko (ukaz: digitalWrite(LED_BUILTIN, LOW)), pri katerem se LEDica prižge (na razvojnih plošča je krmiljenje LEDice navadno inverzno). Nato z ukazom delay(1000) počakamo eno sekundo (1000 milisekund), nakar LED ugasnemo tako, da nastavimo na IO02 visoko logično vrednost (ukaz: digitalWrite(LED_BUILTIN, HIGH)). Kot vidimo, nam pri tem v osnovi ni potrebno skrbeti za določitev programskih konstant in izbiro ustreznih programskih knjižnic saj so najosnovnejše že vključene. Lahko pa konstanto LED_BUILTIN zamenjamo z imenom kakega drugega prostega vhodno-izhodnega priključka. Pri tem si lahko pomagamo z vgrajenim referenčnim priročnikom, ki ga odpremo iz menija HelpReference kar v spletnem brskalniku. Tako opazimo, da funkcijo pinMode in digitalWrite za prvi parameter zahtevata le številko vhodno-izhodnega priključka, drugi parameter pa je nov način delovanja, oziroma izhodna vrednost. Denimo nizko stanje priključka IO02 na ohišju ESP8266 bi lahko nastavili tudi z ukazoma pinMode(2,OUTOUT) in digitalWrite(2,0).
Eden izmed enostavnejših primerov je tudi pridobitev seznama aktivnih WiFi omrežij, pri katerem moramo poleg prednastavljenih vključiti tudi programsko knjižnico ESP8266WiFi.h. Nato v proceduri setup najprej z ukazom Serial.begin(115200) spremenimo hitrost delovanja vmesnika RS-232 v ESP8266 modulu (na 115.200 baud) in ga pripravimo za uporabo v programu kot sistemske konzole za izpis programskih sporočil. Vsekakor, ne bi bilo nič narobe, če bi se odločiti za katerokoli drugo hitrost delovanja. Nato nastavimo WiFi del ESP8266 modula kot WiFi delovno postajo, kar ustreza modemskemu ukazu AT+MODE=1 in omogoča povezovanje v WiFi omrežja, vendar ne tudi nudenje storitev kot to počno dostopne točke, glej program 2.
Sledi funkcija WiFi.scanNetworks(), s katero pridobimo seznam vseh dostopnih WiFi omrežij, ki zna biti še posebej pester v urbanih okoljih. Ostane le še izpis zajetih podatkov preko RS-232 konzole, ki ga izvedemo z ukazoma Serial.println in Serial.print, s katerima izpisujemo znakovne nize neposredno na konzolo. Pri tem ukaz Serial.println izpiše znakovni niz v novo vrstico, medtem ko Serial.print nadaljuje izpis v isti vrstici. Glede na zapisano, je nadaljnji potek programa logičen in enostaven. Identifikacijska imena dostopnih točk omrežja WiFi (oziroma SSID) lahko pridobimo z večkratnim klicem ukaza WiFi.SSID(i), pri katerem povečujemo številko odkritega omrežja od 0 do N-1, pri čemer je N število odkritih omrežij, ki ga dobimo kot izhodni parameter funkcije WiFi.scanNetworks().
Dodatno lahko v izpis vključimo tudi podatek moči signala (v decibelih, oz. dB) s posamezne dostopne točka, ki ga dobimo z ukazom WiFi.RSSI(i) in način varnostnega kodiranja podatkov, ki ga dobimo z ukazom WiFi.encryptionType(i) v obliki številčne kode. Originalni primer lahko dopolnimo še z izpisom MAC naslovov dostopnih točk, ki ga lahko za vsako dostopno točko pridobimo v obliki 6-bajtnega polja z ukazom WiFi.BSSID(i). Način izpisa je stvar »umetniške žilice« programerja…
Prihodnjič
Tokrat smo vzpostavili razvojno okolje Arduino IDE, se lotili enostavnega programiranja ESP8266 in spoznali Espressif Systemsova orodja za prenos programske kode v obliki binarnih datotek. Vendar zmore miniaturni mikrokontroler Tensilica L106, ki sicer nima lastnega Flash RAMa, še veliko več, saj je v dodatnem čipu neprimerno več Flash RAMa, kot bi ga našli v podobno zmogljivih 32-bitnih mikrokontrolerjih z vgrajenim trajnim pomnilnikom. Prednost take konfiguracije je predvsem v optimalnejši izrabi silicijeve rezine, na kateri je izdelan mikrokontroler. Prihodnjič nadaljujemo s programiranjem in spoznavanjem različnih funkcionalnosti ESP8266, saj ta poleg vmesnika RS-232 vsebuje tudi različne druge komunikacijske vmesnike in celo A/D pretvornik.
Avtor: dr. Simon Vavpotič
E-pošta: simon.vavpotic@siol.net
2020_282_38
Program 1: Utripanje LED
void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output } void loop() { digitalWrite(LED_BUILTIN, LOW); // Turn the LED on delay(1000); // Wait for a second digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off delay(2000); // Wait for two seconds }
Program 2: Skeniranje WiFi omrežij
#include »ESP8266WiFi.h« uint8_t *bssid; void setup() { Serial.begin(115200);WiFi.mode(WIFI_STA);WiFi.disconnect();delay(100); Serial.println(»Setup done«); } void loop() { Serial.println(»scan start«); // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println(»scan done«); if (n == 0) { Serial.println(»no networks found«); } else { Serial.print(n);Serial.println(» networks found«); for (int i = 0; i < n; ++i) { // Print info for each network found Serial.print(i + 1);Serial.print(»: »);Serial.print(WiFi.SSID(i)); Serial.print(» (SIG:«);Serial.print(WiFi.RSSI(i)); //signal strength Serial.print(»,MAC:«);bssid=WiFi.BSSID(i); //MAC address Serial.print(bssid[5],HEX);Serial.print(»:«); Serial.print(bssid[4],HEX);Serial.print(»:«); Serial.print(bssid[3],HEX);Serial.print(»:«); Serial.print(bssid[2],HEX);Serial.print(»:«); Serial.print(bssid[1],HEX);Serial.print(»:«); Serial.print(bssid[0],HEX); Serial.print(»,ENC:«);Serial.print(WiFi.encryptionType(i),DEC);Serial.println(»)«); } } Serial.println(»«);delay(8266); }