Alapvető műveletek az Arduino ESP8266 wifi modulján

Alapvető műveletek az Arduino ESP8266 wifi modulján

Alapvető műveletek az Arduino ESP8266 wifi modulján

Mikor Nyomasztó piacra dobta az első modulokat wifi az integrálttal ESP8266 és firmware amivel AT parancsokkal kezelhetjük, mi felhasználókat érdekelt, hogy összeállításokba integráljuk mikrovezérlők és a problémák a (korábbi) sötétség ismeretére redukálódtak ESP8266 AT parancstábla, takarmányozási igények ill ESP8266 firmware frissítés.

Tartalomjegyzék

    Aztán gyorsan megérkeztek az alternatívák a programozáshoz ESP8266 és modul implementációk wifi nagyon különböző formátumok, amelyek más aggályokat is felvetettek: melyik ESP8266 wifi modult válasszuk a különböző antennák hatótávolságától (beleértve a külsőket is) vagy ezeknek az új moduloknak az összeállításainkba való fizikai integrációjától függően.

    Bizonyára mindezen változások miatt nem a legalapvetőbb szempontokra, a legalapvetőbb gazdálkodásra helyezték a hangsúlyt. ESP8266 wifi modul. Habár polaritás.es Használatáról tájékozódhat a ESP8266 és vannak olyan alkalmazások, amelyek általános magyarázattal szolgálnak a ESP8266 wifi modul AT parancsok használatával, különösen a cikkben könyvtárat, hogy HTTP-lekérdezéseket tegyen az Arduino-ból az ESP8266 wifi modullal, az olvasók benyomásai azt sugallják, hogy hasznos lenne néhány alapvető információval kiegészíteni a felhasználókat ESP8266 saját megvalósításuk elvégzésére.

    Beszéljétek meg az alapvető műveleteket a ESP8266 és az általános megoldások javaslata több nagyon különböző részből álló célkitűzés; A cikk tartalmának követéséhez a következő tárgymutató szolgálhat útmutatóul:

    Az ESP8266 wifi modul vezérlése a számítógépről a soros porton keresztül

    Tányérból Arduino és az Ön IDE nyomon követhető a működése a ESP8266 wifi modul, küldje el a ESP8266 AT parancsok és lásd a választ, de sokkal kényelmesebb ezt egy terminál típusú alkalmazással rendelkező számítógépről megtenni.

    CuteCom segítségével tesztelje az ESP8266 wifi modult a soros porton keresztül

    Attól függően, hogy melyik tábla Arduino használva, csak egy hardveres soros port áll rendelkezésre, ami egy kis kényelmetlenséget okoz a küldésben és a fogadásban. A kommunikációs sebesség megváltoztatása sokkal kényelmesebb a számítógépről és egyes alaplapokról érkező soros kommunikációs alkalmazásokban. Arduino (és bizonyos körülmények között) nem támogatják jól a soros kommunikáció legnagyobb sebességét, különösen az 115200 XNUMX baudot, ami a legújabb verziók alapértelmezett sebessége. firmware.

    -Ról Milyen programmal lehet figyelni a ESP8266 a soros port használatával, sok közül lehet választani az igényeknek és preferenciáknak megfelelően; mostanában inkább a klasszikust használom CuteCom (a fenti képernyőképen), mert nagyon kényelmes, hogy megismételjek bizonyos ESP8266 wifi modul AT rendelés projekt tesztelésben.

    A soros konzolként működő programokkal kapcsolatban már szerepelt itt néhány ajánlás; Például amikor arról beszélünk PuTTY az UART soros eszközök számítógépről történő vezérléséhez. PuTTYAmellett, hogy kiváló alkalmazás, a legtöbb asztali operációs rendszerhez elérhető. Továbbá, mint PuTTY konzolként használható mind a soros porttal, mind a Internet protokoll család (TCP/IP), beleértve azokat is, amelyeken működnek TLS, általános eszközzé válik, amely bőven megtéríti a konfigurálására és használatához való rászoktatásra fordított (kevés) időt.

    PuTTY használata az ESP8266 wifi modul tesztelésére a soros porton keresztül

    A soros kommunikációs szoftverek mellett csatlakoztatni a ESP8266 wifi modul a kikötőbe USB A számítógéphez konverter is szükséges USB sorozathoz TTL. A szoftverekhez hasonlóan itt is több verzió létezik, amelyekből csak a port konvertálására szolgálnak USB soros porton TTL (amely egy eurótól beszerezhető) azokra, amelyek különböző protokollokat emulálnak (pl SPI o I2C).

    Csakúgy, mint egy soros konzolként működő program, amely hardveren keresztül kommunikál a számítógéppel USB logikai áramkörrel (nem csak a ESP8266) elterjedt eszköze lesz egy mikrokontrollos alkalmazásfejlesztő munkájában, érdemes minél előbb az eszköztárba kerülni és dolgozni vele ESP8266 wifi modul Kiváló lehetőség egy ilyen megszerzésére.

    Hardver USB UART soros kommunikációhoz az ESP8266 wifi modul figyeléséhez

    Az átalakító USB a UART TTL Használható egy olyan áramkör viselkedésének megfigyelésére is, amely a ESP8266, ehhez a monitorozni kívánt kimeneteket gyorsdiódával sorba kötik az átalakító adatbemenetére (RX) (a 1N4148például) és egy ellenállás (például 2K2) egymással párhuzamosan. Egy ilyen beállítás úgy működik, mint egy hardveres soros szippantó.

    Sniffer példa az ESP8266-hoz, amely USB UART TTL konverterrel Arduinohoz csatlakozik

    Bár a fenti képen látható szippantó minden bizonnyal kezdetleges (többek között nincs ütköző) elegendő a szerelvény működésének felügyeletéhez Arduino és ESP8266.

    Az előző sémából a szippantót eltávolítva a vázlat, amely bemutatja, hogyan kell csatlakoztatni a ESP8266 wifi modul egy tányérhoz Arduino. Amellett, hogy 3V3-ról táplálja, az integrált reset tűjét és aktiváló tűjét magas szintre kell kötni (engedélyezni). Természetesen az egyik RX lábának csatlakoznia kell a másik TX csatlakozójához.

    Az előző diagram egyszerűsítése érdekében egy lemezt ábrázoltunk Arduino 3V3-ról táplálják, és amelynél a soros port feszültségét szintén 3V3-nak kell tekinteni. Ha használ a mikrovezérlő eltérő jelszinttel a soros porton (általában 5 V) lesz szükség, hogy ne sérüljön meg a ESP8266, használj szintváltó mint az alábbi diagramokon. Ez az áramkör gyakran megtalálható számos kereskedelmi forgalomban kapható modul-megvalósításban.

    5V–3V3 jelszint-átalakító ESP8266 WiFi modulhoz és Arduino-hoz

    Frissítse az ESP8266 firmware-t

    az ESP8266 AT parancsok, a lezárása, a modul alapértelmezett sebessége... függ a verziótól ESP8266 firmware. A legjobb, ha minden modulban ugyanazt a verziót használja, és ha lehetséges, akkor a legújabb verziót.

    Sajnos a legtöbb a ESP8266 wifi modul modellek Csak 4 Mbit-esek, így a legújabb verzió nem telepíthető rájuk. A firmware legújabb (hivatalos) verziója, amelyre telepíthető ESP8266 wifi modulok 4 Mbit-tel (a legtöbb) 0.9.4, amely tartalmazza a 0.2-es verziót ESP8266 AT parancsok.

    Összefoglalva, a firmware frissítéséhez szüksége van:

    1. Töltse le a megfelelő firmware verziót. A A 4 Mbit memóriával rendelkező modul legújabb (hivatalos) verziója a github Espressif mappájában található. Ban,-ben Espressif weboldal Letöltheti a firmware legújabb verzióját, de nagyon fontos ellenőrizni, hogy a modul, amelyre telepítve van, elegendő memóriával rendelkezik.

    2. Töltse le a firmware-telepítő eszköz legújabb verzióját. A kedvencem esptool ami be van írva Piton, tehát minden platformon működik. Amellett, hogy letölthető, azzal is telepíthető pip install esptool (o pip2 o python -m pip…). Természetesen, Nyomasztó Saját eszközt is kínál, de jelenleg csak Windowshoz érhető el.

    3. Készítse elő a letöltött fájlokat; csomagolja ki őket egy hozzáférhető mappába, és ha szükséges, tegye futtathatóvá az eszközt esptool, az én esetemben, mivel GNU / Linux, A chmod +x esptool

    4. Csatlakoztassa a modult a számítógéphez konverter segítségével USB UART TTL ami 3V3-on működik vagy használjon szintátalakítót, ha az 5 V-on működik. A tápon kívül a konverter TX-et is csatlakoztatnia kell az RX-hez. USB UART TTL, RX to TX, GPIO0 alacsony szinten (GND) és talán GPIO2 magas szinten (teszteimben mind alacsony szinten bekötve, mind leválasztva működött). Ha a modul GPIO15 csatlakozása szabad (mint az ESP-12 esetén), akkor alacsony szintre kell csatlakoztatni. A RESET, amely működés közben általában magas szinten van, csatlakoztatatlanul hagyható, vagy egy ellenállás segítségével magas szintre csatlakoztatható (például 10K), mivel a rögzítés megkezdése előtt szükség lehet az eszköz visszaállítására annak csatlakoztatásával. alacsony szintre.
      A modul bekapcsolásával frissíthető lesz, de Ha kapcsolódási hiba jelenik meg, akkor azt vissza kell állítani a RESET csatlakoztatása alacsony szinten egy pillanatra, majd bekapcsolva hagyja (csatlakozás nélkül) a frissítési folyamathoz.
      A modul rendelkezik fél amper fogyasztási csúcsok (egyes felhasználók szerint 600 mA-ig), ezért fontos, hogy olyan tápegységet használjunk, amely képes ezt a fogyasztást támogatni, különösen a firmware frissítéséhez.

      Az ESP8266 ESP-01 wifi modul csatlakoztatása az USB UART TTL konverterhez, firmware frissítés

    5. Futtassa az eszközt a firmware frissítéséhez. Az én esetemben a 3. lépésben ugyanabba a mappába mentettem az eszközt és a firmware-dokumentumokat, így a konzolról futok:
      cd ~/Datos/firmwareESP8266 (váltás az eszközt és a firmware-t tartalmazó mappára)
      ./esptool.py --baud 115200 --port /dev/ttyUSB0 write_flash \
      0x00000 ./boot_v1.1.bin \
      0x01000 ./user1.bin \
      0x7C000 ./esp_init_data_default.bin \
      0x7E000 ./blank.bin

      --baud beállítja a sebességét ESP8266 (115200 baud esetemben) és --port a soros port, amelyhez csatlakozik (esetemben emulált, az első USB). A firmware-t alkotó különböző dokumentumok hátra vannak write_flash előtt a cím szerepel, a user1.bin dokumentummal, amely tartalmazza a frissítés hasznos adatát.

      wifi ESP8266 firmware frissítés esptool konzol rögzítése

    Parancsok küldése az ESP8266 wifi modulnak

    Ellenőrizni a ESP8266 számítógépről kell majd kezdenünk konfigurálja az alkalmazást amelyhez elég lesz ① kiválasztani azt a portot, amelyhez az átalakító csatlakozik USB UART TTL, Valami hasonló /dev/USB0 GNU/Linux és hasonló vagy valami hasonló COM6 Windows rendszerben ② válassza ki azt a sebességet, amellyel a ESP8266, valószínűleg 115200 baud, ③ állítson be 8 adatbitet plusz egy stopbitet, paritás vagy kézfogás nélkül, és ④ állítsa be a sor végét, a firmware, szinte mindig CR+LF.

    Konfigurálja a CuteCom-ot az ESP8266 wifi modul figyelésére USB UART TTL konverter segítségével

    Konfigurálja a PuTTY-t az ESP8266 wifi modul USB UART TTL konverterrel történő figyelésére

    Az alkalmazás konfigurálása (vagy adott esetben tárolása és kiválasztása) után az nyissa meg a kapcsolatot ("Open device" és "Open" a fenti példák képernyőképein a következővel: CuteCom y PuTTY), és megkezdheti a rendelések küldését a címre ESP8266.

    Amint az a ESP8266 AT parancstábla, az aktiválás, deaktiválás, érték beállításának és hivatkozásának formátuma meglehetősen kiszámítható, de általában nem könnyű mindegyiket megjegyezni, és valószínűleg kéznél kell lennie, hogy hivatkozzon rá.

    Az út küld AT parancsokat al ESP8266 wifi modul -tól Arduino Nagyon egyszerű: ① konfigurálja a kommunikációt Serial.begin(115200); (vagy Serial1, Serial2… több hardveres soros porttal rendelkező kártyákon), és ② küldje el a parancsokat a formátum használatával Serial.print(orden+"\r\n");

    A fenti példa bemutatja, hogyan kell elküldeni a ESP8266 wifi modul AT rendelés -tól Arduino. Ebben az esetben illusztrálva van AT+CWJAP, amely hozzáférési ponthoz való csatlakozásra szolgál. Ez a parancs argumentumként a hozzáférési pont azonosítóját (SSID) és a kulcs, mindkettő idézőjelben, így objektummá válnak Srtring és idézőjelek közé tegye őket az escape kód segítségével (\"). A megrendelés befejezéséhez használja \r\n ami megfelel annak CR y LF.

    Ne feledje, hogy a soros port nem mindig azonosítható Serial (bizonyos lemezeken lehet Serial1, Serial2…) a használt portobjektum a makróhoz való hozzárendelésével lett meghatározva PUERTO_SERIE. A használt kártya típusának felismerése egy kis intelligenciát adhat a soros port kiválasztásához; Később áttekintjük, hogyan tudhatja meg a típusát Arduino. A többi definíció a szokásos, amely lehetővé teszi az állandó értékek "megnevezését", hogy elkerülje az ismétlődést (és a hibákat), és megkönnyítse a megváltoztatását.

    A fenti példa állítólag összekapcsolja a ESP8266 wifi modul a jelzett hozzáférési ponthoz, de már korábban csatlakozott? Működött a kapcsolat? Ahhoz, hogy ezt tudjuk, meg kell "hallgatnunk", hogy mi a ESP8266

    Adatok fogadása az ESP8266 wifi modulról

    A fent leírt adatszippantót a számítógéphez csatlakoztatva láthatja, hogy mit Arduino címre küldött ESP8266 és a válasza. től olvasni Arduino és feldolgozza a benne található információkat, amelyekkel észlelni kell Serial.available() ha bármilyen adat érkezett, és ha igen, töltse be Serial.read(). A következő példa bemutatja, hogyan kell kiolvasni a választ AT+CWJAP?, amely jelzi, ha van kapcsolat bármely hozzáférési ponttal.

    Mint egy tányéron Arduino Uno (és másoknál) a soros monitor megnyitása alaphelyzetbe állítja a programot, a soros konzolon lehet látni Arduino az Ön által elküldött információkat ESP8266 ahogy az alábbi kép képernyőképe is mutatja.

    Adatok fogadása az Arduino ESP8266 wifi moduljáról. Alap példa

    Elemezze az ESP8266 wifi modul által küldött választ

    Azt már láttuk, hogyan kell elolvasni az elért információkat Arduino a ESP8266. Az a probléma, amivel meg kell küzdened, hogy nem tudod, mikor kezd megérkezni, mennyi idő alatt érkezik meg, milyen hosszú lesz... és nem túl hatékony megvárni a választ a ESP8266 anélkül fogadják, hogy a mikrovezérlő addig egyéb feladatokat is ellátni.

    Ennek a körülménynek a kezelésének egyszerű módja az iterálja a kapott adatokat, konkrét válaszokat keresve amelyekkel például aktiválhatók az indikátorok (jelzők vagy logikai változók), amelyek meghatározzák, hogy folytassuk-e a keresést a kapott szövegben, és milyen műveleteket kell végrehajtani a szövegből érkező információk alapján. ESP8266. Míg a válasz megérkezik mikrovezérlő más feladatoknak szentelheti magátpéldául az érzékelőktől származó adatok fogadása és azok feldolgozása.

    Keressen szöveget az ESP8266-tól kapott információban

    A következőből származó szövegben való kereséshez ESP8266 tudsz hasonlítsa össze az egyes kapott leveleket azzal, amelyik megfelel a keresett üzenetnek. Szükséges lesz egy számláló (vagy mutató) használata, amely az összehasonlítandó betűre mutat; Ha a karakter, amely a ESP8266 megegyezik az üzenetben vizsgálttal, a számláló előrelép, ha eltér, akkor inicializálódik.

    Ha tudni szeretné, hogy elérkezett a vég, a keresett üzenet következő karakterét veszi figyelembe, amely nulla (\0) vagy az üzenet hosszát eltárolják, hogy a számlálóval való összehasonlítás révén megtudja, hogy az összehasonlítás befejeződött-e, és ezért a ESP8266 wifi modul elküldte a keresett üzenetet.

    A következő példa a parancsot használja AT+CWLAP amely visszaadja a hozzáférési pontok listáját, és ezeken belül a "wifi polaridad.es" nevűt keresi. Bár úgy döntöttünk, hogy ellenőrizzük, hogy az utolsó karakter nulla-e, mivel a ütköző Csak a keresett szöveget tárolja és annak hossza ismert, azt is ellenőrizni lehetne, hogy ennyi helyes levél érkezett-e. Val,-vel LED a 2. érintkezőhöz csatlakoztatva a rendszer a várt szöveget megtalálta.

    Az előző példa kódjában egy módot is láthatunk válassza ki a soros portot a kártya típusától függően Arduino használt. Ez a példa feltételezi, hogy a projekthez három típusú táblája van: egy Arduino Uno, az egyik Arduino Mega 2560 és a arduino leonardo. Ha együtt dolgozik a Arduino Uno azt fogják használni Serial és egyébként Serial1.

    Ha tányérral dolgozik arduino leonardo Ugyanezzel a módszerrel leállíthatja a programot, és megvárhatja a konzolt (a következőhöz társított soros portot). Serial) elérhető.

    Keressen különböző szövegeket az ESP8266 válaszban

    Az előző példában szereplő kód arra szolgál, hogy szöveget keressen az általa küldött információkban ESP8266 de a válasz a művelettől függően eltérő információkat tartalmazhat. Tegyük fel, hogy a következő példában egy egyszerű esettel kezdjük, hogy a szöveg által küldött MCU ESP8266 es OK amikor a műveletet helyesen hajtják végre és ERROR Egyébként, mint a rendelésnél AT+CWJAP?, amely annak ellenőrzésére szolgál, hogy a ESP8266 wifi modul már csatlakozik egy hozzáférési ponthoz.

    Ugyanennek a metódusnak ez az új megvalósítása, amely több lehetséges üzenettel egyezést keres, lehetővé teszi a különböző műveletek közötti választást attól függően, hogy milyen választ kapott a ESP8266, egyszerűen kapcsolja be a LED megfelelő.

    Korlátozza a válasz megérkezéséhez szükséges időt

    Ez idáig nem utaltak egy releváns kérdésre: a maximális várakozási idő (időtúllépés), mielőtt a művelet sikertelennek tekintendő. Ha bármilyen okból a kapcsolat a ESP8266 wifi modul, a hozzáférési ponttal rendelkező modul, az internettel rendelkező hozzáférési pont vagy például egy feltételezett szerver nem érhető el, előfordulhat, hogy a program egy ponton korlátlan ideig várakozik, így az ilyen körülményekre választ kell adni. A maximális várakozási idő a teljes alkalmazásra konfigurálható, általában ilyenkor "nagyvonalúbb" lesz, vagy minden művelethez egyedi várakozási időket lehet programozni.

    Annak ellenőrzésére, hogy (legalább) egy bizonyos időintervallum eltelt-e A számla indításának pillanatának "idejét" rendszerint kivonják az aktuális "időből", és ellenőrizzük, hogy a különbség nagyobb-e a kívánt korlátnál. Ennek az "időnek" nem kell valós idejűnek lennie, általában az azóta eltelt intervallumnak felel meg MCU kezdje el számolni az időt; Ez nem befolyásolja a programot, mivel az eltelt idő érdekes és nem az abszolút idő.

    Általában annak ellenőrzésére, hogy egy bizonyos időköz eltelt-e, a következő típusú kifejezést használjuk:

    változó milisegundos_al_empezar értékét tartalmazza millis() a végrehajtás egy bizonyos pillanata, amelytől kezdve időzítik, így nem szokatlan, hogy a neve a "kronométer" szóra utal. A változó intervalo_de_tiempo az ezredmásodpercek maximális számát tartalmazza, amely az előző kifejezést igazzá teszi, azaz az időtúllépést jelenti; Ez általában egy konstans (vagy makró), és az előző esethez hasonlóan gyakran szerepel a nevében az "IDŐTÚZ" szó. Ha nagyon rövid időközökkel dolgozik, használhatja micros() helyett millis() (mikroszekundum ezredmásodperc helyett), bár sokkal kevésbé gyakori és sokkal kevésbé pontos.

    Egy hosszú egész szám Arduino (unsigned long) 4 bájtot (32 bitet) foglal el, így az általa képviselt legnagyobb érték a 4294967295 (2 a 32 mínusz egy hatványához, mert nulláról indul). egy tányéron Arduino Folyamatos futás közben az ezredmásodperces számláló körülbelül 50 naponta nullázódik (visszaáll nullára). Előjel nélküli adattípusokkal történő kivonáskor ugyanaz a viselkedés reprodukálódik (a számláló megfordítása), így az időtúllépés korlátlanul szabályozható.

    A fenti kód a az időtúllépési korlátozás nagyon alapvető megvalósítása beépítve az azt megelőző példához képest jelölt sorokat. Mivel az időtúllépés ellenőrzésére a től érkező adatok feldolgozása után kerül sor ESP8266 wifi modul, a művelet akkor is sikeresnek tekinthető, ha a fogadás tovább tart, mint a kiszabott várakozási idő.

    Több AT-parancs által meghatározott összetett művelet végrehajtása

    Példahivatkozás az alkalmazás céljára, amely kihasználja a ESP8266 wifi modul, tegyük fel információkat tárolnak egy webszolgáltatáson keresztül elérhető adatbázisban hogy nyomon kövesse a hőmérsékletet. A következő kód bizonyos időközönként beolvassa az analóg bemenetre csatlakoztatott szenzort, kiszámítja az átlagértéket és hosszabb időintervallum után elküldi a webszervernek (stílus Tárgyak internete) a kérelem HTTP (POZDÁLÁS, SZEREZÉS…).

    Ebben a hőmérséklet-rögzítési példában egy webszerverhez ötpercenként hozzáférnek. Bár a rendelkezésre állás nem kimondottan magas, várható, hogy a javaslat működni fog, de ha nagyobb felvételi gyakoriságra lenne szükség, akkor más forrásokat kellene megvalósítani, pl. adatpuffer küldésre vár, hogy küldjön néhányat, amikor a szerver részt vehet, és tárolja azokat, amikor nem elérhető. Ha az adatok rögzítésének gyakorisága még nagyobb lenne, más típusú protokollokat kellene javasolni a protokoll alternatívájaként. HTTP vagy akár cserélni TCP által UDP hogy az adatok nagy részét a szükséges sebességgel el tudja küldeni még néhány elvesztése árán is.

    A hőmérséklet küldésére vonatkozó feladatot a következő műveletek alkotják:

    • Állítsa vissza a wifi modult
    • Kapcsolat bontása az aktuális hozzáférési ponttal (ha létezik alapértelmezett kapcsolat)
    • Állítsa be a beállításokat. A példa esetében feltételezzük, hogy konfigurálni kell a csatlakozási módot (egyszerű) és a Wi-Fi kommunikációban betöltött szerepet (állomás).
    • Csatlakozás hozzáférési ponthoz
    • Ellenőrizze, hogy a kapcsolat megfelelő-e (valójában ez a belépési pont) Ha nincs kapcsolat, kezdje elölről a folyamatot
    • Csatlakozás a szerverhez
    • Küldje el a kérést HTTP a tárolandó adatokkal

    A műveletek sorrendjének nem kell pontosan ilyennek lennie (bár a művelet igen), és minden lépéshez több szükséges is lehet ESP8266 AT parancsokPéldául a fent felsorolt ​​konfigurációhoz kettőre van szükség: AT+CIPMUX=0 y AT+CWMODE=1.

    Adatstruktúra, amely az ESP8266 műveleteit reprezentálja

    Az előző példákban, bár nagyon alapvető módon, már javasoltak egy általános megoldást a problémára: használjunk olyan adatstruktúrát, amely tárolja a lehetséges válaszokat és az egyes esetekben megteendő intézkedéseket; küldjön egy műveletet, várja meg a választ, és folytassa a válasz jelentésének megfelelően. Mivel minden összetett művelethez többre lesz szükség ESP8266 AT parancsok, az adatszerkezetnek össze kell kapcsolnia egy műveletet más, későbbi vagy előző művelettel, amelyet minden esetben az adatkezelő válaszától függően kell végrehajtani. ESP8266.

    Az előző példákban egy üzenetet kerestek a válaszában ESP8266 és sikerként vagy hibaként értelmezték. Az összes beérkezett szöveg átvétele (és elemzése) mellett, Az általános minimum elérése érdekében tanácsos az üzenet kitöltésére is odafigyelni vagy más szóval az elérhetőségére a ESP8266 wifi modul új rendelések fogadására. Ily módon a változás olyan állapotba, amelyet például "wifi elérhető"-nek hívhatunk, a hozzáférési pont nevének fogadása és a szöveg fogadása lehet. ERROR vagy a szöveget OK azt jelentené, hogy a ESP8266 befejezte a választ, és most már elküldheti a következőt AT parancs az ESP8266-ra.

    A fenti kód egy vektort (operacion) a teljes feladatot alkotó egymást követő műveletek szövegének tárolására. Kétdimenziós tömböt használnak (mensaje) a három elemzett válasszal. A fentiek szerint a helyes vagy helytelen választ jelentő üzenet mellett meg kell keresni azokat az üzeneteket, amelyek a válasz végét jelentik. Nem minden műveletnek lesz ugyanannyi lehetséges válasza; Ha kevesebb a válasz, akkor üres üzenet használható, amely a lehető legkevesebb ciklust veszi fel az elemzésben (még így sem a legoptimálisabb módszer). Logikusan szükséges, hogy a keresett válaszok minimális száma (a példában három) tartalmazza az összes működési lehetőséget, még akkor is, ha nem mindegyik lehetséges.

    Ha a lehetséges válaszokról beszélünk, az már látható, hogy ez a példa nem túl hasznos tetszőleges formátumú adatok fogadásához egy ESP8266 wifi modul, de a helyzet az, hogy a használattal összefüggésben mikrovezérlők nem szokványos; A legáltalánosabb az általuk csatlakoztatott érzékelők által gyűjtött adatok elküldése és/vagy információk fogadása arról, hogy mit kell tenni az általa vezérelt működtetőkkel. Nagyon értékes információ, amely nagyon jól megjósolható.

    Az előző adatszerkezetben, ahogyan az elemzett lehetséges válaszok kifejezésére, egy kétdimenziós mátrixot is használnak az egyes esetekben végrehajtandó művelet meghatározására (siguiente_operacion). Pontosabban, háromféle üzenetre válaszoltunk: ① tetszőleges szöveg (LITERAL) annak ellenőrzésére, hogy van-e kapcsolat a Wi-Fi hozzáférési ponttal és a szerverrel, ② egy szöveget a folyamat hibáinak észlelésére (FALLO) és ③ egy szöveg, amely jelzi, hogy a művelet sikeresen befejeződött (ACIERTO).

    Végül van még két vektor a maximális várakozási idő beállítására a feladás előtt (timeout) és adja meg (configuracion) ha a művelet válasz megvárása nélkül fejeződik be (ESPERAR_RESPUESTA) és a kommunikáció végét jelző üzenetek. Ez az utolsó vektor, hogy példát mutasson a memória mentésére, egy konfigurációs bájt bitjeivel működik a különböző állapotok jelzésére.

    Az első ESP8266 AT parancsok Az adatszerkezetben mindig választ várnak, amely lehet siker- vagy hibaüzenet. Hiba esetén a modul újraindul és újraindul, és ha az üzenet azt jelzi, hogy a művelet helyes, akkor továbblép a következőre.

    Amikor csatlakozik a szerverhez, a minta megváltozik. Ebben az esetben szükséges ① elküldeni a továbbítandó adatcsomag hosszát és ② összeállítani a kérést HTTP rögzített szöveggel plusz a (hőmérséklet) értékkel, amelyet a szerveren tárolni küldenek. Ezen adatok elkészítése minden szállítmánynál megtörténik, és két részre kell osztani (közölni kell a hosszt) vagy háromra (kérelem elküldése) HTTP) On ESP8266 AT rendelés. Csak az utolsó rész vár válaszra, amelyre a művelet fel van osztva.

    Ebben az esetben problémamentesen fog működni (esetleg a modul foglaltságára figyelmeztetve), de ha nagyobb az adathossz, akkor kisebb darabokra kell osztani az adatblokkokat, és akár egy várakozást is kell megvalósítani, mivel a hőmérséklet leolvasással történik, hogy a modulnak legyen ideje az adatok kitöltésére ütköző.

    Más, korábban már ismertetett makróval együtt a fenti példakód megmutatja, hogyan definiálhatók a különböző állapotok, amelyekkel megadható, hogy várjon-e válaszra, és adott esetben milyen üzenet jelzi, hogy a válasz befejeződött.

    Mivel a kód különböző pontjain egy művelet kerül elküldésre (amikor van az átlaghőmérséklet küldésének ideje, ha egy művelet várakozási idejét túllépjük, amikor az aktuális művelet sikeresen befejeződött...), de hogyan kell ezt csinálni globálisan létrehozott, makróként határozták meg ENVIAR_OPERACION amely a szállítással kapcsolatos lépéseket csoportosítja.

    A következő a példa fő programjának kódja. A legkülsősebb feladat az, aki a hőmérséklet mintavételéért felelős, hogy kiszámítsa az átlagot, és meghatározott időnként elküldi a szerverre a ESP8266 wifi modul. Az egyes műveletek elküldése után a válasz elemzi, hogy melyik legyen a következő, vagy hogy az információküldési feladat befejeződött-e.

    Logikusan több optimalizálási művelet is végrehajtható az előző kódon, de ez egy példa, hogy megértsük, hogyan a ESP8266 Általánosságban csak néhány szempontra érdemes koncentrálni, az első az adatstruktúra. Úgy tűnik, ez a logikus használjon programozási nyelv adatszerkezetét (struct) a feldolgozott információ képviseletére: az ESP8266 AT parancsok és az elemzett üzeneteket.

    Használj egy szerkezetet (struct) az adatok tárolása a példatömbök helyett (azok alapján) triviális, és bár elegánsabb kódot eredményezhet, az eredmény javulását nem jelenti. Az igazi alternatívát a használata jelenti struct végrehajtása az alábbiak szerint, változó hosszúságú struktúrákban, amelyek „belső” adatokat tartalmaznak amelyekre hivatkoznak. Ily módon például nem szükséges, hogy egy műveletnek fix számú válasza legyen az elemzéshez.

    Ez a megközelítés azt sugallja, hogy ez a legjobb módja a megoldás megvalósításának, de a hátránya, hogy szükség lenne rá dinamikus memóriafoglalás használata, kockázatos gyakorlat a mikrovezérlő amihez gondosan meg kell mérni, hogy mennyi memória lesz felhasználva futás közben, mivel a fordító aligha tud minket figyelmeztetni erre, és van bizonyos lehetőség a memória (vagy a verem) kimerítésére, ami végzetes következményekkel járhat a program végrehajtására nézve.

    A kód optimalizálása során érdemes megjegyezni, hogy egy ilyen típusú programban, amely nagy mennyiségű szöveget használ, memóriaterületet takaríthat meg SRAM szöveges karakterláncok tárolása a programmemóriában (vaku) a makróval F(). A következő képernyőképeken a különböző program- és dinamikus memóriaeloszlás látható normál szöveghasználattal és makró használatával F().

    Példa Arduino kódra a programmemóriában tárolt szöveggel (flash)
    Példa Arduino kódra az SRAM-ban lévő szöveg használatával

    Tekintettel azokra a műveletekre, amelyeket a től érkező információk szerint hajtanak végre ESP8266 wifi modul, alternatívájaként a kódból érkező üzenet ellenőrzése és az egyik vagy másik végrehajtása a kapott adatok szerint tárolható ebben az adatstruktúrában állapotjelzők helyett az egyes feladatokat végrehajtó funkciókra mutatnak (jelzők), amelyek egy bizonyos állapotra figyelmeztetnek, hogy az alkalmazás felelős például a fő hurkon belüli kezelésért.

    Az alábbiakban bemutatunk egy példát a kérések adatainak tárolására szolgáló struktúrákra ESP8266 (az adattípus operacion_esp8266) és válaszaik (az adattípus respuesta_esp8266).

    A műveletet reprezentáló struktúraként (a ESP8266 wifi modul) utal arra a struktúrára, amellyel a válaszokat meghatározzák, és a válaszok szerkezetére a műveletek szerkezetére, előbb mindkettőt deklarálni kell, az új adattípus meghatározásával, majd a tartalmának meghatározásával.

    Az előző példa úgy véli, hogy az azt tartalmazó program az a állapotjelző, amelynek meg kell felelnie egy olyan kódból elérhető változónak, amely az említett érték által jelzett műveletek végrehajtásáért felelős. Ha a válaszában ESP8266 Egy bizonyos szöveg elemzésekor az állapot azt az értéket veszi fel, amely a megfelelő válasz szerkezetét jelzi.

    Amint korábban említettük, egy másik alternatíva az állapotjelző helyettesítésére vagy kiegészítésére függvényt tárolunk a referenciastruktúrában (mutató), amelyet akkor hívnak meg, ha bizonyos szöveggel találkozik a válaszában ESP8266 wifi modul.

    Az előző példában hozzá lett adva ahhoz az adatstruktúrához, amely a következőtől származó válasz feldolgozására szolgál ESP8266 wifi modul típusú adatot visszaadó (feltételezett) függvényre mutató mutató float (lehet egy analóg leolvasás súlyozott értéke), és amelyhez két bájt van megadva argumentumként (kettő unsigned char amely lehet az a tű, amelyről az analóg bemenetet olvassák, és az, amely aktiválja egy hipotetikus integrált ENABLE-t).

    fejlesztés alatt MCU, ellentétben azzal, ami a nagyobb rendszerek fejlesztési stílusában előfordul, nem olyan ritka a globális változók használata az összeállítást vezérlő alkalmazás (globális) viselkedésének meghatározásakor, így nem lesz különösebben ritka az ilyen típusú definíciók megjelenése. mint paraméterek nélküli függvények, amelyek nem adnak vissza értékeket, ilyesmi void (*accion)();

    Ha az adatok ilyen ábrázolási módjával dolgozik, használja struct változó hosszúságú adatok esetén dinamikusan kell lefoglalni a memóriát malloc() (o new(), ha objektumokat használ), amely a lefoglalt memória mennyiségét használja paraméterként, és egy mutatót ad vissza a lefoglalt memóriaterület elejére. Val vel sizeof() A tárolt típuson, megszorozva a felhasznált elemek számával, megkaphatja a szükséges memóriamennyiséget. Az alábbi képernyőképeken látható egy példa a használatára és anélkül. malloc(); Első esetben legyen óvatos a program által használt memóriával, be kell tölteni azt a könyvtárat, amely ezt a funkciót tartalmazza.

    Példa memóriafoglalásra malloc segítségével az Arduino rendszeren

    Példa szöveg-hozzárendelésre malloc nélkül az Arduino-ban

    Ha a műveletek a ESP8266 wifi modul a program végrehajtása során változni fog, fel kell szabadítani a nem használt memóriát free() (o delete(), abban az esetben, ha tárgyak). Bár joggal feltételezhető, hogy a fordító (GCC) optimalizálja a programot, hogy elkerülje a memória particionálását, a teljesítmény biztosan nem lesz olyan optimális, mint a statikusan lefoglalt memóriával való munkavégzés.

    Bár ebben a példában (mindkét megvalósításban) nincs sok értelme, a művelet általánosítása érdekében, hogy más esetekben is alkalmazni lehessen, meg kell jegyezni, hogy Az adatküldés mindig ugyanazt a protokollt ismétli: értesítse a küldendő bájtok számát, várja meg a jelzőt (>) és küldje el az adatokat.

    Mivel ebben a példában csak egyszer használjuk (a teljes kérés egy csomagban történik), nem tűnik túl hasznosnak, de általában szükség lehet több küldésre ugyanazon művelet során, beleértve azokat az eseteket is, amikor jelentős mennyiségű adatot kell továbbítani, amelyet töredezettnek kell lennie, hogy elkerülje a memória túlcsordulását ESP8266.

    Ennek a viselkedésnek a megvalósításához a kapcsolat utolsó két eleme használható úgy, hogy minden adatküldéskor az adatok a megfelelő értékekkel töltődnek fel: az első esetben az elküldött bájtok száma, a második esetben pedig a ( része) kérés.át kell továbbítani.

    A hozzárendelés és az elküldés megismétléséhez a különböző továbbítandó elemek vektorban tárolhatók. Ez az új vektor lesz az, amely meghatározza az összetett művelet végét, és nem az utolsó művelet, mint eddig.

    1 megjegyzés

    megjegyzéseket felhasználó
    ดูบอลสด

    Határozottan sok mindent meg kell tudni erről a témáról. Tetszik az összes pont, amit megfogalmaztál

    Hozzászólás Comment

    Lehet, hogy lemaradtál