Home Blog Blog Details

Which is better for beginners: ESP32 or STM32? A robot example

April 22 2025
Ampheo

Inquiry

Global electronic component supplier AMPHEO PTY LTD: Rich inventory for one-stop shopping. Inquire easily, and receive fast, customized solutions and quotes.

QUICK RFQ
ADD TO RFQ LIST
For beginners in embedded systems, the ESP32 is generally more suitable than the STM32 for several reasons.

For beginners in embedded systems, the ESP32 is generally more suitable than the STM32 for several reasons:

Which is better for beginners: ESP32 or STM32? A robot example - Blog - Ampheo

1. Easier Development Environment

  • ESP32:

    • Works well with the Arduino IDE, which is beginner-friendly.

    • Supports MicroPython, allowing beginners to write code in Python instead of C/C++.

    • PlatformIO (VS Code extension) simplifies project management.

  • STM32:

    • Typically requires STM32CubeIDE or Keil/IAR (which have a steeper learning curve).

    • More complex setup for beginners (register configurations, HAL/LL libraries).

2. Built-in Wireless Connectivity

  • ESP32 has Wi-Fi & Bluetooth built-in, making it great for IoT projects.

  • STM32 usually requires external modules (like ESP8266 or HC-05 for Bluetooth), adding complexity.

3. Better Community & Documentation

  • ESP32 has a larger hobbyist community, with many tutorials (YouTube, blogs, forums).

  • STM32 is more industry-focused, with documentation that can be overwhelming for beginners.

4. Lower Cost & Easier Availability

  • ESP32 boards (like ESP32 DevKit) are cheaper (~5–10) and widely available.

  • STM32 boards (like STM32F103 "Blue Pill") are also affordable but may require extra components.

When Should a Beginner Choose STM32?

  • If you want to learn professional embedded development (real-time systems, automotive, industrial applications).

  • If you need better real-time performance or low-power applications (STM32 has better power management).

  • If you plan to work in an industry that uses STM32 heavily.

Conclusion

  • For beginners (IoT, easy prototyping, simple projects) → ESP32 ✅

  • For deeper embedded learning (RTOS, registers, industry standards) → STM32

 

Let’s compare ESP32 vs. STM32 for building a robot (e.g., a WiFi/Bluetooth-controlled car with sensors). We’ll break it down by key robot components and declare a winner for each.


1. Motor Control (DC/BLDC Motors)

ESP32 (Arduino + PWM)

cpp
 
// L298N Motor Driver Example (2 DC motors)  
#define ENA 14  // PWM for Motor A  
#define IN1 12  // Direction pins  
#define IN2 13  

void setup() {  
  pinMode(ENA, OUTPUT);  
  pinMode(IN1, OUTPUT);  
  pinMode(IN2, OUTPUT);  
  ledcSetup(0, 5000, 8);  // PWM Channel 0, 5kHz, 8-bit  
  ledcAttachPin(ENA, 0);  
}  

void loop() {  
  digitalWrite(IN1, HIGH);  // Forward  
  digitalWrite(IN2, LOW);  
  ledcWrite(0, 200);  // ~78% duty cycle  
}  

✅ Pros:

  • Simple PWM control (ledc library).

  • Good for basic robots (e.g., line followers).

❌ Cons:

  • Limited precision for high-speed BLDC control (no hardware dead-time insertion).

STM32 (Hardware PWM + TIMERS)

c
 
 
// STM32CubeMX configures TIM1 for PWM  
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);  // Motor A  
htim1.Instance->CCR1 = 500;  // Set duty cycle  

// Direction control via GPIO  
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);  // Forward  

✅ Pros:

  • Hardware timer support for advanced motor control (e.g., field-oriented control for BLDC).

  • Better for robots needing precision (drones, robotic arms).

Winner:

  • STM32 for advanced motor control.

  • ESP32 for simple wheeled robots.


2. Wireless Control (WiFi/Bluetooth)

ESP32 (Built-in WiFi/BLE)

cpp
 
 
// WiFi Remote Control (Web Server)  
#include <WiFi.h>  
WiFiServer server(80);  

