Para subir un sketch a un M-Duino o Ardbox desde la shell de Linux, usa Arduino CLI para compilar y cargar el .ino con un solo comando, arduino-cli compile --upload -p /dev/ttyACM0 --fqbn industrialshields:avr:mduino:cpu=mduino42plus MySketch, o usa avrdude para escribir un archivo .hex ya compilado. En los dos casos tu usuario necesita acceso al puerto serie (grupo dialout) y el nombre de puerto correcto, normalmente /dev/ttyACM0.
Esta guía muestra los pasos en Linux: encontrar el puerto, instalar Arduino CLI con las placas de Industrial Shields, compilar y cargar, y los comandos de avrdude con las herramientas que el Arduino IDE 2 ya instaló.
Qué necesitas
- Un Arduino PLC de las familias M-Duino o Ardbox y su cable USB.
- Un PC con Linux (Ubuntu, Debian o similar) o una Raspberry Pi con Raspberry Pi OS.
- Tu usuario en el grupo
dialout, para que pueda abrir el puerto serie sinsudo:
sudo usermod -aG dialout $USER
Cierra y vuelve a abrir la sesión para que se aplique el grupo nuevo.
¿Cómo se encuentra el puerto serie del PLC?
Conecta el PLC por USB y lista los dispositivos serie:
ls /dev/ttyACM* /dev/ttyUSB*
El M-Duino y el Ardbox suelen aparecer como /dev/ttyACM0. Si no estás seguro, ejecuta el comando con el PLC desconectado y otra vez conectado: el dispositivo nuevo es el PLC. Con Arduino CLI instalado, arduino-cli board list muestra los puertos con la placa que detecta.
Método 1: compilar y cargar con Arduino CLI
Cuando Arduino CLI y las placas de Industrial Shields ya están instalados (la guía de abajo explica cómo), compila y carga con el FQBN de tu modelo y tu puerto serie:
arduino-cli compile --fqbn industrialshields:avr:mduino:cpu=mduino42plus MySketch
arduino-cli upload -p /dev/ttyACM0 --fqbn industrialshields:avr:mduino:cpu=mduino42plus MySketch
Guía completa de Arduino CLI. La guía completa, con el sketch de ejemplo, el FQBN de cada modelo y el monitor serie, está en Arduino CLI con un Arduino PLC: compilar y cargar en Windows y Linux.
Método 2: cargar un archivo .hex con avrdude
avrdude solo escribe archivos compilados. Consigue el .hex con Sketch > Exportar binario compilado en el Arduino IDE 2 (va a una carpeta build dentro de la carpeta del sketch) o con arduino-cli compile -e.
No hace falta instalar avrdude desde la distribución: el core de Industrial Shields instala la versión que usan sus placas, con su archivo de configuración (la carpeta de versión depende del core):
AVRDUDE=~/.arduino15/packages/industrialshields/tools/avrdude/6.3.0-arduino17
ls $AVRDUDE/bin/avrdude $AVRDUDE/etc/avrdude.conf
M-Duino (ATmega2560, protocolo wiring, 115200 baudios):
$AVRDUDE/bin/avrdude -C $AVRDUDE/etc/avrdude.conf -p atmega2560 -c wiring -P /dev/ttyACM0 -b 115200 -D -U flash:w:MySketch.ino.hex:i
Ardbox (ATmega32u4, protocolo avr109, 57600 baudios): su bootloader arranca cuando se abre el puerto a 1200 baudios, y después el puerto puede cambiar durante unos segundos. Ábrelo a 1200, vuelve a comprobar el puerto y ejecuta avrdude enseguida:
stty -F /dev/ttyACM0 1200
ls /dev/ttyACM*
$AVRDUDE/bin/avrdude -C $AVRDUDE/etc/avrdude.conf -p atmega32u4 -c avr109 -P /dev/ttyACM0 -b 57600 -D -U flash:w:MySketch.ino.hex:i
| Opción | Significado |
|---|---|
-C | Archivo de configuración de avrdude. Usa el que está junto al avrdude que ejecutas |
-p | Microcontrolador: atmega2560 en M-Duino, atmega32u4 en Ardbox |
-c | Protocolo del bootloader: wiring en M-Duino, avr109 en Ardbox |
-P | Puerto serie del PLC |
-b | Velocidad: 115200 en M-Duino, 57600 en Ardbox |
-D | No hace el borrado completo del chip antes de escribir, igual que el Arduino IDE |
-U flash:w:file.hex:i | Escribe el archivo en la memoria flash, en formato Intel HEX |
La versión anterior de esta guía instalaba avrdude desde un PPA de terceros. Ya no hace falta, y el avrdude de tu distribución puede ser una versión distinta de la que usan las placas de Industrial Shields, así que los comandos de arriba usan el avrdude del core.
Cómo hemos comprobado esta guía. Los FQBN, microcontroladores, protocolos, velocidades y la carpeta de avrdude salen de los archivos boards.txt y platform.txt del core AVR 1.2.1 de Industrial Shields, descargado desde la URL oficial de placas el 27 de octubre de 2026, y de un sketch de prueba compilado para estos FQBN con ese core en Ubuntu 24.04. Los comandos de carga no se ejecutaron en un PLC para esta actualización.
Preguntas frecuentes sobre cargar desde la shell de Linux
¿Por qué la carga falla con "Permission denied" en /dev/ttyACM0?
Tu usuario todavía no está en el grupo dialout, o no cerraste la sesión después de añadirlo. Compruébalo con groups.
¿Por qué avrdude se detiene con "not in sync" o "butterfly_recv"?
El puerto, el protocolo o la velocidad no coinciden con el PLC, u otro programa tiene el puerto abierto. En el Ardbox, ejecuta avrdude justo después del reset a 1200 baudios.
¿Puedo programar un M-Duino desde una Raspberry Pi?
Sí. Arduino CLI tiene versiones para ARM, y el índice de Industrial Shields incluye el compilador y avrdude para Linux ARM de 32 y 64 bits.
¿Puedo cargar por Ethernet?
Sí, con un archivo binario y un reset remoto. Consulta cargar un sketch en un PLC por Ethernet, paso 2: archivo binario.
Más sobre la programación de Arduino PLC
- Subir un sketch a un PLC Arduino desde la línea de comandos de Windows
- Cómo instalar las placas de Industrial Shields en el Arduino IDE
- Cómo configurar el puerto serie en el Arduino IDE industrial
- Cómo elegir un controlador industrial
Consulta los modelos en la familia Arduino PLC, por ejemplo el M-Duino 42 o el Ardbox Analog.