Tabla de contenido:

Comunicación de datos directa ESP8266: 3 pasos
Comunicación de datos directa ESP8266: 3 pasos

Video: Comunicación de datos directa ESP8266: 3 pasos

Video: Comunicación de datos directa ESP8266: 3 pasos
Video: Pr#87 - Crear Servidor ESP8266 | Control Arduino por Internet (cualquier sitio del mundo) 2024, Mes de julio
Anonim
Comunicación de datos directa ESP8266
Comunicación de datos directa ESP8266

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

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