Group Assignment: Compare the toolchains and development workflows for available embedded architectures.
Since it was our first time reading a microcontroller datasheet, our instructor gave us a quick explanation using the pin diagram (pinout) of the Raspberry Pi Pico 2 W as an example. From that, we learned how to interpret what each label means, how to identify the function of each pin, and how to read this type of schematic.
A development board is a complete electronic platform designed to help prototype, test, and program embedded systems easily. It includes a microcontroller as its main brain, along with voltage regulators, USB interface, communication ports, buttons, LEDs, and sometimes wireless modules.
A microcontroller is a small integrated circuit that acts as the brain of an embedded system. It contains a processor (CPU), memory, input/output pins, and communication interfaces all inside a single chip.
01
The Raspberry Pi Pico 2 W is a development board with integrated WiFi, which allows it to be used in IoT projects. The board operates at 3.3V and supports SPI, I2C, and UART communication protocols.
| Architecture | ARM Cortex-M33 (dual-core) |
| Frequency | Up to 150 MHz |
| SRAM | 520 kB |
| Flash | External (~4 MB) |
| ADC | 12-bit |
| PWM | 16 channels |
| PIO blocks | 2 programmable I/O |
| Total Pins | 40 (up to 30 GPIO) |
| WiFi | 802.11 b/g/n (2.4 GHz) |
| Bluetooth | BLE 5.2 |
| Operating Voltage | 3.3V |
| I2C / SPI / UART | 2 / 2 / 2 buses |
In C/C++ (official SDK) or MicroPython from VS Code or Thonny.
ARM GCC compiler translates the code into RP2350 instructions.
A .uf2 file ready to upload is produced.
Press BOOTSEL + USB — Pico appears as a storage drive, drag the .uf2.
The board restarts automatically and runs the program.
View results via VS Code or Thonny serial monitor.
| Tool | Purpose |
|---|---|
| Pico SDK | Official library to access RP2350 pins and functions |
| ARM GCC | Compiles code for the Cortex-M33 processor |
| CMake + Make | Organizes and builds the project |
| UF2 Format | Firmware file loaded via USB without extra hardware |
| VS Code + Pico Ext. | Recommended IDE; configures and compiles with one click |
| Thonny | MicroPython IDE; simpler and more direct |
| OpenOCD / SWD | Advanced debugging using a second Pico as debugger |
02
The Arduino UNO R4 WiFi is an upgraded version of the classic UNO platform designed for embedded programming, rapid prototyping, and IoT applications. It integrates a powerful 32-bit microcontroller and a WiFi/Bluetooth module.
| Architecture | 32-bit ARM Cortex-M4 |
| Flash | 256 kB |
| SRAM | 32 kB |
| Data Flash | 8 kB (EEPROM) |
| ADC | 14-bit |
| DAC | Up to 12-bit |
| CAN bus | Yes |
| DMAC | 4 channels |
| WiFi | 2.4 GHz 802.11 b/g/n |
| Bluetooth | BLE 5 |
| SRAM | 512 kB |
| ROM | 384 kB |
| Voltage | 3.3V (logic translator) |
In C/C++ from the Arduino IDE (called a "sketch").
Arduino IDE uses ARM GCC to translate code for the Cortex-M4.
A .hex or .bin file ready to upload is produced.
Loaded directly via USB with one click from the IDE.
The board restarts automatically and runs the program.
Results visible in the Arduino IDE Serial Monitor.
| Tool | Purpose |
|---|---|
| Arduino IDE | Main environment: editor, compiler, and uploader in one |
| ARM GCC | Compiles C/C++ code for the Cortex-M4 processor |
| Arduino Core (Renesas) | Official libraries and drivers for all pins and modules |
| USB Bootloader | Loads programs directly via USB without extra hardware |
| WiFiS3 Library | Official library to control the ESP32-S3 module from code |
| VS Code + PlatformIO | Advanced alternative with more control over compilation |
03
The Arduino UNO R3 is one of the most popular development boards for learning embedded systems. It is widely used in education and beginner projects to control LEDs, sensors, motors, and other electronic components.
| Architecture | 8-bit AVR |
| Frequency | 16 MHz |
| Flash | 32 kB |
| SRAM | 2 kB |
| EEPROM | 1 kB |
| ADC | 10-bit |
| Digital Pins | 14 |
| Analog Inputs | 6 |
| PWM | 6 channels |
In C/C++ from the Arduino IDE (called a "sketch").
AVR-GCC translates code to instructions for the 8-bit ATmega328P.
A .hex file ready to upload is produced.
AVRDUDE communicates with the bootloader via USB and writes the .hex to Flash.
The board restarts automatically and runs the program.
Results visible in the Arduino IDE Serial Monitor.
| Tool | Purpose |
|---|---|
| Arduino IDE | Main environment: editor, compiler, and uploader in one |
| AVR-GCC | Compiles C/C++ code for the 8-bit AVR architecture |
| AVRDUDE | Transfers the .hex to the chip via USB and bootloader |
| Bootloader (pre-flashed) | Allows loading programs via USB without external hardware |
| Arduino Core Libraries | Libraries for pins, ADC, timers, and UART |
| Serial Monitor | Displays program results in real time |
04
The Seeeduino XIAO nRF52840 is a compact and powerful development board designed for IoT and Bluetooth applications. Despite its small size, it integrates wireless communication and advanced low-power features — ideal for wearables and battery-powered devices.
| Architecture | 32-bit ARM Cortex-M4F |
| Flash | 1 MB |
| RAM | 256 kB |
| ADC | 12-bit |
| Bluetooth | BLE 5.0 |
| USB | Full-speed USB 2.0 |
| Digital Pins | Up to 14 |
In C/C++ (Arduino IDE with Seeed nRF52 package), MicroPython, or CircuitPython.
ARM GCC translates code for the Cortex-M4F at 64 MHz.
A .hex or .uf2 file ready to upload is produced.
Loaded via USB-C bootloader. Double-click reset activates storage mode if unresponsive.
The board restarts automatically and runs the program.
Results visible in the Arduino IDE Serial Monitor.
| Tool | Purpose |
|---|---|
| Arduino IDE | Main environment: editor, compiler, and uploader |
| ARM GCC | Compiles C/C++ code for the Cortex-M4F at 64 MHz |
| Seeed nRF52 Boards | Official library for BLE and low-power functions |
| Seeed nRF52 mbed | Library for TinyML and advanced sensors |
| UF2 Bootloader | Loads program via USB-C without external programmer |
| SWD + JLink | Advanced on-chip debugging during execution |
05
The ESP32 development board is designed for IoT and wireless applications. It integrates a powerful dual-core processor and built-in WiFi and Bluetooth, widely used for smart devices, home automation, and wireless control systems.
| Architecture | Xtensa LX6 (dual-core) |
| Frequency | Up to 240 MHz |
| SRAM | 520 kB |
| Flash | External (~4 MB) |
| ADC | 12-bit |
| DAC | 2× 8-bit |
| GPIO | Up to 34 pins |
| SPI / I2C / UART | 4 / 2 / 3 buses |
| WiFi + BT | Integrated (classic + BLE) |
In C/C++ (Arduino IDE with ESP32 Core or ESP-IDF) or MicroPython.
Xtensa GCC translates code for the dual-core Xtensa LX6 at 240 MHz.
A .bin file ready to load into external Flash is produced.
esptool.py transfers the binary via USB. May require pressing BOOT during upload.
The board restarts automatically and runs the program.
Results visible in the Arduino IDE or ESP-IDF Serial Monitor.
| Tool | Purpose |
|---|---|
| Arduino IDE + ESP32 Core | Accessible environment with WiFi, BT, and dual-core support |
| Xtensa GCC | Compiles C/C++ for the dual-core Xtensa LX6 at 240 MHz |
| esptool.py | Official Espressif tool to load firmware via USB |
| ESP-IDF | Professional framework with full chip access and FreeRTOS |
| FreeRTOS | Integrated real-time OS; tasks can run on both cores simultaneously |
| VS Code + PlatformIO | Advanced alternative compatible with Arduino and ESP-IDF |
06
The Arduino Nano offers similar functionality to the UNO but in a much smaller form factor. Although both boards share the same microcontroller, the Nano has 8 analog inputs (vs 6 on the UNO) and fits directly on a breadboard.
| Architecture | 8-bit AVR |
| Frequency | 16 MHz |
| Flash | 32 kB |
| SRAM | 2 kB |
| EEPROM | 1 kB |
| ADC | 10-bit |
| Digital Pins | 14 |
| Analog Inputs | 8 (vs 6 on UNO) |
| USB | Mini / Micro USB |
Uses the same workflow as the UNO R3 since it shares the ATmega328P microcontroller. Code is written in the Arduino IDE, AVR-GCC compiles it to a .hex file, and AVRDUDE loads it via USB through the bootloader.
07
Side-by-side summary of all boards reviewed during the group assignment.
| Feature | UNO R3 | Nano | UNO R4 WiFi | ESP32 | Pico 2 W | XIAO nRF52840 |
|---|---|---|---|---|---|---|
| Main MCU | ATmega328P | ATmega328P | R7FA4M1 (ARM M4) | Xtensa LX6 | RP2350 | nRF52840 |
| Architecture | 8-bit AVR | 8-bit AVR | 32-bit Cortex-M4 | 32-bit Xtensa (dual) | 32-bit Cortex-M33 (dual) | 32-bit Cortex-M4F |
| Clock Speed | 16 MHz | 16 MHz | 48 MHz | 240 MHz | 150 MHz | 64 MHz |
| Flash | 32 kB | 32 kB | 256 kB | ~4 MB | ~4 MB | 1 MB |
| SRAM | 2 kB | 2 kB | 32 kB | 520 kB | 520 kB | 256 kB |
| ADC | 10-bit | 10-bit | 14-bit | 12-bit | 12-bit | 12-bit |
| DAC | No | No | 12-bit | 2× 8-bit | No | No |
| WiFi | No | No | Yes | Yes | Yes | No |
| Bluetooth | No | No | BLE 5 | Classic + BLE | BLE 5.2 | BLE 5.0 |
| Voltage | 5V | 5V | 5V | 3.3V | 3.3V | 3.3V |
| Low Power | No | No | No | Deep sleep | Dormant mode | Ultra low power |
| Price (approx.) | ~$5 | ~$4 | ~$27 | ~$8 | ~$7 | ~$10 |
| Best For | Education basics | Compact projects | IoT intermediate | IoT advanced | IoT WiFi connected | Wearables / BLE |
Having reviewed all available microcontrollers, the choice was to work with the ESP32 DEVKIT V4 with the ESP-WROOM-32 processor, programmed using Thonny. Its dual-core architecture, integrated WiFi and Bluetooth, high speed (240 MHz), and generous memory make it the most versatile board for the type of projects planned.
What each team member learned from this week's assignment.
During the group assignment, I learned that reading a microcontroller datasheet is essential to understand the real capabilities and limitations of each board. I understood how factors such as architecture, clock frequency, memory, voltage logic, and communication protocols influence board selection for different embedded applications. This process also helped me distinguish between a development board and the microcontroller it contains, and improved my ability to compare platforms using technical information in a more objective and engineering-based way.
This week I learned how to read and interpret a pinout diagram for the first time, which helped me understand what each pin does on a board before writing any code. Comparing the different toolchains made it clear how much the development experience varies between boards — from the simplicity of the Arduino IDE to the more flexible ESP-IDF. I also realized that board selection is not just about specs, but about which workflow best fits the project's needs.
© Fablab Ulima 2025 | Design: Tooplate