Indholdsfortegnelse:

ESP8266 Direkte datakommunikation: 3 trin
ESP8266 Direkte datakommunikation: 3 trin
Anonim
ESP8266 Direkte datakommunikation
ESP8266 Direkte datakommunikation

Introduktion

Mens jeg havde udført nogle projekter med Arduinos og nRF24l01 moduler, spekulerede jeg på, om jeg kunne spare nogle kræfter ved at bruge et ESP8266 modul i stedet. Fordelen ved ESP8266 -modulet er, at det indeholder en mikrocontroller om bord, så der er ikke behov for yderligere Arduino -kort. Derudover er ESP8266's hukommelsesstørrelse meget større, og med hensyn til hastighed kører ESP8266 ved max 160MHz i stedet for Arduino's 16MHz. Selvfølgelig er der nogle negative sider.

ESP8266 kører kun på 3.3V, har færre ben og mangler de flotte analoge indgange Arduino har (den har en, men kun til 1.0V og ikke 3.3V). Derudover er der mange flere kodeeksempler til Arduino + nRF24l01, end der er for ESP8266, især når det kommer til direkte dataoverførsel.

Så med et projekt for øje undersøgte jeg emnet hurtig og let dataoverførsel mellem to ESP8266 uden alle WWW- og HTTP -ting.

Mens jeg søgte på internettet efter eksempler (det meste af nedenstående kode blev plukket fra nettet forskellige steder) stødte jeg på mange spørgsmål om, hvordan man implementerer en direkte dataoverførsel uden de flotte "gør det sådan" -eksempler. Der var et eksempel på kode, men mest med spørgsmål om, hvorfor det ikke virkede.

Så efter lidt læsning og forsøg på at forstå, skabte jeg nedenstående eksempler, som tillader hurtig og enkel overførsel af data mellem to ESP8266.

Trin 1: Grænser og baggrunde (TCP mod UDP)

For at komme dertil skal nogle grænser afklares i forhold til nRF24l01.

For at bruge ESP8266 i Arduino -miljøet er det grundlæggende bibliotek, der skal bruges, ESP8266WiFi.h. De kan være forskellige, men de fleste eksempler bruger de nævnte. Når du bruger dette, skal du få din kommunikation til WiFi -niveau.

Så for at kommunikere skal der være mindst et adgangspunkt (AP) / server og en klient. AP'et angiver navnet på netværket og IP -adresserne, og klienten opretter forbindelse til denne server.

Så sammenlignet nRF24l01, hvor koden i begge ender er mere eller mindre den samme (undtagen transmissionskanalerne) er koden for ESP8266 fundamentalt anderledes, da den ene er konfigureret som AP og den anden som klient.

Det næste emne er, at ESP8266 -overførselsprotokoller skal overholdes i stedet for bare at sende nogle bytes til nRF24l01.

Der er to almindeligt anvendte protokoller: TCP og UDP.

TCP (Transmission Control Protocol) er en protokol, der tillader en tabsfri transmission mellem en server og en klient. Protokollen indeholder "håndtryk" (masser af flag og akkoløsninger sendt mellem begge parter) og pakkens nummerering og detektion for at identificere og videresende tabte pakker. Derudover forhindrer protokollen ved at bruge alle disse håndtryk, at data går tabt på grund af mange pakker, der sendes på samme tid i netværket. Datapakker venter, indtil de kan modtages.

UDP (User Datagram Protocol) mangler alle håndtryk, pakkenummerering og re-transmission. Dens overhead er derfor mindre, og der er ikke behov for alle håndtryk for at opretholde en forbindelse. UDP indeholder en grundlæggende fejldetektering, men ingen korrektion (den ødelagte pakke er lige droppet). Data sendes uden viden, hvis den modtagende part frit kan modtage dataene. På samme tid kan flere pakker kollidere, da hver part sender dataene, når det er nødvendigt. Ved at udelade alle håndtryk er der en ekstra flot funktion i UDP kaldet "multicast" og "broadcast". I "multicast" -sagen sendes datapakker til en foruddefineret gruppe af medlemmer, i en "broadcast" sendes datapakker til alle tilsluttede medlemmer. Dette reducerer dataoverførsel betydeligt i tilfælde af, at streams modtages af flere medlemmer (f.eks. Ved at sende et videofeed til flere modtagere eller ved at sende den aktuelle tid til flere tilsluttede enheder).

Der er nogle gode videoer på Youtube, der forklarer det endnu bedre.

Så når du sender data, er det vigtigt at kende dine behov:

  • ikke-beskadigede data, styring af flere jævnaldrende ved håndtryk → TCP
  • realtidsdata, hurtig forbindelse → UDP

Jeg startede først med implementeringen af en TCP -baseret kommunikation (mellem en server og en klient). Mens jeg testede det, havde jeg standsningsproblemer i transmissionen. I begyndelsen blev dataene udvekslet hurtigt, så efter et stykke tid faldt hastigheden dramatisk. Jeg konkluderede, at dette var et typisk problem med TCP -tilgangen (hvilket var forkert!), Så skiftede derefter til en løsning baseret på UDP. Endelig fik jeg begge henvendt mig til at arbejde. Så begge løsninger vil blive leveret.

Skitserne herunder har for TCP og UDP tilfælles, at de:

  • er uafhængige af ethvert eksisterende WiFi -netværk. Så det vil fungere overalt langt væk fra internettet og tilsluttede routere.
  • sender ASCII -data til udskrivning via den serielle skærm.
  • sender data opnået med millis ()-funktionen for at analysere transmissionens hastighed.
  • er ikke testet for flere klienter (på grund af at have hardware til at konfigurere netværket lige nu)

Trin 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

For at teste hele opsætningen brugte jeg to ESP8266 -moduler. Et modul er en ESP-01 + USB-til-UART-adapter. Det andet modul er et ESP-12-baseret modul, der indeholder USB-forbindelsen, spændingsregulator og nogle sjove ting som switches, LDR og flerfarvet LED.

USB-til-UART-modulet til ESP-01 skulle ændres lidt for at kunne bruge det som programmerer (igen Youtube af Csongor Varga).

For at køre skitserne skal du installere ESP8266 -bibliotekerne (som beskrevet mange steder på internettet). I begge tilfælde (TCP og UDP) er der hver en server og klientskitse. Hvilken skitse er indlæst til hvilket modul er ligegyldigt.

Anerkendelser

Som nævnt er skitserne baseret på mange bits og stykker, jeg fandt på nettet. Jeg kan ikke længere huske, hvor jeg fandt hvad, og hvad er den originale kode, eller hvad jeg ændrede. Så jeg ville bare takke det store samfund generelt derude for at udgive alle de gode eksempler.

Trin 3: Skitserne

Koden består af to skitser hver (som forklaret), en serverskitse og klientskitse for hver TCP og UDP.

Anbefalede: