MIRO es una plataforma abierta de robot de interior. Parte 3 - Componente de software: ESP8266

imagen

Comenzamos a desmontar el componente de software de la plataforma MIRO. Veamos cómo "cocinar" ARDUINO UNO usando ESP8266 para firmware y comunicación inalámbrica.

Tabla de contenido: Parte 1 , Parte 2 , Parte 3 , Parte 4 , Parte 5 .

No quería que desarrollemos nada para el ESP8266. Estaba seguro de que durante mucho tiempo hubo una solución llave en mano con la funcionalidad que necesitaba. Y para MIRO, esta funcionalidad era bastante simple:

  1. El software debe tener una interfaz web para la configuración de la red;
  2. El software debe implementar el firmware inalámbrico ATMEGA328;
  3. El software debe tener la funcionalidad de puente WiFi-UART para la depuración y administración inalámbrica.

imagen Probablemente, para la mayoría de estas funciones, existe el conocido ESP-LINK . Y él es realmente poderoso. Lo usamos en varios otros proyectos como un puente entre diferentes interfaces, muy conveniente. Pero hace unos meses, cuando nos sentamos para tratar de cerca este problema, resultó que no estaba mostrando ARDUINO UNO. En todas partes escriben que están parpadeando, pero él no parpadeó. Y en ese momento ni siquiera entendí profundamente por qué y cuál es el procedimiento estándar. Mis camaradas y yo simplemente configuramos un puerto COM virtual en el host en una dirección IP ESP específica, indicamos la línea de reinicio en ESP-LINK e intentamos flashearla. ATMEGA328 se restableció correctamente, pero el firmware no se inundó. Además, la red tiene muchas lecciones sobre cómo organizar dicho firmware con ESP-LINK. Pero si lees su problema, siempre tienen algo allí que alguien no muestra.

Decepcionado, comenzó a buscar alternativas. Y lo encontré como una bifurcación del WiFi Arduino original en GitHub de un desarrollador con el apodo jandrassy.
En febrero de ese año, había una instrucción monstruosa en README para configurar todo, desde el firmware hasta el entorno de desarrollo, pero ahora se ha simplificado enormemente. Sin embargo, todavía se necesita un poco de esfuerzo para configurar el medio ambiente. Sin embargo, el firmware ARDUINO es perfecto. Se verifica tanto desde Windows como desde Linux (en MacOS parece que nunca hemos probado nada, nadie en el entorno inmediato del proyecto lo tiene).

El orden de preparación del medio ambiente es el siguiente:

  1. Descargue e instale la biblioteca dfu desde aquí ;
  2. Por defecto, en esta biblioteca (en el archivo esp8266-serial-arduinouno-hacked.cpp) se declara que la línea de reinicio del chip ATMEGA328 está conectada a la línea GPIO5 ESP8266. Para MIRO, debe realizar cambios aquí: cambie a GPIO2.

Qué exactamente cambiar
Fue:

esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(5, OUTPUT); digitalWrite(5, 0); delay(1); digitalWrite(5, 1); delay(200); return 0; } 

Se convirtió en:

 esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(2, OUTPUT); digitalWrite(2, 0); delay(1); digitalWrite(2, 1); delay(200); return 0; } 


El autor de jandrassy indica que su implementación solo funciona con esta configuración del chip de destino y el gestor de arranque (ATMEGA328P con Optiboot).

Estoy seguro de que todavía hay soluciones y posiblemente incluso mejores. Si alguien sabe con seguridad las opciones de trabajo, avíseme. Porque, a pesar de la gran cantidad de código listo para usar, además de ESP-LINK, también probamos 2 o 3 proyectos, no funcionaron. En algunos casos, el firmware pasó una vez, en algunos casos no funcionó en absoluto.

Quizás una de las principales ventajas de la solución encontrada es la base de código relativamente pequeña del proyecto y el hecho de que el firmware para Arduino Core está desarrollado.

