Kazalo:

ESP8266 Neposredna podatkovna komunikacija: 3 koraki
ESP8266 Neposredna podatkovna komunikacija: 3 koraki

Video: ESP8266 Neposredna podatkovna komunikacija: 3 koraki

Video: ESP8266 Neposredna podatkovna komunikacija: 3 koraki
Video: Связь Modbus ESP32 | FLProg SCADA 2024, Julij
Anonim
ESP8266 Neposredna podatkovna komunikacija
ESP8266 Neposredna podatkovna komunikacija

Uvod

Medtem ko sem opravil nekaj projektov z moduli Arduinos in nRF24l01, me je zanimalo, ali bi lahko prihranil nekaj napora z uporabo modula ESP8266. Prednost modula ESP8266 je, da vsebuje mikro krmilnik na krovu, zato dodatna plošča Arduino ni potrebna. Poleg tega je velikost pomnilnika ESP8266 veliko večja, kar zadeva hitrost, ESP8266 deluje pri največ 160 MHz namesto Arduinovih 16 MHz. Seveda obstaja nekaj negativnih strani.

ESP8266 deluje samo na 3.3V, ima manj zatičev in mu manjkajo lepi analogni vhodi, ki jih ima Arduino (ima enega, vendar le za 1.0V in ne za 3.3V). Poleg tega obstaja veliko več primerov kode za Arduino + nRF24l01, potem je za ESP8266 še posebej, ko gre za neposreden prenos podatkov.

Zato sem z mislijo na projekt preučil temo hitrega in lahkega prenosa podatkov med dvema ESP8266 brez vseh stvari WWW in

Med iskanjem primerov v internetu (večina spodnje kode je bila pobrana iz interneta na različnih mestih) sem naletel na številna vprašanja, kako izvesti neposreden prenos podatkov brez lepih primerov "naredi tako". Bilo je nekaj primerov kode, vendar večinoma z vprašanjem, zakaj ne deluje.

Tako sem po branju in poskusu razumevanja ustvaril spodnje primere, ki omogočajo hiter in preprost prenos podatkov med dvema ESP8266.

Korak: Meje in ozadja (TCP proti UDP)

Da bi prišli tja, je treba v primerjavi z nRF24l01 pojasniti nekatere meje.

Za uporabo ESP8266 v okolju Arduino je osnovna knjižnica ESP8266WiFi.h. Morda so drugačni, vendar večina primerov uporablja omenjeno. Ko uporabljate to, morate komunikacijo vzpostaviti na ravni WiFi.

Za komunikacijo morata biti vsaj dostopna točka (AP) / strežnik in odjemalec. AP podaja ime omrežja in naslove IP, odjemalec pa se bo povezal s tem strežnikom.

Torej v primerjavi z nRF24l01, kjer je koda na obeh koncih bolj ali manj enaka (razen prenosnih kanalov), je koda ESP8266 bistveno drugačna, saj je ena konfigurirana kot AP, druga pa kot odjemalec.

Naslednja tema je, da je treba namesto pošiljanja nekaj bajtov na nRF24l01 upoštevati protokole za prenos ESP8266.

Obstajata dva pogosta protokola: TCP in UDP.

TCP (Transmission Control Protocol) je protokol, ki omogoča prenos brez izgube med strežnikom in odjemalcem. Protokol vključuje "rokovanje" (veliko zastavic in priznanj, poslanih med obema stranema) ter oštevilčevanje in odkrivanje paketov za identifikacijo in ponovni prenos izgubljenih paketov. Poleg tega protokol z uporabo vseh teh rokovanj preprečuje izgubo podatkov zaradi številnih paketov, poslanih hkrati v omrežju. Podatkovni paketi počakajo, da jih lahko sprejmejo.

UDP (User Datagram Protocol) nima vseh rokovanj, oštevilčenja paketov in ponovnega prenosa. Njeni režijski stroški so zato manjši in ni potrebe po vseh rokovanjih za vzdrževanje povezave. UDP vključuje nekaj osnovnih zaznav napak, vendar brez popravka (poškodovan paket se samo spusti). Podatki se pošiljajo brez vednosti, če je prejemnik prost prejemati podatke. Hkrati se lahko spopade več paketov, saj vsaka stranka pošlje podatke, kadar koli je to potrebno. Z izpuščanjem vseh rokovanj obstaja še ena prijetna lastnost UDP, imenovana "večkanalno" in "oddajanje". V primeru »multicast« se podatkovni paketi pošljejo vnaprej določeni skupini članov, v »oddajanju« se pošljejo podatkovni paketi vsem povezanim članom. To znatno zmanjša prenos podatkov v primeru tokov, ki jih sprejme več članov (npr. S pošiljanjem video vira na več sprejemnikov ali s pošiljanjem trenutnega časa na več povezanih naprav).

Na Youtube je nekaj dobrih videov, ki to še bolje razlagajo.

Zato je pri pošiljanju podatkov pomembno poznati svoje potrebe:

  • nepoškodovani podatki, upravljanje več vrst z rokovanjem → TCP
  • podatki v realnem času, hitra povezava → UDP

Najprej sem začel z izvajanjem komunikacije, ki temelji na TCP (med enim strežnikom in enim odjemalcem). Med testiranjem sem imel težave pri zastoju pri prenosu. Na začetku so se podatki hitro izmenjevali, nato pa je čez nekaj časa hitrost dramatično padla. Sklenil sem, da je to tipična težava pristopa TCP (kar je bilo napačno!), Zato sem se spremenil v rešitev, ki temelji na UDP. Nazadnje sem oba pristopila k delu. Tako bosta na voljo obe rešitvi.

Spodnjim skicam za TCP in UDP je skupno, da:

  • so neodvisni od katerega koli obstoječega omrežja WiFi. Tako bo deloval kjer koli daleč stran od interneta in povezanih usmerjevalnikov.
  • pošiljajo podatke ASCII za tiskanje prek serijskega monitorja.
  • pošiljajo podatke, pridobljene s funkcijo millis (), za analizo hitrosti prenosa.
  • niso testirani za več odjemalcev (zaradi strojne opreme za trenutno nastavitev omrežja)

2. korak: Strojna oprema

Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema

Za preizkus celotne nastavitve sem uporabil dva modula ESP8266. Eden od modulov je adapter ESP-01 + USB-to-UART. Drugi modul je modul na osnovi ESP-12, ki vključuje povezavo USB, regulator napetosti in nekaj zabavnih stvari, kot so stikala, LDR in večbarvna LED.

Modul USB-to-UART za ESP-01 je bilo treba nekoliko spremeniti, da bi ga lahko uporabljali kot programerja (spet Youtube avtorja Csongor Varga).

Če želite zagnati skice, morate namestiti knjižnice ESP8266 (kot je opisano na številnih mestih v internetu). V obeh primerih (TCP in UDP) obstajata skica strežnika in odjemalca. Katera skica je naložena na kateri modul, ni pomembno.

Zahvala

Kot že omenjeno, skice temeljijo na številnih delih, ki sem jih našel na spletu. Ne spomnim se več, kje sem kaj našel in kaj je prvotna koda ali kaj sem spremenil. Zato sem se samo zahvalil veliki skupnosti na splošno, da je objavila vse odlične primere.

3. korak: Skice

Koda je sestavljena iz dveh skic (kot je razloženo), skice strežnika in skice odjemalca za TCP in UDP.

Priporočena: