Skip to main content
ESPBoards

Cómo programar diferentes microcontroladores en Arduino UNO R4

Aprenda los detalles del nuevo Arduino UNO R4 WiFi, por qué tiene múltiples MCUs, qué chip ESP32 está utilizando y cómo programar cada uno de los MCUs de forma independiente.


The Arduino UNO has always been a beloved option for makers and hobbyists. Its amazing community has made it a go-to choice for many projects and especially because of its simplicity and ease of use have brought many new users into the microcontrollers world.

As already discussed in the previous post - “Arduino UNO R4 announcement. News for the ESP32 community”, the new Arduino UNO R4 WiFi version, in addition to the Cortex M4 processor, has the ESP32 chip integrated, which brings advanced capabilities and extensive wireless connectivity to the popular Arduino UNO series.

¿Por qué el Arduino UNO R4 WiFi tiene dos MCUs (unidades de microcontroladores)? #

Arduino Uno R4 WiFi
El Arduino Uno R4 WiFi marca un nuevo hito al incorporar no solo una, sino dos unidades de microcontroladores (MCUs) en una sola placa de desarrollo. Esta decisión surge del deseo de aprovechar las fortalezas únicas de cada MCU, desbloqueando un nuevo mundo de posibilidades para proyectos y aplicaciones.

Al combinar el microcontrolador Cortex M4 (RA4M1), el pilar del nuevo Arduino Uno R4, junto con el microcontrolador ESP32-S3, el Arduino Uno R4 WiFi logra un equilibrio entre familiaridad y capacidades avanzadas. El Cortex M4, con su arquitectura de 32 bits y su potente diseño basado en ARM, aporta un aumento significativo en el rendimiento de la placa.

Por otro lado, el microcontrolador ESP32-S3 añade un nuevo nivel de potencia y versatilidad al Arduino Uno R4 WiFi. Conocido por sus características avanzadas, el ESP32-S3 cuenta con una capacidad de procesamiento más robusta, memoria expandida y conectividad Wi-Fi integrada. Esta integración permite una comunicación inalámbrica perfecta, lo que facilita la conexión de tus proyectos a Internet, la interacción con servicios en línea o la creación de dispositivos de Internet de las Cosas (IoT).

Pero ¿por qué optar por dos MCUs en lugar de confiar únicamente en el ESP32-S3? La respuesta radica en la división del trabajo y el rendimiento optimizado. Al asignar tareas específicas a cada MCU, el Arduino Uno R4 WiFi aprovecha las fortalezas de ambos para crear una combinación sinérgica.

El papel de cada microcontrolador #

Por lo tanto, la inclusión de dos MCUs en una sola placa de desarrollo es una decisión estratégica destinada a asignar tareas específicas a cada controlador, lo que lleva a un rendimiento optimizado.

El potente Cortex M4 de 32 bits sobresale en el manejo de tareas básicas de entrada/salida (I/O), lo que lo hace ideal para controlar sensores, leer datos e interactuar con varios componentes.

Las capacidades Wi-Fi integradas del ESP32-S3 permiten una comunicación inalámbrica fluida. Puede conectarse a redes Wi-Fi, lo que permite al Arduino Uno R4 WiFi acceder a recursos en línea, comunicarse con otros dispositivos a través de internet e interactuar con servicios web. Esto lo hace ideal para proyectos de IoT, aplicaciones de monitoreo remoto y proyectos que requieren conectividad a plataformas en la nube.

La división del trabajo entre los dos microcontroladores garantiza un rendimiento optimizado y flexibilidad. Mientras que el Cortex M4 maneja la funcionalidad fundamental de Arduino y mantiene la compatibilidad con las bibliotecas existentes, el ESP32-S3 se encarga de operaciones más avanzadas, procesamiento de datos y tareas de red. Esta colaboración te permite aprovechar las fortalezas de cada microcontrolador, creando un equilibrio armonioso entre simplicidad, compatibilidad y capacidades avanzadas.

¿Qué ESP32 exactamente tiene el Arduino UNO R4? #

Bueno, la respuesta se puede encontrar en todas partes y es simple: el ESP32-S3. Pero si queremos entender realmente lo que hay bajo el capó, eso no es suficiente. Lo que realmente queremos saber es el modelo exacto, que es ESP32-S3-MINI-1-N8.

El ESP32-S3-MINI-1 es un módulo de tamaño reducido, compatible con WiFi de 2.4 GHz y Bluetooth 5.0 (LE). Está construido alrededor del SoC ESP32-S3 y cuenta con el microprocesador Xtensa de doble núcleo LX7 de 32 bits y un rico conjunto de periféricos.

Ahora bien, hay mucha información en Internet sobre el ESP32-S3-MINI-1, pero ¿qué significa el prefijo “N8” al final? Tomando como referencia la ficha técnica del ESP32-S3-MINI-1, podemos ver que el “N8” significa que el chip tiene 8 MB de memoria flash Quad SPI.

El módulo ESP32 actúa como un MCU secundario en la placa UNO R4 WiFi y se comunica con el MCU Cortex M4 utilizando el convertidor de nivel lógico, ya que el ESP32 opera a 3.3V, mientras que el Cortex M4 a 5V.

Programar los diferentes microcontroladores (Cortex M4 y ESP32) #

Como se mencionó anteriormente, la placa UNO R4 WiFi cuenta con el microcontrolador RA4M1 (Cortex M4) como su microcontrolador principal, responsable de las funciones básicas. Y el ESP3, que actúa como un microcontrolador secundario. Esto plantea una pregunta: ¿Podemos programar los diferentes microcontroladores individualmente?

El comportamiento predeterminado al programar la placa #

De forma predeterminada, al programar la placa UNO R4 WiFi, el microcontrolador Coretex M4 (RA4M1) se programa a través del módulo ESP32-S3. Sin embargo, debido a que el RA4M1 opera a 5V, mientras que el ESP32 opera a 3.3V, la conexión no es directa, sino que los microcontroladores se comunican a través del traductor de nivel de voltaje bidireccional de 8 bits. (TXB0108DQSR).

Además de actuar como un puente serial, manejando la conexión al puerto USB de tu computadora, el ESP32-S3 también controla el MCU principal (RA4M1). Por ejemplo, reinicia y restablece el RA4M1 al recibir un nuevo sketch.

Programming the Coretex M4 (RA4M1) directly #

En caso de que desees acceder al bus serial del RA4M1 directamente, el Arduino UNO R4 ofrece dos opciones para esto:

  1. Software: el pin D40 se utiliza para controlar qué MCU está conectado al puerto serial USB. Si el pin D40 se lleva a LOW, el ESP32 está conectado, tal como en la configuración predeterminada, y si el pin D40 se lleva a HIGH, el RA4M1 está conectado, permitiéndote acceder al MCU RA4M1 directamente a través del puerto USB. Esto se puede hacer incluyendo el siguiente código en la función setup():
  pinMode(40, OUTPUT);
digitalWrite(40, HIGH); // defaults to LOW

Primero, configuramos el pin D40 para que actúe como una OUTPUT, para poder establecer su valor digital. Y segundo, configuramos el pin en HIGH o LOW, dependiendo de qué MCU queremos que esté conectado al puente USB.

  1. Hardware: Si miras la parte posterior de la placa UNO R4 WiFi, notarás que hay almohadillas de soldadura etiquetadas como "RA4M1 USB". Al crear un cortocircuito entre estas almohadillas (conectándolas), puedes establecer una conexión entre el RA4M1 y el puerto serial USB, en lugar del ESP32.

En caso de que no desees usar el ESP32 por defecto, cambiar el puente USB para que esté conectado al RA4M1 en su lugar, podría ser molesto hacerlo a través del software todo el tiempo, por lo tanto, la opción de hardware podría ser la mejor en este caso. Puedes encontrar más información y el diagrama de hardware en la ficha técnica oficial del Arduino Uno R4 WiFi, sección "6.2 USB Bridge" en la página 11.

Programar el ESP32-S3 directamente #

