Inhoudsopgave:
Video: ESP8266 Directe datacommunicatie: 3 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Invoering
Terwijl ik enkele projecten met Arduinos en nRF24l01-modules had gedaan, vroeg ik me af of ik wat moeite kon besparen door in plaats daarvan een ESP8266-module te gebruiken. Het voordeel van de ESP8266-module is dat deze een microcontroller aan boord bevat, waardoor er geen extra Arduino-bord nodig is. Bovendien is de geheugengrootte van de ESP8266 veel groter en wat betreft snelheid draait de ESP8266 op max 160MHz in plaats van de Arduino's 16MHz. Natuurlijk zijn er enkele negatieve kanten.
De ESP8266 werkt alleen op 3,3V, heeft minder pinnen en mist de mooie analoge ingangen die de Arduino heeft (hij heeft er een, maar alleen voor 1,0V en niet voor 3,3V). Daarnaast zijn er nog veel meer codevoorbeelden voor de Arduino + nRF24l01 dan voor de ESP8266, vooral als het gaat om directe gegevensoverdracht.
Dus met een project in gedachten, heb ik me verdiept in het onderwerp van snelle en lichtgewicht gegevensoverdracht tussen twee ESP8266 zonder alle WWW- en
Tijdens het zoeken op internet naar voorbeelden (de meeste van de onderstaande code is op verschillende plaatsen van het net gehaald) kwam ik veel vragen tegen hoe een directe gegevensoverdracht te implementeren zonder de leuke "doe het zo"-voorbeelden. Er was een voorbeeldcode, maar meestal met de vraag waarom het niet werkte.
Dus na wat lezen en proberen te begrijpen, heb ik de onderstaande voorbeelden gemaakt die een snelle en eenvoudige overdracht van gegevens tussen twee ESP8266 mogelijk maken.
Stap 1: Grenzen en achtergronden (TCP versus UDP)
Om daar te komen, moeten enkele grenzen worden verduidelijkt in vergelijking met de nRF24l01.
Om de ESP8266 binnen de Arduino-omgeving te gebruiken, is de basisbibliotheek die moet worden gebruikt de ESP8266WiFi.h. Het kunnen verschillende zijn, maar de meeste voorbeelden gebruiken de genoemde op. Wanneer u hiervan gebruik maakt, moet u uw communicatie op wifi-niveau krijgen.
Dus om te communiceren moet er minimaal een toegangspunt (AP) / server en een client zijn. Het AP geeft de naam van het netwerk en de IP-adressen en de client zal verbinding maken met deze server.
Dus vergeleken met de nRF24l01, waar de code aan beide uiteinden min of meer hetzelfde is (behalve voor de transmissiekanalen), is de code van de ESP8266 fundamenteel anders, aangezien de ene is geconfigureerd als AP en de andere als client.
Het volgende onderwerp is dat in plaats van alleen maar enkele bytes naar de nRF24l01 te sturen, voor de ESP8266 overdrachtsprotocollen in acht moeten worden genomen.
Er zijn twee veelgebruikte protocollen: TCP en UDP.
Het TCP (Transmission Control Protocol) is een protocol dat een verliesvrije overdracht tussen een server en een client mogelijk maakt. Het protocol omvat "handshakes" (veel vlaggen en bevestigingen die tussen beide partijen worden verzonden) en pakketnummering en -detectie om verloren pakketten te identificeren en opnieuw te verzenden. Door al deze handshakes te gebruiken, voorkomt het protocol bovendien dat gegevens verloren gaan doordat er veel pakketten tegelijkertijd in het netwerk worden verzonden. Datapakketten wachten tot ze kunnen worden ontvangen.
Het UDP (User Datagram Protocol) mist alle handshakes, pakketnummering en hertransmissie. De overhead is daarom kleiner en er zijn niet alle handdrukken nodig om een verbinding in stand te houden. UDP bevat enige basisfoutdetectie, maar geen correctie (het beschadigde pakket wordt gewoon verwijderd). Gegevens worden verzonden, zonder te weten of de ontvangende partij vrij is om de gegevens te ontvangen. Tegelijkertijd kunnen meerdere pakketten botsen, omdat elke partij de gegevens verzendt wanneer dat nodig is. Door alle handdrukken weg te laten, is er een extra leuke functie van UDP genaamd "multicast" en "broadcast". In het "multicast"-geval worden datapakketten naar een vooraf gedefinieerde groep leden verzonden, in het geval van "broadcast" worden datapakketten verzonden naar alle aangesloten leden. Dit vermindert de gegevensoverdracht aanzienlijk in het geval van streams die door meerdere leden moeten worden ontvangen (bijvoorbeeld door een videofeed naar meerdere ontvangers te sturen of door de huidige tijd naar meerdere aangesloten apparaten te sturen).
Er zijn enkele goede video's op YouTube die het nog beter uitleggen.
Dus bij het verzenden van gegevens is het belangrijk om uw behoeften te kennen:
- onbeschadigde gegevens, beheer van meerdere peers door handdrukken → TCP
- realtime gegevens, snelle verbinding → UDP
Ik begon eerst met de implementatie van een op TCP gebaseerde communicatie (tussen één server en één client). Tijdens het testen had ik problemen met de verzending. In het begin werden de gegevens snel uitgewisseld, maar na een tijdje daalde de snelheid dramatisch. Ik concludeerde dat dit een typisch probleem was van de TCP-aanpak (wat niet klopte!), dus ging ik over op een oplossing op basis van UDP. Uiteindelijk werd ik beiden aan het werk benaderd. Dus beide oplossingen worden geboden.
Onderstaande schetsen hebben voor TCP en UDP gemeen dat ze:
- zijn onafhankelijk van elk bestaand wifi-netwerk. Het werkt dus overal ver weg van internet en aangesloten routers.
- ASCII-gegevens verzenden om te worden afgedrukt via de seriële monitor.
- verzenden gegevens die zijn verkregen door de millis()-functie, om de snelheid van de verzending te analyseren.
- zijn niet getest voor meerdere clients (omdat we nu de hardware hebben om het netwerk in te stellen)
Stap 2: Hardware
Om de hele opstelling te testen heb ik twee ESP8266 modules gebruikt. Een module is een ESP-01 + USB-naar-UART-adapter. De andere module is een op ESP-12 gebaseerde module met de USB-aansluiting, spanningsregelaar en wat leuke dingen zoals schakelaars, LDR en meerkleurige LED.
De USB-to-UART-module voor de ESP-01 moest een beetje worden aangepast om hem als programmeur te kunnen gebruiken (opnieuw Youtube door Csongor Varga).
Om de schetsen uit te voeren, moet u de ESP8266-bibliotheken installeren (zoals op veel plaatsen op internet beschreven). In beide gevallen (TCP en UDP) is er elk een server- en clientschets. Welke schets naar welke module wordt geladen maakt niet uit.
Dankbetuigingen
Zoals gezegd zijn de schetsen gebaseerd op veel stukjes en beetjes die ik op internet heb gevonden. Ik weet niet meer waar ik wat heb gevonden en wat de originele code is of wat ik heb gewijzigd. Dus ik wilde gewoon de grote gemeenschap in het algemeen bedanken voor het publiceren van alle geweldige voorbeelden.
Stap 3: De schetsen
De code bestaat elk uit twee schetsen (zoals uitgelegd), een serverschets en een clientschets, elk voor TCP en UDP.
Aanbevolen:
ESP8266 - Deur- en raamsensoren - ESP8266. Ouderenhulp (vergeetachtigheid): 5 stappen
ESP8266 - Deur- en raamsensoren - ESP8266. Ouderenhulp (vergeetachtigheid): ESP8266 - Deur- / raamsensoren met GPIO 0 en GPIO 2 (IOT). Het kan worden bekeken op het web of op het lokale netwerk met browsers. Ook zichtbaar via de "HelpIdoso Vxapp" sollicitatie. Maakt gebruik van een 110/220 VAC voeding voor 5Vdc, 1 relais/spanning
All-band directe conversie-ontvanger - Ajarnpa
All-Band Direct Conversion-ontvanger: a.articles {font-size: 110.0%; lettergewicht: vet; lettertype-stijl: cursief; tekstdecoratie: geen; background-color: red;} a.articles:hover {background-color: black;} Dit Instructable beschrijft een experimentele "Directe conversie" een
Directe invoer mobiele telefoonhouder - Ajarnpa
Directe invoer mobiele telefoonhouder: ik weet het. De wereld heeft ongeveer net zoveel behoefte aan een houder voor een mobiele telefoon als ik een gat in mijn hoofd nodig heb. Schokkend genoeg kon ik geen mobiele telefoonhouder voor mijn vrachtwagen vinden die aan mijn behoeften voldeed. Ik dacht niet dat mijn behoeften zo exotisch waren, maar ik kon het niet vinden
Een directe lijningang toevoegen aan uw autoradio voor een iPod/mp3-speler: 5 stappen
Een directe lijningang aan uw autoradio toevoegen voor een iPod/mp3-speler: deze instructie laat u zien hoe u een aux-ingang, zoals een koptelefoonaansluiting, aan uw auto kunt toevoegen, zodat u naar een iPod/mp3-speler/GPS of alles wat een line-out heeft via de stereo van uw auto. Terwijl ik het zal toevoegen aan mijn '99 Chevy Subu
Mijn mp3-speler converteren naar directe USB-poort en vervangbare batterij: 3 stappen
Mijn mp3-speler converteren naar directe USB-poort en vervangbare batterij: op deze instructable laat ik je zien hoe ik mijn i-pod shuffle converteer naar een directe USB-poort (met behulp van de mp3-speler naar de computer zonder een adapter te gebruiken) en om vervang de ingebouwde batterij door een gsm-batterij en de gsm b