Obsah:

ESP8266 Priama dátová komunikácia: 3 kroky
ESP8266 Priama dátová komunikácia: 3 kroky

Video: ESP8266 Priama dátová komunikácia: 3 kroky

Video: ESP8266 Priama dátová komunikácia: 3 kroky
Video: Удаленно контролировать энергопотребление дома | ПЗЭМ-004Т | Облако Интернета вещей RemoteXY 2024, November
Anonim
ESP8266 Priama dátová komunikácia
ESP8266 Priama dátová komunikácia

Úvod

Keď som robil niekoľko projektov s modulmi Arduinos a nRF24l01, premýšľal som, či by som mohol ušetriť nejaké úsilie tým, že namiesto toho použijem modul ESP8266. Výhodou modulu ESP8266 je, že obsahuje na doske mikroprocesor, takže nie je potrebná žiadna ďalšia doska Arduino. Navyše veľkosť pamäte ESP8266 je oveľa väčšia a pokiaľ ide o rýchlosť, ESP8266 beží na max. 160 MHz namiesto 16 MHz na Arduine. Samozrejme, existujú aj negatívne stránky.

ESP8266 beží iba na 3,3 V, má menej pinov a chýbajú mu pekné analógové vstupy, ktoré má Arduino (má jeden, ale iba na 1,0 V a nie na 3,3 V). Okrem toho existuje mnoho ďalších príkladov kódu pre Arduino + nRF24l01, potom existuje pre ESP8266, najmä pokiaľ ide o priamy prenos údajov.

S ohľadom na projekt som sa teda zaoberal témou rýchleho a ľahkého prenosu dát medzi dvoma ESP8266 bez všetkých záležitostí WWW a

Pri hľadaní príkladov na internete (väčšina nižšie uvedeného kódu bola vybratá zo siete na rôznych miestach) som narazil na mnoho otázok, ako implementovať priamy prenos údajov bez pekných príkladov typu „urob to tak“. Existoval nejaký ukážkový kód, ale väčšinou s otázkou, prečo nefungoval.

Po prečítaní a pokuse o porozumenie som vytvoril nižšie uvedené príklady, ktoré umožňujú rýchly a jednoduchý prenos údajov medzi dvoma ESP8266.

Krok 1: Hranice a pozadia (TCP vs. UDP)

Aby sa tam dostali, musia byť v porovnaní s nRF24l01 objasnené niektoré hranice.

Na používanie ESP8266 v prostredí Arduino je základnou knižnicou ESP8266WiFi.h. Môžu to byť rôzne, ale väčšina príkladov používa uvedené. Keď to používate, musíte dostať svoju komunikáciu na úroveň WiFi.

Na komunikáciu teda musí existovať aspoň prístupový bod (AP) / server a klient. AP poskytuje názov siete a IP adresy a klient sa k tomuto serveru pripojí.

V porovnaní s nRF24l01, kde je kód na oboch koncoch viac -menej rovnaký (okrem prenosových kanálov), je kód ESP8266 zásadne odlišný, pretože jeden je nakonfigurovaný ako AP a druhý ako klient.

Ďalšou témou je, že namiesto odosielania niektorých bytov na nRF24l01 je potrebné sledovať prenosové protokoly ESP8266.

Existujú dva bežne používané protokoly: TCP a UDP.

TCP (Transmission Control Protocol) je protokol, ktorý umožňuje bezstratový prenos medzi serverom a klientom. Protokol obsahuje „podania rúk“(množstvo vlajok a acknoledge odoslaných medzi obidvoma stranami) a číslovanie a detekciu paketov na identifikáciu a opätovný prenos stratených paketov. Navyše, použitím všetkých týchto handshakes protokol zabráni strate dát kvôli mnohým paketom odosielaným súčasne v sieti. Dátové pakety čakajú na ich prijatie.

V protokole UDP (User Datagram Protocol) chýbajú všetky podania rúk, číslovanie paketov a opakovaný prenos. Jeho réžia je preto menšia a nie sú potrebné všetky podania rúk, aby sa udržalo spojenie. UDP obsahuje základnú detekciu chýb, ale žiadnu opravu (poškodený balík je práve zrušený). Údaje sa odosielajú bez toho, aby bolo známe, či je príjemca oprávnený údaje prijímať. Súčasne môže dôjsť k stretu viacerých paketov, pretože každá strana odosiela údaje vždy, keď je to potrebné. Vynechaním všetkých potrasení rukou existuje ešte jedna pekná funkcia UDP s názvom „multicast“a „broadcast“. V prípade „multicast“sa dátové pakety odosielajú do vopred definovanej skupiny členov, v prípade „vysielania“sa pakety odosielajú všetkým pripojeným členom. To značne obmedzuje prenos dát v prípade tokov, ktoré majú byť prijímané viacerými členmi (napr. Odoslaním video kanála do viacerých prijímačov alebo odoslaním aktuálneho času do viacerých pripojených zariadení).

Na Youtube je niekoľko dobrých videí, ktoré to ešte lepšie vysvetľujú.

Pri odosielaní údajov je preto dôležité poznať svoje potreby:

  • nepoškodené údaje, správa viacerých rovesníkov podaním rúk → TCP
  • údaje v reálnom čase, rýchle pripojenie → UDP

Najprv som začal s implementáciou komunikácie založenej na TCP (medzi jedným serverom a jedným klientom). Pri testovaní som mal problémy s prenosom. Na začiatku sa údaje rýchlo vymieňali, potom po chvíli rýchlosť dramaticky klesla. Dospel som k záveru, že ide o typický problém prístupu TCP (čo bolo nesprávne!), Preto som sa zmenil na riešenie založené na UDP. Nakoniec som oboch pristúpil k práci. Poskytne sa teda obe riešenie.

Nasledujúce náčrty majú pre TCP a UDP spoločné tieto:

  • sú nezávislé od akejkoľvek existujúcej siete WiFi. Bude teda fungovať kdekoľvek ďaleko od internetu a pripojených smerovačov.
  • odosielajú údaje ASCII na tlač prostredníctvom sériového monitora.
  • odosielajú údaje získané pomocou funkcie millis () na analýzu rýchlosti prenosu.
  • nie sú testované pre viacerých klientov (kvôli hardvéru na nastavenie siete práve teraz)

Krok 2: Hardvér

Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér

Na testovanie celej zostavy som použil dva moduly ESP8266. Jeden modul je adaptér ESP-01 + USB-UART. Druhý modul je modul založený na ESP-12, ktorý obsahuje pripojenie USB, regulátor napätia a niekoľko zábavných prvkov, ako sú prepínače, LDR a viacfarebné diódy LED.

Modul USB-to-UART pre ESP-01 bolo potrebné trochu upraviť, aby ho bolo možné použiť ako programátora (opäť Youtube od Csongora Vargu).

Na spustenie náčrtov je potrebné nainštalovať knižnice ESP8266 (ako je popísané na mnohých miestach na internete). V oboch prípadoch (TCP a UDP) existuje skica servera a klienta. Na tom, ktorý náčrt je načítaný, do ktorého modulu nezáleží.

Poďakovanie

Ako už bolo spomenuté, náčrty sú založené na mnohých kúskoch, ktoré som našiel na webe. Už si nepamätám, kde som čo našiel a čo je pôvodný kód alebo čo som zmenil. Preto som sa chcel poďakovať širokej komunite všeobecne za to, že zverejnila všetky skvelé príklady.

Krok 3: Skice

Kód sa skladá z dvoch skíc, každá (ako je vysvetlené), serverovej a klientskej, pre TCP a UDP.

Odporúča: