ESP8266 on Espressif Systemsi toodetav odav WiFi integraallülitus, mis sisaldab TCP/IP protokollipinu ja 32-bitist mikrokontrollerit. ESP8266 kiipe hakati tootma suuremates kogustes 2014. aastal. Ühe kiibi hind on alla kahe dollari ja valmis moodulid, mis sisaldavad nii ESP8266 kiipi kui ka väliseid komponente, mis on selle tööks vajalikud, maksavad alla kolme dollari. Sellest tuleneb ka nende kiipide populaarsus.[1]

AI-Thinker ESP8266 moodul
Nimi ESP8266
Tootja Espressif
CPU taktsagedus 80 MHz (vaikimisi) kuni 160 MHz
Toitepinge 3,3 V
Tüüp mikrokontroller
Mälu 64 KiB instruktsioonidele, 96 KiB andmetele

Esimene ESP8266 kiip jõudis lääneriikides huviliste tähelepanu alla 2014. aasta augustis ESP-01 mooduli näol. Selle mooduli abil sai ühendada mikrokontrollereid Wi-Fi võrkudega ja luua TCP/IP ühendusi kasutades AT-käsustikku. Sel ajal aga puudus peaaegu täielikult ingliskeelne dokumentatsioon kiibile ja sellel oleva programmi käsustikule. Kiibi väga madal hind ja vähene väliste komponentide arv, mis kiibi tööks vajalikud on, tekitasid huvilistes tahet seda moodulit, kiipi ja tarkvara uurima ning dokumenteerima hakata. Nüüdseks on hiinakeelne dokumentatsioon terviklikult inglise keelde tõlgitud ja materjale ESP8266 kohta leidub laialdaselt.[2]

Sellest kiibist on ka teisi versioone, näiteks ESP8285, millel on 1 MiB välkmälu, ning ESP32, mis on ESP8266 järeltulija.

Tehniline kirjeldus muuda

ESP8266-l on 32-bitine RISC keskprotsessor Tensilica Xtensa L106, mis töötab vaikimisi 80 MHz taktsagedusel, kuid ülekiirendamise abil saab panna seda käima ka sagedustel 160 MHz kuni 346 MHz[3]. Toitepingeks on 2,2–3,6 volti, nimiväärtusena 3,3 volti. Voolutarve on väga sõltuv režiimist ja programmist, mis sellel jookseb. Seisatud režiimis on voolutarve 10 µA, kuid kuulamisrežiimis töötades võib see olla 60 mA ja täisvõimsusel andmeid saates võib voolutarve olla ka kuni 200 mA. See teeb patareidel töötavate seadmete eluea arvutamise keeruliseks.[1]

Veel on sellel:

  • 64 KiB muutmälu masinakäskude jaoks ja 96 KiB muutmälu andmete talletamiseks
  • 512 KiB kuni 4 MiB välist QSPI välkmälu (toetatud kuni 16 MiB)
  • IEEE 802.11 b/g/n Wi-Fi tugi
    • Kuni 5 paralleelset TCP ühendust
    • Kiibis on integreeritud saatmise-vastuvõtmise lüliti, sümmeetrimistrafo, võimendid (LNA ja PA) ja impedantsi võrdsustamise skeem
    • WEP ja WPA/WPA2 autentimine ning ka avatud võrk
  • 16 GPIO viiku
  • SPI, I²C ja I²S,
  • UART (üks RX ja TX viikudega, teine ainult TX viiguga)
  • 10-bitine ADC

Arhitektuur muuda

 
ESP8266 kiibisisesest ränist tehtud pilt

ESP8266 põhineb 32-bitisel Tensilica Xtensa L106 RISC keskprotsessoril. Kasutusel on Harvardi arhitektuur, mistõttu on programmi- ja andmemälu täielikult eraldatud.

Kiibi räni suuruseks on 2050x2169 µm, millest poole võtavad enda alla saatja, vastuvõtja ja võimendid. Vasakul üleval nurgas asub vastuvõtja, milles on näha kaks induktiivpooli. Selle all on näha suure induktiivpooliga saatjat. Sellest poolist paremale jääb vastuvõtja madalpääsfilter ja analoog-digitaalmuundur. Selle all asub saatja digitaal-analoogmuundur. Ülejäänud ruumi võtavad enda alla kiibisisene mälu, Xtensa LX106 keskprotsessor ja muu digitaalne loogika.[4]

Sellel mikrokontrolleril pole välkmälu sisse ehitatud ja seega sõltub välisest SPI liidese kaudu ühendatud välkmälust. Selle peal täidetakse programmi, laadides dünaamiliselt erinevaid programmi osasid välkmälust instruktsioonipuhvrisse.

Kiibi tootja ei ole avalikustanud dokumentatsiooni kiibi siseperifeeria kohta. Selle asemel avalikustati kogumik teeke, mille kaudu saavad programmeerijad perifeeriat kontrollida. Kuna need teegid kasutavad palju RAM mälu, ei täpsusta tootja kogu kiibi mälu hulka vaid ainult ligikaudset mälukogust, mis jääb kasutajale kasutamiseks pärast teekide laadimist. Selleks on ~50 KiB.

Wi-Fi muuda

ESP8266 on võimeline töötama kolmes režiimis. See võib töötada pöördepunktina (access point), võrguseadmena (station) või mõlemana korraga. Tüüpilise kasutuse juures ühendub ESP8266 välise võrgu külge, kuid selleks on sellel vaja teada välise võrgu SSID-d ja parooli. Selliste parameetrite konfigureerimiseks on pöördepunktina töötamine kasulik, kuna siis saab teiste seadmetega ühenduda ESP8266 külge, mis on nähtav Wi-Fi võrguna. Nii pöördepunktina kui ka võrguseadmena töötades suudab ESP8266 toimida veebiserverina, jagades välja faile ja ka reaalajas genereeritud andmeid.

Programmi kirjutades peavad toimima kõik protseduurid sündmustel (callback) ja ükski protseduur ei tohiks kulutada rohkem aega kui 2 ms. Kui mõne funktsiooni täitmine peaks võtma rohkem aega kui pool sekundit, teeb valvetaimer (WDT) kiibile restardi. Selle eesmärk on programmi mitte ettekavatsetud seiskumisel uuesti programm käivitada, kuid teeb samas programmi kirjutamist keerulisemaks.

Viikude kirjeldus muuda

Järgnevas tabelis on toodud ESP8266 jalgade nimetused ja funktsioonid.[5]

Viigu number Viigu nimi Viigu kirjeldus
1 VDDA Analoogskeemide toitepinge 3,0–3,6 volti
2 LNA Antenni ühenduskoht
3 VDD3P3 Võimendi toitepinge 3,0–3,6 volti
4 VDD3P3 Võimendi toitepinge 3,0–3,6 volti
5 VDD_RTC ühendamata
6 TOUT Saab kasutada 10 bitise ADC sisendina
7 CHIP_EN Kõrge signaal – kiip töötab normaalselt; madal signaal – välja lülitatud, minimaalne voolutarve
8 XPD_DCDC GPIO 16
9 MTMS GPIO 14, SPI CLK
10 MTDI GPIO 12, SPI MISO
11 VDDPST Digitaalloogika toitepinge 1,8–3,3 volti
12 MTCK GPIO 13, SPI MOSI, UART0 CTS
13 MTDO GPIO 15, SPI CS, UART0 RTS
14 GPIO2 GPIO 2, UART Tx programmi pealelaadimisel
15 GPIO0 GPIO 0, SPI CS2
16 GPIO4 GPIO 4
17 VDDPST Digitaalloogika toitepinge 1,8–3,3 volti
18 SDIO_DATA_2 GPIO 9
19 SDIO_DATA_3 GPIO 10
20 SDIO_CMD GPIO 11, SPI CS0
21 SDIO_CLK GPIO 6, SPI CLK
22 SDIO_DATA_0 GPIO 7, SPI MISO
23 SDIO_DATA_1 GPIO 8, SPI MOSI
24 GPIO5 GPIO 5
25 U0RXD GPIO 3, UART Rx välkmälu programmeerimisel
26 U0TXD GPIO 1, UART Tx välkmälu programmeerimisel
27 XTAL_OUT Kristallresonaatori ühendamiseks
28 XTAL_IN Kristallresonaatori ühendamiseks
29 VDDD Analoogskeemide toitepinge 3,0–3,6 volti
30 VDDA Analoogskeemide toitepinge 3,0–3,6 volti
31 RES12K Tuleb ühendada läbi 12k takisti maaga
32 EXT_RSTB Välise restardi signaali sisend
33 GND Kiibi alune keskmine jooteväli tuleb ühendada toitepinge maaga

