2015-07-31

WiFi modulis ESP8266 - IoT ir DIY pažiba

Vienas iš tokių gan visai neseniai pasirodžiusių žaisliukų elektronikos pasaulyje - ESP8266 modulis. Apie šį bevielį, t.y. WiFi moduliuką jau daug šnekėta ir vis dar šnekama internete. Greitai prigijęs ir įgavęs populiarumą, jis nuo šiol laikomas IoT (angl. Internet of Things) ir DIY pažiba tarp mėgėjų. Pasidarė smalsu ir man, kuo gi jis taip liaupsinamas, tad gavau ir aš keletą jo variantų patestavimui. Kas gi jame gero ir kaip jį naudoti plačiau šiame straipsniuke.






I. Intro

ESP8266 - kinų firmos Espressif Systems suprojektuota mikroschema skirta palengvinti komunikaciją bevieliu WiFi ryšiu. Tai IEEE 802.11 b/g/n standartą palaikantis įrenginukas realizuojantis pilną TCP/UDP IP steką (specifikacija). Viskas labai mažame 32-pin QFN įpakavime, kuris žinoma nėra ypač draugiškas DIY gerbėjams, tačaiu patogus, o su šia mikroschema pagamintų moduliukų galima rasti apsčiai. Pagrindiniai privalumai - mažas, greitas, pigus ir eikvoja mažai energijos - visa tai sutelpa į ESP8266. Veikia tik su 3.3V įtampa, tad galbūt tai privalumas, o gal minusas, nes 5V netoleruoja. Su mikroschema galime prisijungti prie namų WiFi AP (stotelės) arba lengvai sukurti patiems Soft AP skirtą iki 5 vartotojų vienu metu. Palaikomas WEP, TKIP bei AES šifravimas. Taip pat reikia pastebėti, kad taktinis darbinis dažnis (26-52 MHz) gerokai lenkia įprastų mikrovaldiklių charakteristikas. Priedo pakete gauname tokias sąsajas - UART (RX/TX), SPI bei iš viso nuo 5 iki 22 (priklausomai nuo modelio) išvadų. Šis modulis toks populiarus, kad jau perkopė >14 dizaino versijų-iteracijų.

 

Labiausiai naudojami ESP-01 (pirmiausiai išplitę), ESP-07 (AI-Thinker) ir ESP-12 modeliai (labiausiai ištobulinti), pastarasis netgi turi FCC sertifikatą. Negana to, mikroschemą galima programuoti, kaip bet kokį kitą mikrovaldiklį - tad panaudojimo atvejų kiekis neapsakomas. Taigi, dabar prijungti bet kokį jutiklį prie tinklo tapo vienos mikroschemos reikalas. Galbūt netgi visas valdymo kodas gali būti realizuojamas vien tik ESP flash atmintyje išvengiant kitų bereikalingų mikrovaldiklių. Kaip ten bebūtų, šios mikroschemos pripažinimas ir bumas didžiulis - sukurtos net atskiros bendruomenės jos populiarinimui: http://www.esp8266.com, o informacijos pakankamai ir kitur: https://nurdspace.nl/ESP8266

II. Prijungimas

Informacijos, kaip pajungti modulį, internete apstu. Taip pat ir nemažai klaidingos informacijos, tad verta sutikrinti keletą šaltinių prieš naudojant. Reikia atkreipti dėmesį, kad ESP dirba su 3.3V įtampa, tad jau 5V yra mirtinas kiekis. Tokiu atveju 5V konvertavimui į 3.3V galime naudoti rezistorinį daliklį (angl. resistor-voltage-divider) ar kokį 3V3 Zenerio diodą. Kovertavimas į kitą pusę kiek keblesnis - reikia tranzistorių. Yra ir paprastesnė įšeitis - naudoti konvertavimo moduliuką, kuriam paduodame 5V ir tiek. Tokiu ir pasinaudojau - paprasta, greita ir patogu. Prototipams ir greitam testavimui kaip tik. Prijungus modulį iškart atsiranda Soft AP stotelė, prie kurios galima prisijungti su kitu WiFi suprantančiu įrenginiu - siūlau pabandyti kompiuteriu ar telefonu. Jeigu stotelė matyti, vadinasi modulis tikrai veikia.

Pats bandymams turiu ESP-01 ir ESP-07 moduliukus, kuriuos ir pajungiau testavimui. Pajungimo schemos pateikiamos žemiau. Tam, kad ESP-01 modulis veiktų būtina prie 3.3V prijungti ir CH_PD (t.y. chip enable) išvadą. Na ir žinoma, TX ir RX turi būti sujungti kryžmiškai.



Su daugiau išvadų turinčiu ESP-07 reikia padirbėti daugiau. Prie 3.3V prijungiame EN išvadą (analogija su CH_PD) bei GPIO2, o GPIO15 turi būti prijungtas prie GND.




