Arduinon ESP8266 wifi-moduulin perustoiminnot

Arduinon ESP8266 wifi-moduulin perustoiminnot

Arduinon ESP8266 wifi-moduulin perustoiminnot

Kun Espressif lanseerasi ensimmäiset moduulit markkinoille wifi integroidun kanssa ESP8266 ja firmware jonka kanssa käsitellä sitä AT-komennoilla, mikä meitä käyttäjiä kiinnosti oli integroida se kokoonpanoihin mikro-ohjaimet ja ongelmat rajoittuivat (entisen) pimeyden tuntemiseen ESP8266 AT -komentotaulukko, ruokintatarpeet tai ESP8266 laiteohjelmistopäivitys.

Sisällysluettelo

    Sitten vaihtoehdot saapuivat nopeasti ohjelmoimaan ESP8266 ja moduulien toteutukset wifi hyvin erilaisia ​​muotoja, jotka herättivät muita huolenaiheita: mikä ESP8266 wifi-moduuli valita riippuen eri antennien kantamasta (mukaan lukien ulkoiset) tai näiden uusien moduulien fyysisestä integroinnista kokoonpanoihimme.

    Kaikista näistä muutoksista johtuen ei varmaankaan ole painotettu alkeellisia puolia, alkeellisinta hallintaa. ESP8266 wifi-moduuli. Siitä huolimatta napaisuus.es Löydät tietoa käytöstä ESP8266 ja on joitain sovelluksia, joiden tarkoituksena on selittää yleisellä tavalla järjestelmän toimintaa ESP8266 wifi-moduuli käyttämällä AT-komentoja, erityisesti artikkelissa kirjasto HTTP-kyselyjen tekemiseen Arduinosta ESP8266 wifi-moduulilla, lukijoiden vaikutelmat viittaavat siihen, että olisi hyödyllistä lisätä joitakin perustietoja, jotka auttavat käyttäjiä ESP8266 toteuttamaan omia toteutuksiaan.

    Keskustele perustoiminnoista, joita voit käyttää ESP8266 ja yleisten ratkaisujen ehdottaminen on useiden hyvin erilaisten osien tavoite; Artikkelin sisällön seuraamisen helpottamiseksi seuraava hakemisto voi toimia oppaana:

    Ohjaa ESP8266 wifi-moduulia tietokoneesta sarjaportin kautta

    lautaselta Työläs ja käyttämällä sinun IDE on mahdollista seurata a ESP8266 wifi-moduuli, Lähetä ESP8266 AT-komennot ja katso vastaus, mutta se on paljon kätevämpää tehdä tietokoneelta päätetyyppisellä sovelluksella.

    CuteComin käyttäminen ESP8266 wifi-moduulin testaamiseen sarjaportin kautta

    Riippuen miltä levyltä Työläs Käytettynä vain yksi laitteiston sarjaportti voi olla käytettävissä, mikä lisää hieman vaivaa lähettämiseen ja vastaanottamiseen. Viestintänopeuden muuttaminen on paljon mukavampaa sarjaviestintäsovelluksessa tietokoneesta ja joistakin emolevyistä. Työläs (ja joissakin olosuhteissa) eivät tue hyvin sarjaliikenteen suurempia nopeuksia, etenkään 115200 XNUMX baudia, joka on uusimpien versioiden oletusnopeus. firmware.

    Noin Mitä ohjelmaa käyttää valvomaan ESP8266 käyttämällä sarjaporttia, on monia valittavia tarpeiden ja mieltymysten mukaan; Viime aikoina olen käyttänyt klassista enemmän CuteCom (yllä olevassa kuvakaappauksessa), koska minun on erittäin mukava toistaa tiettyjä ESP8266 wifi-moduulin AT-tilaukset projektitestauksessa.

    Tässä on jo annettu joitakin suosituksia ohjelmista, jotka toimivat sarjakonsolina; Esimerkiksi kun puhutaan PuTTY UART-sarjalaitteiden ohjaamiseen tietokoneesta. PuTTYSen lisäksi, että se on erinomainen sovellus, se on saatavana useimpiin työpöytäkäyttöjärjestelmiin. Lisäksi as PuTTY voidaan käyttää konsolina sekä sarjaportin että Internet-protokollaperhe (TCP/IP), mukaan lukien ne, jotka toimivat TLS, tulee yleiseksi työkaluksi, joka enemmän kuin korvaa sen määrittämiseen ja sen käyttöön totutteluun käytetyn (vähän) ajan.

    PuTTY:n käyttäminen ESP8266 wifi-moduulin testaamiseen sarjaportin kautta

    Sarjaliikenneohjelmistojen lisäksi yhdistää ESP8266 wifi-moduuli satamaan USB Tietokone vaatii myös muuntimen USB sarjaan TTL. Ohjelmistojen tapaan on olemassa useita versioita, joista niitä käytetään vain portin muuntamiseen USB sarjaportissa TTL (jotka saa yhdestä eurosta) niihin, jotka voivat emuloida erilaisia ​​protokollia (esim SPI o I2C).

    Aivan kuten ohjelma, joka toimii sarjakonsolina, laitteisto, jolla kommunikoidaan tietokoneen kanssa USB logiikkapiirillä (ei vain ESP8266) tulee olemaan yleinen työkalu mikroohjatun sovelluskehittäjän työssä, se kannattaa ottaa työkalupakkiin mahdollisimman pian ja työskennellä sen kanssa ESP8266 wifi-moduuli Se on loistava tilaisuus hankkia sellainen.

    Laitteisto USB UART -sarjaviestintään ESP8266 wifi-moduulin valvomiseksi

    Muunnin USB a UART TTL Sitä voidaan käyttää myös valvomaan piiriä käyttävän piirin käyttäytymistä ESP8266, tätä varten valvottavat lähdöt kytketään sarjaan muuntimen datatuloon (RX) nopealla diodilla ( 1N4148esimerkiksi) ja vastus (esimerkiksi 2K2) rinnakkain toistensa kanssa. Tällainen kokoonpano toimii kuin laitteistosarjan haistaja.

    Sniffer-esimerkki ESP8266:lle, joka on liitetty Arduinoon USB UART TTL -muuntimella

    Vaikka yllä olevan kuvan nuuskija on varmasti alkeellinen (muun muassa sillä ei ole puskuri) riittää valvomaan kokoonpanon toimintaa Työläs ja ESP8266.

    Poistamalla haistaja edellisestä järjestelmästä, kaavio, joka näyttää kuinka kytketään a ESP8266 wifi-moduuli lautaselle Työläs. Sen lisäksi, että se syötetään 3V3:lla, integroidun reset-nasta ja aktivointinasta on kytkettävä korkealle tasolle (aktivointi). Tietenkin toisen RX-nastan on yhdistettävä toisen TX-liitäntään.

    Edellisen kaavion yksinkertaistamiseksi on esitetty levy Työläs 3V3 ja joiden sarjaportin jännitteen oletetaan myös olevan 3V3. Jos käytät a mikro-ohjain eri signaalitaso sarjaportissa (yleensä 5 V) on tarpeen, jotta laite ei vaurioidu. ESP8266, Käytä tason muunnin kuten alla olevissa kaavioissa. Tämä piiri löytyy usein monista kaupallisista valmiista moduulitoteutuksista.

    5V - 3V3 signaalitason muunnin ESP8266 WiFi-moduulille ja Arduinolle

    Päivitä ESP8266 laiteohjelmisto

    Las ESP8266 AT-komennot, sen päättäminen, moduulin oletusnopeus... riippuu versiosta ESP8266 laiteohjelmisto. On parasta varmistaa, että sinulla on sama versio kaikissa moduuleissa ja jos mahdollista, että se on uusin versio.

    Valitettavasti suurin osa ESP8266 wifi-moduulimallit Niissä on vain 4 Mbit, joten uusinta versiota ei voi asentaa niihin. Laiteohjelmiston uusin (virallinen) versio, johon voidaan asentaa ESP8266 wifi-moduulit 4 Mbit (useimmat) on 0.9.4, joka sisältää version 0.2 ESP8266 AT-komennot.

    Yhteenvetona, tarvitsemasi laiteohjelmiston päivittäminen:

    1. Lataa vastaava laiteohjelmistoversio. uusin (virallinen) versio moduulille, jossa on 4 Mbit muistia, löytyy githubin Espressif-kansiosta. että Espressifin verkkosivusto Voit ladata laiteohjelmiston uusimman version, mutta on erittäin tärkeää varmistaa, että moduulissa, johon se on asennettu, on tarpeeksi muistia.

    2. Lataa laiteohjelmiston asennustyökalun uusin versio. Suosikkini on esptool joka on kirjoitettu Python, joten se toimii millä tahansa alustalla. Sen lisäksi, että se voidaan ladata, se voidaan myös asentaa pip install esptool (o pip2 o python -m pip…). Tietysti, Espressif Se tarjoaa myös oman työkalunsa, mutta on tällä hetkellä saatavana vain Windowsille.

    3. Valmistele ladatut tiedostot; pura ne helppokäyttöiseen kansioon ja tee työkalusta tarvittaessa suoritettava esptool, minun tapauksessani alkaen GNU / Linux, With chmod +x esptool

    4. Liitä moduuli tietokoneeseen muuntimen avulla USB UART TTL joka toimii 3V3:ssa tai käytä tasomuunninta, jos se toimii 5 V:lla. Tehon lisäksi sinun on kytkettävä muuntimen TX RX:ään USB UART TTL, RX to TX, GPIO0 alhaisella tasolla (GND) ja ehkä GPIO2 korkealla tasolla (omissa testeissäni se on toiminut sekä kytkemällä sitä matalalla tasolla että irrottamalla sen). Jos moduulissa on vapaa GPIO15-liitäntä (kuten ESP-12:ssa), se on kytkettävä matalalle tasolle. RESET, joka normaalisti olisi käytön aikana korkealla tasolla, voidaan jättää kytkemättä tai liittää korkealle tasolle vastuksen avulla (esim. 10K), koska ennen tallennuksen aloittamista laite saattaa olla tarpeen nollata kytkemällä se. matalalle tasolle.
      Kun moduuli käynnistetään, se on päivitettävissä, mutta Jos näyttöön tulee yhteysvirhe, se on nollattava kytkemällä RESET hetkeksi matalalle tasolle ja jättämällä sen sitten lähetykseen (ilman yhteyttä) päivitysprosessia varten.
      Moduulilla on puolen ampeerin kulutushuiput (jopa 600 mA, joidenkin käyttäjien mukaan), joten on tärkeää käyttää virtalähdettä, joka pystyy tukemaan tätä kulutusta, erityisesti laiteohjelmiston päivityksessä.

      Yhdistä wifi-moduuli ESP8266 ESP-01 USB UART TTL -muuntimen laiteohjelmistopäivitykseen

    5. Päivitä laiteohjelmisto suorittamalla työkalu. Minun tapauksessani olen tallentanut työkalun ja laiteohjelmiston asiakirjat vaiheessa 3 samaan kansioon, joten käytän konsolista:
      cd ~/Datos/firmwareESP8266 (vaihda kansioon, joka sisältää työkalun ja laiteohjelmiston)
      ./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 asettaa nopeuden ESP8266 (115200 baudia minun tapauksessani) ja --port sarjaportti, johon se liitetään (minun tapauksessani emuloitu ensimmäinen USB). Laiteohjelmiston muodostavat erilaiset asiakirjat jäävät taakse write_flash edeltää osoite ja user1.bin-asiakirja, joka sisältää päivityksen hyötykuorman.

      wifi ESP8266 laiteohjelmistopäivitys esptool-konsolin kaappaus

    Lähetä komennot ESP8266 wifi-moduuliin

    Hallitaksesi ESP8266 tietokoneelta, josta meidän on aloitettava määritä sovellus jolle riittää ① valitsemaan portti, johon muunnin on kytketty USB UART TTL, vähän niin kuin /dev/USB0 GNU/Linuxissa ja vastaavassa tai vastaavassa COM6 Windowsissa ② valitse nopeus, jolla ESP8266, luultavasti 115200 8 baudia, ③ aseta XNUMX databittiä plus yksi pysäytysbitti ilman pariteettia tai kättelyä ja ④ aseta rivin loppu riippuen firmware, melkein aina CR+LF.

    Määritä CuteCom valvomaan ESP8266 wifi-moduulia USB UART TTL -muuntimen avulla

    Määritä PuTTY valvomaan ESP8266 wifi-moduulia USB UART TTL -muuntimella

    Kun sovellus on määritetty (tai tarvittaessa tallennettu ja valittu), se on avaa yhteys ("open laite" ja "open", vastaavasti, yllä olevien esimerkkien kuvakaappauksissa CuteCom y PuTTY) ja voit alkaa lähettää tilauksia osoitteeseen ESP8266.

    Kuten voidaan nähdä ESP8266 AT -komentotaulukko, aktivoinnin, deaktivoinnin, arvon asettamisen ja siihen viittaamisen muoto on varsin ennakoitavissa, mutta yleisesti ottaen niitä ei ole helppo muistaa ja tarvitset todennäköisesti sen käsillä, jotta voit viitata siihen.

    Tapa lähettää AT käskyt al ESP8266 wifi-moduuli alkaen Työläs on hyvin yksinkertainen: ① määritä viestintä Serial.begin(115200); (tai Serial1, Serial2… levyillä, joissa on useita laitteiston sarjaportteja) ja ② lähettää komennot muodossa Serial.print(orden+"\r\n");

    Yllä oleva esimerkki näyttää, kuinka lähettää ESP8266 wifi-moduulin AT-tilaukset alkaen Työläs. Tässä tapauksessa se on kuvattu AT+CWJAP, jota käytetään yhteyden muodostamiseen tukiasemaan. Tämä komento käyttää argumentteina tukiaseman tunnistetta (SSID) ja avain, molemmat lainausmerkeissä, joten niistä tulee esine Srtring ja kirjoita ne lainausmerkkeihin käyttämällä estokoodia (\"). Suorita tilaus loppuun käyttämällä \r\n joka vastaa CR y LF.

    Muista, että sarjaporttia ei aina tunnisteta Serial (tietyillä levyillä se voi olla Serial1, Serial2…) käytetty porttiobjekti on määritetty määrittämällä se makrolle PUERTO_SERIE. Käytetyn kortin tyypin tunnistaminen voisi lisätä älykkyyttä sarjaportin valintaan; Myöhemmin käymme läpi, kuinka voit selvittää tyypin Työläs. Loput määritelmät ovat tavallisia, joiden avulla voit "nimetä" vakioarvot välttääksesi niiden toistamisen (ja virheiden tekemisen) ja helpottaaksesi niiden vaihtamista.

    Yllä olevan esimerkin on tarkoitus yhdistää ESP8266 wifi-moduuli ilmoitettuun tukiasemaan, mutta oliko se jo yhdistetty aiemmin? Onko yhteys toiminut? Tietääksemme tämän, meidän on "kuunneltava" mitä ESP8266

    Vastaanota tiedot ESP8266 wifi-moduulista

    Yhdistämällä yllä selitetyn datan haistelijan tietokoneeseen näet mitä Työläs on lähettänyt osoitteeseen ESP8266 ja hänen vastauksensa. Lukemaan alkaen Työläs ja käsitellä siinä olevat tiedot, se on tarpeen havaita Serial.available() jos tietoja on saapunut ja jos on, lataa se Serial.read(). Seuraava esimerkki näyttää, kuinka vastaus luetaan AT+CWJAP?, joka ilmoittaa, onko yhteys mihin tahansa tukiasemaan.

    Kuin lautasella Arduino Uno (ja muissa) sarjanäytön avaaminen nollaa ohjelman, sitä voidaan käyttää sarjakonsolissa Työläs tiedot, joille lähetät ESP8266 kuten alla olevan kuvan kuvakaappaus osoittaa.

    Vastaanota tiedot ESP8266 wifi-moduulista Arduinosta. Perusesimerkki

    Analysoi ESP8266 wifi-moduulin lähettämä vastaus

    Olemme jo nähneet, kuinka luetaan saapuva tieto Työläs alkaen ESP8266. Ongelma, jota sinun on käsiteltävä, on se, että et tiedä milloin se alkaa saapua, kuinka kauan sen saapuminen kestää, kuinka pitkä se on... ja ei ole kovin tehokasta odottaa vastausta ESP8266 vastaanotetaan antamatta mikro-ohjain suorittaa muita tehtäviä sillä välin.

    Yksinkertainen tapa hallita tätä tilannetta on iteroida saatuja tietoja ja etsiä konkreettisia vastauksia jolla esimerkiksi aktivoidaan indikaattoreita (lippuja tai Boolen muuttujia), jotka määrittävät, jatketaanko hakua vastaanotetusta tekstistä ja mitä toimia tulee tehdä tekstistä saapuvien tietojen perusteella. ESP8266. Kun vastaus saapuu mikro-ohjain voi omistautua muihin tehtäviinesimerkiksi vastaanottaa dataa antureilta ja käsitellä niitä.

    Etsi tekstiä ESP8266:lta saaduista tiedoista

    Etsiäksesi tekstiä, joka tulee kohteesta ESP8266 voit vertaa jokaista vastaanotettua kirjettä siihen, joka vastaa etsimääsi viestiä. On tarpeen käyttää laskuria (tai osoitinta), joka osoittaa verrattavaan kirjaimeen; Jos hahmo, joka saapuu ESP8266 on sama kuin viestissä tutkittava, laskuri etenee, jos se on eri, se alustetaan.

    Tietääkseen, että loppu on saavutettu, etsitään haetun viestin seuraavaa merkkiä, joka on nolla (\0) tai viestin pituus tallennetaan, jotta sitä vertaamalla laskuriin saadaan selville, onko vertailu päättynyt ja siksi ESP8266 wifi-moduuli on lähettänyt halutun viestin.

    Seuraava esimerkki käyttää komentoa AT+CWLAP joka palauttaa luettelon tukiasemista ja niistä etsitään "wifi polaridad.es". Vaikka olemme päättäneet varmistaa, että viimeinen merkki on nolla, koska puskuri Se tallentaa vain haetun tekstin ja sen pituus on tiedossa, voisi myös tarkistaa, onko tullut näin paljon oikeita kirjaimia. Kanssa LED kytketty nastaan ​​2 ilmoitetaan, että odotettu teksti on löydetty.

    Edellisen esimerkin koodissa näet myös tavan Valitse sarjaportti kortin tyypin mukaan Työläs käytetty. Tässä esimerkissä oletetaan, että sinulla on kolme tyyppistä levyä projektia varten: yksi Arduino Uno, One Arduino Mega 2560 ja arduino leonardo. Jos työskentelet a Arduino Uno sitä käytetään Serial ja muuten Serial1.

    Jos työskentelet lautasen kanssa arduino leonardo Voit käyttää samaa tapaa pysäyttääksesi ohjelman ja odottaa konsolia (sarjaportti, joka liittyy Serial) on käytettävissä.

    Etsi erilaisia ​​tekstejä ESP8266-vastauksesta

    Edellisen esimerkin koodia käytetään tekstin etsimiseen lähettämistä tiedoista ESP8266 mutta vastaus voi sisältää erilaisia ​​tietoja operaatiosta riippuen. Oletetaan, että seuraavassa esimerkissä aloitetaan yksinkertaisella tapauksella, että MCU ESP8266 es OK kun toimenpide suoritetaan oikein ja ERROR Muuten, kuten tilauksen kanssa AT+CWJAP?, jonka avulla varmistetaan, onko ESP8266 wifi-moduuli on jo yhdistetty tukiasemaan.

    Tämä saman menetelmän uusi toteutus, joka etsii vastinetta useista mahdollisista viesteistä, antaa sinun valita eri toiminnoista riippuen ESP8266, kytke vain virta päälle LED vastaava.

    Rajoita vastauksen saamiseen kuluvaa aikaa

    Tähän mennessä ei ole viitattu asiaankuuluvaan asiaan: the suurin odotusaika (aikakatkaisu), ennen kuin toiminnon katsotaan epäonnistuneen. Jos jostain syystä yhteys ESP8266 wifi-moduuli, tukiaseman sisältävä moduuli, Internet-yhteyspiste tai esimerkiksi hypoteettinen palvelin ei ole käytettävissä, ohjelma voi olla estetty jossain kohdassa odottamassa määräämättömäksi ajaksi, joten tällaisiin olosuhteisiin on vastattava. Maksimi odotusaika voidaan konfiguroida koko sovellukselle, yleensä se on silloin "anteliaampi" tai kullekin toiminnolle voidaan ohjelmoida omat odotusajat.

    Tarkistaaksesi, että (ainakin) tietty aikaväli on kulunut Tilin aloitushetken "aika" vähennetään yleensä nykyisestä "ajasta" ja varmistetaan, että ero on suurempi kuin haluttu raja. Tämän "ajan" ei tarvitse olla reaaliaikaista, se vastaa yleensä aikaväliä, joka on kulunut MCU alkaa laskea aikaa; Tämä ei vaikuta ohjelmaan, koska kiinnostavaa on kulunut aika, ei absoluuttinen aika.

    Yleensä sen tarkistamiseksi, onko tietty aika kulunut, käytetään tyyppiä olevaa lauseketta:

    muuttuja milisegundos_al_empezar sisältää arvon millis() tietystä suoritushetkestä, josta alkaen se on ajastettu, joten ei ole epätavallista, että sen nimi viittaa sanaan "kronometri". Muuttuja intervalo_de_tiempo sisältää millisekuntien enimmäismäärän, joka tekee edellisestä lausekkeesta tosi, eli se edustaa aikakatkaisua; Se on yleensä vakio (tai makro), ja, kuten edellisessä tapauksessa, sana "TIMEOUT" esiintyy usein sen nimessä. Jos työskentelet hyvin lyhyin väliajoin, voit käyttää micros() sijaan millis() (mikrosekuntia millisekuntien sijasta), vaikka se on paljon harvinaisempaa ja paljon vähemmän tarkka.

    Pitkä kokonaisluku sisään Työläs (unsigned long) vie 4 tavua (32 bittiä), joten suurin arvo, jota se voi edustaa, on 4294967295 (2 potenssiin 32 miinus yksi, koska se alkaa nollasta). lautasella Työläs Kun millisekunnin laskuri on käynnissä jatkuvasti, se nollautuu (palaa nollaan) noin 50 päivän välein. Kun vähennetään etumerkittömistä tietotyypeistä, sama käyttäytyminen toistuu (laskurin kääntäminen), joten aikakatkaisua voidaan hallita loputtomiin.

    Yllä oleva koodi näyttää a aikakatkaisurajoituksen hyvin yksinkertainen toteutus sisältäen sitä edeltävään esimerkkiin merkityt rivit. Koska aikakatkaisun varmistus suoritetaan osoitteesta saapuneiden tietojen käsittelyn jälkeen ESP8266 wifi-moduuli, toimintoa voidaan pitää onnistuneena, vaikka vastaanotto kestää kauemmin kuin määrätty odotusaika.

    Suorita monimutkainen toiminto, joka on määritelty useilla AT-komennoilla

    Saadaksesi esimerkkiviittauksen sovelluksen tarkoituksesta, joka hyödyntää ESP8266 wifi-moduuli, oletetaan että on tallentaa tietoja tietokantaan, johon pääsee verkkopalvelun kautta seurata lämpötilaa. Seuraava koodi lukee analogiseen tuloon kytketyn anturin tietyn aikavälin välein, laskee keskiarvon ja lähettää sen pidemmän aikavälin jälkeen web-palvelimelle (tyyli Esineiden internet) kautta a adressi HTTP (LÄHETÄ, HANKI…).

    Tässä lämpötilan tallennusesimerkissä web-palvelinta käytetään viiden minuutin välein. Vaikka saatavuus ei ole erityisen korkea, on odotettavissa, että ehdotus toimisi, mutta jos korkeampi tallennustaajuus olisi tarpeen, jouduttaisiin toteuttamaan muita resursseja, esim. datapuskuri odottaa lähettämistä, lähettää useita, kun palvelin voi osallistua ja tallentaa ne, kun se ei ole käytettävissä. Jos tietojen tallennustiheys olisi vieläkin suurempi, vaihtoehtona olisi ehdotettava muuntyyppisiä protokollia. HTTP tai edes vaihtaa TCP mukaan UDP pystyä lähettämään suurimman osan tiedoista vaaditulla nopeudella jopa osan menettämisen kustannuksella.

    Toiminnot, jotka muodostavat tehtävän lämpötilan lähettämiseksi, olisivat:

    • Nollaa wifi-moduuli
    • Katkaise yhteys nykyiseen tukiasemaan (jos oletusyhteys on olemassa)
    • Aseta asetukset. Esimerkissä oletetaan, että yhteystila (yksinkertainen) ja rooli Wi-Fi-viestinnässä (asema) on määritettävä.
    • Yhdistä tukiasemaan
    • Varmista, että yhteys on oikea (itse asiassa tämä on sisääntulopiste) Jos yhteyttä ei ole, aloita prosessi alusta
    • Yhdistä palvelimeen
    • Lähetä pyyntö HTTP tallennettavien tietojen kanssa

    Toimintojen järjestyksen ei tarvitse olla täsmälleen tällainen (vaikka operaatio on) ja jokainen vaihe voi vaatia useita ESP8266 AT-komennotEsimerkiksi yllä lueteltu kokoonpano tarvitsee kaksi: AT+CIPMUX=0 y AT+CWMODE=1.

    Tietorakenne, joka edustaa ESP8266:n toimintoja

    Edellisissä esimerkeissä, vaikkakin hyvin yksinkertaisella tavalla, ongelmaan ehdotetaan jo yleistä ratkaisua: käyttää tietorakennetta, joka tallentaa mahdolliset vastaukset ja toimenpiteet, jotka on tehtävä kussakin tapauksessa; lähetä toiminto, odota vastausta ja jatka sen mukaan, mitä vastaus tarkoittaa. Koska jokainen monimutkainen toimenpide vaatii useita ESP8266 AT-komennot, tietorakenteen on linkitettävä toiminto muihin, myöhempiin tai edellisiin, jotka on suoritettava jokaisessa tapauksessa riippuen ESP8266.

    Aiemmissa esimerkeissä viestiä etsittiin vastauksesta ESP8266 ja se tulkittiin menestykseksi tai virheeksi. Kaiken vastaanotetun tekstin vastaanottamisen (ja analysoinnin) lisäksi Yleisen vähimmäismäärän saamiseksi on suositeltavaa huolehtia myös viestin valmistumisesta tai toisin sanoen sen saatavuuteen ESP8266 wifi-moduuli vastaanottaa uusia tilauksia. Tällä tavalla muutos tilaan, jota voisimme kutsua esimerkiksi "wifi käytettävissä", voisi olla tukiaseman nimen vastaanottaminen ja tekstin vastaanottaminen ERROR tai tekstiä OK tarkoittaisi, että ESP8266 olet saanut vastauksen valmiiksi ja voit nyt lähettää seuraavan AT-komento ESP8266:een.

    Yllä oleva koodi käyttää vektoria (operacion) tallentaaksesi koko tehtävän muodostavien peräkkäisten toimintojen tekstin. Käytetään kaksiulotteista taulukkoa (mensaje) kolmella analysoitavalla vastauksella. Kuten edellä on selitetty, oikeaa tai väärää vastausta edustavan viestin lisäksi on tarpeen etsiä viestejä, jotka edustavat vastauksen loppua. Kaikilla operaatioilla ei ole samaa määrää mahdollisia vastauksia; Kun vastauksia on vähemmän, voidaan käyttää tyhjää viestiä, joka kuluttaa analyysissaan mahdollisimman vähän jaksoja (se ei kuitenkaan ole optimaalisin tapa). Loogisesti on välttämätöntä, että haettujen vastausten vähimmäismäärä (esimerkissä kolme) sisältää kaikki toimintamahdollisuudet, vaikka ne eivät olisikaan mahdollisia.

    Mahdollisista vastauksista puhuttaessa on jo nähtävissä, että tämä esimerkki ei ole kovin hyödyllinen tiedon vastaanottamiseen mielivaltaisessa muodossa. ESP8266 wifi-moduuli, mutta asia on, että käytön yhteydessä mikro-ohjaimet se ei ole tavallista; Yleisin asia on lähettää niiden liittämien antureiden keräämiä tietoja ja/tai vastaanottaa tietoa siitä, mitä sen ohjaamille toimilaitteille tehdään. Erittäin arvokasta tietoa, joka voidaan ennustaa erittäin hyvin.

    Edellisessä tietorakenteessa, aivan kuten se tehdään mahdollisten analysoitavien vastausten ilmaisemiseksi, kaksiulotteista matriisia käytetään myös määrittämään kussakin tapauksessa suoritettava toiminto (siguiente_operacion). Erityisesti olemme päättäneet vastata kolmentyyppisiin viesteihin: ① mielivaltainen teksti (LITERAL) varmistaaksesi, onko yhteys Wi-Fi-tukiasemaan ja palvelimeen, ② teksti prosessin virheiden havaitsemiseksi (FALLO) ja ③ teksti, joka osoittaa, että toiminto on suoritettu onnistuneesti (ACIERTO).

    Lopuksi on vielä kaksi vektoria, joilla asetetaan maksimi odotusaika ennen luovuttamista (timeout) ja määritä (configuracion) jos toiminto päättyy odottamatta vastausta (ESPERAR_RESPUESTA) ja viestit, jotka osoittavat viestinnän päättymisen. Tämä viimeinen vektori, joka havainnollistaa esimerkkiä muistin säästämisestä, toimii konfigurointitavun bittien kanssa osoittamaan eri tilat.

    Ensimmäinen ESP8266 AT-komennot Tietorakenteesta odotetaan aina vastausta, joka voi olla onnistumis- tai virheilmoitus. Virheen sattuessa moduuli käynnistetään uudelleen ja se käynnistyy uudelleen ja jos viesti osoittaa, että toiminta on oikein, siirrytään seuraavaan.

    Kun olet muodostanut yhteyden palvelimeen, kuvio muuttuu. Tässä tapauksessa on tarpeen ① lähettää lähetettävän datapaketin pituus ja ② laatia pyyntö HTTP kiinteällä tekstillä plus arvo (lämpötila), joka lähetetään tallennettavaksi palvelimelle. Näiden tietojen valmistelu suoritetaan jokaisessa lähetyksessä ja se on tarpeen jakaa kahteen (ilmoita pituus) tai kolmeen (lähetä pyyntö) HTTP) On ESP8266 AT tilaus. Vain viimeinen osa, johon toimenpide on jaettu, odottaa vastausta.

    Tässä tapauksessa se toimii ilman ongelmia (ehkä varoittaa, että moduuli on varattu), mutta kun datan pituus on suurempi, on tarpeen jakaa tietolohkot pienempiin osiin ja saattaa jopa olla tarpeen toteuttaa odotus, koska tehdään lämpötilalukemalla, jotta moduulille jää aikaa lähettää tiedot täyttämättä sitä puskuri.

    Yllä oleva esimerkkikoodi näyttää yhdessä muiden jo aiemmin selostettujen makrojen kanssa, kuinka eri tilat määritellään, joilla määritetään, onko vastausta odotettava ja mikä viesti ilmoittaa, että se on valmis.

    Koska koodin eri kohdissa lähetetään toiminto (kun on aika lähettää keskilämpötila, jos toimenpiteen odotusaika ylittyy, kun nykyinen toiminto on suoritettu onnistuneesti...) mutta miten se tehdään perustettu maailmanlaajuisesti, se on määritelty makroksi ENVIAR_OPERACION joka ryhmittelee toimitukseen liittyvät vaiheet.

    Seuraava on esimerkin pääohjelman koodi. Ulkopuolisin tehtävä on se, joka vastaa lämpötilan näytteenotosta keskiarvon laskemiseksi ja joka tietyn ajanjakson, se lähetetään palvelimelle käyttämällä ESP8266 wifi-moduuli. Kun jokainen toiminto on lähetetty, vastaus analysoidaan sen määrittämiseksi, kumpi on seuraava vai onko tiedon lähetystehtävä suoritettu.

    Loogisesti edelliselle koodille voidaan suorittaa useita optimointitoimenpiteitä, mutta koska tämä on esimerkki, jotta voidaan ymmärtää, kuinka ESP8266 Yleisesti ottaen kannattaa keskittyä vain joihinkin näkökohtiin, joista ensimmäinen on tietorakenne. Näyttää siltä, ​​​​että asia on looginen käytä ohjelmointikielen tietorakennetta (struct) edustamaan käsiteltävää tietoa: ESP8266 AT-komennot ja viestit, jotka analysoidaan.

    Käytä rakennetta (struct) tietojen tallentaminen esimerkkitaulukoiden sijaan (niiden perusteella) on triviaalia ja vaikka se saattaakin johtaa tyylikkäämpään koodiin, se ei tarkoita parannuksia tulokseen. Todellinen vaihtoehto käytön struct on toteutettava, kuten alla selitetään, muuttuvat pituudet rakenteissa, jotka sisältävät "sisäistä" dataa joihin he viittaavat. Tällä tavalla esimerkiksi operaatiolla ei tarvitsisi olla kiinteää määrää analysoitavia vastauksia.

    Tämä lähestymistapa viittaa siihen, että se on paras tapa toteuttaa ratkaisu, mutta haittapuolena on, että se olisi tarpeen käytä dynaamista muistin varausta, riskialtista käytäntöä työskennellä a mikro-ohjain mikä edellyttää huolellista mittaamista sen suhteen, kuinka paljon muistia käytetään ajon aikana, koska kääntäjä tuskin voi varoittaa meitä tästä ja on olemassa tietty mahdollisuus tyhjentää muisti (tai pino), millä on kohtalokkaat seuraukset ohjelman suorittamiselle.

    Koodin optimoinnin yhteydessä on mielenkiintoista muistaa, että tämän tyyppisessä ohjelmassa, joka käyttää paljon tekstiä, voi säästää muistitilaa SRAM tekstijonojen tallentaminen ohjelmamuistiin (salama) makron kanssa F(). Seuraavissa kuvakaappauksissa näet eri ohjelman ja dynaamisen muistin jakautumisen normaalilla tekstinkäytöllä ja makroa käyttämällä F().

    Esimerkki Arduino-koodista ohjelmamuistiin tallennetulla tekstillä (flash)
    Arduino-koodiesimerkki käyttämällä tekstiä SRAM-muistissa

    Mitä tulee toimiin, jotka suoritetaan osoitteesta tulevien tietojen mukaan ESP8266 wifi-moduuliVaihtoehtona viestin tarkistamiselle koodista ja jommankumman suorittamiselle vastaanotetun mukaan, voidaan tallentaa tähän tietorakenteeseen. osoittimia toimintoihin, jotka suorittavat kunkin tehtävän tilailmaisimien sijaan (liput), jotka varoittavat tietystä tilasta, että sovellus on vastuussa esimerkiksi pääsilmukan hallinnasta.

    Seuraavassa on esimerkki rakenteista, joilla pyyntöjen tiedot tallennetaan ESP8266 (tietotyyppi operacion_esp8266) ja niiden vastaukset (tietotyyppi respuesta_esp8266).

    Rakenteena, joka edustaa toimintoa (tiedot, jotka lähetetään ESP8266 wifi-moduuli) viittaa rakenteeseen, jolla vastaukset määritellään, ja vastausten rakenteeseen operaatioiden rakenteeseen, on välttämätöntä ilmoittaa molemmat ensin, määrittämällä uuden tietotyypin ja määrittämällä sitten sen sisällön.

    Edellisessä esimerkissä katsotaan, että sen sisältävä ohjelma on valinnut a tilailmaisin, jonka on vastattava koodista saatavilla olevaa muuttujaa, joka on vastuussa yhden tai muun toiminnon suorittamisesta mainitun arvon osoittamana. Jos vastauksessa ESP8266 Kun tiettyä tekstiä analysoidaan, tila ottaa arvon, joka ilmaisee vastaavan vastauksen rakenteen.

    Kuten aiemmin mainittiin, toinen vaihtoehto, joko tilailmaisimen korvaaminen tai täydentäminen, olisi tallentaa funktion viiterakenteeseen (osoitin), jota kehotetaan kohtaamaan tietyn tekstin vastauksessa ESP8266 wifi-moduuli.

    Edellisessä esimerkissä se on lisätty tietorakenteeseen, jota käytetään lähettämän vastauksen käsittelemiseen ESP8266 wifi-moduuli osoitin (oletettuun) funktioon, joka palauttaa tyyppisen tiedon float (voi olla analogisen lukeman painotettu arvo) ja jolle annetaan kaksi tavua argumentteina (kaksi unsigned char joka voi olla nasta, josta analoginen tulo luetaan, ja se, joka aktivoi hypoteettisen integroidun ENABLE:n).

    Kehityksessä MCU, toisin kuin suurempien järjestelmien kehitystyylissä, ei ole niin harvinaista käyttää globaaleja muuttujia määriteltäessä kokoonpanoa ohjaavan sovelluksen (globaalia) käyttäytymistä, joten tämän tyyppisten määritelmien löytäminen ei ole erityisen harvinaista. funktioina ilman parametreja ja jotka eivät palauta arvoja, jotain sellaista void (*accion)();

    Jos käytät tätä tapaa esittää tiedot, käytä struct vaihtuvamittaista dataa, on tarpeen varata muistia dynaamisesti malloc() (o new(), jos objekteja käytetään), joka käyttää parametrina varatun muistin määrää ja palauttaa osoittimen varatun muistialueen alkuun. Kanssa sizeof() Tallennetusta tyypistä kerrottuna käytettyjen elementtien määrällä saat tarvittavan määrän muistia. Esimerkki sen käyttämisestä ja ilman sitä voidaan nähdä alla olevissa kuvakaappauksissa. malloc(); Ole varovainen ohjelman käyttämän muistin kanssa ensimmäisessä tapauksessa, sinun on ladattava kirjasto, joka sisältää tämän toiminnon.

    Esimerkki muistin varaamisesta mallocilla Arduinossa

    Esimerkki tekstitehtävästä ilman mallocia Arduinossa

    Jos toiminnot ESP8266 wifi-moduuli vaihtelee ohjelman suorittamisen aikana, on tarpeen vapauttaa muisti, jota ei käytetä free() (o delete(), jos ne ovat esineitä). Vaikka on kohtuullista olettaa, että kääntäjä (GCC) optimoi ohjelman välttääkseen muistin osioinnin, suorituskyky ei varmasti ole yhtä optimaalinen kuin työskentely staattisesti varatun muistin kanssa.

    Vaikka tässä esimerkissä (molemmissa toteutuksissa) ei ole paljon järkeä, operaation yleistämiseksi, jotta sitä voidaan soveltaa muihin tapauksiin, on huomattava, että Tietojen lähetys toistaa aina samaa protokollaa: ilmoita lähetettävien tavujen määrä, odota ilmaisinta (>) ja lähetä tiedot.

    Koska tässä esimerkissä sitä käytetään vain kerran (koko pyyntö tehdään yhdessä paketissa), se ei vaikuta kovin hyödylliseltä, mutta yleensä voi olla tarpeen suorittaa useita lähetyksiä samassa toiminnossa, mukaan lukien tapaukset, joissa ne on siirrettävä merkittäviä tietomääriä, jotka on pirstaloitava, jotta vältetään muistin täyttyminen ESP8266.

    Tämän käyttäytymisen toteuttamiseksi voidaan käyttää yhteyden kahta viimeistä elementtiä siten, että joka kerta kun data lähetetään, tieto täytetään vastaavilla arvoilla: ensimmäisessä tapauksessa lähetettyjen tavujen määrä ja toisessa ( osa pyyntöä.

    Toistaaksesi osoituksen ja lähettämisen eri elementit, jotka on lähetettävä, voidaan tallentaa vektoriin. Tämä uusi vektori määrittää monimutkaisen operaation lopun, eikä viimeinen operaatio kuten tähän asti.

    1 kommentti

    kommentin käyttäjä
    ดูบอลสด

    Tästä aiheesta on varmasti paljon selvitettävää. Pidän kaikista esittämistäsi kohdista

    Post Comment

    Olet ehkä missannut