AT-käsustik muuda

Tehasest tulles on ESP8266 peal programm, millega saab seda kiipi kontrollida üle UART liidese kasutades Hayesi käsustikule sarnaseid AT-käske. Neid käske kasutades saab luua võrguühendusi, ilma et peaks teadma, kuidas seda mikrokontrollerit ennast süsteemitasandil programmeerima peab. Iga AT käsk peab lõppema reavahetusega (\r\n).[1] Kui alguses oli AT käsustiku kasutamine ainus võimalus kiibiga võrguühenduste loomiseks, siis hiljem avaldas Espressif arendustarkvara, millega sai ka kiibile uusi programme luua.

Arendustarkvarad muuda

Alguses oli see kiip kasutatav vaid tootja poolt tehases peale lastud tarkvara kasutades. Selle jaoks oli vaja välist protsessorit, mis ühendus ESP8266ga kasutates AT-käsustikku. 2014. aasta oktoobri lõpus avaldas Espressif arendustarkvara (SDK), mis laseb seda mikroskeemi programmeerida. Sellega kadus vajadus välise protsessori üle. Espressif on sellest arendustarkvarast välja andnud mitu versiooni, millest praegu on toetatud kaks. Üks neist põhineb FreeRTOS-il ja teine sündmustel (events).[6]

Espressifi enda väljapakutud arendustarkvarale on lisandunud palju vabavaralisi alternatiive:

Programmide pealelaadimine muuda

ESP8266 välkmällu uute programmide laadimiseks tuleb GPIO0 jalg ühendada GND-ga ja CH_PD jalg Vcc-ga. Seejärel on võimalik programme UART liidese kaudu peale laadida. Vaike-ühenduskiirus on 115200 boodi/s. Kui programm on peale laaditud, tuleb programmi käivitamiseks GPIO0 ühendada Vcc-ga ning teha moodulile restart kas toitepinget lahti ja külge ühendades või RESET jala kaudu restardi olukorda välja kutsudes.

Hiljem on lisandunud OTA (Over The Air) võimalus, mis laseb ESP8266-le laadida programme peale juhtmevabalt. Üleslaadimise käigus jagatakse välkmälu kaheks võrdseks osaks: ühes paikneb jooksev programm ja teise poolde kirjutatakse uus programm. See seab ka mälu suuruse piirangu ehk programm peab olema vähemalt 2 korda väiksem kui välkmälu hulk. See välistab 512 KiB ESP-01 moodulitel OTA kasutamise, kuna teegid ise võtavad sellest üle poole ära. Kui kogu programm on mälu teise poolde kirjutatud, sätitakse lipp, mis näitab, et programmi käivitamist tuleb järgmisel korral alustada mälu teisest poolest. Kui uuesti OTA laadimist tehakse, laaditakse programm välkmälu esimesse poolde ning sätitakse lipu väärtus selliseks, et programmi käivitamist alustatakse välkmälu esimesest poolest. OTA kasutuse jaoks on vajalik alati programmi peale laadides sisaldada uues koodis ka see programm, mis on võimeline programmi võrgu kaudu välkmälu õigesse kohta kirjutama. Kui ilma selleta laadida programm ESP8266 peale, siis OTA funktsionaalsus kaob.[1]

Moodulplaadid muuda

Tehasest tulnud kiibid on väikesed ja seega oleks nendega toodete prototüüpide arendamine keeruline. Et arendustööd lihtsamaks teha, on loodud moodulid, millel on ESP8266 kiip koos erinevate muude komponentidega, mis teevad selle kiivi kasutamise mugavamaks. Kõik moodulid kasutavad sama ESP8266 kiipi, suurim erinevus erinevate moodulite vahel on välja toodud GPIO jalgade arv, pistiku tüüp ja kaasa pandud mälu suurus.[1] Mõningatele moodulitele, näiteks Adafruiti HUZZAH'le ning NodeMCU devKitile, on integreeritud ka USB to Serial konverter ja 5V -> 3,3V pingemuundur, mis teeb arendustöö eriti lihtsaks, kuna seda saab otse USB kaudu sidestada.

Espressifi moodulplaadid muuda

 
Espressif Systemsi ESP-WROOM-02 moodul

Espressif on välja andnud moodulplaadi ESP-WROOM-02, millel on ESP8266 integraalskeem, antenn (rada trükkplaadil, 2 dBi), 26 MHz ostsillaator ja 18 jalga[7]. See moodul on kaetud metallkattega.

