...

Group Assignment 4

Group 1

Group 1

Evelyn Cuadrado

I had a meeting with Armando Calcina, where I shared the activities we needed to complete. I updated him on my progress and explained the tasks he needed to complete to catch up with the academy, since I'm a little more advanced. Later, I'll meet with Jhonatan Cortes to update him and involve him in the work with us.


For this group project, I have reviewed two microcontrollers, the RP2040 and the ESP32-C, conducting a detailed comparison to identify their differences, potential, and architectures.


XIAO-RP-2040

Here you can view and download the data sheet.

The Xiao RP2040 board is a compact development board based on the RP2040 microcontroller from Raspberry Pi. It is designed to offer high performance in a small form factor, ideal for low-power electronics projects.

This board features a dual-core ARM Cortex-M0+ microcontroller running at 133 MHz, and provides 264 KB of SRAM for fast and efficient data storage. The external flash memory of 16 MB allows for additional storage for larger projects.

With 26 GPIO pins (digital input/output), it supports various functions such as PWM, SPI, I2C, and UART, making it highly versatile for controlling and communicating with other devices. It also includes a 12-bit analog-to-digital converter (ADC) for reading analog signals.

The Xiao RP2040 is especially designed to simplify programming and is compatible with development environments like Arduino and MicroPython, allowing users to easily and quickly create applications. The board is perfect for applications in robotics, automation, Internet of Things (IoT), and other projects that require an efficient and small microcontroller.

(This data is taken from ChatGPT.)

Toolchain:

  1. IDE:Visual Studio Code (VSCode), Eclipse, or CLion.
  1. Compiler: arm-none-eabi-gcc (part of GCC).
  1. Pico SDK:Development library to interact with RP2040 hardware.
  1. Debugging:OpenOCD or Segger J-Link (JTAG/SWD).
  1. Firmware Loading:.uf2 files loaded via USB (BOOTSEL mode).

Workflow:

  1. Set up the environment:Install VSCode, CMake, GCC, and the Pico SDK.
  1. Develop the code:Write C/C++ code using the Pico SDK.
  1. Compile:Use CMake and Make to generate the .uf2 firmware file.
  1. Load:Connect the RP2040 in BOOTSEL mode and load the .uf2 file.
  1. Debug (optional):Use OpenOCD or Segger J-Link for debugging.
  1. Test and adjust:Verify the firmware functionality and make adjustments.

This is the typical workflow for developing with the RP2040, making it easier to program and load firmware onto its integrated architecture.


Technical specifications

Item Value
CPU Dual-core ARM Cortex M0+ processor up to 133MHz
Flash Memory 2MB
SRAM 264KB
Digital I/O Pins 11
Analog I/O Pins 4
PWM Pins 11
I2C interface 1
SPI interface 1
UART interface 1
Power supply and dowloading interface Type-C
Power 3.3V/5V DC
Dimensions 21x17.8x3.5mm

Summary of Features:

  1. USB-C Interface: For connection and programming.
  1. Reset Pin:To restart the board.
  1. RGB LED:An LED that can display multiple colors (red, green, blue).
  1. User LED:A user-controllable LED (3 colors: red, green, blue).
  1. Power LED: A red LED indicating the board is powered.
  1. BOOT Pin (BOOTSEL):For entering boot mode and loading firmware.

                        from machine import Pin, Timer
                        ledAzul = Pin(25, Pin.OUT)
                        ledRojo = Pin(17, Pin.OUT)
                        ledVerde = Pin(16, Pin.OUT)
        
                        Counter = 0
                        Fun_Num = 0
        
                        def fun(tim):
                            global Counter
                            Counter = Counter + 1
                            print(Counter)
                            ledVerde.value(1)
                            ledRojo.value(1)
                            ledAzul.value(Counter%2)
        
        
                        tim = Timer(-1)
                        tim.init(period=1000, mode=Timer.PERIODIC, callback=fun)
                    

Next, I will provide a code to control the LEDs on the Xiao RP2040.


Now, I’m running a test for blinking LED lights using multiple lights connected to specific pins. In this case, I have three LEDs: one blue, one red, and one green, and the code is designed to make the blue LED blink periodically.



XIAO ESP 32C3

Here you can view and download the data sheet.

Seeed Studio XIAO ESP32C3 is an IoT mini development board based on the Espressif ESP32-C3 WiFi/Bluetooth dual-mode chip. ESP32-C3 is a 32-bit RISC-V CPU, which includes an FPU (Floating Point Unit) for 32-bit single-precision arithmetic with powerful computing power. It has excellent radio frequency performance, supporting IEEE 802.11 b/g/n WiFi, and Bluetooth 5 (BLE) protocols. This board comes included with an external antenna to increase the signal strength for your wireless applications. It also has a small and exquisite form-factor combined with a single-sided surface-mountable design. It is equipped with rich interfaces and has 11 digital I/O that can be used as PWM pins and 3 analog I/O that can be used as ADC pins. It supports four serial interfaces such as UART, I2C and SPI.


Toolchain:

  1. IDE/Development Environment: ESP-IDF (official), Arduino IDE, or PlatformIO.
  1. CompilerGCC (for traditional ESP32), riscv32-espidf-gnu-toolchain (for ESP32-C3).
  1. Build Tools:CMake and Make (ESP-IDF), PlatformIO (automatic).
  1. Debugging and Programming: OpenOCD or Segger J-Link for advanced debugging, esptool.py or Espressif Flash Tool for uploading firmware.

Workflow

  1. Set up the development environment (ESP-IDF, Arduino IDE, or PlatformIO).
  1. Write the code using the appropriate libraries.
    (CMake, make, or PlatformIO).
  1. Build the project
  1. Upload the firmware to the ESP32-C3 using the USB port and BOOTSEL mode.
  1. Debugthe code if necessary (OpenOCD, J-Link).
  1. Test and adjustthe project based on the results.

This workflow enables efficient development and uploading of projects to the ESP32-C3, whether for IoT applications or embedded systems.


Parts of the XIAO ESP32-C3

  1. USB Type-C Interface: Connection for programming and charging.
  1. Charge LED:Indicator for charging and power status.
  1. ESP32-C3 Microcontroller:RISC-V based microcontroller with Wi-Fi and Bluetooth 5.0 LE.
  1. Reset Button:Button to manually reset the board.
  1. Wi-Fi / Bluetooth Antenna:Internal antenna for wireless connectivity.
  1. JTAG Pads:Pads for advanced debugging via JTAG.
  1. Battery Connector: Connector for external battery (Li-Po or Li-ion).
  1. Boot Button:Button to put the board into bootloader mode and upload firmware.
  1. Thermal Pad:Pad for dissipating heat generated by the microcontroller.

This summary highlights the essential components of the XIAO ESP32-C3, making it ideal for IoT and embedded projects.


from machine import Pin
from time import sleep

# Intentar con el pin GPIO 0 (puede ser otro dependiendo de la placa)
led = Pin(10, Pin.OUT)

while True:
    led.value(1)  # Encender el LED (1 = HIGH)
    sleep(1)      # Esperar 1 segundo
    led.value(0)  # Apagar el LED (0 = LOW)
    sleep(1)      # Esperar 1 segundo
                        
                    

With the help of ChatGPT, I have created a code to activate an LED using GPIO pin 10 on the XIAO ESP32-C3 microcontroller.

Now, with the programming, I'm doing a simple test to see how to turn an LED on and off.



Toolchain & Workflow Comparison Table

Aspect RP2040 (XIAO RP2040) ESP32-C3
Architecture ARM Cortex-M0+ (Dual Core, 133 MHz) RISC-V 32-bit (160 MHz)
Connectivity USB, UART, SPI, I2C Wi-Fi, Bluetooth 5.0, UART, SPI, I2C
Development Environment Arduino IDE, Thonny (MicroPython) Arduino IDE, ESP-IDF, MicroPython
Toolchain Arduino Core for RP2040, MicroPython Espressif IDF, Arduino Core, MicroPython
Programming Method USB drag-and-drop (BOOTSEL), Thonny IDE USB/UART flashing tools
Typical Use Case Low-power, compact IoT projects Wireless IoT, more advanced networking
Beginner-Friendliness High – very user-friendly Moderate – requires extra setup

Armando Calcina Sotelo


During this week of group work, I met with my partner Evelyn at the Fab Lab iForniture, located in the city of Lima, and also coordinated with her to research and make the respective comparisons of the microcontrollers that we had selected for our study. Each one was dedicated to the detailed analysis of a specific microcontroller; in my case, I chose the Seeed Studio XIAO ESP32C3, an IoT mini development board based on the Espressif ESP32-C3 and the XIAO RP2040.

1.-Comparison: Tool Chain and Workflow


Aspect XIAO ESP32-C3 XIAO RP2040
Architecture RISC-V 32-bit (ESP32-C3) ARM Cortex-M0+ (RP2040)
Common IDEs Arduino IDE, PlatformIO, ESP-IDF Arduino IDE, PlatformIO, Thonny, CircuitPython
Toolchain / Compiler riscv32-esp-elf-gcc arm-none-eabi-gcc
Supported Frameworks Arduino, ESP-IDF, MicroPython Arduino, Pico SDK, MicroPython, CircuitPython
USB Connection USB-C, requires BOOT button for flashing USB-C, mounts as USB drive (UF2)
Flashing Method esptool.py, Arduino, PlatformIO Drag-and-drop .uf2 file or upload via IDE
Recovery Mode Hold BOOT + Reset to enter flash mode Press BOOT while connecting USB
Typical Workflow (Arduino) Write → Compile → Press BOOT → Upload Write → Compile → Upload or drag UF2
Driver Required CH340 or CP210x (depending on USB chip) Not always needed
Complexity Level Medium Low
Development Speed High (PlatformIO or Arduino) Very high (UF2 or MicroPython)
Official Documentation Espressif Docs Raspberry Pi Docs

1.-XIAO ESP32C3 BOARD

Seeed Studio XIAO ESP32C3 is an IoT mini development board based on the Espressif ESP32-C3 WiFi/Bluetooth dual-mode chip, featuring a 32-bit RISC-V CPU that delivers powerful computing performance with its efficient architecture. It has excellent radio frequency performance, supporting IEEE 802.11 b/g/n WiFi, and Bluetooth 5 (BLE) protocols. This board comes included with an external antenna to increase the signal strength for your wireless applications. It also has a small and exquisite form-factor combined with a single-sided surface-mountable design. It is equipped with rich interfaces and has 11 digital I/O that can be used as PWM pins and 3 analog I/O that can be used as ADC pins.

XIAO_ESP32_C3

Specification Detail
Microcontroller ESP32-C3, RISC-V 32-bit single-core
Clock Speed 160 MHz
Flash Memory 4 MB
RAM 400 KB SRAM (plus 8 KB RTC RAM)
Connectivity Wi-Fi 2.4 GHz (802.11 b/g/n), Bluetooth 5.0 LE
GPIO 11 general-purpose I/O pins (I2C, UART, SPI, ADC, PWM, etc.)
ADC 6 ADC channels, 12-bit
Operating Voltage 3.3 V (powered by 5V via USB-C)
Power Consumption Low power, supports deep sleep mode
Power Supply 5 V via USB-C
Buttons 1 BOOT button (for bootloader mode)
Programming Supports Arduino IDE, PlatformIO, ESP-IDF, MicroPython
Compatibility Compatible with Grove / Qwiic development boards (I2C)
USB Interface USB-C (supports programming and power supply)

2.-XIAO RP2040

The Seeed Studio XIAO RP2040 is as small as the Seeed Studio XIAO SAMD21 but it's more powerful. On one hand, it carries the powerful Dual-core RP2040 processor that can flexible clock running up to 133 MHz which is a low-power microcontrollers. On the Seeed Studio XIAO RP2040 there is also 264KB of SRAM, and 2MB of on-board Flash memory which can provide more program to save and run. On the other hand, this little board has good performance in processing but needs less power. All in all, it is designed in a tiny size as small as a thumb(21x17.8mm) and can be used for wearable devices and small projects.

XIAO-RP2040