Lo que no estaba en el proyecto jandrassy era el puente inalámbrico WiFi-UART. Ya en el firmware original de Arduino.org WiFi Link, se cortó una página con una ventana de terminal, lo que permitió a través del navegador trabajar con el chip UART ATMEGA328. Al igual que esto se puede hacer en ESP-LINK. Y si pasamos a las primeras publicaciones sobre Arduino UNO WiFi (por ejemplo, aquí está ), está claro que en las primeras versiones del firmware, tanto la ventana como el elemento de menú correspondiente ("Consola WiFi"). E incluso en la versión 1.0.0 en el archivo, el archivo console.js (que acaba de implementar esta página) se encuentra, pero de hecho no está involucrado en el servidor de ninguna manera (lo comprobamos). Por qué y por qué lo cortaron no está claro.

Tuve que terminar algo. Ahora hay otro servidor en el firmware: TELNET en el puerto 23 obvio, con el cual muchos programas de terminal funcionan sin problemas.

Sin embargo, en este momento, para que todo funcione, tuve que eliminar del código de jandrassy la parte responsable del firmware inalámbrico del ESP en sí. En los requisitos iniciales, no tenía esta funcionalidad, así que está bien. Sin embargo, si los lectores en los comentarios pueden decirme afirmativamente si es posible en un firmware implementar la posibilidad de firmware inalámbrico tanto del ESP8266 como del MCU "externo" (en este caso, ATMEGA328), entonces pensaré en devolver esta función al firmware ESP. Ya en la preparación del artículo, indirectamente, vi confirmación de esto en este borrador de canadienses. Pero no lo comprobé.

Mientras tanto, ESP se actualiza exclusivamente por cable, pero ARDUINO tiene la capacidad de firmware inalámbrico y comunicaciones TELNET a través del puente WiFi-UART. ¡Y es muy conveniente! Mi objetivo está logrado.

Bueno, en el proyecto, como en el original, hay una interfaz WEB para la configuración (se puede hacer clic en las imágenes).





Cambiamos los archivos CSS de los estilos de interfaz WEB para nuestro proyecto e introdujimos una pequeña "muleta", ahora ESP siempre está en modo AP + STA. Esta muleta se hizo para excluir la posibilidad de cambiar el ESP al modo "solo STA", en el que al transferir el robot a una subred diferente, el usuario pierde la capacidad de configurar el robot en una nueva red: el robot no puede conectarse a la nueva red, pero tampoco hay acceso externo - Tengo que actualizar el ESP. En el modo AP + STA, el usuario siempre puede conectarse al punto de acceso del robot y configurar la conexión a la nueva red WiFi.

Sobre cómo flashear ESP8266 con este "monstruo". En general, para un módulo arbitrario en un chip ESP8266, el orden es el siguiente:

  1. Encienda la placa (conéctese a usb);
  2. Establezca los parámetros del tablero como en la figura;

    imagen

    Es muy importante seleccionar "v1.4 Ancho de banda superior": si selecciona "v2", después del firmware no es posible conectarse a la placa a través de WiFi (el punto de acceso es visible, pero el procedimiento de conexión no funciona, quién sabe con qué está conectado, escriba en los comentarios).
  3. Seleccione un puerto (en el ejemplo en la captura de pantalla - COM3).
  4. Ejecute el firmware. Durante el procedimiento de carga de la placa, primero se borra la memoria del microcontrolador y luego el firmware.
  5. Después de completar el procedimiento de firmware, debe reiniciar la placa con el botón de reinicio.
  6. Seleccione Arduino IDE ESP8266 Sketch Data Upload del menú y descargue SPIFFS.
  7. Restablecer el tablero.

Para la configuración con nuestra "placa modificada" UNO + WiFi (ver la primera parte ), todo es un poco más complicado debido a las características de hardware de la placa, que es difícil de estudiar cómodamente debido a la gran cantidad de errores en el documento con el diagrama de circuito. Escribimos instrucciones más detalladas en el archivo "MIRO ESP Firmware upload manual" del repositorio: si actúa estrictamente al respecto, el firmware pasa 100 de 100.

Llegamos a una parte muy interesante: el componente de software MIRO asignado a ATMEGA328. También hay más trabajo y espacio para la discusión de varias soluciones.

Gracias a todos!

Source: https://habr.com/ru/post/473368/


All Articles