Si te preguntas cómo programar el ESP32 directamente, sin tocar el RA4M1, estás de suerte, ya que Arduino también pensó en eso. En la parte frontal del Arduino UNO R4 WiFi, cerca del chip ESP32-S3, puedes encontrar el encabezado de pines 3x2, que tiene los siguientes pines ESP32 expuestos:

  • ESP_IO42 - MTMS debugging
  • ESP_IO41 - MTDI debugging
  • ESP_TXD0 - Serial Transmit (UART TX)
  • ESP_DOWNLOAD - Boot
  • ESP_RXD0 - Serial Receive (UART RX)
  • GND - Ground

Ten en cuenta que, por defecto, el ESP32-S3 tiene un firmware instalado, que se utiliza para la comunicación con el RA4M1. Si programas el ESP32 directamente, el firmware predeterminado será sobrescrito y la conexión con el RA4M1 se interrumpirá. En caso de que necesites revertir y permitir que el ESP32 se comunique con el RA4M1 de la misma manera que inicialmente, tendrás que restaurar el firmware original.

Dado que ahora estamos conectando directamente al ESP32, estamos omitiendo la interfaz USB a Serial (USB a UART) de la placa Arduino UNO R4. Por lo tanto, necesitamos una interfaz USB a Serial adicional para poder programarlo, como el FTDI o el CP210x.

Conectar el ESP32 con el módulo USB a UART es bastante simple. Necesitaremos usar 4 de los 6 pines expuestos en el Arduino UNO R4 WiFi para programar el chip ESP32.

  1. Conectaremos el ESP_TXD0 con FTDI_RX, ESP_RXD0 con FTDI_TX y ESP32 GND con FTDI GND.
  2. Para permitir que el ESP32 sea reprogramado, necesitamos ponerlo en modo de descarga al arrancar. Esto se puede hacer conectando el pin ESP_DOWNLOAD a GND.

Después de conectar el ESP32 al módulo USB a UART y enchufar el módulo USB a UART al puerto USB de tu computadora, puedes programar el ESP32-S3 como lo harías normalmente con cualquier otra placa ESP32.

Get Arduino UNO R4 Minima and WiFi #

On June 26th, 2023, the Arduino team announced the release of the Arduino UNO R4 Minima and WiFi in the market.

Arduino Uno R4 Minima
La versión Minima se comercializa actualmente por 20$ USD (o 18 EUR en Europa)

Arduino Uno R4 Wifi with ESP32
La versión WiFi (con ESP32) se comercializa actualmente por 27,5$ USD (o 25 EUR en Europa).

Conclusión #

El Arduino Uno R4 WiFi combina la potencia de dos unidades de microcontroladores (MCUs) con la integración del ESP32-S3. El RA4M1 y el ESP32-S3 trabajan juntos para ofrecer compatibilidad, una capacidad de procesamiento avanzada y conectividad inalámbrica integrada.

Al incorporar el ESP32-S3, el Arduino Uno R4 WiFi puede acceder a redes Wi-Fi, permitiendo una comunicación fluida con recursos en línea y otros dispositivos. Esto abre emocionantes oportunidades para proyectos de IoT, aplicaciones de monitoreo remoto y sistemas conectados a la nube. La gran capacidad de procesamiento y memoria del ESP32-S3 facilita cálculos complejos, el procesamiento de datos en tiempo real y la ejecución de algoritmos avanzados.

El RA4M1 asegura la compatibilidad con proyectos y bibliotecas existentes de Arduino Uno, lo que facilita a los usuarios la transición y el acceso a una gran cantidad de recursos desarrollados por la comunidad. Esta compatibilidad beneficia tanto a principiantes como a usuarios experimentados, ofreciendo una curva de aprendizaje suave para los recién llegados y permitiendo a los usuarios experimentados aprovechar su trabajo previo.

Además, Arduino nos permite programar cada uno de los microcontroladores por separado e incluso proporciona múltiples formas de elegir qué MCU debe programarse a través del puerto serial USB, lo que ofrece una gran flexibilidad y, para los fans del ESP, una comunicación directa con el chip ESP32-S3.

Recursos Adicionales #