Indholdsfortegnelse:
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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
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:
MIDI-styret trinmotor med en chip til direkte digital syntese (DDS): 3 trin
MIDI-styret Stepper Motor Med en Direct Digital Synthesis (DDS) Chip: Har du nogensinde haft en dårlig idé om, at du BARE skulle blive til et mini-projekt? Nå, jeg legede med en sketch jeg havde lavet til Arduino Due med det formål at lave musik med et AD9833 Direct Digital Synthesis (DDS) modul … og på et tidspunkt tænkte jeg & q
Geeetech Board til Raspberry Pi Via brugerdefineret USB -kabel Direkte kablet: 4 trin
Geeetech Board til Raspberry Pi Via brugerdefineret USB -kabel Direkte kablet: Hej! Denne vejledning viser, hvordan du laver et brugerdefineret USB til JST XH 4-benet kabel, så du direkte kan koble din Raspberry Pi eller en anden USB-enhed til et Geeetech 2560 rev 3-kort på en Geeetech-printer, f.eks. A10. Dette kabel tilsluttes den praktiske paral
Sådan får du Final Cut Pro gratis direkte fra Apples websted: 5 trin
Sådan får du Final Cut Pro gratis direkte fra Apples websted: Hej, jeg opretter Youtube -videoer, og i lang tid kunne jeg ikke oprette det indhold, jeg ønskede på grund af begrænsningerne i iMovie. Jeg bruger en MacBook til at redigere mine videoer, og jeg har altid ønsket mig en avanceret filmredigeringssoftware som Final Cut Pro t
Kører scripts direkte fra kontekstmenuen i Windows XP: 3 trin
Kører scripts direkte fra kontekstmenuen i Windows XP: Dette blev oprindeligt udviklet ud fra en tråd på Aqua-soft.org om oprettelse af en " tom standbar " Folder. Gør en " Tom-stand " FolderNogen ville være i stand til at tømme indholdet i deres downloadmappe uden at slette f
Tilføjelse af en direkte line-in til din bilstereo til en iPod/mp3-afspiller: 5 trin
Tilføjelse af en direkte line-in til din bilstereo til en iPod/mp3-afspiller: Denne instruktion viser dig, hvordan du tilføjer en ekstra indgang, f.eks. Et hovedtelefonstik, til din bil, så du kan lytte til en iPod/mp3-afspiller/GPS eller alt, hvad der har en line-out gennem din bils stereo. Mens jeg vil tilføje det på min '99 Chevy Subu