01. Az alapkapcsolás és az AT parancskészlet

A kapcsolat

A hálózati kapcsolatok közül az ethernet a leggyakoribb megvalósítás az otthoni rendszereknél. Ide, az IoT rendszer kiépítésére eddig csak a vezetékes rendszerre létezett jó ár/érték arányú megoldás. Eddig.
Az ESP8266 chipkészlet megjelenésével a WiFi kapcsolat kialakítása megfizethetővé és egyszerűvé vált. A modulok kezelése hasonlít a GSM modulokhoz, hiszen egyszerű AT parancsokkal lehet kommunikálni velük.
Az ESP8266 chipre épülő modul segítségével akár szervert, akár klienst könnyen hozhatunk létre. Nagyon egyszerűen gyűjthetünk érzékelő-adatokat, melyeket WiFin át továbbíthatunk. Ebben a kis cikksorozatban ez a gyakorlati alkalmazás került dokumentálásra.



ESP8266EX chip

ESP8266

Az ESP8266 chip egy erős integráltságú áramkör, mely minden részegységet tartalmaz egy WiFi végpont kialakításához. Az eszköz ún. SOC (System on a Chip) kialakítású, amely tartalmazza a processzormagot, a memóriákat, rádiós kapcsolati egységeket - hiszen az eredeti Expressif gyártói/tervezői koncepció célja az volt, hogy a lehető legkisebb helyet foglalják el az áramköri lapon, ugyanakkor nagyfokú ruglmassággal rendelkezzen. A külső kapcsolat sorosporti megoldása mellett a szabadon programozható I/O kivezetések, a kisszámú külső alkatrész, a hardware alapú rádiós teljes TCP/IP stack, a beépített hardware alapú protokollok (2x UART, 2x SPI/SDIO, IIC, stb), a belső memóriához közvetlenül kapcsolódó memóriabusz, a belső óra és energiamanagement mindegyike a széleskörű felhasználási lehetőségeket vetíti előre.

Az eszköz már a második generációnál jár a fejlesztésben (ESP8266EX a teljes neve).



Az ESP8266EX chip belseje  (katt a nagytáshoz)

