Home›Software
How to program Industrial Shields PLCs and panel PCs
Each family is programmed with the tools of the board inside it.
- Arduino PLC and ESP32 PLCArduino PLCs (M-Duino and Ardbox) and ESP32 PLCs use C/C++ in Arduino IDE 2 or Arduino CLI, once you add the Industrial Shields boards package.
- Raspberry PLC and TouchBerry PiRaspberry PLCs and TouchBerry Pi panel PCs run Raspberry Pi OS: you program them in Python, C/C++ or Node-RED with the Industrial Shields libraries.
- CODESYSThe Raspberry PLC also runs CODESYS for IEC 61131-3.
Software for each family
Pick the row of your controller and jump to its first steps.
| Family | Inside | Program it with | Also works with |
|---|---|---|---|
| FamilyArduino PLC (M-Duino, Ardbox) | InsideArduino Mega (ATmega2560) or Arduino Leonardo (ATmega32u4) | Program it withArduino IDE 2 or Arduino CLI, C/C++ | Also works withOpenPLC, PlatformIO |
| FamilyESP32 PLC | InsideESP32 from Espressif | Program it withArduino IDE 2 or Arduino CLI, C/C++ | Also works withOpenPLC, PlatformIO, ESPHome |
| FamilyRaspberry PLC | InsideRaspberry Pi with Raspberry Pi OS | Program it withPython, C/C++ or Node-RED | Also works withCODESYS (Ladder, ST, FBD, SFC), Node.js |
| FamilyTouchBerry Pi panel PC | InsideRaspberry Pi with a touch screen | Program it withNode-RED dashboard, Python or C/C++ | Also works withKiosk mode, Node.js |
Not sure which environment fits your project? Read Node-RED vs CODESYS vs Arduino IDE, or the guide on how to choose an industrial controller.
The Industrial Shields boards package
Arduino PLCs and ESP32 PLCs share one boards manager URL. The package gives each model its pin names (Q0_0, I0_0, A0_5, R1) and the libraries for its ports, so you do not need to know which Arduino pin is behind each terminal.
https://apps.industrialshields.com/main/arduino/boards/package_industrialshields_index.json
| Package in the Boards Manager | Arduino CLI platform | Controllers | Version on 27/10/2026 |
|---|---|---|---|
Packageindustrialshields-avr | Arduino CLIindustrialshields:avr | ControllersM-Duino, Ardbox and Spartan | Version1.2.1 |
Packageindustrialshields-esp32 | Arduino CLIindustrialshields:esp32 | ControllersESP32 PLC family, including the ESP32 PLC 14 | Version2.7.1 |
The versions change: the Boards Manager always offers the latest one, and arduino-cli core upgrade updates it from the terminal.
Arduino PLC: M-Duino and Ardbox
C/C++ in Arduino IDE 2, or Arduino CLI when the build has to repeat without clicks: scripts, build servers or a PC reached over SSH.
- Install Arduino IDE 2 for Windows, macOS or Linux.
- Open File > Preferences and paste the boards URL above in Additional boards manager URLs.
- In Tools > Board > Boards Manager, search
industrialshieldsand installindustrialshields-avr. - Select the family in Tools > Board (M-Duino family, ARDBOX family...) and your exact model in Tools > Model.
- Connect the PLC over USB, select its port and upload. In the code, write
Q0_0for output Q0.0.
Command line
Compile and upload without opening the IDE.
Libraries and ports
The package includes the libraries for the PLC ports.
Other environments
IEC 61131-3 with OpenPLC, or Visual Studio Code.
Example: M-Duino controlling a VFD over Modbus RTU. Models and I/O: Arduino PLC family.
ESP32 PLC
The same Arduino IDE 2 and the same boards URL, with the ESP32 package. Wi-Fi, Bluetooth LE, Ethernet and the optional 4G or LoRa board are used from the same C/C++ program.
- Add the boards URL in Arduino IDE 2, as for the Arduino PLC.
- In Tools > Board > Boards Manager, install
industrialshields-esp32. - Select your family in Tools > Board and your model in Tools > Model.
- Upload the first program over USB. After that you can also update it over the network (OTA).
Connectivity
Networks and fieldbuses from the Arduino code.
Upload and update
From the terminal or over the network.
Other environments
IEC 61131-3 or home and building automation.
Example: solenoid valve control with a state machine. Models and I/O: ESP32 PLC family.
Raspberry PLC
A Linux computer with industrial I/O. You work on it like on any Raspberry Pi (SSH, apt, Python, Node.js) and reach the inputs and outputs through the Industrial Shields librpiplc library.
- To reinstall the system, write the Raspberry PLC image to the micro SD card with Raspberry Pi Imager, or install the Industrial Shields packages on your own Raspberry Pi OS. The operating system guide explains both methods.
- Install the I/O libraries with
sudo apt install librpiplc python3-librpiplcfrom the Industrial Shields APT repository. If apt does not find them, the repository explains how to add it. - Choose the environment: Python or C/C++ with the libraries, Node-RED with the @industrial-shields/node-red-librpiplc nodes (Manage palette), or CODESYS.
- For Ladder, ST or SFC, install the CODESYS Control for Raspberry Pi SL runtime from CODESYS. It needs one license per device.
CODESYS
IEC 61131-3 on the Raspberry PLC.
Python, Node-RED and Linux
Communications from the operating system.
Libraries
Official Industrial Shields repositories.
OpenPLC: Industrial Shields does not provide an OpenPLC I/O mapping for the Raspberry PLC (see the OpenPLC guide). Models and I/O: Raspberry PLC family.
TouchBerry Pi panel PC
A Raspberry Pi with a touch screen, programmed like the Raspberry PLC. Its usual job is the HMI: a Node-RED dashboard that opens in full screen when the panel starts.
- The panel usually comes with its image installed. To reinstall it, use the TouchBerry Pi images and Raspberry Pi Imager.
- Build the screens in Node-RED with a dashboard, or write the application in Python or C/C++.
- Read and write the panel inputs and outputs with librpiplc, its Node-RED nodes or bash commands.
- Open the dashboard in kiosk mode at startup, with an on-screen keyboard if operators type values.
Inputs and outputs
Bash, Node-RED and libraries.
HMI screens
From the flow to the operator.
Node-RED SCADA
Free course and multi-station example.
Sizes and versions: TouchBerry Pi family.
Practice: simulators, examples and courses
Try the logic in the browser before you wire anything, then follow a free course.
Simulators
Industrial processes that run in the browser.
Solution Library
Tested examples with code for each family.
Free courses
eLearning from Industrial Shields.
Frequently asked questions
What is the Industrial Shields boards manager URL?
It is https://apps.industrialshields.com/main/arduino/boards/package_industrialshields_index.json. Paste it in Arduino IDE 2 under File > Preferences > Additional boards manager URLs, or add it to Arduino CLI with arduino-cli config add board_manager.additional_urls. The same URL gives the packages for the Arduino PLC and for the ESP32 PLC.
Do I need Arduino IDE 2, or does Arduino IDE 1.8 still work?
The Industrial Shields packages also install in Arduino IDE 1.8, but use Arduino IDE 2 for new projects: it is the version that Arduino maintains. Arduino IDE 2 and Arduino CLI share the installed cores, so a package installed in one is available in the other.
Which Industrial Shields controllers can I program with OpenPLC?
M-Duino, Ardbox and ESP32 PLC, with the Industrial Shields mod for the OpenPLC Editor. For the Raspberry PLC there is no OpenPLC I/O mapping from Industrial Shields: for IEC 61131-3 languages on it, use CODESYS.
Can I program a Raspberry PLC in Ladder?
Yes, with CODESYS. The CODESYS development system is free; the CODESYS Control for Raspberry Pi SL runtime needs one license per device, and without it the runtime stops after two hours.
Is the software to program Industrial Shields products free?
Arduino IDE 2, Arduino CLI, the Industrial Shields boards packages and libraries, Node-RED, Python and OpenPLC are free. The only paid item on this page is the CODESYS runtime license for each Raspberry PLC that runs CODESYS.
Do you have a question about your project?
Tell us which family you use and what you need help with, and an Industrial Shields engineer will answer.