Osnovne operacije na wifi modulu ESP8266 iz Arduina

Osnovne operacije na wifi modulu ESP8266 iz Arduina

Osnovne operacije na wifi modulu ESP8266 iz Arduina

Pri Espressif lansirali prve module na trg Wifi z integriranim ESP8266 in firmware s katerim bi ga upravljali z uporabo ukazov AT, kar nas je zanimalo uporabnike, je bila integracija v sklope s mikrokrmilniki in težave so se zmanjšale na poznavanje (nekdanje) teme Tabela ukazov ESP8266 AT, potrebe po hranjenju oz Posodobitev vdelane programske opreme ESP8266.

Kazalo

    Nato so hitro prispele alternative za programiranje ESP8266 in izvedbe modulov Wifi zelo različnih formatov, ki so sprožili druge pomisleke: kateri wifi modul ESP8266 izbrati odvisno od obsega različnih anten (vključno z zunanjimi) ali fizične integracije teh novih modulov v naše sklope.

    Zagotovo zaradi vseh teh sprememb morda ni bil poudarek na najosnovnejših vidikih, najosnovnejšem upravljanju ESP8266 wifi modul. Čeprav polarnost.es Informacije o uporabi lahko najdete ESP8266 in obstaja nekaj aplikacij, ki so namenjene splošni razlagi delovanja ESP8266 wifi modul z uporabo ukazov AT, zlasti v članku o knjižnico za izdelavo poizvedb HTTP iz Arduina z wifi modulom ESP8266, vtisi bralcev kažejo, da bi bilo koristno dodati še nekaj osnovnih informacij za pomoč uporabnikom ESP8266 izvajati lastne izvedbe.

    Pogovorite se o osnovnih operacijah za delo z ESP8266 in predlaganje splošnih rešitev je cilj več zelo različnih delov; Za lažje spremljanje vsebine članka vam lahko kot vodilo služi naslednje kazalo:

    Upravljajte wifi modul ESP8266 iz računalnika prek serijskih vrat

    Iz krožnika Arduino in z uporabo vašega IDE je mogoče spremljati delovanje a ESP8266 wifi modul, pošljite Ukazi ESP8266 AT in si oglejte odgovor, vendar je veliko bolj priročno to narediti iz računalnika s terminalsko aplikacijo.

    Uporaba CuteCom za testiranje modula wifi ESP8266 prek serijskih vrat

    Odvisno na kateri plošči Arduino uporabljena, so lahko na voljo samo ena serijska vrata strojne opreme, kar dodaja malo neprijetnosti pri pošiljanju in prejemanju. Spreminjanje komunikacijske hitrosti je veliko bolj udobno v serijski komunikacijski aplikaciji iz računalnika in nekaterih matičnih plošč. Arduino (in v nekaterih okoliščinah) ne podpirajo dobro najvišjih hitrosti serijskih komunikacij, zlasti 115200 baud, kar je privzeta hitrost najnovejših različic firmware.

    O Kateri program uporabiti za spremljanje ESP8266 uporabo serijskih vrat, lahko izbirate med številnimi glede na potrebe in želje; zadnje čase bolj uporabljam klasiko CuteCom (tisti na zgornjem posnetku zaslona), ker mi je zelo udobno ponavljati določene ESP8266 wifi modul AT naročila pri testiranju projekta.

    Tukaj je bilo že podanih nekaj priporočil o programih, ki delujejo kot serijska konzola; Na primer, ko govorimo o PuTTY za krmiljenje serijskih naprav UART iz računalnika. PuTTYPoleg tega, da je odlična aplikacija, je na voljo za večino namiznih operacijskih sistemov. Poleg tega, kot PuTTY se lahko uporablja kot konzola tako s serijskimi vrati kot z Družina internetnih protokolov (TCP/IP), vključno s tistimi, ki delujejo na TLS, postane običajno orodje, ki več kot poplača (malo) časa, porabljenega za konfiguracijo in navajanje na njegovo uporabo.

    Uporaba PuTTY za testiranje modula wifi ESP8266 prek serijskih vrat

    Poleg programske opreme za serijske komunikacije, za povezavo ESP8266 wifi modul do pristanišča USB Računalnik zahteva tudi pretvornik USB do serije TTL. Tako kot v primeru programske opreme obstaja več različic, iz katerih se uporabljajo samo za pretvorbo vrat USB na serijskih vratih TTL (ki jih je mogoče dobiti od enega evra) do tistih, ki lahko posnemajo različne protokole (kot npr SPI o I2C).

    Tako kot program, ki deluje kot serijska konzola, strojna oprema za komunikacijo z računalnikom USB z logičnim vezjem (ne samo z ESP8266) bo običajno orodje pri delu razvijalca mikrokrmiljenih aplikacij, zato ga je vredno imeti čim prej v orodju in delati z njim ESP8266 wifi modul To je odlična priložnost, da ga dobite.

    Strojna oprema za serijske komunikacije USB UART za nadzor modula wifi ESP8266

    Pretvornik USB a UART TTL Uporablja se lahko tudi za spremljanje obnašanja vezja, ki uporablja ESP8266Če želite to narediti, so izhodi, ki jih želite spremljati, zaporedno povezani s podatkovnim vhodom (RX) pretvornika s hitro diodo ( 1N4148, na primer) in upor (2K2, na primer) vzporedno drug z drugim. Takšna nastavitev deluje kot serijsko vohanje strojne opreme.

    Primer vohanja za ESP8266, ki je povezan z Arduinom s pretvornikom USB UART TTL

    Čeprav je sniffer na zgornji sliki zagotovo rudimentaren (med drugim nima varovalni) zadostuje za spremljanje delovanja sklopa z Arduino in ESP8266.

    Odstranitev snifferja iz prejšnje sheme, the shema, ki prikazuje, kako povezati a ESP8266 wifi modul na krožnik Arduino. Poleg napajanja pri 3V3 morata biti zatič za ponastavitev in zatič za aktiviranje integriranega priključena na visoko raven (omogoči). Seveda se mora RX pin enega povezati s TX drugega.

    Za poenostavitev prejšnjega diagrama je bila predstavljena plošča Arduino napaja pri 3V3 in za katerega se predvideva, da je tudi napetost na serijskih vratih 3V3. Če uporabljate a mikrokrmilnik z drugačnim nivojem signala na serijskih vratih (običajno 5 V), da ne poškodujete ESP8266, uporabi nivojski pretvornik kot tiste v spodnjih diagramih. To vezje pogosto najdemo v mnogih komercialnih standardnih izvedbah modulov.

    Pretvornik nivoja signala 5V v 3V3 za WiFi modul ESP8266 in Arduino

    Posodobite vdelano programsko opremo ESP8266

    The Ukazi ESP8266 AT, njegova prekinitev, privzeta hitrost modula ... je odvisno od različice Vdelana programska oprema ESP8266. Najbolje je zagotoviti, da imate v vseh modulih enako različico in, če je mogoče, najnovejšo različico.

    Na žalost večina Modeli modulov wifi ESP8266 Imajo samo 4 Mbit, zato najnovejše različice ni mogoče namestiti nanje. Najnovejša (uradna) različica vdelane programske opreme, ki jo je mogoče namestiti ESP8266 wifi moduli s 4 Mbit (večina) je 0.9.4, ki vključuje različico 0.2 Ukazi ESP8266 AT.

    Če povzamemo, za posodobitev vdelane programske opreme potrebujete:

    1. Prenesite ustrezno različico vdelane programske opreme. zadnja (uradna) različica za modul, ki ima 4 Mbit pomnilnika, se nahaja v mapi Espressif na githubu. V Spletna stran Espressif Lahko prenesete najnovejšo različico vdelane programske opreme, vendar je zelo pomembno, da preverite, ali ima modul, na katerem je nameščena, dovolj pomnilnika.

    2. Prenesite najnovejšo različico orodja za namestitev vdelane programske opreme. Moja najljubša je esptool ki je zapisan v Python, zato deluje na kateri koli platformi. Poleg tega, da ga lahko prenesete, ga lahko tudi namestite z pip install esptool (o pip2 o python -m pip…). Seveda, Espressif Ponuja tudi lastno orodje, vendar je trenutno na voljo samo za Windows.

    3. Pripravite prenesene datoteke; jih razpakirajte v dostopno mapo in po potrebi naredite orodje izvršljivo esptool, v mojem primeru od GNU / Linux, Z chmod +x esptool

    4. Povežite modul z računalnikom s pomočjo pretvornika USB UART TTL ki deluje pri 3V3 ali uporabite nivojski pretvornik, če deluje pri 5 V. Poleg napajanja boste morali priključiti TX na RX pretvornika USB UART TTL, RX v TX, GPIO0 na nizki ravni (GND) in morda GPIO2 na visoki ravni (v mojih preizkusih je delovalo tako pri povezovanju na nizki ravni kot prekinitvi povezave). Če ima modul prost priključek GPIO15 (kot se zgodi v ESP-12), mora biti priključen na nizko raven. RESET, ki bi bil običajno med delovanjem na visokem nivoju, lahko pustite nepovezan ali ga povežete na visok nivo s pomočjo upora (na primer 10K), saj bo morda treba pred začetkom snemanja ponastaviti napravo tako, da jo priključite na nizko raven.
      Z vklopom modula bo na voljo za posodobitev, vendar Če se prikaže napaka povezave, jo bo treba ponastaviti povezavo RESET na nizki ravni za trenutek in nato pustite v zraku (brez povezave) za postopek posodobitve.
      Modul ima pol ampera konice porabe (do 600 mA, po mnenju nekaterih uporabnikov), zato je pomembno, da uporabite napajalnik, ki lahko podpira to porabo, zlasti za posodabljanje vdelane programske opreme.

      Povezava wifi modul ESP8266 ESP-01 v USB UART TTL pretvornik posodobite vdelano programsko opremo

    5. Zaženite orodje za posodobitev vdelane programske opreme. V mojem primeru sem orodje in dokumente vdelane programske opreme v 3. koraku shranil v isto mapo, zato zaženem s konzole:
      cd ~/Datos/firmwareESP8266 (sprememba v mapo z orodjem in vdelano programsko opremo)
      ./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 nastavi hitrost ESP8266 (115200 baud v mojem primeru) in --port serijska vrata, na katera se poveže (v mojem primeru emulirano, prvi USB). Zadaj so različni dokumenti, ki sestavljajo vdelano programsko opremo write_flash pred katerim je naslov, z dokumentom user1.bin, ki vsebuje vsebino posodobitve.

      wifi ESP8266 posodobitev vdelane programske opreme esptool console capture

    Pošlji ukaze modulu wifi ESP8266

    Za nadzor nad ESP8266 iz računalnika, s katerim bomo morali začeti konfigurirajte aplikacijo za kar bo dovolj, da ① izberete vrata, na katera je pretvornik priključen USB UART TTL, nekaj kot /dev/USB0 v GNU/Linuxu in podobno ali kaj podobnega COM6 v sistemu Windows ② izberite hitrost, s katero se ESP8266, verjetno 115200 baudov, ③ nastavite 8 podatkovnih bitov in en stop bit, brez paritete ali rokovanja, in ④ nastavite konec vrstice, odvisno od firmware, skoraj vedno CR+LF.

    Konfigurirajte CuteCom za nadzor modula wifi ESP8266 z uporabo pretvornika USB UART TTL

    Konfigurirajte PuTTY za nadzor wifi modula ESP8266 s pretvornikom USB UART TTL

    Ko je aplikacija konfigurirana (ali, kjer je primerno, shranjena in izbrana), je odprite povezavo (»odprta naprava« oziroma »odprto« na posnetkih zaslona zgornjih primerov z CuteCom y PuTTY) in že lahko začnete pošiljati naročila na ESP8266.

    Kot je razvidno iz Tabela ukazov ESP8266 AT, je oblika za aktiviranje, deaktiviranje, nastavitev vrednosti in sklicevanje nanjo precej predvidljiva, vendar si jih na splošno ni lahko zapomniti vseh in verjetno jo boste morali imeti pri roki, da se boste nanjo sklicevali.

    Način pošlji AT naročila al ESP8266 wifi modul iz Arduino Je zelo preprosto: ① konfigurirajte komunikacije z Serial.begin(115200); (ali Serial1, Serial2… na ploščah z več serijskimi vrati strojne opreme) in ② pošljite ukaze v formatu Serial.print(orden+"\r\n");

    Zgornji primer prikazuje, kako poslati ESP8266 wifi modul AT naročila iz Arduino. V tem primeru je prikazano AT+CWJAP, ki se uporablja za povezavo z dostopno točko. Ta ukaz kot argument uporablja identifikator dostopne točke (SSID) in ključ, oba v narekovajih, tako da postaneta predmet Srtring in jih zapiči v narekovaje z ubežno kodo (\"). Za dokončanje naročila uporabite \r\n ki ustreza CR y LF.

    Ne pozabite, da se serijska vrata ne identificirajo vedno z Serial (na določenih tablicah lahko Serial1, Serial2…) uporabljeni objekt vrat je bil definiran z dodelitvijo makru PUERTO_SERIE. Zaznavanje vrste uporabljene plošče bi lahko dodalo malo inteligence k izbiri serijskih vrat; Kasneje bomo preučili, kako lahko ugotovite vrsto Arduino. Preostale definicije so običajne, ki vam omogočajo "poimenovanje" konstantnih vrednosti, da se izognete njihovemu ponavljanju (in delanju napak) in olajšate njihovo spreminjanje.

    Zgornji primer naj bi povezoval ESP8266 wifi modul na navedeno dostopno točko, vendar je bila že prej povezana? Je povezava delovala? Da bi to vedeli, moramo »poslušati«, kaj ESP8266

    Prejemanje podatkov iz wifi modula ESP8266

    Če na računalnik povežete vohljalnik podatkov, ki je opisan zgoraj, lahko vidite, kaj Arduino je poslal na ESP8266 in njegov odziv. Za branje iz Arduino in obdelati informacije v njem, s katerimi bo potrebno zaznati Serial.available() če so prispeli kakršni koli podatki in jih naložite Serial.read(). Naslednji primer prikazuje, kako prebrati odgovor iz AT+CWJAP?, ki bo poročal, če obstaja povezava s katero koli dostopno točko.

    Kot na krožniku Arduino Uno (in v drugih) odpiranje serijskega monitorja ponastavi program, lahko ga uporabite za ogled v serijski konzoli Arduino informacije, ki jih pošljete ESP8266 kot prikazuje posnetek zaslona spodnje slike.

    Prejmite podatke iz wifi modula ESP8266 iz Arduina. Osnovni primer

    Analizirajte odgovor, ki ga je poslal wifi modul ESP8266

    Videli smo že, kako brati informacije, ki dosežejo Arduino iz ESP8266. Težava, s katero se morate soočiti, je, da ne veste, kdaj bo začelo prihajati, koliko časa bo trajalo, kako dolgo bo ... in ni zelo učinkovito čakati na odgovor od ESP8266 je prejet, ne da bi pustil mikrokrmilnik medtem opravljajo druge naloge.

    Preprost način za obvladovanje te okoliščine je ponavljajo prejete podatke in iščejo konkretne odgovore s katerimi na primer aktivirate indikatorje (zastavice ali logične spremenljivke), ki bodo določali, ali nadaljevati iskanje v prejetem besedilu in katera dejanja je treba izvesti glede na informacije, ki prihajajo iz ESP8266. Medtem ko pride odgovor mikrokrmilnik se lahko posveti drugim nalogam, na primer prejemanje podatkov iz senzorjev in njihovo obdelavo.

    Poiščite besedilo v informacijah, prejetih od ESP8266

    Za iskanje besedila, ki prihaja iz ESP8266 lahko primerjajte vsako prejeto pismo s tistim, ki ustreza sporočilu, ki ga iščete. Uporabiti bo treba števec (ali kazalec), ki kaže na črko, ki jo je treba primerjati; Če lik, ki prihaja iz ESP8266 je enak tistemu, ki se pregleduje v sporočilu, števec napreduje, če je drugačen, se inicializira.

    Če želite vedeti, da je bil dosežen konec, se pregleda naslednji znak iskanega sporočila, ki bo nič (\0) ali pa se dolžina sporočila shrani, da se s primerjavo s števcem ugotovi, ali je primerjava končana in s tem ESP8266 wifi modul je poslal želeno sporočilo.

    Naslednji primer uporablja ukaz AT+CWLAP ki bo vrnil seznam dostopnih točk in znotraj njih se išče ena z imenom "wifi polaridad.es". Čeprav smo se odločili preveriti, ali je zadnji znak nič, kot je varovalni Shranjuje samo iskano besedilo in je znana njegova dolžina, lahko se tudi preveri, ali je prejeto toliko pravilnih črk. Z LED priključen na pin 2 je sporočeno, da je bilo najdeno pričakovano besedilo.

    V kodi prejšnjega primera lahko vidite tudi način za izberite serijska vrata glede na vrsto plošče Arduino rabljeno. Ta primer predvideva, da imate za projekt tri vrste plošč: eno Arduino Uno, En Arduino Mega 2560 in arduino leonardo. Če delate z a Arduino Uno bo uporabljeno Serial in drugače Serial1.

    Če delate s ploščo arduino leonardo Z isto metodo lahko zaustavite program in počakate na konzolo (zaporedna vrata, povezana z Serial) Na voljo.

    Preiščite različna besedila v odgovoru ESP8266

    Koda v prejšnjem primeru se uporablja za iskanje besedila v informacijah, ki jih pošlje ESP8266 vendar lahko odgovor vključuje različne informacije, odvisno od operacije. Recimo, da začnemo s preprostim primerom v naslednjem primeru, da je besedilo, ki ga je poslal MCU ESP8266 es OK ko je operacija izvedena pravilno in ERROR Sicer pa tako kot pri naročilu AT+CWJAP?, ki služi za preverjanje, ali je ESP8266 wifi modul je že povezan z dostopno točko.

    Ta nova izvedba iste metode, ki išče ujemanje z več možnimi sporočili, vam omogoča izbiro med različnimi dejanji glede na odgovor, prejet od ESP8266, preprosto vklopite LED ustrezna.

    Omejite čas, potreben za prejem odgovora

    Do zdaj ni bilo nobenega sklicevanja na pomembno vprašanje: najdaljši čas čakanja (časovna omejitev), preden se obravnava operacija kot neuspešna. Če je iz kakršnega koli razloga povezava z ESP8266 wifi modul, modul z dostopno točko, dostopna točka z internetom ali na primer hipotetični strežnik ni na voljo, je lahko program na eni točki blokiran in čaka v nedogled, zato bo treba na takšne okoliščine artikulirati odziv. Maksimalno čakalno dobo lahko konfigurirate za celotno aplikacijo, običajno bo v tem primeru bolj "radodarno" ali pa programirate posamezne čakalne dobe za vsako operacijo.

    Za preverjanje, ali je minil (vsaj) določen časovni interval "Čas" trenutka, ko je račun odprt, se običajno odšteje od trenutnega "časa" in preveri, ali je razlika večja od želene meje. Ni nujno, da je ta "čas" realni čas, običajno ustreza intervalu, ki je pretekel od MCU začnite šteti čas; To ne vpliva na program, saj je zanimiv pretečeni čas in ne absolutni čas.

    Običajno se za preverjanje, ali je določen interval potekel, uporablja izraz tipa:

    Spremenljivka milisegundos_al_empezar vsebuje vrednost millis() določenega trenutka v izvedbi, od katere se meri, zato ni nenavadno, da se njegovo ime nanaša na besedo "kronometer". Spremenljivka intervalo_de_tiempo vsebuje največje število milisekund, zaradi katerih je prejšnji izraz resničen, kar pomeni, da predstavlja časovno omejitev; Običajno je konstanta (ali makro) in kot v prejšnjem primeru se v njenem imenu pogosto pojavi beseda "TIMEOUT". Če delate v zelo kratkih intervalih, lahko uporabite micros() namesto millis() (mikrosekunde namesto milisekund), čeprav je veliko manj pogost in veliko manj natančen.

    Dolgo celo število v Arduino (unsigned long) zaseda 4 bajte (32 bitov), ​​tako da je največja vrednost, ki jo lahko predstavlja, 4294967295 (2 na potenco 32 minus ena, ker se začne pri nič). na krožniku Arduino Med neprekinjenim delovanjem se bo števec milisekund ponastavil (vrnil na nič) približno vsakih 50 dni. Pri odštevanju z nepodpisanimi tipi podatkov se ponovi enako vedenje (obračanje števca), tako da je možno nadzorovati časovno omejitev za nedoločen čas.

    Zgornja koda prikazuje a zelo osnovna izvedba omejitve časovne omejitve ki vključuje črte, označene glede na primer pred njim. Ker se preverjanje časovne omejitve izvede po obdelavi podatkov, ki prispejo iz ESP8266 wifi modul, lahko operacijo štejemo za uspešno tudi, če sprejem traja dlje od predpisane čakalne dobe.

    Izvedite zapleteno operacijo, ki jo definira več ukazov AT

    Imeti primer reference namena aplikacije, ki izkorišča ESP8266 wifi modul, recimo da je shranjevanje informacij v bazo podatkov, do katere dostopate prek spletne storitve da spremljate temperaturo. Naslednja koda prebere senzor, povezan z analognim vhodom, vsak določen časovni interval, izračuna povprečno vrednost in jo po daljšem časovnem intervalu pošlje spletnemu strežniku (slog Internet stvari) skozi a peticijo HTTP (OBJAVI, PRIDOBI…).

    V tem primeru beleženja temperature se spletni strežnik dostopa vsakih pet minut. Čeprav razpoložljivost ni posebej visoka, je pričakovati, da bo predlog deloval, če pa bi bila potrebna večja frekvenca snemanja, bi bilo treba uporabiti druge vire, npr. medpomnilnik podatkov čaka na pošiljanje, da pošlje več, ko se strežnik lahko udeleži, in jih shrani za čas, ko ni na voljo. Če bi bila pogostost, s katero je treba zapisovati podatke, še večja, bi bilo treba kot alternativo predlagati druge vrste protokolov. HTTP ali celo zamenjati TCP jo UDP da bi lahko poslali večino podatkov z zahtevano hitrostjo, tudi za ceno izgube nekaterih.

    Operacije, ki sestavljajo nalogo, ki jo je treba izvesti za pošiljanje temperature, bi bile:

    • Ponastavite wifi modul
    • Prekini povezavo s trenutno dostopno točko (če obstaja privzeta povezava)
    • Nastavite nastavitve. Za primer se predpostavlja, da je treba konfigurirati način povezave (enostavno) in vlogo v komunikaciji Wi-Fi (postaja).
    • Povežite se z dostopno točko
    • Preverite, ali je povezava pravilna (pravzaprav je to vstopna točka) Če povezave ni, začnite postopek od začetka
    • Povežite se s strežnikom
    • Pošljite zahtevo HTTP s podatki, ki jih je treba shraniti

    Ni nujno, da je vrstni red operacij točno tak (čeprav je operacija) in vsak korak lahko zahteva več Ukazi ESP8266 ATNa primer, zgoraj navedena konfiguracija bi potrebovala dva: AT+CIPMUX=0 y AT+CWMODE=1.

    Podatkovna struktura za predstavitev operacij na ESP8266

    V prejšnjih primerih je, čeprav na zelo osnovni način, že predlagana splošna rešitev problema: uporabite podatkovno strukturo, ki shranjuje možne odzive in dejanja, ki jih je treba izvesti v vsakem primeru; pošljite dejanje, počakajte na odgovor in nadaljujte glede na to, kaj odgovor pomeni. Ker bo vsaka kompleksna operacija zahtevala več Ukazi ESP8266 AT, mora podatkovna struktura povezati operacijo z drugimi, naslednjimi ali prejšnjimi, ki jih je treba izvesti v vsakem primeru glede na odziv ESP8266.

    V prejšnjih primerih je bilo sporočilo preiskano v odgovoru ESP8266 in je bilo razloženo kot uspeh ali napaka. Poleg sprejema (in analize) vsega prejetega besedila, Če želite imeti splošni minimum, je priporočljivo, da se posvetite tudi izpolnjevanju sporočila ali, z drugimi besedami, na razpoložljivost ESP8266 wifi modul za prejemanje novih naročil. Na ta način bi lahko sprememba v stanje, ki bi ga lahko imenovali, na primer »wifi dostopen«, prejemala ime dostopne točke in prejemala besedilo ERROR ali besedilo OK bi pomenilo, da ESP8266 končali ste z odgovorom in zdaj lahko pošljete naslednjega Ukaz AT za ESP8266.

    Zgornja koda uporablja vektor (operacion) za shranjevanje besedila zaporednih operacij, ki tvorijo celotno nalogo. Uporabljen je dvodimenzionalni niz (mensaje) s tremi analiziranimi odgovori. Kot je razloženo zgoraj, je treba poleg sporočila, ki predstavlja pravilen ali napačen odgovor, iskati sporočila, ki predstavljajo konec odgovora. Vse operacije ne bodo imele enakega števila možnih odgovorov; Kadar je odzivov manj, se lahko uporabi prazno sporočilo, ki pri analizi porabi najmanjše možno število ciklov (čeprav tako ni najbolj optimalno). Logično bo nujno, da minimalno število iskanih odgovorov (v primeru trije) vključuje vse možnosti delovanja, tudi če niso vse možne.

    Ko govorimo o možnih odgovorih, je že razvidno, da ta primer ni zelo uporaben za prejemanje podatkov v poljubni obliki iz ESP8266 wifi modul, a stvar je v tem, da v kontekstu uporabe z mikrokrmilniki ni običajno; Najpogostejša stvar je pošiljanje podatkov, zbranih s senzorji, ki so jih povezali, in/ali prejemanje informacij o tem, kaj storiti z aktuatorji, ki jih nadzoruje. Zelo dragocena informacija, ki jo je mogoče zelo dobro predvideti.

    V prejšnji podatkovni strukturi, tako kot je storjeno za izražanje možnih odzivov, ki se analizirajo, se dvodimenzionalna matrika uporablja tudi za določitev operacije, ki jo je treba izvesti v vsakem primeru (siguiente_operacion). Natančneje, izbrali smo odgovor na tri vrste sporočil: ① poljubno besedilo (LITERAL), da preverite, ali obstaja povezava z dostopno točko Wi-Fi in strežnikom, ② besedilo za odkrivanje napak v postopku (FALLO) in ③ besedilo, ki označuje, da je bila operacija uspešno zaključena (ACIERTO).

    Končno sta na voljo še dva vektorja za nastavitev najdaljšega čakalnega časa, preden obupate (timeout) in navedite (configuracion), če se operacija konča brez čakanja na odgovor (ESPERAR_RESPUESTA) in sporočila, ki označujejo konec komunikacije. Ta zadnji vektor, ki ponazarja primer, kako bi lahko shranili pomnilnik, deluje z biti konfiguracijskega bajta, da prikaže različna stanja.

    Prvi Ukazi ESP8266 AT podatkovne strukture vedno pričakujte odgovor, ki je lahko sporočilo o uspehu ali napaki. Ko pride do napake, se modul znova zažene in se znova zažene in če sporočilo kaže, da je operacija pravilna, se premakne na naslednjo.

    Ko se povežete s strežnikom, se vzorec spremeni. V tem primeru je treba ① poslati dolžino podatkovnega paketa, ki ga želite prenesti, in ② sestaviti zahtevo HTTP s fiksnim besedilom in vrednostjo (temperature), ki se pošlje v shranjevanje na strežnik. Priprava teh podatkov poteka v vsaki pošiljki in jo je potrebno razdeliti na dve (sporočite dolžino) ali tri (pošljite zahtevo) HTTP) On ESP8266 AT naročilo. Samo zadnji od delov, na katere je operacija razdeljena, bo čakal na odgovor.

    V tem primeru bo deloval brez težav (mogoče opozorilo, da je modul zaseden), ko pa bo dolžina podatkov večja, bo treba podatkovne bloke razdeliti na manjše dele in morda celo implementirati čakanje, kot se opravi z odčitkom temperature, da ima modul čas za pošiljanje podatkov, ne da bi jih zapolnil varovalni.

    Skupaj z drugimi makri, ki so bili že razloženi prej, zgornji primer kode prikazuje, kako so definirana različna stanja, s katerimi je treba določiti, ali je treba počakati na odgovor in, če je primerno, katero sporočilo označuje, da se je končalo.

    Ker bo na različnih mestih v kodi poslana operacija (ko je čas za pošiljanje povprečne temperature, če je čakalni čas operacije presežen, ko je trenutna operacija uspešno zaključena ...), toda kako to storiti je uveljavljena globalno, je bila opredeljena kot makro ENVIAR_OPERACION ki združuje korake, vključene v pošiljanje.

    Sledi koda glavnega programa primera. Najbolj zunanja naloga je tista, ki je zadolžena za vzorčenje temperature za izračun povprečja in se vsako določeno časovno obdobje pošlje strežniku s pomočjo ESP8266 wifi modul. Ko je posamezna operacija poslana, se odgovor analizira, da se ugotovi, katera je naslednja ali ali je bila naloga pošiljanja informacij opravljena.

    Logično je, da je na prejšnji kodi mogoče izvesti več optimizacijskih dejanj, vendar, ker je to primer za razumevanje, kako se ESP8266 Splošno gledano se je vredno osredotočiti le na nekatere vidike, prvi je struktura podatkov. Zdi se, da je logično uporabite podatkovno strukturo programskega jezika (struct), ki predstavlja podatke, ki se obdelujejo: the Ukazi ESP8266 AT in sporočila, ki se analizirajo.

    Uporabite strukturo (struct) shranjevanje podatkov namesto vzorčnih nizov (temelji na njih) je trivialno in, čeprav lahko povzroči bolj elegantno kodo, ne pomeni nobene izboljšave rezultata. Prava alternativa, ki jo predstavlja uporaba struct izvajati, kot je razloženo spodaj, spremenljive dolžine v strukturah, ki vsebujejo "notranje" podatke ki jih omenjajo. Na ta način na primer ne bi bilo potrebno, da bi imela operacija določeno število odgovorov za analizo.

    Ta pristop nakazuje, da je to najboljši način za implementacijo rešitve, pomanjkljivost pa je, da bi bil potreben uporaba dinamičnega dodeljevanja pomnilnika, kar je tvegana praksa dela z a mikrokrmilnik kar zahteva natančno merjenje količine pomnilnika, ki bo uporabljen med izvajanjem, saj nas prevajalnik na to težko opozori in obstaja določena možnost izčrpanja pomnilnika (ali sklada) z usodnimi posledicami za izvajanje programa.

    V vrstici optimizacije kode je zanimivo spomniti, da v programu te vrste, ki uporablja veliko količino besedila, lahko prihrani pomnilniški prostor SRAM shranjevanje besedilnih nizov v programski pomnilnik (bliskavico) z makrom F(). Na naslednjih posnetkih zaslona lahko vidite različne programe in dinamično porazdelitev pomnilnika z običajno uporabo besedila in uporabo makra F().

    Primer kode Arduino z uporabo besedila, shranjenega v programskem pomnilniku (flash)
    Primer kode Arduino z uporabo besedila v SRAM

    V zvezi z dejanji, ki se izvajajo po informacijah, ki prihajajo iz ESP8266 wifi modul, kot alternativo preverjanju sporočila iz kode in izvedbi enega ali drugega glede na prejeto, lahko shranite v to podatkovno strukturo kazalci na funkcije, ki izvajajo vsako nalogo namesto indikatorjev statusa (zastavice), ki opozarjajo na določeno stanje, za upravljanje katerega je odgovorna aplikacija, na primer znotraj glavne zanke.

    Sledi primer struktur za shranjevanje podatkov zahtev za ESP8266 (tip podatkov operacion_esp8266) in njihovi odgovori (vrsta podatkov respuesta_esp8266).

    Kot struktura, ki predstavlja operacijo (podatki, ki so poslani v ESP8266 wifi modul) se nanaša na strukturo, s katero so definirani odzivi, struktura odzivov pa na strukturo operacij, najprej je treba deklarirati oboje, tako da definirate nov podatkovni tip in nato definirate njegovo vsebino.

    Prejšnji primer meni, da se je program, ki ga vključuje, odločil za uporabo a indikator stanja, ki mora ustrezati spremenljivki, dostopni iz kode, ki je odgovorna za izvajanje ene ali drugih operacij, kot je navedeno z omenjeno vrednostjo. Če v odgovoru na ESP8266 Pri analizi določenega besedila stanje zavzame vrednost, ki označuje strukturo ustreznega odgovora.

    Kot je bilo že omenjeno, bi bila druga alternativa zamenjava ali dopolnitev indikatorja stanja shrani funkcijo v referenčno strukturo (kazalec), ki bi bil poklican, ko bi v odgovoru naletel na določeno besedilo ESP8266 wifi modul.

    V prejšnjem primeru je bil dodan podatkovni strukturi, ki se uporablja za obdelavo odgovora iz ESP8266 wifi modul kazalec na (domnevno) funkcijo, ki vrne podatek tipa float (lahko je utežena vrednost analognega odčitka) in kateremu sta dva bajta podana kot argumenta (dva unsigned char ki je lahko pin, s katerega se bere analogni vhod, in tisti, ki aktivira ENABLE hipotetičnega integriranega).

    V razvoju za MCU, v nasprotju s tem, kar se dogaja v razvojnem slogu za večje sisteme, ni tako redkost uporaba globalnih spremenljivk pri definiranju (globalnega) obnašanja aplikacije, ki nadzoruje sklop, zato ne bo posebej redko najti tovrstnih definicij kot funkcije brez parametrov in ne vrnejo vrednosti, nekaj podobnega void (*accion)();

    Če delate s tem načinom predstavljanja podatkov, uporabite struct podatkov spremenljive dolžine bo treba dinamično dodeliti pomnilnik malloc() (o new(), če so uporabljeni predmeti), ki bo uporabil količino dodeljenega pomnilnika kot parameter in vrnil kazalec na začetek območja pomnilnika, ki je rezerviran. z sizeof() Glede na vrsto, ki je shranjena, pomnoženo s številom uporabljenih elementov, lahko dobite potrebno količino pomnilnika. Primer z in brez uporabe si lahko ogledate na spodnjih posnetkih zaslona. malloc(); Bodite previdni pri pomnilniku, ki ga uporablja program, v prvem primeru morate naložiti knjižnico, ki vsebuje to funkcijo.

    Primer dodeljevanja pomnilnika z malloc na Arduinu

    Primer dodelitve besedila brez malloc v Arduinu

    Če operacije na ESP8266 wifi modul spreminja med izvajanjem programa, bo treba sprostiti pomnilnik, ki se ne uporablja z free() (o delete(), če gre za predmete). Čeprav je razumno pričakovati, da prevajalnik (GCC) bo optimiziral program, da se izogne ​​particioniranju pomnilnika, zmogljivost zagotovo ne bo tako optimalna kot pri delu s statično dodeljenim pomnilnikom.

    Čeprav v tem primeru (v obeh izvedbah) nima velikega smisla, je treba za posplošitev operacije, da bi jo lahko uporabili v drugih primerih, upoštevati, da pošiljanje podatkov vedno ponavlja isti protokol: sporočite število bajtov, ki bodo poslani, počakajte na indikator (>) in pošljite podatke.

    Ker je v tem primeru uporabljen samo enkrat (celotna zahteva je narejena v enem paketu), se ne zdi zelo uporaben, vendar bo na splošno morda treba izvesti več pošiljanj v isti operaciji, vključno s primeri, ko morajo prenašati znatne količine podatkov, ki morajo biti razdrobljeni, da se prepreči prepolnitev pomnilnika ESP8266.

    Za izvedbo tega vedenja se lahko uporabita zadnja dva elementa povezave, tako da se vsakič, ko so podatki poslani, podatki napolnijo z ustreznimi vrednostmi: v prvem primeru število poslanih bajtov, v drugem pa ( del) zahteve, ki se posreduje.

    Za ponovitev dodelitve in pošiljanja različnih elementov, ki jih je treba prenesti, je mogoče shraniti v vektor. Ta novi vektor bo tisti, ki bo določal konec kompleksne operacije in ne zadnja operacija kot do zdaj.

    1 komentar

    uporabnik komentarjev
    ดูบอลสด

    O tej temi je vsekakor treba izvedeti veliko. Všeč so mi vse točke, ki ste jih navedli

    po Komentar

    Morda ste zamudili