Specification Detail
Microcontroller RP2040, ARM Cortex-M0+ dual-core
Clock Speed 133 MHz
Flash Memory 2 MB
RAM 264 KB SRAM
Connectivity None (No Wi-Fi/Bluetooth)
GPIO 26 general-purpose I/O pins (I2C, UART, SPI, ADC, PWM, etc.)
ADC 3 ADC channels, 12-bit
Operating Voltage 3.3 V (powered by 5V via USB-C)
Power Consumption Low power, supports deep sleep mode
Power Supply 5 V via USB-C
Buttons 1 BOOT button (for bootloader mode)
Programming Supports Arduino IDE, PlatformIO, MicroPython, CircuitPython
Compatibility Compatible with many Raspberry Pi accessories and HATs
USB Interface USB-C (supports programming and power supply)

3. Development Workflow and Example Programs

Programming the XIAO ESP32-C3 using Arduino IDE

  1. Install Arduino IDE
  2. Add the ESP32 Board Package
  3. Select the XIAO ESP32-C3 Board
  4. Install USB Drivers (if needed)
  5. Connect the Board via USB-C
  6. Select the Port
  7. Write or Load Your Sketch
  8. Upload the Code
  9. Monitor Serial Output (Optional)
  10. Test Your Program
Example Program: LED blinking

                        #define LED_PIN 13  // Define el pin del LED

                        void setup() {
                           pinMode(LED_PIN, OUTPUT); // Configura el pin como salida
                        }

                        void loop() {
                           digitalWrite(LED_PIN, HIGH); // Enciende el LED
                           delay(500);                  // Espera 500 ms
                           digitalWrite(LED_PIN, LOW);  // Apaga el LED
                           delay(500);                  // Espera 500 ms
                        }
                    

Jhonatan Cortes

A microcontroller (MCU) is like the "brain" of many electronic devices. Imagine it as a tiny computer built into one single chip. It's responsible for making decisions and controlling other components in real time, just like your brain tells your muscles what to do. These chips are commonly found in things like home appliances, robots, thermostats, medical equipment, or smart gadgets connected to the Internet (IoT).

  • CPU (Central Processing Unit): The part that does the thinking — it processes instructions and makes decisions.
  • Flash Memory (ROM): Stores the program or instructions that never change, even when turned off.
  • RAM: Temporary memory — used when the MCU is actively running something.
  • I/O Pins: Inputs and outputs for sensors, LEDs, buttons, motors, etc.
  • Timers & Interrupts: Useful tools for handling events at specific times (like alarms or timers).
  • Communication: Modules like Wi-Fi, Bluetooth or USB allow it to connect and talk to other devices or systems.

Microcontrollers are programmed to follow a list of instructions. Once you load a program into it, it can perform tasks automatically, like turning on a light when it gets dark or sending data to your phone when it detects motion.

ESP32 Family

The ESP32 family was created by Espressif Systems, a company that makes affordable and powerful chips with built-in Wi-Fi and Bluetooth. These chips are very popular in the DIY and professional world because they are easy to use, powerful, and well documented. The ESP32 is an improvement of the older ESP8266 chip and comes in several versions for different needs.

  • ESP32: The original version, dual-core, good for most projects.
  • ESP32-S2: Designed with better security and USB support.
  • ESP32-C3: A simpler, low-power chip based on RISC-V (open source architecture).
  • ESP32-S3: Ideal for AI and vision recognition, includes special hardware for it.
  • ESP32-H2: Made for Zigbee, Thread and BLE Mesh communication.

XIAO ESP32-C3 Board

XIAO ESP32-C3

🔗 Board Info: Getting Started with XIAO ESP32-C3
📄 Datasheet: View full ESP32-C3 Datasheet (PDF)

The XIAO ESP32-C3 is a compact board that uses the ESP32-C3 microcontroller. Think of it like a mini brain with built-in Wi-Fi and Bluetooth, designed for low-power and small-space projects like wearables or battery-powered sensors.

  • Core: 1 RISC-V core at 160 MHz (like the chip's main engine).
  • RAM: 400 KB for quick-access memory while running.
  • ROM: 384 KB that stores internal tools and functions.
  • External Flash: Typically 4 MB to store programs and files.
  • Connectivity: Wi-Fi (b/g/n) and Bluetooth 5 Low Energy — lets it talk wirelessly.
  • Security: Comes with features like Secure Boot and encryption to keep your code safe.
  • USB: Has a built-in USB 2.0 port for easy programming — no extra chip needed!

ESP32-S3 DevKitC-1 Board

ESP32-S3 DevKitC-1

🔗 Board Info: Pinout & Specs – VCC-GND Studio
📄 Datasheet: View full ESP32-S3 Datasheet (PDF)

This board uses the ESP32-S3 chip, a much more powerful version designed for advanced applications like image recognition or AI on the edge — all while still offering Wi-Fi and Bluetooth.

  • Core: Dual-core Xtensa LX7 at 240 MHz — faster and capable of doing more things at once.
  • RAM: 512 KB inside, with support for up to 8 MB extra (called PSRAM).
  • ROM: 384 KB — internal utilities stored here.
  • Flash: Typically 8–16 MB to save your code and data.
  • Connectivity: Wi-Fi (b/g/n) and Bluetooth 5 with support for Mesh and Long Range — great for smart homes or industrial settings.
  • AI/ML Capabilities: Has SIMD instructions, which help with things like recognizing objects or voices.
  • USB OTG: Can act as a USB device or a host (like reading from a USB stick or connecting to a keyboard).
  • Extras: Supports touch sensors, LCD displays, microphones (I2S), and even cameras (DVP).

Comparison Table: ESP32-C3 vs ESP32-S3

Characteristic ESP32-C3 (XIAO) ESP32-S3 (DevKitC-1)
Architecture RISC-V Open Source Xtensa LX7 High Performance
Number of Cores 1 2
Clock Speed 160 MHz 240 MHz
AI/ML Capabilities No Yes (SIMD, hardware-based AI)
USB USB 2.0 Native USB OTG (Host and Device)
Power Consumption Low (ideal for batteries) Moderate-High (depending on peripherals)
Advanced Security Secure Boot, Flash Encryption Equal or better, with accelerated encryption support
Usage Focus Compact devices and low power consumption Complex applications, AI, rich interfaces

1. Wireless Connectivity



Wireless Connectivity ESP32

Visual overview of Wi-Fi and BLE features in ESP32-C3 and ESP32-S3


Both microcontrollers have built-in Wi-Fi and Bluetooth, perfect for wireless projects in IoT. However, there are some differences worth noting:

  • XIAO ESP32-C3:
    • Supports Wi-Fi 802.11 b/g/n at 2.4 GHz.
    • Bluetooth 5 Low Energy (BLE) for low power usage.
    • No support for Bluetooth Classic, which limits compatibility with older devices.
  • ESP32-S3 DevKitC-1:
    • Also supports Wi-Fi 802.11 b/g/n with some performance improvements.
    • Bluetooth 5 includes BLE Mesh and Long Range (Coded PHY).
    • No Bluetooth Classic, but great for modern BLE-based networks and stable connections.

2. Communication Interfaces



ESP32 Communication Interfaces

Comparison of interface capabilities: UART, SPI, I2C, ADC, PWM and USB OTG


These define how the board connects with external sensors, screens, and devices:

  • XIAO ESP32-C3:
    • Up to 2 UART, 2 I2C, 2 SPI interfaces, and 6 ADC inputs (some pins are shared).
    • 1 PWM signal per GPIO for controlling brightness or motors.
    • Native USB 2.0 — plug and program directly without needing USB-to-Serial chips.
  • ESP32-S3 DevKitC-1:
    • More ports: 3 UART, 2 I2C, 4 SPI, 14 ADC inputs, and several PWM outputs.
    • USB OTG: can act as a USB device or host (connect USB peripherals directly).
    • Includes advanced ports like I2S for audio and DVP for camera/video input.

3. Specialized Processing Capabilities


>

Some microcontrollers are not just for turning things on or off — they can also do things like detect faces in a picture or understand voice commands. That's what we call specialized processing. Here's how our two boards compare:

  • ESP32-C3:
    • Does not include any special hardware to speed up artificial intelligence (AI) or math-heavy operations.
    • Only one core, so tasks are done one at a time. It's fine for simple jobs but slower for complex calculations like working with images or sound signals.
  • ESP32-S3:
    • Has SIMD (Single Instruction, Multiple Data), which is a tool that lets it work on many pieces of data at the same time — like processing parts of an image all at once instead of pixel by pixel.
    • Perfect for things like:
      • Face or object detection in photos.
      • Voice recognition systems.
      • Lightweight machine learning models (TinyML).
    • With two cores and optional external RAM (up to 8 MB), it's much faster and can handle more data in real time.

4. Hardware Security



ESP32 Security Features

Security tools comparison: Flash Encryption, Secure Boot, RSA, HMAC


Security is important when your device stores private data or connects to the internet. Both boards come with built-in protection features:

  • Both boards include:
    • Secure Boot: Ensures that only approved software can run on the board.
    • Flash Encryption: Hides your program in memory so no one else can read or copy it.
  • ESP32-S3 adds:
    • Faster, built-in encryption support (AES, RSA, SHA).
    • HMAC: Quick identity verification tool — like a digital fingerprint for the board.
    • Digital Signature Peripheral: Creates a unique key for every device — great for secure systems.

5. Dimensions and Hardware Design



ESP32 Board Size Comparison

Real size comparison between XIAO ESP32-C3 and ESP32-S3 DevKitC-1


  • XIAO ESP32-C3:
    • Very small size: 21.0 mm x 17.5 mm. Ideal for wearables or when you have limited space.
    • Side-mounted pins make it easy to solder onto a custom PCB or plug into a breadboard.
    • Fewer pins means fewer available connections for external parts — best for simpler projects.
  • ESP32-S3 DevKitC-1:
    • Bigger board: around 60 mm x 25 mm. Still compact, but allows more connections and components.
    • Has 2 rows of headers (38 pins total) for connecting lots of devices.
    • Physical buttons for RESET and BOOT make testing and firmware updates easier.

6. Pinout Distribution



XIAO ESP32-C3 Pinout

XIAO ESP32-C3 Pinout – compact layout with multifunction GPIOs

ESP32-S3 DevKitC-1 Pinout

ESP32-S3 DevKitC-1 Pinout – detailed and expandable interface map


  • XIAO ESP32-C3:
    • Has 11 GPIOs (general-purpose input/output), each can be used for different things: digital output, analog input (ADC), UART, I2C or SPI.
    • Power pins include 5V, 3.3V and GND. USB-C port is used for both power and programming.
    • While there aren’t dedicated PWM pins, several GPIOs can be configured to generate PWM signals.
    • Some versions also include a built-in RGB LED and a user button on the board.
  • ESP32-S3 DevKitC-1:
    • Comes with up to 45 GPIOs, clearly labeled and grouped by functionality.
      • ADC1 and ADC2: for reading analog signals like sensors.
      • TOUCH: capacitive touch sensors — great for touch interfaces.
      • SPI, I2C, UART: multiple interfaces for communication.
      • PWM: nearly all GPIOs can be configured for PWM.
      • Special purpose pins: DVP (camera), I2S (audio), JTAG (debugging), USB D+/D-, etc.
    • This organized pin layout makes it perfect for modular electronics projects and development.

Comparison Table: USB and Voltage Support



USB Type-C connectors on ESP32-C3 and ESP32-S3 boards

Component XIAO ESP32-C3 ESP32-S3 DevKitC-1
USB Port USB Type C (modern, reversible) USB Micro B (more common, less robust)
Supported Voltages 3.3V and 5V 3.3V and 5V
Physical Buttons None (some have one programmable button) Reset + Boot
Header Type 2x7 side pins (only 11 GPIOs) 2x19 pins with extensive labeling

7. Supported Programming Languages

These microcontrollers are flexible and support multiple programming environments, depending on your preference or skill level:

  • C/C++: Ideal for full control and performance. Used in Arduino IDE, PlatformIO, or ESP-IDF (official framework).
  • MicroPython: Python for microcontrollers! Great for quick prototyping, students, and simple logic with readable code.
  • Rust & JavaScript (Espruino): Less common, but useful for advanced users. These offer unique features like memory safety (Rust) or web-like scripting (JavaScript).


Group 2

Andrés Felipe Guarnizo

Michael Sebastián Torres


For this assignment, Michael Sebastián Torres and Andrés Felipe Guarnizo worked together to explore and compare different embedded architectures using multiple development boards. Each board was configured and tested using its respective toolchain and programming environment.

1. Boards Tested

2. Toolchains and Development Environments

The following table summarizes the environments and tools used for each board:

Board Architecture Toolchain IDE / Environment Programming Language
Arduino UNO AVR Arduino Core for AVR Arduino IDE C/C++
XIAO ESP32-C3 ESP32 ESP32 Arduino Core Arduino IDE C++

3. Board Characteristics

Arduino UNO (AVR Architecture)

Arduino UNO

The Arduino UNO is perhaps one of the most iconic development boards in electronics and education. It uses the ATmega328P microcontroller and is known for its simplicity, robustness, and broad compatibility with sensors, actuators, and libraries. As a board, it's perfect for understanding basic embedded logic, digital and analog pin control, and serial communication. Its limitations in memory and processing power are balanced by its reliability and accessibility, which is why we selected it to contrast with more modern boards.

Specification Arduino UNO
Microcontroller ATmega328P
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Digital I/O Pins 14 (6 PWM)
Analog Input Pins 6
Clock Speed 16 MHz
Flash Memory 32 KB
SRAM 2 KB
EEPROM 1 KB

XIAO ESP32-C3

XIAO ESP32-C3

The XIAO ESP32-C3 is a much more compact and powerful board that brings together small size and wireless communication capabilities. It is based on the ESP32-C3 chip, which uses a RISC-V core and supports Wi-Fi and Bluetooth Low Energy (BLE). From the moment it is configured in the Arduino IDE, it offers a much more complex potential: access to web communication, higher memory, and modern protocols. We used it to explore how a board with more recent architecture integrates into the same workflow but opens up more advanced embedded systems possibilities.

Specification XIAO ESP32-C3
Microcontroller ESP32-C3 (RISC-V)
Operating Voltage 3.3V
Wi-Fi 802.11 b/g/n (2.4 GHz)
Bluetooth Bluetooth 5.0 (LE)
Digital I/O Pins 11 (4 PWM)
Analog Input Pins 4
Clock Speed 160 MHz
Flash Memory 4 MB
SRAM 400 KB

4. Development Workflow and Example Programs

Arduino UNO Workflow

  1. Install the latest version of the Arduino IDE.
  2. Connect the Arduino UNO board via USB.
  3. Select the board from Tools > Board > Arduino Uno.
  4. Select the correct port from Tools > Port.
  5. Write or load a program in the Arduino IDE.
  6. Click the "Upload" button to compile and send the code to the board.
Example Program: Button and LDR Controlled LEDs

                    const int pinLDR = A0;
                    const int pinButton = 2;
                    const int pinRedLED = 9;
                    const int pinGreenLED = 10;
                        
                    // Light threshold (adjust depending on environment)
                    const int lightThreshold = 300;
                        
                    void setup() {
                        pinMode(pinButton, INPUT);
                        pinMode(pinRedLED, OUTPUT);
                        pinMode(pinGreenLED, OUTPUT);
                        Serial.begin(9600);
                    }
                        
                    void loop() {
                        int lightValue = analogRead(pinLDR);
                        int buttonState = digitalRead(pinButton);
                        
                        Serial.print("Light: ");
                        Serial.print(lightValue);
                        Serial.print(" | Button: ");
                        Serial.println(buttonState);
                        
                        if (buttonState == HIGH) {
                        digitalWrite(pinRedLED, HIGH);
                        digitalWrite(pinGreenLED, LOW);
                        } else if (lightValue < lightThreshold) {
                        digitalWrite(pinRedLED, LOW);
                        digitalWrite(pinGreenLED, HIGH);
                        } else {
                        digitalWrite(pinRedLED, LOW);
                        digitalWrite(pinGreenLED, LOW);
                        }
                        
                    delay(100);
                    }
                    }

Here you can see the system in action.

XIAO ESP32-C3 Workflow

  1. Install the latest version of the Arduino IDE.
  2. Add the ESP32 board manager URL to Preferences:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. Install "esp32" via Tools > Board > Board Manager.
  4. Select the board XIAO_ESP32C3 from Tools > Board.
  5. Connect the board via USB-C and select the correct port.
  6. Write or load the program and click "Upload" to compile and flash the board.
Example Program: Button and LDR Controlled LEDs
const int buttonPin = 2;
                    const int redLedPin = 9;
                    const int greenLedPin = 10;
                    const int ldrPin = A0;

                    void setup() {
                    pinMode(buttonPin, INPUT);
                    pinMode(redLedPin, OUTPUT);
                    pinMode(greenLedPin, OUTPUT);
                    Serial.begin(9600);
                    }

                    void loop() {
                    int buttonState = digitalRead(buttonPin);
                    int ldrValue = analogRead(ldrPin);

                    if (buttonState == HIGH) {
                        digitalWrite(redLedPin, HIGH);
                        digitalWrite(greenLedPin, LOW);
                    } else if (ldrValue < 500) {
                        digitalWrite(redLedPin, LOW);
                        digitalWrite(greenLedPin, HIGH);
                    } else {
                        digitalWrite(redLedPin, LOW);
                        digitalWrite(greenLedPin, LOW);
                    }
                    delay(100);
                    }

Here you can see the XIAO ESP32 C3 in action.


Comparative Table of Microcontrollers

Feature Arduino Uno ESP32-C3
Architecture AVR (8-bit) RISC-V (32-bit)
Clock Speed 16 MHz 160 MHz
Flash Memory 32 KB 400 KB + external
SRAM 2 KB 400 KB
GPIO Pins 14 22
Connectivity None Wi-Fi, BLE
USB Support USB 2.0 USB 2.0

Group 3


Sandra Hipatia Nuñez Torres

Manuel Ignacio Ayala Chauvin



Group Assignment

1. Comprehensive Analysis of Microcontrollers: Arduino Uno vs ESP32-CAM

Team: Manuel Ayala-Chauvin, Sandra Nuñez-Torres
Institution: Fablab - Universidad Tecnológica Indoamérica
Year: 2025

Introduction

This comparative project explores the key specifications, connectivity features, and performance differences between Arduino Uno and ESP32-CAM. It includes pinout analysis, practical implementation, and performance tests to help beginners and makers understand how to choose the right board for a project.

Microcontroller Pinouts

Arduino Uno

Arduino Uno Pinout

ESP32-CAM

ESP32-CAM Pinout

Comparative Table

Feature Arduino Uno ESP32-CAM
Microcontroller ATmega328P Tensilica Xtensa LX6
Clock Speed 16 MHz 160–240 MHz
WiFi Connectivity No Yes
Camera Support No Yes (2MP OV2640)
Price $12.00 $17.00

2. Practical Experiment

This experiment involved LED blinking with Arduino Uno and image streaming with ESP32-CAM to illustrate typical use cases.

Practical Experiment Setup with LED and servo Multimeter reading 0.47V Multimeter reading 1.44V

Step-by-Step Guide to Replicate the Experiment

Step 1: Materials Required

  • Arduino Uno + USB cable
  • ESP32-CAM module + FTDI programmer
  • LEDs, 220Ω resistors, jumper wires, breadboard
  • Power supply (5V for Uno, 3.3V for ESP32-CAM)
  • MicroSD card (for testing ESP32 image capture)

Step 2: Circuit Setup

  • Arduino Uno: Connect an LED in series with a 220Ω resistor to pin 13.
  • ESP32-CAM: Connect the FTDI programmer to TX/RX and GND/3.3V. Plug camera module if not already onboard.

Step 3: Code Upload

Arduino Uno Code:
void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

  • Wokwi simulation

  • ESP32-CAM:

    Upload the CameraWebServer example from the Arduino IDE (ESP32 board package must be installed). Set WiFi credentials in the sketch before uploading. Use GPIO 0 grounded during flashing.

    Step 4: Test and Observe

    • Observe LED blinking with 1s interval on Arduino Uno.
    • ESP32-CAM opens a web server and streams video. Access the IP shown in Serial Monitor.

  • Wokwi simulation

  • Observations

    • Arduino Uno: Reliable for simple, real-time digital I/O. No wireless capabilities.
    • ESP32-CAM: Offers wireless connectivity and camera interface but requires more care in flashing and powering.

    Conclusion

    While Arduino Uno is excellent for simple embedded projects, ESP32-CAM is more powerful and ideal for IoT and computer vision tasks. This experiment highlights their differences in use case, connectivity, and real-world performance.

    Fab Lab Lima - Creative Commons Attribution Non Commercial

    Source code hosted at Fab Lab Lima 2025

    |