AI-Thinkeri moodulplaadid muuda

 
AI-Thinkeri ESP-01 moodul
Need on esimesed kolmanda osapoole loodud moodulplaadid, mis sisaldavad ESP8266 kiipi. Need on ka kõige laialdasemalt levinud ESP8266 moodulplaadid.[8] 
Nimi Aktiivseid jalgu Mooduli ühendusviis Suurus LEDid Antenn Varjesatud? Mõõtmed (mm) Märkmed
ESP-01 6 0,1 in 2×4 DIL Jah Rada trükkplaadil Ei 14,3 × 24,8
ESP-02 6 0,1 in 2×4 poolikute läbiviikudena Ei U.FL pistik Ei 14,2 × 14,2
ESP-03 10 2 mm 2×7 poolikute läbiviikudena Ei Keraamiline Ei 17,3 × 12,1
ESP-04 10 2 mm 2×4 poolikute läbiviikudena Ei Puudub Ei 14,7 × 12,1
ESP-05 3 0,1 in 1×5 SIL Ei U.FL pistik Ei 14,2 × 14,2
ESP-06 11 ebaühtlane 4×3 Ei Puudub Jah 14,2 × 14,7 Pole FCC kinnitatud
ESP-07 14 2 mm 2×8 pisiavad Jah Keraamiline + U.FL pistik Jah 20,0 × 16,0 Pole FCC kinnitatud
ESP-08 10 2 mm 2×7 poolikute läbiviikudena Ei Puudub Jah 17,0 × 16,0 Pole FCC kinnitatud
ESP-09 10 ebaühtlane 4×3 Ei Puudub Ei 10,0 × 10,0
ESP-10 3 2 mm? 1×5 poolikute läbiviikudena Ei Puudub Ei 14,2 × 10,0
ESP-11 6 0,05  1×8 pisiavad Ei Keraamiline Ei 17,3 × 12,1
ESP-12 14 2 mm 2×8 poolikute läbiviikudena Jah Rada trükkplaadil Jah 24,0 × 16,0 FCC ja CE kinnitatud
ESP-12E 20 2 mm 2×8 poolikute läbiviikudena Jah Rada trükkplaadil Jah 24,0 × 16,0 4 MiB välkmälu
ESP-12F 20 2 mm 2×8 poolikute läbiviikudena Jah Rada trükkplaadil Jah 24,0 × 16,0 FCC ja CE kinnitatud. Parandatud antenni töövõime. 4 MiB välkmälu
ESP-13 16 1,5 mm 2×9 poolikute läbiviikudena Ei Rada trükkplaadil Jah W18,0 × L20,0
ESP-14 22 2 mm 2×8 poolikute läbiviikudena +6 Ei Rada trükkplaadil Jah 24,3 × 16,2

ESP8266 alternatiivid muuda

Peaaegu samaaegselt ESP8266-ga hakkasid taolisi integraalskeeme tootma ka teised tootjad.

  • NL6621 – 160 MHz ARM Cortex-M3 mikrokontroller, rohkem GPIO viike kui ESP8266-l, vajab töötamiseks rohkem väliseid komponente kui ESP8266.
  • MediaTek MT7681 ja MT7687
  • Texas Instruments CC3200 – 80 MHz ARM Cortex-M4. QFN64 pakendis, seega võtab veidi rohkem ruumi kui ESP8266.
  • Realtek RTL8195, RTL8711 ja RTL8710

Viited muuda

  1. 1,0 1,1 1,2 1,3 1,4 Neil Kolban (2016). Kolban's Book on ESP8266.
  2. Brian Benchoff (6. september 2014). "The Current State of ESP8266 Development". hackaday. Vaadatud 24. juunil 2015.
  3. Charles Lohr. "nosdk8266".
  4. Zeptobars. "ESP8266 räni pilt ja kirjeldus".
  5. Espressif Systems. "ESP8266 datasheet" (PDF). Vaadatud 1. mail 2017.
  6. Espressif Systems. "Official SDK release from Espressif for ESP8266". Originaali arhiivikoopia seisuga 8. detsember 2015. Vaadatud 8. augustil 2015.
  7. Espressif. "ESP-WROOM-02 Datasheet" (PDF).
  8. "ESP8266 module family". esp8266.com wiki. Vaadatud 24. juunil 2015.