Innholdsfortegnelse:

ESP8266 Direkte datakommunikasjon: 3 trinn
ESP8266 Direkte datakommunikasjon: 3 trinn

Video: ESP8266 Direkte datakommunikasjon: 3 trinn

Video: ESP8266 Direkte datakommunikasjon: 3 trinn
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, November
Anonim
ESP8266 Direkte datakommunikasjon
ESP8266 Direkte datakommunikasjon

Introduksjon

Mens jeg hadde gjort noen prosjekter med Arduinos og nRF24l01 -moduler, lurte jeg på om jeg kunne spare litt krefter ved å bruke en ESP8266 -modul i stedet. Fordelen med ESP8266 -modulen er at den inneholder en mikrokontroller om bord, så det er ikke behov for et ekstra Arduino -kort. I tillegg er minnestørrelsen til ESP8266 mye større, og med hensyn til hastighet kjører ESP8266 på maks 160MHz i stedet for Arduino's 16MHz. Selvfølgelig er det noen negative sider.

ESP8266 kjører bare på 3.3V, har færre pinner og mangler de fine analoge inngangene Arduino har (den har en, men bare for 1.0V og ikke 3.3V). I tillegg er det mange flere kodeeksempler for Arduino + nRF24l01, så er det for ESP8266, spesielt når det gjelder direkte dataoverføring.

Så med et prosjekt i tankene, så jeg på temaet rask og lett dataoverføring mellom to ESP8266 uten alle WWW- og HTTP -ting.

Mens jeg søkte eksempler på internett (det meste av koden nedenfor ble plukket fra nettet på forskjellige steder) kom jeg over mange spørsmål om hvordan man implementerer en direkte dataoverføring uten de fine "gjør det slik" -eksemplene. Det var noen eksempler på kode, men mest med spørsmål om hvorfor det ikke fungerte.

Så etter litt lesing og forsøk på å forstå, opprettet jeg eksemplene nedenfor som tillater rask og enkel overføring av data mellom to ESP8266.

Trinn 1: Grenser og bakgrunner (TCP mot UDP)

For å komme dit må noen grenser avklares i forhold til nRF24l01.

For å bruke ESP8266 i Arduino -miljøet, er det grunnleggende biblioteket ESP8266WiFi.h. De kan være forskjellige, men de fleste eksemplene bruker de nevnte på. Når du bruker dette, må du få kommunikasjonen til WiFi -nivå.

Så for å kommunisere må det være minst et tilgangspunkt (AP) / server og en klient. AP gir navnet på nettverket og IP -adressene, og klienten vil koble seg til denne serveren.

Så sammenlignet nRF24l01, hvor koden i begge ender er mer eller mindre den samme (bortsett fra overføringskanalene) er koden til ESP8266 grunnleggende forskjellig, ettersom den ene er konfigurert som AP og den andre som klient.

Det neste emnet er at i stedet for bare å sende noen byte til nRF24l01, må ESP8266 overføringsprotokoller observeres.

Det er to vanlige brukte protokoller: TCP og UDP.

TCP (Transmission Control Protocol) er en protokoll som tillater tapsfri overføring mellom en server og en klient. Protokollen inneholder "håndtrykk" (mange flagg og akkoleder sendt mellom begge parter) og pakkenummerering og deteksjon for å identifisere og videresende tapte pakker. I tillegg forhindrer protokollen ved å bruke alle disse håndtrykkene at data går tapt på grunn av mange pakker som sendes samtidig i nettverket. Datapakker venter til de kan mottas.

UDP (User Datagram Protocol) mangler alle håndtrykk, pakkenummerering og ny overføring. Overhead er derfor mindre, og det er ikke behov for alle håndtrykk for å opprettholde en forbindelse. UDP inneholder noen grunnleggende feildeteksjoner, men ingen korreksjon (den ødelagte pakken er bare droppet). Data sendes, uten kunnskap om den mottakende part står fritt til å motta dataene. Samtidig kan flere pakker kollidere, ettersom hver part sender dataene når det er nødvendig. Ved å utelate alle håndtrykk, er det en ekstra fin funksjon i UDP som kalles "multicast" og "broadcast". I "multicast" -saken blir datapakker sendt til en forhåndsdefinert gruppe medlemmer, i en "kringkasting" blir datapakker sendt til alle tilkoblede medlemmer. Dette reduserer dataoverføringen betraktelig i tilfelle strømmer som skal mottas av flere medlemmer (f.eks. Ved å sende en videofeed til flere mottakere eller ved å sende nåværende tid til flere tilkoblede enheter).

Det er noen gode videoer på Youtube som forklarer det enda bedre.

Så når du sender data, er det viktig å kjenne dine behov:

  • ikke-ødelagte data, håndtering av flere jevnaldrende ved håndtrykk → TCP
  • sanntidsdata, rask tilkobling → UDP

Jeg begynte først med implementeringen av en TCP -basert kommunikasjon (mellom en server og en klient). Mens jeg testet det, hadde jeg problemer med overføringen. I begynnelsen ble dataene utvekslet raskt, så etter en stund falt hastigheten dramatisk. Jeg konkluderte med at dette var et typisk problem med TCP -tilnærmingen (som var feil!), Så da endret jeg til en løsning basert på UDP. Til slutt fikk jeg begge kontaktet arbeider. Så begge løsningene vil bli gitt.

Skissene nedenfor har for TCP og UDP til felles at de:

  • er uavhengige av ethvert eksisterende WiFi -nettverk. Så det vil fungere hvor som helst langt unna internett og tilkoblede rutere.
  • sender ASCII -data som skal skrives ut via den serielle skjermen.
  • sender data hentet av millis ()-funksjonen, for å analysere hastigheten på overføringen.
  • er ikke testet for flere klienter (på grunn av å ha maskinvare for å konfigurere nettverket akkurat nå)

Trinn 2: Maskinvare

Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare

For å teste hele oppsettet brukte jeg to ESP8266 -moduler. En modul er en ESP-01 + USB-til-UART-adapter. Den andre modulen er en ESP-12-basert modul som inneholder USB-tilkobling, spenningsregulator og noen morsomme ting som brytere, LDR og flerfarget LED.

USB-til-UART-modulen for ESP-01 måtte endres litt for å kunne bruke den som programmerer (igjen Youtube av Csongor Varga).

For å kjøre skissene må du installere ESP8266 -bibliotekene (som beskrevet mange steder på internett). I begge tilfeller (TCP og UDP) er det en server og klientskisse hver. Hvilken skisse som er lastet til hvilken modul spiller ingen rolle.

Anerkjennelser

Som nevnt er skissene basert på mange biter jeg fant på nettet. Jeg husker ikke lenger hvor jeg fant hva, og hva som er original kode eller hva jeg endret. Så jeg ville bare takke det store samfunnet generelt der ute for å ha publisert alle de gode eksemplene.

Trinn 3: Skissene

Koden består av to skisser hver (som forklart), en serverskisse og klientskisse, for TCP og UDP hver.

Anbefalt: