Innholdsfortegnelse:
Video: ESP8266 Direkte datakommunikasjon: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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:
MIDI-kontrollert trinnmotor med direkte digital syntese (DDS) brikke: 3 trinn
MIDI-kontrollert trinnmotor med direkte digital syntese (DDS) -brikke: Har du noen gang hatt en dårlig ide om at du BARE måtte gjøre om til et miniprosjekt? Vel, jeg lekte med en skisse jeg hadde laget for Arduino Due med sikte på å lage musikk med en AD9833 Direct Digital Synthesis (DDS) -modul … og på et tidspunkt tenkte jeg og spørre
Geeetech Board til Raspberry Pi Via tilpasset USB -kabel Direkte kablet: 4 trinn
Geeetech Board til Raspberry Pi via tilpasset USB -kabel Direkte kablet: Hei! Denne guiden viser hvordan du lager en egendefinert USB til JST XH 4-pinners kabel, slik at du kan koble din Raspberry Pi eller annen USB-enhet direkte til et Geeetech 2560 rev 3-kort på en Geeetech-skriver, som A10. Denne kabelen kobles til det praktiske paral
Mobiltelefonholder for direkte inngang: 10 trinn
Direct Input Cell Phone Cradle: Jeg vet. Verden trenger nok en mobiltelefonholder omtrent like mye som jeg trenger et hull i hodet. Sjokkerende nok fant jeg ikke en mobiltelefonholder til lastebilen min som passet mine behov. Jeg trodde ikke at behovene mine var så eksotiske, men jeg fant ikke
Hvordan få Final Cut Pro gratis direkte fra Apples nettsted: 5 trinn
Hvordan få Final Cut Pro gratis direkte fra Apples nettsted: Hei, jeg lager Youtube -videoer, og i lang tid klarte jeg ikke å lage innholdet jeg ønsket på grunn av begrensningene i iMovie. Jeg bruker en MacBook til å redigere videoene mine, og jeg har alltid ønsket meg en avansert filmredigeringsprogramvare som Final Cut Pro t
Kjøre skript direkte fra hurtigmenyen i Windows XP: 3 trinn
Kjøre skript direkte fra hurtigmenyen i Windows XP: Dette ble opprinnelig utviklet ut fra en tråd på Aqua-soft.org om å lage en " tom-standbar " Mappe. Å lage en " Tom-stand " Mappe Noen ønsket å kunne tømme innholdet i nedlastingsmappen uten å slette f