void setup() {  
  WiFi.begin("SSID", "PASSWORD");  
  server.begin();  
}  

void loop() {  
  WiFiClient client = server.available();  
  if (client) {  
    String cmd = client.readString();  
    if (cmd == "FWD") moveForward();  // Custom function  
  }  
}  

✅ Pros:

  • No extra modules needed.

  • Supports MQTT/WebSocket for IoT robots.

STM32 (External Modules Required)

c
 
 
// Using HC-05 Bluetooth (UART AT Commands)  
HAL_UART_Transmit(&huart2, "AT+CONNECT=ESP32\r\n", ...);  

❌ Cons:

  • Needs extra hardware (HC-05, ESP8266 for WiFi).

  • More complex firmware (parsing AT commands).

Winner:

  • ESP32 (clear winner for wireless robots).


3. Sensor Integration (Ultrasonic, IMU, LiDAR)

ESP32 (Arduino Libraries)

cpp
 
 
// HC-SR04 Ultrasonic Sensor  
#define TRIG 25  
#define ECHO 26  

void setup() {  
  pinMode(TRIG, OUTPUT);  
  pinMode(ECHO, INPUT);  
}  

float readDistance() {  
  digitalWrite(TRIG, HIGH);  
  delayMicroseconds(10);  
  digitalWrite(TRIG, LOW);  
  return pulseIn(ECHO, HIGH) * 0.034 / 2;  // cm  
}  

✅ Pros:

  • Plug-and-play with Arduino libraries (e.g., MPU6050, VL53L0X).

STM32 (HAL Libraries + Manual Config)

c
 
 
// STM32 HAL Ultrasonic (TIM + GPIO)  
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);  
delay_us(10);  
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);  
uint32_t pulse = HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN);  

✅ Pros:

  • Lower latency (better for high-speed sensors like LiDAR).

Winner:

  • ESP32 for simplicity.

  • STM32 for high-performance sensors (e.g., Kalman filtering on IMU).


4. Real-Time Performance (RTOS, Latency)

ESP32 (FreeRTOS Pre-Installed)

cpp
 
 
// Task for motor control  
void motorTask(void *pvParam) {  
  while (1) {  
    updateMotors();  
    vTaskDelay(10 / portTICK_PERIOD_MS);  
  }  
}  

✅ Pros:

  • Decent for most robots (e.g., obstacle avoiders).

STM32 (Hard Real-Time)

c
 
 
// STM32 + FreeRTOS (CubeMX configured)  
void StartMotorTask(void *arg) {  
  while (1) {  
    HAL_GPIO_TogglePin(MOTOR_PIN);  
    osDelay(1);  // 1ms precise delay  
  }  
}  

✅ Pros:

  • Predictable timing (critical for balancing robots/drones).

Winner:

  • STM32 for real-time-critical robots (e.g., quadcopters).


5. Power Efficiency (Battery-Powered Robots)

  • ESP32:

    • Higher idle power (~10mA in deep sleep).

    • Wi-Fi/BLE drain battery faster.

  • STM32:

    • As low as 2µA in standby (better for long-duration robots).

Winner:

  • STM32 for battery efficiency.


Final Robot Build Recommendations

Robot Type Better Board Why?
WiFi/Bluetooth Robot ESP32 Built-in wireless, easy Arduino code
High-Precision Motor Robot STM32 Hardware PWM, encoder support
Autonomous Drone STM32 Real-time control, low latency
Line Follower ESP32 Simplicity, good enough PWM

Example Projects:

  1. ESP32 Robot Car (WiFi Control + Ultrasonic Avoidance):

    • Motors: L298N + ESP32 PWM.

    • Wireless: Built-in WiFi for phone control.

    • Sensors: HC-SR04, MPU6050 (Arduino libraries).

  2. STM32 Robotic Arm (Precision Control):

    • Motors: STM32 TIM1 PWM + PID.

    • Wireless: Optional (HC-05 for BLE).

    • Sensors: Rotary encoders + STM32 HAL.

For Beginners: Start with an ESP32 robot (easier to debug).
For Advanced Users: STM32 for drones/industrial robots.

Ampheo