ESP8266EX főbb jellemzők

  • Processzor: 32-bit, 80 MHz órajel (Overclock: 160 MHz)
  • Memória: 64 kbyte (ebből kb. 10kbyte a hardware rádiós kezeléshez szükséges)
  • Programmemória: Külső SPI Flash (256kByte...16MByte; jellemző: 1 vagy 4MByte)
  • Rádiós kapcsolat: 802.11 b / g / n [Wi-Fi Direct (P2P), soft-AP; 802.11b mode + 19.5dBm max. rádióteljesítmény
  • Energiatakarékos mód: 0.5uA/3.3V
  • Maximális teljesítmény: 215mA/3.3V

Most, hogy a nyers, száraz műszaki adatokon túl vagyunk - vágjunk is bele.....

Mi kell a minták kipróbálásához?

Az ESP8266 32-bites mikrokontrollert tartalmazó rendszer újraprogramozható, ekkor önálló működésre is alkalmas. Így egy chipen belül egyesül a WiFi képesség és a komplex feladatmegoldás. A modul alapkonfigurációja a soros-WiFi átjáró megalkotása volt. Ez tetszőleges, hardware vagy software alapú sorosporthoz könnyen illeszthető, ahol a sorosportot akár egy AVR is biztosíthatja.

A sokféle alkalmazás megismeréséhez, az áramkörök tesztelsééhez néhány eszközre szükségünk lesz még a számítógépen kívül:

  • 1 db ESP8266EX chipkészletes modulra, például a legelterjedtebb ESP-01 modulra vagy az önálló teszteléshez az ESP-12/ESP-12E jelű modulra vagy az ezzel épített komplett fejlesztőkörnyezetre (a NODEMCU-ra)
  • 1 db 3.3V-os jelszintre illesztő USB-soros átalakítóra (pl. CP2102, FT232RL, stb.)
  • 1 db Arduino lapkára, ha rendszert építünk (UNO, Leonardo vagy akár a Mega2560 is megfelel).
Fontos! Az ESP8266EX chippel szerelt WiFi modul 3.3V tápfeszültséget igényel, és az 5V tápfeszültség azonnal károsítja! Az 5V rendszerfeszültségű bemeneti jelszintre azonban közvetlenül illeszthető az ESP modul kimenete. Itt kihasználjuk azt a kontrollertulajdonságot, hogy a 3.3V jelszintet már logikai 1-nek érzékel az 5V-os rendszer kontrollerje. A korrekt megoldás azonban a 3.3V - 5V szintillesztő áramkör használata.

Áramfelvétel

Az ESP8266 chippel szerelt WiFi modul áramfelvétele alapesetben 70 mA körüli, azonban távolabbi router, gyengébb WiFi esetén a rádiós kapcsolat 290-350mA csúcsot igényel! Minthogy csak csúcs-áramfelvétel, így az impulzusidejű megnövekedett áramigény akár nagyobb kapacitású kondenzátorral is biztosítható.
Ha az ESP modult a megismerés során nem mikrokontrollerről akarjuk használni, ugyanakkor soros porton keresztül próbáljuk a használatát, akkor egy USB-soros átjáróra van szükségünk. Erre számos megoldás kínálkozik, ugyanakkor a magas 3.3V-os áramigény miatt külső feszültség-stabilizátor javasolt.
Az egyes soros-USB illesztők terhelhetőségei
  Chipkészlet Áramleadás (Max.) [3.3V]
FT232RL (FTDI) 50mA
CH340G (WCH) 20mA
CP2102 (Silicon Labs) 100mA
Arduino UNO; ATMega16U2 (Arduino/Atmel)

Táp: LM1117-33 (önálló)
150mA (lapka)
NodeMCU(ESP8266)

Táp: LD33 (önálló)

 
500mA

PC illesztés

A soros illesztő modul és az ESP8266 WiFi modul összekötését az ábra mutatja:
Ahogy a vázlatrajzon látható, a 3.3V tápfeszültséget Vcc, míg a GND-t a modul GND kivezetésére kötjük. A CH_PD  vezérlést a modul kis energiafelvételű állapotba kapcsolásához használhatjuk (SLEEP mód - ennek vezérlése mikrokontroller használatával egyszerűen megoldható). Számunkra az ismerkedéshez az alacsony áramfelvételű alvó állapot elérése nem szükséges, a folyamatosan bekapcsolt modul sem okoz gondot (nem elemról járó alkalmazást készítünk): így egyszerűen a VCC-re kötjük (folyamatos működés kényszerítése). Van még darab 3 I/O kivezetés, amivel a modult konfiguráljuk: 0, 2, 15 névre hallgatnak. Ezeket az ábrán látható módon kell bekötni, hogy a modullal soros módon tudjunk kommunikálni.
Fontos! A soros kapcsolatnál a Tx és Rx adatvonal keresztbe kötendő! Azaz Tx(ESP)-Rx(FTDI) és Rx(ESP)-Tx(FTDI).
Fontos! Az ábrán a GPIO0 kivezetés a GNDre van kötve - ekkor a chip frissítési üzemmódját (Bootloader) használjuk! Amikor egyszerűen kommunikálunk vele, akkor ezt a Vcc-re kell kötni, vagy egyszerűen lebegni hagyni. (Az ábrán narancs-barnával jelölve.)
Bradboardon megépítve a kapcsolást a CP2102 illesztőáramkörrel és az ESP-01 modullal:
Az összekötés kissé keszekusza. Legalább a CH_PD láb fixen beköthető. Így egyszerűsödik a kapcsolás:
A 3.3V tápfeszültség előállítása járulékos stabilizátorral is történhet. A modul alapfunkcióinak kipróbálásához ~70mA@3.3V áramra van szükség - az FT232RL és a CH340/CH341 chip ehhez kevés, a CP2102 áramkör már megfelel. Az igazi azonban (főleg távolabbi WiFi router esetén) járulékos, külső 3.3V stabilizált áramkör használata.

Kapcsolódás

A leírás további részében a modullal való közvetlen soros kommunikációt járjuk körbe.
Az ESP8266EX chipre épülő modulok alapértelmezetten 9600 bps sebességgel kommunikálnak, 8 adatbittel, 1 stopbittel és kézfogás jelek nélkül. Minden utasítássor CR+LF jellel zárul. (Windows Enter: soremelés, kocsivissza). Az Arduino keretrendszer soros terminálja teljesen jól használható a tesztelésre. A beállításoknál a sorvégi Entert meg kell mondanunk, hogy mi legyen!
Az arduino terminálprogram a keretrendszer része. Használata előtt a Tools-Port alatt az eszköz kapcsolódási pontját be kell állítani. A teszt a legegyszerűbb módon végrehajtható:
Adjuk ki at AT<enter> parancsot. Erre - ha megfelelő a beállítás és a bekötés, az OK választ kapjuk.
Ha nem sikerül ezt a választ kapni (vagy nem is kapunk a modultról választ), akkor ellenőrizzük a pontos bekötést, a port azonosítóját, a CR+LF sorvégjelzés bekapcsolását illetve próbálkozzunk 115.200 bps adatátviteli sebességgel és/vagy a CR sorvégjelre átállítással. Ellenőrizzük még a Tx-Rx keresztbekötését is! Ha a PC-n a bluetooth be van kapcsolva - az is okozhat kommunikációs problémát (próbaként egyszerűen tiltsuk le a bluetooth host-ot).
Ha nem tetszik az Arduino terminál használata, akkor használhatjuk bármelyik szimpatikus terminálprogramot. Például: CoolTerm (Windows, Mac, Linux), Br@y terminal (Windows), PuTTY (Windows).

Kapcsolódás a hálózatra - kliensként

A modult első lépésként állítsuk alaphelyzetbe az AT+RST<enter> utasítással. Így biztosak lehetünk abban, hogy a korábbi esetleges kísérletezéseink nem befolyásolják a modul működését. (A CoolTerm programot az átláthatósága miatt egyszerűbb használni.)
A modul a reset kérésre valami hasonló választ fog adni, mint ami a képen látszik. A "krix-krax" karakterek normál működés részei! A lényeg a következő sorokban a firmware adatokban található. Többféle firmware is készült a modulhoz, azonban az alap AT parancsok azonosak. (A firmware info: Ai-Thinker Technology Co.Ltd.)
A modul által használt szoftververzió lekérdezéséhez az AT+GMR<enter> utasítást kell kiadnunk:
Itt a 0.21 AT parancskészletet tartalmazza és a 0.9.5 SDK-val készült a belső program. De válaszként kaphatunk például egy számsort is: 0018000902 (0.18 AT parancskészlet, 0.9.0.2 SDK-val készítve).

Kliens csatlakozás

A modul alaphelyzetben nem konfigurált. Lehet kliens (1), server (2) vagy akár mindkettő (3) egyszerre. A tesztünk során weblapot szeretnénk kliensként lekérni, így a működési módot az AT+CWMODE=1<enter> utasítással választjuk ki (1: kienskénti konfigurálás). A parancs kiadása után a modul már alkalmas a WiFi hálózathoz való kapcsolódásra. Az elérhető routerek, access point-ok listája az AT+CWLAP<enter> utasitással kérhető le:
A mintában láthatjuk az összes elérhető csatakozási pontot. Ezek közül kiválasztjuk amire csatlakozni szeretnénk (itt a hálózataznosító (SSID) az rb-mobile), majd a AT+CWJAP="rb-mobile","jelszo"<enter> utasítással kapcsolódunk. Értelemszerűen adjuk meg a hálózatnév - jelszó párost.
Ez a modulnak néhány másodpercbe telik, de amint sikerült, akkor az OK választ láthatjuk. Ezzel a csatlakozás készen is van.

Kliensként oldallekérés

Most, hogy már kapcsolódtunk a routerre/access pointra, akár le is kérhetünk egy weblapot. Ennek első lépése a távoli szerverhez való kapcsolódás az AT+CIPSTART="TCP","google.com",80<enter> paranccsal:

A mintában egy TCP kapcsolatot nyitottunk a google.com szerver felé a 80-as porton. A modultól az OK<enter>Linked vagy egy OK<enter> választ kaptuk. A szerver visszajelzése alapján a modul ezzel értesít, hogy a kapcsolat létrejött. Ezek után a kialakult kapcsolaton át kommunikálhatunk a szerverrel.

A weblap lekérés első lépésében meg kell mondanunk, hogy hány byte-nyi adatot küldünk a szervernek. Ez 28 byte, beleértve a sorvégi CR+LF-et is! Kiadjuk az AT+CIPSEND=28<enter> utasítást.

A modul megjeleníti a > jelet - jelezve, hogy érkezhet a 28 byte-nyi adatsor, amit a szerver felé kell köldenünk. Fontos! A küldendő adathosszt nem a szervernek, hanem a modulnak kellett megmondani!

A weblaplekéréshez a GET http://www.google.com<enter> utasítást használjuk. A kapott válasz:

Mi is történt?

Ha minden jól működött, akkor a terminal ablakban valami közel hasonlót kell láthatunk. Ez a google standard keresőoldala. Persze a saját alkalmazásunkban bármely más lapot is letölthetjük. Azonban nem feltétlen szükséges komplex html oldalon át kommunikálni, egyszerű szöveges adatlekérést is létrehozhatunk. A projekttól, adatbiztonságtól függően kapcsolat és továbbítás-ellenőrzéssel rendelkező TCP vagy átjelzésre szolgáló, kommunikáció ellenőrzés nélküli UDP kapcsolat is felépíthető.

Végezetül, ha megkaptuk a lekért adatokat, akkor végül a kapcsolati csatornát zárjuk be az AT+CIPCLOSE<enter> paranccsal. (Ezt ha elhagyjuk, a szerver időtúllépésre hivatkozva maga is bonthatja a kapcsolatot - de ezt sűrűn eljátszva a szerver tiltólistára tehet, mint nem megbízható, instabil kapcsolatra épülő végpontot!)

Kontroller bárhol a világban - szerverminta

Az ESP8266 modult használhatjuk egyszerű szerverként is. A mintában önálló csatlakozási felületet hozunk létre, melyről egy "hello world" üzenetet kapunk vissza. A  csatlakozás PC-ről, tabletről vagy akár mobiltelefonról is lehetséges.

A már jól ismert utasítással a modult alaphelyzetbe állítjuk: kiadjuk az AT+RST<enter> parancsot.

Azt, hogy szerverként működjön a modul úgy érjül el, hogy 2-es módba kapcsoljuk. Ezért kiadjuk az AT+CWMODE=2<enter> utasítást. A modul ezzel láthatóvá vált a környezetében - megnézhetó akár PC, akár tabletről az elérhető WiFi eszközök között. A modul az ESP_xxxxxx névre hallgat.

Fontos! A modulra épített WiFi elérési pont alapértelmezetten nem védett jelszóval!

A csatlakozás megegyezik a standard csatlakozási eljárással. Az eszközeink semmit sem tudnak arról, hogy ez egy kis WiFi modulka. Számukra egy név és egy protokoll látszik csak.

Aként, hogy az eszközünk ne csak egy elérési pont legyen, hanem egy szerver is - ehhez ezt a funkcióját engedélyezni kell az AT+CIPMUX=1<enter> utasítással. Majd a szerverkapcsolatot beállítjuk, hogy az 1-es socket a 80-as porton szerverként figyelje a beérkező kéréseket: AT+CIPSERVER=1,80<enter>.

A szerver alapértelmezett IP címe a 192.168.4.1, de ezt a modultól is lekérhetjük az AT+CIFSR<enter> utasítással.

Fontos! Ha más hálózatra is kapcsolódunk egyidejűleg (pl. mobilneten vagy vezetékes hálózaton), akkor az nem lehet a 192.168.4.x : 255:255:255:0 tartományba eső!

Most, hogy már egy egyszerű böngészővel is rá tudunk kapcsolódni a szerverre - tegyük meg. A modul azonnal visszaadja a kapcsolati adatokat,  amit a böngésző küldött magáról.

A böngésző kliensként a szervert megszólította, majd az elküldött fejlécadatokra várja a választ. A fejléc tartalmaz számos információt, úgymint a böngésző típusát, a beéllított nyelvet, a kapcsolat típusát. A kliens azonban idővel megunja a várakozást és a szerverrel időtúllépés miatt bontja a kapcsolatot. Ekkor a terminálablakban az UNLINK vagy CLOSED szöveg jelenik meg. Az adatküldést a kliensnek kell újra kezdeményeznie az elmaradt adatküldés pótlásához.

A böngészőnek válaszként egyszerű HTML lapot küldünk. A legegyszerűbb, mindenféle sallang nélküli kódot. A fejléc információt a böngészők úgyis figyelmen kívül hagyják. Fontos! A visszaküldés hosszát ismerni kell és ezt a modullal tudatni is kell! Fontos! A sorvégi két karaktert is be kell számolni az adathosszba!

A 0. csatornán szólított meg a böngésző, ezen is küldjük vissza a 26 karakteres választ az AT+CIPSEND=0,26<enter> paranccsal kezdve:

A modul a > jellel válaszol, hogy az adatfogadásra készen van. Ide írhatjuk a 26 byte hosszú adatot. Egyszerűen ez az alábbi HTML kód: <body>Hello World</body>. Persze ENTER a végén. Végül a 0. csatornán nyitott kapcsolatot a HTML válasz küldése után az AT+CIPCLOSE=0<enter> utasítással lezárjuk. A modul ezt az OK illetve az Unlink sorokkal nyugtázza.

A böngésző pedig megjeleníti a kapott HTML kódot:

Ez a rövid ismertető talán segített kicsit bemutatni az ESP8266 chipre épülő eszköz néhány lehetőségét. Néhány ötletet, szikrát talán már adott a fejlesztésekhez. Azonban ez még csak egy kis morzsa volt a lehetőségek tengeréből, mert például az eszköz egyidőben lehet AccesPoint és kliens eszköz is. Valamint egyidejűleg öt csatorna lehet használatban mind TCP, mind UDP, vagy akár vegyes protokollként. Az csatolt dokumentumban összefoglalásra kerültek a gyakoribb AT parancsok.

Felhasznált források: https://en.wikipedia.org/wiki/Web_of_Things ; https://en.wikipedia.org/wiki/Internet_of_Things

 

Fájlmelléklet: 

TavIR-Facebook