Inhoudsopgave:

ESP8266 Directe datacommunicatie: 3 stappen
ESP8266 Directe datacommunicatie: 3 stappen

Video: ESP8266 Directe datacommunicatie: 3 stappen

Video: ESP8266 Directe datacommunicatie: 3 stappen
Video: ESP8266 ESP01 WI-FI-UART | Программирование LDmicro-Roboremo 2024, November
Anonim
ESP8266 Directe datacommunicatie
ESP8266 Directe datacommunicatie

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

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
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: