Tabla de contenido:
Video: Comunicación de datos directa ESP8266: 3 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Introducción
Mientras había realizado algunos proyectos con Arduinos y módulos nRF24l01, me preguntaba si podría ahorrar algo de esfuerzo usando un módulo ESP8266 en su lugar. La ventaja del módulo ESP8266 es que contiene un microcontrolador a bordo, por lo que no se necesita una placa Arduino adicional. Además, el tamaño de la memoria del ESP8266 es mucho mayor y, en lo que respecta a la velocidad, el ESP8266 funciona a un máximo de 160 MHz en lugar de los 16 MHz del Arduino. Por supuesto que hay algunos aspectos negativos.
El ESP8266 funciona solo con 3.3V, tiene menos pines y le faltan las agradables entradas analógicas que tiene Arduino (tiene una, pero solo para 1.0V y no para 3.3V). Además, hay muchos más ejemplos de código para Arduino + nRF24l01 que para el ESP8266, especialmente cuando se trata de transferencia directa de datos.
Entonces, con un proyecto en mente, analicé el tema de la transferencia de datos rápida y liviana entre dos ESP8266 sin todas las cosas de WWW y
Mientras buscaba ejemplos en Internet (la mayor parte del código siguiente se tomó de la red en varios lugares) me encontré con muchas preguntas sobre cómo implementar una transferencia de datos directa sin los buenos ejemplos de "hazlo así". Hubo un código de ejemplo, pero sobre todo con la pregunta de por qué no funcionó.
Entonces, después de leer un poco e intentar comprender, creé los ejemplos a continuación que permiten una transferencia de datos rápida y simple entre dos ESP8266.
Paso 1: Límites y fondos (TCP frente a UDP)
Para llegar allí, algunos límites deben aclararse en comparación con el nRF24l01.
Para usar el ESP8266 dentro del entorno Arduino, la biblioteca básica a usar es el ESP8266WiFi.h. Pueden ser diferentes, pero la mayoría de los ejemplos usan lo mencionado en. Al usar esto, debe llevar su comunicación al nivel de WiFi.
Entonces, para comunicarse, debe haber al menos un punto de acceso (AP) / servidor y un cliente. El AP proporciona el nombre de la red y las direcciones IP y el cliente se conectará a este servidor.
Entonces, comparado con el nRF24l01, donde el código en ambos extremos es más o menos el mismo (a excepción de los canales de transmisión), el código del ESP8266 es fundamentalmente diferente, ya que uno está configurado como AP y el otro como cliente.
El siguiente tema es que, en lugar de simplemente enviar algunos bytes al nRF24l01, se deben observar los protocolos de transferencia del ESP8266.
Hay dos protocolos de uso común: TCP y UDP.
El TCP (Transmission Control Protocol) es un protocolo que permite una transmisión sin pérdidas entre un servidor y un cliente. El protocolo incorpora "apretones de manos" (muchos indicadores y reconocimientos enviados entre ambas partes) y numeración y detección de paquetes para identificar y retransmitir los paquetes perdidos. Además, al usar todos estos apretones de manos, el protocolo evita la pérdida de datos debido a que se envían muchos paquetes al mismo tiempo en la red. Los paquetes de datos esperan hasta que se puedan recibir.
El UDP (Protocolo de datagramas de usuario) carece de todos los apretones de manos, la numeración de paquetes y la retransmisión. Por lo tanto, su sobrecarga es menor y no hay necesidad de todos los apretones de manos para mantener una conexión. UDP incorpora alguna detección básica de errores, pero sin corrección (el paquete dañado simplemente se descarta). Los datos se envían sin saber si la parte receptora es libre de recibirlos. Al mismo tiempo, varios paquetes pueden colisionar, ya que cada parte envía los datos siempre que sea necesario. Al omitir todos los apretones de manos, hay una característica agradable adicional de UDP llamada "multidifusión" y "difusión". En el caso de "multidifusión", los paquetes de datos se envían a un grupo predefinido de miembros, en una "difusión" los paquetes de datos se envían a todos los miembros conectados. Esto reduce considerablemente la transferencia de datos en el caso de que múltiples miembros reciban transmisiones (por ejemplo, enviando una transmisión de video a múltiples receptores o enviando la hora actual a múltiples dispositivos conectados).
Hay algunos buenos videos en Youtube que lo explican aún mejor.
Por eso, al enviar datos, es importante conocer sus necesidades:
- datos no corruptos, gestión de varios pares mediante apretones de manos → TCP
- datos en tiempo real, conexión rápida → UDP
Primero comencé con la implementación de una comunicación basada en TCP (entre un servidor y un cliente). Mientras lo probaba, tuve problemas de estancamiento en la transmisión. Al principio, los datos se intercambiaban rápidamente, luego, después de un tiempo, la velocidad se redujo drásticamente. Llegué a la conclusión de que se trataba de un problema típico del enfoque TCP (¡que estaba mal!), Así que cambié a una solución basada en UDP. Finalmente conseguí que ambos se acercaran a trabajar. Entonces se proporcionarán ambas soluciones.
Los siguientes esquemas tienen para TCP y UDP en común que:
- son independientes de cualquier red WiFi existente. Por lo tanto, funcionará en cualquier lugar lejos de Internet y enrutadores conectados.
- están enviando datos ASCII para ser impresos a través del monitor en serie.
- están enviando datos obtenidos por la función millis (), para analizar la velocidad de transmisión.
- no se prueban para varios clientes (debido a que tienen el hardware para configurar la red en este momento)
Paso 2: hardware
Para probar toda la configuración utilicé dos módulos ESP8266. Un módulo es un adaptador ESP-01 + USB a UART. El otro módulo es un módulo basado en ESP-12 que incorpora la conexión USB, regulador de voltaje y algunas cosas divertidas como interruptores, LDR y LED multicolor.
El Módulo USB a UART para el ESP-01 necesitaba ser modificado un poco para poder usarlo como programador (nuevamente Youtube por Csongor Varga).
Para ejecutar los bocetos, debe instalar las bibliotecas ESP8266 (como se describe en muchos lugares de Internet). En ambos casos (TCP y UDP) hay un esquema de servidor y de cliente cada uno. No importa qué boceto se carga en qué módulo.
Expresiones de gratitud
Como se mencionó, los bocetos se basan en muchos fragmentos que encontré en la web. Ya no recuerdo dónde encontré qué, qué es el código original o qué cambié. Así que solo quería agradecer a la gran comunidad en general por publicar todos los grandes ejemplos.
Paso 3: los bocetos
El Código consta de dos bocetos cada uno (como se explicó), un boceto de servidor y un boceto de cliente, para TCP y UDP cada uno.
Recomendado:
Motor paso a paso controlado por MIDI con un chip de síntesis digital directa (DDS): 3 pasos
Motor paso a paso controlado por MIDI con un chip de síntesis digital directa (DDS): ¿Alguna vez tuvo una mala idea de que SÓLO tenía que convertirlo en un mini proyecto? Bueno, estaba jugando con un boceto que había hecho para Arduino Due destinado a hacer música con un módulo AD9833 Direct Digital Synthesis (DDS) … y en algún momento pensé & q
Haga hermosos gráficos a partir de datos de Arduino en vivo (y guarde los datos en Excel): 3 pasos
Cree hermosos gráficos a partir de datos de Arduino en vivo (y guarde los datos en Excel): a todos nos gusta jugar con nuestra función P … lotter en el IDE de Arduino. Sin embargo, si bien puede ser útil para aplicaciones básicas, los datos se borran a medida que aumenta se añaden puntos y no es particularmente agradable a la vista. El trazador Arduino IDE no
FK (cinemática directa) con Excel, Arduino y procesamiento: 8 pasos
FK (Forward Kinematic) con Excel, Arduino y Processing: Forward Kinematic se utiliza para encontrar valores de End Effector (x, y, z) en el espacio 3D
Cómo hacer un registrador de datos en tiempo real de humedad y temperatura con Arduino UNO y tarjeta SD - Simulación del registrador de datos DHT11 en Proteus: 5 pasos
Cómo hacer un registrador de datos en tiempo real de humedad y temperatura con Arduino UNO y tarjeta SD | Simulación del registrador de datos DHT11 en Proteus: Introducción: hola, soy Liono Maker, aquí está el enlace de YouTube. Estamos haciendo un proyecto creativo con Arduino y trabajamos en sistemas embebidos. Data-Logger: Un registrador de datos (también registrador de datos o registrador de datos) es un dispositivo electrónico que registra datos a lo largo del tiempo w
Cómo obtener datos de una base de datos de Firebase en NodeMCU: 7 pasos
Cómo obtener datos de una base de datos de Firebase en NodeMCU: para este instructable, obtendremos datos de una base de datos en Google Firebase y los obtendremos usando un NodeMCU para su análisis posterior.REQUISITOS DEL PROYECTO: 1) NodeMCU o controlador ESP8266 2) G-Mail cuenta para crear una base de datos de Firebase. 3) Descargue el