Arduino Leonardo — Ficha de placa
⚡ Lo esencial en 60 segundos
- mcu — Atmel/Microchip ATmega32U4 (AVR, 8-bit RISC, modified Harvard architecture — see AVR family article); datasheet via Microchip product page.
- cpu — single-core AVR RISC, 16 MHz crystal oscillator (build.f_cpu=16000000L).
- gpu — none.
- memory — Flash 32 KB (4 KB used by the bootloader → 28,672 bytes available for sketches, upload.maximum_size=28672 in boards.txt); SRAM 2.5 KB (2560 B); EEPROM 1 KB.
- usb — native full-speed USB 2.0 device on the ATmega32U4 (no USB-serial chip). Enumerates as CDC serial by default (VID 0x2341, PID 0x8036; bootloader PID 0x0036; legacy VID 0x2A03 also present) and can present HID keyboard/mouse/joystick (boards.txt, store FAQ). Connector: micro-USB.
- gpio — 20 digital I/O pins @ 5 V, of which 7 PWM (pins 3, 5, 6, 9, 10, 11, 13 — 8-bit PWM via analogWrite) and 12 analog inputs A0–A11 (10-bit ADC; A6–A11 are multiplexed on digital pins 4, 6, 8, 9, 10, 12). Internal pull-ups 20–50 kΩ. Built-in LED on pin 13. - UART: TTL serial on pins 0 (RX) / 1 (TX) via the Serial1 class — the Serial class on Leonardo means USB (CDC), unlike the Uno (store FAQ). - I2C/TWI: pins 2 (SDA), 3 (SCL), Wire library. - SPI: only on the 6-pin ICSP header — not routed to the digital header; shields using SPI without the ICSP connector will not work (store FAQ). - External interrupts: pins 3 (int0), 2 (int1), 0 (int2), 1 (int3), 7 (int4). - No DAC. Pin↔port mapping: ATmega32u4 pin mapping.
- En esta placa : 9 tutoriales · 10 código
La placa Arduino Leonardo representa un punto de inflexión significativo en la evolución de las tarjetas de desarrollo microcontroladas, destacándose por ser la primera en la línea principal de Arduino en integrar la comunicación USB directamente en el microcontrolador principal. A diferencia de generaciones anteriores como la Uno o la Due, que requerían un segundo chip dedicado para gestionar la conexión con el ordenador, la Leonardo utiliza el microcontrolador ATmega32u4 de Atmel (ahora propiedad de Microchip), un dispositivo de arquitectura RISC de 8 bits que opera a una frecuencia de reloj de 16 MHz. Esta integración no solo simplifica el diseño de la placa, reduciendo la complejidad del hardware, sino que desbloquea capacidades avanzadas que transforman la forma en que interactuamos con los ordenadores. El término "SoM" o sistema en módulo no aplica aquí de la misma manera que en sistemas más complejos, pero es crucial entender que el ATmega32u4 actúa como un cerebro único que maneja tanto la lógica de la aplicación como la interfaz de comunicación con el mundo exterior. La placa mantiene el factor de forma clásico de la serie Uno, con dimensiones de 68,6 × 53,3 mm y un peso de 20 gramos, lo que facilita la reutilización de escudos o accesorios diseñados para ese estándar, aunque con una advertencia importante sobre la compatibilidad de pines que detallaremos más adelante.
La memoria de la tarjeta está compuesta por 32 KB de memoria Flash, de los cuales 4 KB están reservados para el gestor de arranque (bootloader), dejando aproximadamente 28,672 bytes disponibles para el código del usuario. Además, cuenta con 2,5 KB de memoria SRAM para el almacenamiento temporal de variables durante la ejecución y 1 KB de memoria EEPROM para guardar datos que deben persistir incluso cuando se apaga la alimentación. En cuanto a las entradas y salidas, la Leonardo ofrece 20 pines digitales operando a 5 voltios, de los cuales 7 pueden generar señales PWM (modulación por ancho de pulso) para controlar la potencia de motores o el brillo de LED, y 12 entradas analógicas de 10 bits. Es fundamental notar que las entradas analógicas A6 a A11 comparten pines físicos con algunas entradas digitales, lo que requiere una atención especial en la programación para evitar conflictos. La alimentación puede realizarse a través del puerto micro-USB o mediante un conector de barril para una fuente externa de entre 7 y 12 voltios recomendados, con límites absolutos entre 6 y 20 voltios. La placa incluye protección contra sobrecorriente en el puerto USB mediante un fusible polimérico reiniciable, protegiendo tanto a la placa como al ordenador conectado.
La característica definitoria y más poderosa de la Arduino Leonardo es su capacidad de actuar como un dispositivo USB nativo, específicamente como un teclado, ratón o joystick, además de su puerto serie virtual. Esto se debe a que el microcontrolador ATmega32u4 posee un transceptor USB integrado que permite a la placa "engañar" al ordenador para que la reconozca como un periférico estándar. Esta funcionalidad se logra mediante las librerías Keyboard y Mouse incluidas en el entorno de desarrollo Arduino. Por ejemplo, se puede programar la placa para que, al presionar un botón, envíe una secuencia de teclas al sistema operativo, o para que un potenciómetro controle el movimiento del cursor del ratón. Esta capacidad abre un abanico de posibilidades para la creación de controles personalizados, automatización de tareas mediante secuencias de teclas o la creación de interfaces de juego. Sin embargo, esta misma potencia conlleva riesgos; si el código de teclado o ratón se ejecuta en un bucle infinito sin pausas adecuadas, la placa puede inundar el ordenador con pulsaciones o movimientos, haciendo que el sistema sea difícil de controlar o incluso imposible de reprogramar sin una intervención física. Por ello, se recomienda encarecidamente incluir un tiempo de espera inicial en el código para permitir al usuario cambiar el foco de la ventana o detener el programa si es necesario.
La gestión de las comunicaciones presenta una diferencia crucial respecto a la Arduino Uno que los usuarios que migran deben conocer. En la Leonardo, la clase Serial en el código hace referencia a la comunicación USB (puerto serie virtual), mientras que la comunicación serie TTL física a través de los pines 0 (RX) y 1 (TX) se gestiona mediante la clase Serial1. Esta distinción es vital para evitar errores comunes al portar código de otras placas. Además, la comunicación I2C está disponible en los pines 2 y 3, pero la comunicación SPI, utilizada por muchos escudos para tarjetas SD o pantallas, solo está disponible a través del conector ICSP de 6 pines, no en la cabecera digital estándar. Esto significa que los escudos que dependen de SPI en los pines digitales convencionales no funcionarán sin modificaciones o adaptadores. El proceso de carga del programa también es diferente; no se requiere presionar un botón de reinicio para subir código. En su lugar, el entorno de desarrollo envía una señal específica (abrir y cerrar el puerto a 1200 baudios) que reinicia la placa y la pone en modo de carga, un proceso gestionado por el bootloader Caterina. Si un programa bloquea la placa al arrancar, se puede recuperar presionando el botón de reinicio físico, lo que mantiene el bootloader activo durante unos 8 segundos, permitiendo subir un nuevo código.
A pesar de sus ventajas, la Leonardo presenta algunas peculiaridades mecánicas y de especificaciones que deben tenerse en cuenta. Existe una discrepancia en la documentación oficial respecto a la corriente máxima por pin digital, con algunas fuentes indicando 40 mA y otras 10 mA, por lo que se recomienda consultar la hoja de datos del ATmega32u4 para diseños críticos. Además, la separación entre los pines digitales 7 y 8 es de 160 mil, en lugar del estándar de 100 mil, lo que puede impedir que algunos escudos se alineen correctamente. La placa también carece de un convertidor digital-analógico (DAC) integrado, a diferencia de algunas otras variantes. En el ámbito del software, la placa es compatible con el núcleo oficial de Arduino para AVR y puede ser programada utilizando el IDE de Arduino, la herramienta de línea de comandos arduino-cli o editores web. Para usuarios avanzados, es posible utilizar cadenas de herramientas AVR estándar (como avr-gcc) y programar la placa a través del puerto ICSP, ignorando el bootloader. La comunidad ha creado numerosos proyectos que aprovechan su capacidad HID, desde emuladores de mandos de videojuegos hasta herramientas de automatización de pruebas de seguridad. En resumen, la Arduino Leonardo es una herramienta versátil y potente para proyectos que requieren interacción directa con el sistema operativo del ordenador, siempre que el usuario esté consciente de sus particularidades de comunicación y las precauciones necesarias para evitar bloqueos del sistema.



Esquema de pines (pinout)

| Attr | Especificaciones | verificado |
|---|---|---|
mcu | Atmel/Microchip ATmega32U4 (AVR, 8-bit RISC, modified Harvard architecture — see AVR family article); datasheet via Microchip product page. | ✔ |
cpu | single-core AVR RISC, 16 MHz crystal oscillator (build.f_cpu=16000000L). | ? sin verificar |
gpu | none. | ? sin verificar |
memory | Flash 32 KB (4 KB used by the bootloader → 28,672 bytes available for sketches, upload.maximum_size=28672 in boards.txt); SRAM 2.5 KB (2560 B); EEPROM 1 KB. | ✔ |
usb | native full-speed USB 2.0 device on the ATmega32U4 (no USB-serial chip). Enumerates as CDC serial by default (VID 0x2341, PID 0x8036; bootloader PID 0x0036; legacy VID 0x2A03 also present) and can present HID keyboard/mouse/joystick (boards.txt, store FAQ). Connector: micro-USB. | ✔ |
gpio | 20 digital I/O pins @ 5 V, of which 7 PWM (pins 3, 5, 6, 9, 10, 11, 13 — 8-bit PWM via analogWrite) and 12 analog inputs A0–A11 (10-bit ADC; A6–A11 are multiplexed on digital pins 4, 6, 8, 9, 10, 12). Internal pull-ups 20–50 kΩ. Built-in LED on pin 13. - UART: TTL serial on pins 0 (RX) / 1 (TX) via the Serial1 class — the Serial class on Leonardo means USB (CDC), unlike the Uno (store FAQ). - I2C/TWI: pins 2 (SDA), 3 (SCL), Wire library. - SPI: only on the 6-pin ICSP header — not routed to the digital header; shields using SPI without the ICSP connector will not work (store FAQ). - External interrupts: pins 3 (int0), 2 (int1), 0 (int2), 1 (int3), 7 (int4). - No DAC. Pin↔port mapping: ATmega32u4 pin mapping. | ✔ |
power | USB or external via barrel jack (2.1 mm, center-positive) or Vin/GND header; auto source selection. Input voltage recommended 7–12 V, limits 6–20 V; 5 V rail from onboard regulator; 3V3 pin max 50 mA; USB protected by a resettable polyfuse (~500 mA trip). A barrel-plug 9 V battery solution is explicitly advertised (docs features). | ✔ |
per_pin_dc_current | store says 40 mA per I/O pin; the docs-content tech-specs.yml says 10 mA. | ? sin verificar |
mechanicals | 68.6 × 53.3 mm, 20 g; USB connector and power jack extend beyond the PCB; note the non-standard 160 mil spacing between digital pins 7 and 8 (store FAQ). | ✔ |
- Fabricante: Arduino S.r.l. (Italia) — página de producto en la tienda, página de documentación
- Producto: Arduino Leonardo, una placa de microcontrolador basada en el ATmega32u4, en el formato clásico del tamaño de la Uno. Fue la primera Arduino generalista en usar un microcontrolador con comunicación USB integrada, lo que eliminaba el procesador USB-serial secundario usado por las generaciones Uno/Due (página de documentación, resumen en la tienda).
- Año: El registro oficial del producto actual (releaseDate: 2021-01-04) en el repositorio docs-content de Arduino se refiere a la página de producto/SKU actual (product.md). La Leonardo se lanzó originalmente en enero de 2014.
- Precio de lanzamiento:
- Estado: Activo / en venta. Listada en la Arduino Store y en la documentación al 2026-10-13; el ATmega32U4 en sí está "In Production" en Microchip (página de producto de Microchip).
- SKUs / variantes: - A000052 y A000057 (con/sin headers) — SKUs listados en product.md; la tienda vende con headers y sin headers. - Parientes cercanos sobre el mismo ATmega32u4: Arduino Micro; la Leonardo ETH aparece en el archivo de placas retiradas de Arduino (content/retired/01.boards/arduino-leonardo-eth-2-with-poe en el repo docs-content). - Existen muchos clones (p. ej. las placas tipo "Pro Micro" usan el mismo chip pero una definición de placa diferente — selecciona la entrada de placa correcta en el IDE).
+ Puntos fuertes
- USB HID nativo — la funcionalidad definitoria: la Leonardo "can act as a mouse or keyboard" en el host conectado, además de un puerto serie CDC virtual, porque el ATmega32u4 tiene un transceptor USB integrado (tienda, documentación). La programación se hace con las librerías Keyboard y Mouse (repo Keyboard, repo Mouse, referencia de funciones USB).
- Dispositivo compuesto: teclado/ratón/joystick + serie CDC simultáneamente; una clase HID abierta (HID.cpp en libraries/HID de ArduinoCore-avr) permite informes HID personalizados (p. ej. la Arduino Joystick library).
- Huella de shield compatible con la Uno (con la salvedad de SPI en ICSP) más un jack de barril cómodo para una batería de 9 V (documentación).
- Reset por software / entrada al bootloader abriendo el puerto COM a 1200 baudios — sin necesidad de pulsar botones para las subidas (FAQ de la tienda).
- Protección contra sobrecorriente USB mediante un polyfuse reseteable que protege el puerto del host (FAQ de la tienda).
- Hardware abierto: diseño de referencia EAGLE completo y esquemas publicados (enlaces OSH de la tienda, descargas de docs-content).
− Puntos débiles
- HID desbocado: si el código Mouse/Keyboard se ejecuta continuamente, mueve el cursor del host / inunda de pulsaciones de teclado y puede hacer la placa difícil de reprogramar; Arduino advierte explícitamente de filtrar las llamadas HID detrás de un interruptor y probar primero con Serial.print (tech-specs.md).
- Danza de reset/subida: el sketch sigue ejecutándose al reconectar (el bootloader se omite en el arranque); un sketch que se cuelga o falla inmediatamente puede adueñarse del bus USB en cada arranque. Recuperación: pulsar el botón de reset (bootloader activo ~8 s) y subir en esa ventana, o mantener la placa en reset mientras se conecta (FAQ de la tienda).
- Serial ≠ pines 0/1: Serial es USB CDC; la UART TTL de los pines 0/1 es Serial1 — un bug clásico de migración desde la Uno (FAQ de la tienda).
- SPI solo en ICSP: los shields SPI sin el conector ICSP de 6 pines no funcionan (FAQ de la tienda).
- Numeración de pines analógicos: A6–A11 se mapean sobre los pines digitales 4/6/8/9/10/12 con números de pin Arduino confusos/duplicados en el core (ArduinoCore-avr issue #187).
- Bugs del core USB CDC: bloqueo de Serial.available con lecturas pequeñas bufferizadas (issue #516); serialEvent no se dispara para USB CDC (issue #206); la actividad del Serial Monitor perturba la salida LCD en paralelo (issue #434).
- Pin HWB (hardware boot) no expuesto como pin digital en la variante estándar (issue #273).
- Trampa mecánica: hueco de 160 mil (no 100 mil) entre los pines digitales 7 y 8 — las filas de pines de algunos shields no encajan (FAQ de la tienda).
- Discrepancia oficial de especificaciones: 10 mA vs 40 mA por pin de E/S entre tech-specs.yml y la página de la tienda (ver la nota de SoC & specs).
- Retour d'expérience expert expert — expert-arduino
- Petit retour d'experience sur la Leonardo. Le point fort reste le contrôleur ATmega32u4 avec son USB natif, ce qui permet de creer des peripheriques HID (clavier, souris) sans puce supplementaire. C'est très pratique pour les macros ou l'automatisation. En revanche, attention au piege classique lor… — expert-arduino
- Merci pour ce rappel sur le SPI, je me suis fait avoir avec un shield capteur qui ne repondait pas. J'ai cru a un defaut matériel. Par contre, j'ai une question sur le courant par broche. La fiche technique du store indique 40mA par pin I/O, mais je vois souvent la mention 10mA ailleurs (ou dans le… — maker-debutant-05
- Pour le courant, la discrepance existe bel et bien entre les differentes sources officielles. Tant que tu restes en dessous de 20mA par broche, tu es generalement dans le sur avec l'ATmega32u4, mais evite de tirer sur les limites sans vérifier la datasheet du Microchip. Sur un autre point, si tu ut… — bricoleur-avere
Opiniones y proyectos de la comunidad
- Arduino leonardo and USB Host Shield 2.0 forum.arduino.cc
- Help with video game controller using rotary encoder on the Arduino Leonardo forum.arduino.cc
- Arduino Leonardo / TastaturInput MausInput erkennen und ausführen forum.arduino.cc
- How wiring: Load Cell ---> AD620 ---> ADS1115 ---> Arduino Leonardo forum.arduino.cc
- Official docs page
- Store page (full tech specs & FAQs)
- Getting-started guide (retired archive)
- ATmega32u4 datasheet / product
- Schematics (PDF)
- Schematics (PDF)
- docs-content downloads
- Pinout diagram (PDF)
- Arduino ↔ ATmega32u4 pin mapping
- Core & bootloader
- HID libraries
- HID libraries
- HID libraries
- Project Hub Leonardo list
- Community
- Family background
- Family background
- HID desbocado: si el código Mouse/Keyboard se ejecuta continuamente, mueve el cursor del host / inunda de pulsaciones de teclado y puede hacer la placa difícil de reprogramar; Arduino advierte explícitamente de filtrar las llamadas HID detrás de un interruptor y probar primero con Serial.print (tech-specs.md).
- Danza de reset/subida: el sketch sigue ejecutándose al reconectar (el bootloader se omite en el arranque); un sketch que se cuelga o falla inmediatamente puede adueñarse del bus USB en cada arranque. Recuperación: pulsar el botón de reset (bootloader activo ~8 s) y subir en esa ventana, o mantener la placa en reset mientras se conecta (FAQ de la tienda).
- Serial ≠ pines 0/1: Serial es USB CDC; la UART TTL de los pines 0/1 es Serial1 — un bug clásico de migración desde la Uno (FAQ de la tienda).
- SPI solo en ICSP: los shields SPI sin el conector ICSP de 6 pines no funcionan (FAQ de la tienda).
- Numeración de pines analógicos: A6–A11 se mapean sobre los pines digitales 4/6/8/9/10/12 con números de pin Arduino confusos/duplicados en el core (ArduinoCore-avr issue #187).
- Bugs del core USB CDC: bloqueo de Serial.available con lecturas pequeñas bufferizadas (issue #516); serialEvent no se dispara para USB CDC (issue #206); la actividad del Serial Monitor perturba la salida LCD en paralelo (issue #434).
- Pin HWB (hardware boot) no expuesto como pin digital en la variante estándar (issue #273).
- Trampa mecánica: hueco de 160 mil (no 100 mil) entre los pines digitales 7 y 8 — las filas de pines de algunos shields no encajan (FAQ de la tienda).
- Discrepancia oficial de especificaciones: 10 mA vs 40 mA por pin de E/S entre tech-specs.yml y la página de la tienda (ver la nota de SoC & specs).
- Faire clignoter la LED intégrée (broche 13) debutant Schéma : IMG-leonardo-debutant-1-leonardo-clignotement-led.svg — Carte Arduino Leonardo alimentée par micro-USB, LED intégrée de la broche 13 (PB7) mise en évidence
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1) debutant Schéma : IMG-leonardo-debutant-2-leonardo-bouton-console-serie.svg — Bouton câblé entre la broche 2 et GND sur une Leonardo, moniteur série affiché à l'écran
- Lire un capteur analogique : potentiomètre et ADC 10 bits debutant Schéma : IMG-leonardo-debutant-3-leonardo-capteur-analogique.svg — Potentiomètre alimenté en 5V/GND, curseur relié à A0 sur une Leonardo, courbe de valeur à l'écran
- Clavier USB : taper du texte avec la bibliothèque Keyboard intermediaire Schéma : IMG-leonardo-intermediaire-4-leonardo-hid-clavier.svg — Leonardo branchée en USB émettant des frappes vers un ordinateur, bouton sur la broche 2, fenêtre de garde de 3 s
- Souris USB : déplacer le curseur avec la bibliothèque Mouse intermediaire Schéma : IMG-leonardo-intermediaire-5-leonardo-hid-souris.svg — Leonardo émulant une souris USB : potentiomètre sur A0 pour l'axe X, bouton de clic sur la broche 4, curseur bougeant à l'écran
- Asservir un servo moteur avec un potentiomètre (PWM) intermediaire Schéma : IMG-leonardo-intermediaire-6-leonardo-pwm-servo.svg — Leonardo commandant un servo moteur sur la broche PWM 9, potentiomètre sur A0, alimentation externe 5V avec masse commune
- Programmer aux registres : interruption Timer/Counter1 avance Schéma : IMG-leonardo-avance-7-leonardo-registres-avr-interruption-timer.svg — Broche PB7 (D13) de l'ATmega32u4 basculée par l'ISR du Timer1 en mode CTC, registre TCCR1B/OCR1A et signal créneau à 1 Hz
- Périphérique composite CDC + HID et bootloader Caterina avance Schéma : IMG-leonardo-avance-8-leonardo-cdc-hid-simultanes.svg — Câble USB de la Leonardo se dédoublant en deux flux étiquetés « Clavier HID » et « Port série CDC » entrant dans un ordinateur, avec la timeline du bootloader Caterina (fenêtre 8 s)
- Mode power-down et réveil par watchdog (AVR C nu) avance Schéma : IMG-leonardo-avance-9-leonardo-low-power-powerdown-watchdog.svg — Leonardo sur batterie en sommeil profond, puce ATmega32u4 endormie et chiot-chien de garde (watchdog) la réveillant toutes les ~2,1 s
Biblioteca de código — ejemplos escritos para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduinopotentiometre-souris.inoArduinotelecommande-presentation.inoArduinosaisie-serie-vers-clavier.inoArduinobuzzer-melodie.inoArduino
Ejemplos y repositorios encontrados en línea
- arduino/ArduinoCore-avr github.com
- NicoHood/HID github.com
- MHeironimus/ArduinoJoystickLibrary github.com
- feilipu/Arduino_FreeRTOS_Library github.com
- AlanChatham/UnoJoy github.com