Table des matières:

ESP8266 Communication directe de données : 3 étapes
ESP8266 Communication directe de données : 3 étapes

Vidéo: ESP8266 Communication directe de données : 3 étapes

Vidéo: ESP8266 Communication directe de données : 3 étapes
Vidéo: Home Assistant - подключаем адресную ленту WS2812B через ESP8266 с прошивкой WLED 2024, Novembre
Anonim
ESP8266 Communication directe de données
ESP8266 Communication directe de données

introduction

Tout en ayant réalisé certains projets avec les modules Arduinos et nRF24l01, je me demandais si je pouvais économiser des efforts en utilisant à la place un module ESP8266. L'avantage du module ESP8266 est qu'il contient un microcontrôleur à bord, donc aucune carte Arduino supplémentaire n'est nécessaire. De plus, la taille de la mémoire de l'ESP8266 est beaucoup plus grande et en ce qui concerne la vitesse, l'ESP8266 fonctionne à 160 MHz maximum au lieu des 16 MHz de l'Arduino. Bien sûr, il y a des côtés négatifs.

L'ESP8266 fonctionne uniquement sur 3,3 V, a moins de broches et il manque les belles entrées analogiques de l'Arduino (il en a une, mais seulement pour 1,0 V et non 3,3 V). De plus, il existe de nombreux autres exemples de code pour l'Arduino + nRF24l01 que pour l'ESP8266, en particulier lorsqu'il s'agit de transfert direct de données.

Donc, avec un projet en tête, je me suis penché sur le sujet du transfert de données rapide et léger entre deux ESP8266 sans tous les trucs WWW et

En cherchant des exemples sur Internet (la plupart du code ci-dessous a été choisi sur le net à divers endroits), je suis tombé sur de nombreuses questions sur la façon de mettre en œuvre un transfert de données direct sans les bons exemples "faites-le comme ça". Il y avait quelques exemples de code, mais surtout avec la question pourquoi cela n'a pas fonctionné.

Ainsi, après quelques lectures et tentatives de compréhension, j'ai créé les exemples ci-dessous qui permettent un transfert rapide et simple des données entre deux ESP8266.

Étape 1: Limites et arrière-plans (TCP Vs. UDP)

Pour y arriver, certaines limites doivent être clarifiées par rapport au nRF24l01.

Pour utiliser l'ESP8266 dans l'environnement Arduino, la bibliothèque de base à utiliser est l'ESP8266WiFi.h. Ils peuvent être différents, mais la plupart des exemples utilisent ceux mentionnés sur. Lorsque vous l'utilisez, vous devez amener votre communication au niveau WiFi.

Ainsi, pour communiquer, il doit y avoir au moins un point d'accès (AP) / serveur et un client. L'AP fournit le nom du réseau et les adresses IP et le client se connectera à ce serveur.

Ainsi comparé au nRF24l01, où le code aux deux extrémités est plus ou moins le même (sauf pour les canaux de transmission), le code de l'ESP8266 est fondamentalement différent, car l'un est configuré comme AP et l'autre comme client.

Le sujet suivant est qu'au lieu d'envoyer simplement quelques octets au nRF24l01, les protocoles de transfert ESP8266 doivent être respectés.

Il existe deux protocoles couramment utilisés: TCP et UDP.

Le TCP (Transmission Control Protocol) est un protocole qui permet une transmission sans perte entre un serveur et un client. Le protocole intègre des « prises de contact » (beaucoup d'indicateurs et d'accusés de réception envoyés entre les deux parties) et la numérotation et la détection des paquets pour identifier et retransmettre les paquets perdus. De plus, en utilisant toutes ces poignées de main, le protocole empêche la perte de données en raison de l'envoi simultané de nombreux paquets sur le réseau. Les paquets de données attendent jusqu'à ce qu'ils puissent être reçus.

L'UDP (User Datagram Protocol) manque de toutes les poignées de main, de la numérotation des paquets et de la retransmission. Son surcoût est donc plus petit et il n'y a pas besoin de toutes les poignées de main pour maintenir une connexion. UDP intègre une détection d'erreur de base, mais aucune correction (le package corrompu est simplement supprimé). Les données sont envoyées, sans savoir si la partie destinataire est libre de recevoir les données. Dans le même temps, plusieurs paquets peuvent entrer en collision, car chaque partie envoie les données chaque fois que cela est nécessaire. En omettant toutes les poignées de main, il existe une fonctionnalité supplémentaire intéressante d'UDP appelée "multidiffusion" et "diffusion". Dans le cas "multicast", les paquets de données sont envoyés à un groupe prédéfini de membres, dans un cas "broadcast", les paquets de données sont envoyés à tous les membres connectés. Cela réduit considérablement le transfert de données en cas de flux à recevoir par plusieurs membres (par exemple en envoyant un flux vidéo à plusieurs récepteurs ou en envoyant l'heure actuelle à plusieurs appareils connectés).

Il y a de bonnes vidéos sur Youtube qui l'expliquent encore mieux.

Ainsi, lors de l'envoi de données, il est important de connaître vos besoins:

  • données non corrompues, gestion de plusieurs pairs par poignées de main → TCP
  • données en temps réel, connexion rapide → UDP

J'ai d'abord commencé par la mise en place d'une communication basée sur TCP (entre un serveur et un client). En le testant, j'ai eu des problèmes de calage dans la transmission. Au début, les données étaient échangées rapidement, puis après un certain temps, la vitesse a chuté de façon spectaculaire. J'ai conclu qu'il s'agissait d'un problème typique de l'approche TCP (ce qui était faux !), alors j'ai opté pour une solution basée sur UDP. Finalement, j'ai été approché tous les deux pour travailler. Les deux solutions seront donc fournies.

Les croquis ci-dessous ont pour TCP et UDP en commun qu'ils:

  • sont indépendants de tout réseau WiFi existant. Il fonctionnera donc n'importe où, loin d'Internet et des routeurs connectés.
  • envoient des données ASCII à imprimer via le moniteur série.
  • envoient des données obtenues par la fonction millis(), pour analyser la vitesse de la transmission.
  • ne sont pas testés pour plusieurs clients (en raison d'avoir le matériel pour configurer le réseau en ce moment)

Étape 2: Matériel

Matériel
Matériel
Matériel
Matériel
Matériel
Matériel
Matériel
Matériel

Pour tester l'ensemble de la configuration, j'ai utilisé deux modules ESP8266. Un module est un adaptateur ESP-01 + USB vers UART. L'autre module est un module basé sur ESP-12 incorporant la connexion USB, le régulateur de tension et quelques trucs amusants comme des commutateurs, des LDR et des LED multicolores.

Le module USB vers UART pour l'ESP-01 a dû être légèrement modifié pour pouvoir l'utiliser en tant que programmeur (encore une fois Youtube par Csongor Varga).

Pour exécuter les esquisses, vous devez installer les bibliothèques ESP8266 (comme décrit à de nombreux endroits sur Internet). Dans les deux cas (TCP et UDP) il y a un serveur et un client chacun. Quelle esquisse est chargée dans quel module n'a pas d'importance.

Remerciements

Comme mentionné, les croquis sont basés sur de nombreux éléments que j'ai trouvés sur le Web. Je ne me souviens plus où j'ai trouvé quoi, et quel est le code d'origine ou ce que j'ai changé. Je voulais juste remercier la grande communauté en général pour avoir publié tous les excellents exemples.

Étape 3: Les croquis

Le code se compose de deux esquisses chacune (comme expliqué), une esquisse serveur et une esquisse client, pour TCP et UDP chacune.

Conseillé: