
¿Qué hace un desarrollador en raras horas de ocio? Así es, navegar por las listas de precios de las tiendas de hierro. Hubo un minuto libre y decidí mirar a través de las páginas de tiendas populares en línea: aburrimiento, nada interesante, ya hemos visto todo esto ... y de repente mis ojos se posaron en el próximo Mega. Bah! Sí, no es solo Mega, sino que se combina con el querido ESP8266 de todos y está cuidadosamente equipado con interruptores para que dos controladores trabajen juntos: cableados (usando Ethernet Shield) con una gran cantidad de GPIO y Wi-Fi para la comunicación inalámbrica.
No esta mal! Pensé y recordé acerca de
AMS , allí puedes instalar dos servidores, cableados e inalámbricos, y conectarlos a un sistema: ESP8266 recibirá 54 pines digitales y 16 analógicos, y Mega recibirá control inalámbrico a través de Wi-Fi y todos los bollos ESP8266. Hace mucho tiempo no me encontré con un tablero tan interesante.
- hola ¿Tienes una placa
Mega + ESP8266 ?
- Sí, pero solo nos queda uno.
"¿Por qué solo uno?"
- El resto fue desarmado.
"Resérvala, por favor, para mí".
Unas palabras sobre la empresa
Me gustaron dos cosas RobotDyn: la primera, con sus soluciones tecnológicas. No hay necesidad de ir muy lejos, un excelente ejemplo es la placa Mega + ESP8266 en consideración. Algo como esto no he visto en nuestras tiendas en línea (y no en las nuestras, pero realmente no lo busqué aquí). Y este no es el único ejemplo, todavía existe la opción Uno + ESP8266 y la compañía claramente no se detendrá allí, aparentemente todavía hay muchos dispositivos interesantes esperándonos.
Y el segundo es su política de precios. No me detendré en este tema aquí en detalle, pero diré que los precios me sorprendieron gratamente: el lema de la compañía es "Los precios son como en Aliexpress".
En pocas palabras, describí los antecedentes en los que se desarrollarán todos los eventos posteriores, ahora vamos directamente a los detalles técnicos y una descripción del tablero y cómo trabajar con él.
El tablero en sí
En general, una placa ordinaria, no muy diferente de muchas similares, si no fuera por una pequeña parte, a saber, el chip ESP8266EX integrado en la placa. Esto transfiere inmediatamente a la junta a la categoría de soluciones extraordinarias. Quiero llamar su atención sobre un detalle más: no se integra un módulo estándar del tipo ESP-12 en la placa, sino que el chip y todo el cableado se realizan en la placa misma, lo que alude de manera transparente al nivel de los desarrolladores. También quiero señalar que la placa tiene una antena impresa y un conector para conectar una antena externa, que en muchos casos puede ser muy útil.

Hay conectores pin en la placa para conectar a los terminales ESP8266 y varios interruptores, que vale la pena mencionar un poco más. La idea principal de usar la placa es que al usar los interruptores, puede configurar la interacción de sus tres componentes de diferentes maneras: el chip Atmega2560, el chip ESP8266EX y el convertidor USB-TTL CH340G. Son posibles conexiones simples y complejas, que le permiten organizar muchas opciones para la interacción de todas las partes del tablero. Esto abre grandes oportunidades para construir varios dispositivos, pero más sobre esto más adelante.

También quiero señalar la capacidad de carga decente de la placa. A juzgar por las inscripciones en él, es capaz de proporcionar una corriente de carga de 1.6 A en un canal de 5 voltios y 1 A en un 3.3 voltios. Lo cual es muy bueno, especialmente en el agregado.
No hay nada más que decir sobre el tablero, pasamos a instalar software y probarlo.
Prueba de la junta
Como la placa está integrada y prácticamente no hay espacio libre en ella, y el cableado de la parte de alta frecuencia del ESP8266EX se realiza en ella, al principio surgieron dudas sobre el funcionamiento correcto y sin problemas de toda esta economía.
Mirando hacia el futuro, diré que a pesar de mis preocupaciones, todo funciona de manera estable y como se esperaba. Conectamos los interruptores de la placa Atmega2560 a USB; obtenemos el Arduino Mega, conectamos el ESP8266EX a USB; obtenemos el ESP8266, cambiamos al modo de conexión del Atmega2560 con el ESP8266EX y obtenemos la conexión entre los chips a través de la interfaz en serie. Todo funciona exactamente como se describe en la documentación y exactamente como se espera intuitivamente.
Una gran ventaja de esta solución es que los desarrolladores se encargaron de hacer coincidir los niveles de señal lógica de todos los componentes del sistema. Cualquiera que haya intentado configurar manualmente el módulo ESP8266 y conectar correctamente todas las resistencias pull-up me entenderá. No existen tales problemas, todo su trabajo se reduce a hacer clic en los interruptores de la placa de acuerdo con las instrucciones del fabricante.
Prueba de carga
¿Cómo probar el tablero? Puede descargar un boceto estándar, pero será una prueba sobre nada. Esta opción puede funcionar bien, y en condiciones de combate el sistema fallará. Por lo tanto, el trabajo de ambas partes bajo el control de las versiones correspondientes del Arduino Mega Server fue elegido como una prueba de carga dura. Para Mega - Arduino Mega Server para Mega y para ESP8266 - Arduino Mega Server para ESP8266 en la versión M1.
El kit de distribución M1 fue elegido debido al hecho de que solo 1 MB de memoria flash para ESP8266 está instalado en la placa. Esto, en mi opinión, es casi el único error para los desarrolladores: en futuras revisiones de la placa, recomendaría que coloquen chips de memoria de 4 MB. La diferencia de precio es pequeña, y las posibilidades al usar la versión con 4 MB son mucho mayores. Pero como hay una versión AMS para sistemas con 1 MB, no presté mucha atención a este punto y continué probando.
Que decir Encendemos el tablero, completamos el software y obtenemos dos servidores independientes. Uno conectado a través de Ethernet Shield y otro inalámbrico a través de Wi-Fi. Belleza!
También me gustaría señalar que incluso la adición de un Ethernet Shield con un lector de tarjetas a este sistema ya sofisticado no causó ningún conflicto o falla, todo salió de la manera en que debería funcionar. Y en algunos casos es incluso mejor de lo habitual: esta es la primera placa en la que el firmware ESP8266 por el aire pasó con éxito en el 100% de los casos, en todas las demás placas y módulos hay fallas ocasionales con este parpadeo.
Y dos servidores están girando, cargando la placa, cumpliendo con sus obligaciones y ... eso es todo. Todo funciona, no hay nada que decir, pero este es probablemente el mejor elogio para cualquier sistema técnico.
Mas interesante
Lo que describí aquí es interesante desde un punto de vista puramente académico: un tablero interesante, una solución técnica interesante, pero por supuesto estamos interesados en su aplicación práctica. ¿Cuál es su punto culminante práctico y aplicado?
El hecho es que con un interruptor en el tablero es posible conectar sus dos partes (Mega y ESP) en una sola unidad y, por lo tanto, en primer lugar, obtener un nuevo sistema de calidad y, en segundo lugar, compensar los defectos inherentes de cada una de sus partes individuales.
Comencemos con el ESP8266. El principal inconveniente de esta solución generalmente excelente es la catastrófica falta de pines GPIO. Como dicen, uno, dos y mal calculados. Es difícil decir qué pensaron los desarrolladores de este chip, pero antes del lanzamiento de ESP32 tuvieron un poco más de tiempo para pensar y solucionaron esta deficiencia en el nuevo chip. Pero estamos tratando específicamente con 8266.
Esta placa le permite hacer un movimiento de caballos y usar toda la potencia de Mega, y esto, entre otras cosas, 54 salidas digitales y 16 analógicas en el ESP8266. Es decir, nuestro ESP desvencijado de repente tiene grandes oportunidades para trabajar con sensores, actuadores y otros periféricos. Resulta, por así decirlo, bebé ESP con esteroides.
Esta es solo una de las opciones posibles para usar el tablero, acostado en la superficie.
Ahora echemos un vistazo a Mega. Ella no interfiere con la interfaz inalámbrica y la capacidad de interactuar con dispositivos Wi-Fi, lo que puede proporcionarle integración con la parte ESP del sistema. Y al mismo tiempo, sigue existiendo la posibilidad de operación en paralelo a través de una interfaz Ethernet cableada.
Y esta también es solo una de las posibles aplicaciones para esta placa, que yace en la superficie.
Bueno, varias opciones de puente: Ethernet - Wi-Fi, nRF24 - Ethernet, nRF24 - Wi-Fi, nRF24 (1) - nRF24 (2), nooLite - Wi-Fi, nooLite - Ethernet, nooLite (1) - nooLite (2 ), etc., etc. hasta el infinito. Puede enrutar señales de docenas de subsistemas con los que el Arduino Mega Server funciona entre las dos partes de la placa y las interfaces conectadas a ellas.
Ni siquiera sé qué decir. Muy guay.
Detalles técnicos
Ahora un poco sobre los detalles técnicos. Verá una tabla en la que se presentan todos los modos de operación posibles del tablero y se muestran todas las posiciones posibles de los interruptores en él. Consideremos brevemente cada modo.

Arduino Mega 2560
El modo más simple de operación de la placa, en la tabla, se designa como modo 3. Si coloca los interruptores 3 y 4 en la posición de ENCENDIDO, y el resto en la posición de APAGADO, obtenemos el Arduino Mega 2560 habitual. Nada interesante, por el bien de esto, no valió la pena comprar esta placa, puede fue comprar el Mega habitual.
ESP8266
Tampoco es un modo de operación muy interesante. En la tabla, se divide en dos modos secundarios, designados como 1 (cargando el boceto en ESP) y 2 (modo de conexión ESP a USB). Esta es toda la funcionalidad del ESP8266 estándar y, en aras de tal uso, tampoco valía la pena comprar esta placa, podría pasar con el módulo ESP habitual.
Todos son independientes
Tampoco consideramos esta opción en el número 6, porque en ella todas las conexiones entre las partes de la placa están rotas y definitivamente no puede sernos útil para nada.
La conexión entre Mega y ESP
En este modo, designado como 5, la comunicación se establece entre Mega y ESP a través de una interfaz en serie, pero no hay comunicación con el convertidor USB-TTL. ESP usa Serial estándar, mientras que Mega no usa menos Serial3 estándar. La conexión funciona de manera estable y sin problemas a una velocidad de 115200. Este es un modo de operación bastante específico cuando ningún controlador tiene conexión USB. Y por eso tampoco es muy interesante para nosotros.
Comunicación entre Mega y ESP y Mega y USB al mismo tiempo
Pero esto es lo que se llama una carta de triunfo. Obtenemos todo a la vez: la conexión Mega USB y la capacidad de cargar bocetos a Mega y controlar su funcionamiento a través del mismo USB, la posibilidad de comunicación entre Mega y ESP y la capacidad de cargar bocetos al ESP8266 y controlar su funcionamiento en la interfaz USB ... ¡Mega! Es decir, relleno completo, no salir directamente de la caja registradora.
Este es el único modo correcto de operación enumerado en la tabla. Recuerda su número ganador, que es cuatro. En la configuración de los interruptores en el tablero, también se ve hermoso: 1, 2, 3, 4 están en la posición ON, el resto están OFF.
Un lector atento preguntará: ¿cómo podemos cargar bocetos al ESP8266 si el puerto USB está ocupado conectándose a la megaparte del sistema? Y esta es la pregunta correcta, la respuesta es de ninguna manera. ¿Y por qué, entonces, estás escribiendo que en esta configuración podemos subir bocetos a ESP8266? Debido a que el Arduino Mega Server tiene la capacidad de descargar bocetos por aire directamente desde el IDE de Arduino presionando un par de botones, así que es correcto: tenemos el relleno completo, todo funciona de inmediato.
Pero, ¿qué pasa con aquellos que quieren usar la placa sin Arduino Mega Server? Solo hay dos opciones: hacer clic constantemente en los interruptores o agregar la capacidad de descargar bocetos por el aire en sus diseños. Personalmente me gusta más la segunda opción.
Configuración de IDE de Arduino
La configuración de IDE de Arduino para Mega no plantea ninguna pregunta, todo es estándar allí, y para ESP8266 daré una captura de pantalla del menú con configuraciones para una implementación específica de la parte ESP en la placa RobotDyn. Debe establecer los mismos parámetros para usted, con la excepción del número de puerto; en su sistema, lo más probable es que tenga un valor diferente.

Arduino Mega Server para RobotDyn Mega + ESP8266
Para esta placa, se ha lanzado una versión dual especial del Arduino Mega Server, que contiene dos servidores a la vez, optimizados específicamente para esta placa. Esto está fuera de la cuestión, ambos servidores contienen funcionalidad estándar y se pueden usar para cualquiera de sus proyectos.
Puede usar ambos servidores de forma independiente en la misma placa, o puede agregar la funcionalidad que necesita y usarlos en tándem y en modo puente entre dos redes y cualquier interfaz conectada a los servidores.
El primer ensamblaje Arduino Mega Server para la placa RobotDyn Mega + ESP8266 contiene un ejemplo de prueba de la interacción de dos controladores a través de una interfaz en serie. Esta es una demostración de las capacidades de la tecnología sobre la base de las cuales puede desarrollar sus propias soluciones.
Ahora un poco más sobre el desarrollo de un protocolo para la interacción de dos controladores a través de la interfaz serial en general y en este tablero en particular.
Desarrollo de protocolo
¿Qué debemos construir una casa? ¿Necesita desarrollar un protocolo de interacción entre las dos partes del sistema a través de la interfaz en serie? - Vamos a desarrollar, aquí lo principal es establecer la tarea de forma clara y correcta. Para demostrar el funcionamiento en tándem del sistema, mostramos los indicadores de funcionamiento "asociado" en el panel de instrumentos de cada servidor.
Un poco sobre terminología. Para Mega, el "socio" es ESP8266, para ESP8266, respectivamente, Mega.Cuando el compañero está trabajando, el indicador se iluminará en verde, cuando no esté en funcionamiento, rojo y gris cuando el estado no esté definido. Esto es muy conveniente: durante la operación, verá inmediatamente el estado del alter ego de su sistema.
Para una solución práctica a este problema, hay exactamente un millón de formas, elegiremos lo siguiente: los bloques de comunicación de ambas partes del sistema serán idénticos, la interacción ocurrirá en modo dúplex completo, los bloques de información tendrán un formato simple y claro:
?=
o
?
Este es solo un ejemplo de prueba para resolver la tarea, puede modificar este protocolo de interacción o escribir el suyo, adecuado para sus tareas. Pero en el protocolo ya implementado, no solo puede monitorear el estado del socio, sino también usarlo para muchos otros propósitos, por ejemplo, transmitir el estado de los pines del controlador, el estado de los sensores o enviar comandos de control al socio.
Específicamente, en nuestro sistema, los equipos se verán así:
? mega = 1 : Mega envía datos sobre su rendimiento. Parámetro "mega", valor "1".
? esp = 1 - ESP8266 envía datos sobre su estado. El parámetro es "esp", el valor es "1".
Entonces, por ejemplo, considere la implementación del protocolo para la megaparte del sistema.
De manera estándar, inicializamos el módulo AMS y el hardware Serial3 Mega a una velocidad de 115200.
void robotdynInit() { Serial3.begin(115200); modulRobotdyn = MODUL_ENABLE; started("RobotDyn", true); }
Verificamos el estado del puerto Serial3 y, en el caso de los datos del socio, formamos la variable de cadena serialReq que contiene los datos o comandos recibidos.
void checkSerial() { while (Serial3.available() > 0) { if (sFlag) { serialReq = ""; sFlag = false; } char c = Serial3.read(); if (c == 10) { sFlag = true; parseSerialStr(); } else if (c == 13) {
Analizamos los comandos y los datos, y en caso de información sobre el estado del socio, tomamos medidas en forma de cambiar el estado de la variable esp.
void parseSerialCmd() { String command, parameter; if (serialReq.indexOf(F("?")) >= 0) { int pBegin = serialReq.indexOf(F("?")) + 1; if (serialReq.indexOf(F("=")) >= 0) { int pParam = serialReq.indexOf(F("=")); command = serialReq.substring(pBegin, pParam); parameter = serialReq.substring(pParam + 1); } else { command = serialReq.substring(pBegin); parameter = ""; } if (command != F("esp")) { Serial.print(F("command/parameter: ")); Serial.print(command); Serial.print(F("/")); Serial.println(parameter); } if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; } } }
Puede agregar fácilmente el procesamiento de cualquier otro comando cambiando y agregando a la sección de código correspondiente.
if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; }
Si utiliza muchos comandos y datos en sus propios proyectos y análisis, es mejor diseñar esta sección de código en forma de funciones correspondientes.
Solo queda considerar la función estándar del módulo AMS, que es responsable de su trabajo. Primero, se verifica el estado del puerto, luego cada cuatro segundos se envía un comando al socio de que Mega está vivo y trabajando, y se comprueba el tiempo transcurrido desde que se recibieron los últimos datos del socio, y si excede los 8 segundos, se concluye que el socio no está funcionando.
void robotdynWork() { checkSerial(); if (cycle4s) { Serial3.println(F("?mega=1")); if (millis() - espTimer > 8000) { esp = 0; } } }
Eso es todo magia. Es cierto, nada complicado?
Código completo del módulo responsable de las comunicaciones entre sistemas entre Mega 2560 y ESP8266 #ifdef ROBOTDYN_FEATURE bool sFlag = true; unsigned long espTimer = millis();
Aspecto de la salida en el monitor serie
En el monitor serie Mega 2560, la salida, los datos y los comandos de la parte ESP del sistema se ven exactamente como los suyos. Para distinguir la salida del socio de la salida de Mega, sus datos están entre comillas cuadradas. En este caso, puede ver el reinicio de ESP8266 y el registro de inicio de AMS en el monitor serial de Mega.

Y el registro del intercambio real de comandos entre las dos partes del sistema a través de la interfaz en serie. Verá la salida de ESP8266 con información sobre la decodificación de los datos de estado de Mega en la interfaz serial de Mega, entre comillas cuadradas.

Belleza en la interfaz
Ahora un poco sobre cómo se ve todo en la interfaz Arduino Mega Server. Para comenzar, haré capturas de pantalla de ambas partes del sistema en el trabajo.

Las elipses están rodeadas de inscripciones que identifican el controlador y la parte del sistema con la que está trabajando actualmente. Los círculos se rodean alrededor de indicadores que muestran el estado del compañero. Por el momento, todo está en orden, ambas partes del sistema funcionan normalmente e interactúan normalmente entre sí a través de la interfaz interna. Si algo sale mal, lo sabrá después de un máximo de 8 segundos.

Algo salió mal. ESP8266 recibió una actualización de firmware a través del aire y la megaparte del sistema registró el momento de su reinicio. Después de unos segundos, la parte ESP del sistema se reanudará y el indicador se apagará en rojo.
Para mayor comodidad, cuando pasa el cursor sobre el indicador de estado del socio, aparece una pista y la posibilidad de hacer clic en él y en una ventana separada se abre la interfaz de la segunda parte del sistema, en este caso la parte ESP. Esto se hace por conveniencia, puede en cualquier momento abrir con un clic la interfaz de la segunda parte del sistema.

Ideas de proyectos
Ahora un poco sobre lo que puedes hacer con todo esto, tener un poco de imaginación. El tablero habitual, completamente discreto a primera vista, le permite hacer muchas cosas completamente inusuales e interesantes. Esto es especialmente cierto en la combinación con el Arduino Mega Server.
Entonces, lo primero que viene a la mente:
Reenviar datos de sensores entre controladores. En ambos lados y en cantidades ilimitadas. Este es un sistema que tiene las ventajas de ambas partes, y las posibilidades no solo suman, sino que se observa lo que se llama un efecto sinérgico.
El puente entre las interfaces. Arduino Mega Server puede funcionar con muchas interfaces y este sistema le permite enrutar datos y comandos entre cualquier interfaz conectada e inalámbrica.
Trabaje en la misma red cuando Mega a través de Ethernet Shield y ESP8266 a través de Wi-Fi se comunican con dispositivos cableados e inalámbricos en la misma red.
Trabaja en diferentes redes cuando Mega está conectado a Ethernet con cable y ESP8266 a través de Wi-Fi a otra red y el sistema enruta comandos y datos de una red a otra.
La salida de una parte del sistema en la interfaz de otra. Vía Ethernet utilizando fuentes web estándar o mediante una conexión serial interna.
Depuración Una parte del sistema puede actuar como depurador y probador de otra parte del sistema de acuerdo con su programa.
Temporizador de vigilancia. Cada controlador puede actuar como una especie de perro guardián en relación con otro.
Fallos de registro. Cada controlador puede mantener registros del trabajo de su socio, compilar estadísticas e informar sobre situaciones alarmantes.
Base de datos para ESP8266. Con este sistema, puede organizar algo así como una base de datos SQL en Mega para ESP8266. ESP hace su trabajo, y Mega actúa como un sistema de almacenamiento (hasta 32 GB).
Parpadeando unos a otros. Los controladores pueden actualizarse dinámicamente entre sí de acuerdo con la lógica incorporada o al llegar un comando de control externo.
Módulos de conexión. Los controladores pueden conectarse a varios periféricos que tienen problemas para conectarse a cualquier parte del sistema.
Y así sucesivamente, creo que un lector curioso podrá idear de manera independiente muchas formas no menos interesantes de utilizar este sistema.
Conclusión
En mi opinión, esta es una solución muy interesante, y debemos decir muchas gracias a RobotDyn por una
tarifa tan interesante. Yo, al menos, digo esto sinceramente.
Descargue el kit de distribución Arduino Mega Server para RobotDyn Mega + ESP8266 y verifique personalmente la validez de todo lo que está escrito aquí, puede hacerlo en el sitio oficial del proyecto Arduino Mega Server en la sección de
descargas .