ESP taip pat palaiko programavimo (flash'inimo) režimą, jeigu GPIO0 išvadas prijungiamas prie GND, tai galime per UART įrašyti naują firmware ar savo sukurtą kodo variantą. Kaip tai atlikti, galite detaliau paskaityti čia.

III. Komunikacija

ESP palaiko paprastas tekstines AT komandas perduodamas per UART, kaip koks įprastas GPS modulis. Žinoma, bendravimo protokolas kiek paprastesnis. Sėkmingai paleidus moduliuką ir prijungus Serial konsolę, kad ir per USB-2-TTL konverterį galime siųsti komandas. Pirmąkart atliekant bandymus labai patogu naudoti RealTerm ar kokį kitą terminalo emuliatorių. Jungiamės prie COM porto (8 bits, no parity, 9600 baud) režimu. Jeigu nepavyksta, verta pabandyti kitus greičio režimus - 115200, 57600 ir pan. Na ir imamės komandų, kurias reiktų išbandyti - pirmiausia nuo paprastesnių iki sudėtingesnių. Dėmesio - reikia atkreipti dėmesį, kad kiekvieno komandos sakinio pabaigoje turi būti CR, LF simboliai (t.y. carriage return - 0x0D ir line feed - 0x0A), kitaip ESP neatsakys į užklausas! Toliau pateikiu darbo su moduliu komandas ir pavyzdinius atsakymus. Daugiau komandų ir visus jų parametrų aprašymus galima pasitikrinti oficialiame Wiki arba čia.
  • Modulio perkrovimas (reset)
Komanda:
AT+RST

Atsakymas:
OK

 ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x40100000, len 24444, room 16
tail 12
chksum 0xe0
ho 0 tail 12 room 4
load 0x3ffe8000, len 3168, room 12
tail 4
chksum 0x93
load 0x3ffe8c60, len 4956, room 4
tail 8
chksum 0xbd
csum 0xbd

ready
  • ESP versijos nuskaitymas
Komanda:
AT+GMR

Atsakymas:
00160901

OK
  • WiFi režimo nustatymas (1=Station, 2=AP, 3=abu)
Komanda:
AT+CWMODE=1

Atsakymas:
OK
  • WiFi režimo užklausimas
Komanda:
AT+CWMODE?

Atsakymas:
+CWMODE:1
  • Aplinkinių WiFi stotelių sąrašo gavimas (su ryšio stiprumu dB)
Komanda:
AT+CWLAP

Atsakymas:
+CWLAP:(0,"",0)
+CWLAP:(4,"TestAP",-45)
+CWLAP:(4,"kaunas",-69)
+CWLAP:(4,"BANANA",-60)
+CWLAP:(4,"522priv",-88)
+CWLAP:(3,"Barselona",-86)
+CWLAP:(4,"FUMSA",-83)
+CWLAP:(3,"masina",-55)
+CWLAP:(3,"Boat",-88)
+CWLAP:(3,"DLAN",-94)
+CWLAP:(0,"linksys",-91)

OK
  • Prisijungimas prie konkrečios WiFi stotelės su slaptažodžiu
Komanda:
AT+CWJAP="TestAP","slaptazodis"

Atsakymas:
OK
  • Patikrinimas prie kokios stotelės prisijungta
Komanda:
AT+CWJAP?

Atsakymas:
+CWJAP:"TestAP"

OK
  • Gauto IP adreso parodymas
Komanda:
AT+CIFSR

Atsakymas:
192.168.0.102
  • Maksimalaus komunikavimo režimo įjungimas (max 5 klientai)
Komanda:
AT+CIPMUX=1

Atsakymas:
OK
  • TCP ryšio užmezgimas/sukūrimas (formatas: klientoId,TCP/UDP,adresas,portas)
Komanda:
AT+CIPSTART=0,"TCP","www.google.lt",80

Atsakymas:
OK
Linked
  • HTTP užklausos siuntimas į serverį (formatas: klientoId,baituSkaicius)
    (reikalingi CR ir LF baitai užklausoje pavaizduoti kaip \r ir \n)
Komanda:
AT+CIPSEND=0,41

> GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n

Atsakymas:

busy

SEND OK

+IPD,0,510:HTTP/1.1 302 Found                      
Location: http://www.google.com/              
Cache-Control: private                    
Content-Type: text/html; charset=UTF-8      
X-Content-Type-Options: nosniff              
Date: Sat, 18 Jul 2015 23:52:06 GMT                      
Server: sffe                                        
Content-Length: 219                                
X-XSS-Protection: 1; mode=block            
Alternate-Protocol: 80:quic,p=0
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.</BODY></HTML>

OK
  • Ryšio statuso tikrinimas (2=gotIP, 3=connected, 4=disconnected)
Komanda:
AT+CIPSTATUS

Atsakymas:
STATUS:2
+CIPSTATUS:0,"TCP","173.194.113.50",80,0

OK
  • Ryšio užbaigimas
Komanda:
AT+CIPCLOSE=0

Atsakymas:
OK
Unlink
  • Ryšio statuso patikrinimas užbaigus
Komanda:
AT+CIPSTATUS

Atsakymas:
STATUS:4

OK

Komentarų nėra:

Rašyti komentarą