
Learn what the ESP32 is, how it differs from Arduino, and how to set up the Arduino IDE to drive motors, sensors, Bluetooth, and WiFi for IoT projects.
Learn the software you need for the ESP32 Arduino makers course, including the ESP32 core extension, a text editor, a terminal emulator, and a web browser.
Identify essential ESP32 hardware for Arduino makers, including development boards, breadboards, wires, resistors, LCDs and displays, sensors, motors, and a real-time clock to support practical experiments.
Assess your Arduino familiarity and prerequisites to maximize this ESP32 course, then explore the GitHub repository, documentation, sections on sensors, displays, memory, and wireless.
Explore the ESP32 module family powering the development kit, including ESP32 WROOM and rover variants, and note dual-core chips, four megabytes of flash memory, pseudo static ram, and antenna options.
Explore the ESP32 dev kit (version four), its exposed pins, breadboard compatibility, USB-to-serial interface, power options, and debugging features like reset, upload mode, and programmable LED.
Compare the ESP32 and Arduino boards, highlighting hardware architecture, memory, and wireless features, and show how the ESP32 can be programmed with the Arduino IDE and compatible libraries.
Explore the esp32 gpio landscape and its multifunction pins. Learn to map gpio numbers to physical pins, identify common adc, rtc, touch, and spi functions, and note restricted pins 6–11.
Explore the ESP32's wireless and wired communications, including Wi-Fi, Bluetooth, SBI channels, I2S interfaces, three serial interfaces, CAN bus, infrared, and Ethernet via the netMac adapter.
Master the ESP32 power options: USB power, an external 5-12 volt supply, and a 3.3-volt regulator pin. Don't mix options and keep voltages within limits to prevent damage.
Learn to set up ESP32 in the Arduino IDE on Mac and Windows, install ESP32 support via boards manager, and explore examples and PlatformIO as an alternative.
Set up ESP32 support in the Arduino IDE on Windows 10. Install ESP32 boards via Boards Manager using the JSON URL, then choose the correct ESP32 module.
Are you using Arduino IDE on MacOS Big Sur?
Please be aware that Silicon Labs is working on a new driver for Big Sur. Here is a relevant post on the Silicon Labs forum about the CP210xxx drivers for Big Sur (https://www.silabs.com/community/interface/forum.topic.html/vcp_driver_for_macosbigsur110x-SWJK):
------------
With new version of macOS released which is macOS Big Sur 11.0.x, the latest version of our VCP driver for Macintosh OSX (v5.3.5) now becomes incompatible. The reason for this is because of new driver model change on macOS which you can find more information from links below:
https://developer.apple.com/documentation/macos-release-notes/macos-big-sur-11_0_1-release-notes
https://developer.apple.com/support/kernel-extensions/
We currently are working to update our driver to fix this issue, although due to testing requirements, we do not expect the new version of driver to be available on our website for now.
This is the location of the drivers for all OS, including MacOS Big Sur once it will be available:
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
------------
Compare the ESP32-WROOM-32 and ESP32-S3-WROOM-1 modules, detailing cores, Bluetooth, USB OTG, ADC channels, GPIO, and motor-control features for AI edge and IoT applications.
Compare the Esp32 dev kit v1 and the Esp32 S3 dev kit C1, outlining native USB OTG via USB-C, BLE 5.0, GPIO flexibility, and the enhanced features for modern applications.
Explore the evolution of the Arduino core from v1.x to v3.x for the ESP32, including native USB, little IFS and fat FS, and the shift to ESP-IDF 5.4 and C++17.
Set up the ESP32 S3 dev kit with the Arduino IDE, enable USB CDC serial, and explore Nimble BLE, GAT, broadcasting, LittleFS, and the official pinout and docs.
Explore driving an LED from an ESP32 using a GPIO and resistor, wiring to ground, and running a blink sketch while reviewing pin mapping and the upload process.
Learn to fade an LED with the ESP32’s pwm, using up to 16 channels on pwm-capable pins, set 12 kHz frequency with 8-bit resolution, and vary brightness 0–255.
learn to drive an rgb led with pwm on the esp32, wire red, green, blue pins, and apply hue to rgb conversion for color control across common anode/cathode setups.
read the state of a push button on the ESP32 using digital input pins with a pull-down resistor, and visualize it on an LCD display.
Learn to read a potentiometer with the ESP32’s 12‑bit ADC, using ADC1’s eight channels and ADC2’s ten for 18 channels, and display results on the serial monitor, noting Wi‑Fi restrictions.
Combine prior sketches to read a potentiometer with analogRead on the ESP32 and feed it to a PWM output on GPIO 32, using 12-bit resolution to control LED brightness.
Explore how the ESP32's 8-bit DAC channels (GPIO 25 and 26) produce true analog signals, contrasting PWM and sigma delta approximations, and visualize audio signals with an oscilloscope.
Explore a DAC demo sketch for ESP32 on Arduino Makers, generating 0 to 3.3 V with an 8-bit value using the dacWrite function to produce sine, square, and triangle waveforms.
Explore the ESP32 DAC write function to generate triangle, sine, and square waveforms with 8-bit values on GPIOs, and observe results on an oscilloscope.
Drive a buzzer from the ESP32 DAC to generate triangular and sine audio waves, adjusting tone with step size and noting no amplifier is needed. Explore button interrupts.
Explore interrupt-driven input on the ESP32 by wiring a push button to GPIO 25 with an internal pull-up, replacing loop polling with an interrupt that updates the entity when pressed.
Learn to implement GPIO interrupts on the ESP32 with an Arduino sketch: set up a button with a pull-up, debounce logic, an interrupt service routine, and press counting.
No schematic (dev kit only).
Learn to use the ESP32 capacitive touch sensor on a digital pin to detect touch with touch_read, visualize results via the serial monitor and plotter, and prepare for interrupt-based improvements.
learn to use the ESP32 touch sensor with an interrupt service routine to trigger an led without blocking the main loop, with a threshold and quick handling.
Learn to use a photoresistor in a voltage divider with an ESP32 analog input (GPIO 36/39) to measure light, with 12-bit resolution and 9–12 bit modes, using serial monitor and plotter.
Use the BME280 via I2C on an ESP32 to read temperature, humidity, barometric pressure, and calculate altitude, with addresses 76 or 77.
wire a dht22 or dht11 to the esp32, ground, data to gpio32 with a 3.3v pull-up, and use the simple dht library to read and handle errors.
Connect the adxl335 analog accelerometer to an esp32 using x, y, z analog inputs, read orientation and movement, and print results to the serial monitor.
Connect and program a 16x2 LCD via the I2C backpack on the ESP32, discover the device address, and explore library functions to print text, control backlight, and scroll content.
Discover pin mappings for a single seven-segment display with ESP32 via trial and error, wire a common cathode to ground with resistors, and drive segments using bit patterns in code.
Use the u7segment library to multiplex multiple seven-segment displays with a single GPIO per display, sharing segment pins and a common cathode, refreshed by interrupts in a simple sketch.
Explore driving a seven-segment clock display with an I2C backpack on the ESP32, using a four-wire interface, address selection, and a sketch that updates minutes and seconds.
Learn to drive a single 8x8 LED matrix with an ESP32 over SPI, wiring data to GPIO23, clock to GPIO18, and 3.3V power, using the MAX72XX panel library.
Extend your ESP32 project by wiring and driving eight by eight LED matrix displays, configuring them as 4 by 1 or 2 by 2 and mapping with set position.
Control a small dc motor with the DRV8871 motor controller on an ESP32, using PWM and in1/in2 for speed and direction, with an external power supply.
Learn to control a hobby servo motor with the ESP32 using Arduino IDE and the Servo library, by attaching the signal wire to a PWM pin and writing 0–180 degrees.
Learn how to use the ESP32 EEPROM to store booleans and other data in non-volatile flash, preserving a GPO state across power cycles, with read, write, and commit operations.
No schematic, using the ESP32 board only.
Learn to erase the ESP32 flash memory with a Python-based command line tool, configure the port, run erase flash, and verify by confirming the readme file is gone.
Set up the DS3231 real time clock with ESP32 via I2C, configure date and time, and print readings to the serial monitor, using the RTC library.
Connect a DS3231 RTC and an I2C LCD to an ESP32, sharing I2C lines on a single power supply to display date, time, and temperature.
Course updated in August 2025
I have updated this course to support the ESP32-S3-DevKitC-1 N16R8 development board, using the latest Arduino IDE (2.2.x) and ESP32 Arduino Core Library (v3.2.1). I have also added new lectures in section four to provide you with the necessary information so that you can work with the newer ESP32-S3 module and devkits.
I have revised all example sketches for compatibility with this modern hardware and software environment. The complete set of updated scripts is available on GitHub, with most lessons offering both a simple version (ideal for quick testing) and a comprehensive version (including extended functionality and inline documentation). Each script contains detailed comments describing software behavior and hardware wiring instructions. New videos are in development to demonstrate the updated setup and highlight the new capabilities of the ESP32-S3 platform.
Course updated in July 2022
We updated this course so that all experiments work with the ESP32 Dev Kit v4 (based on the ESP32-WROOM-32E) and the ESP32 Arduino Core library 2.0.3.
All sketches and schematics have been tested and updated, links for external resources checked for validity, and several lecture videos were updated to reflect these development.
The updated course is tested to work with the ESP32 development kit version 4, ESP32 Arduino Core version 2.0.3, and the Arduino IDE 1.8.19.
About this course
The ESP32 is a powerful microcontroller.
It integrates Wifi and Bluetooth, many GPIOs, analog input and output capabilities, many device interconnection protocols, a fast dual-core processor.
All that, at a low price.
And best of all: you can use your existing Arduino knowledge and skill to turbo-charge your projects.
Especially if you have already learned how to use the Arduino Uno in your projects, it is likely that you have hit a hardware limitation.
Perhaps your projects needed more memory, more speed, or more pins.
With the ESP32, you can get a lot more capacity to build more interesting projects, almost for free.
However, the ESP32 is not a plug-in replacement for the Arduino.
While it shares much of the Arduino’s programming and GPIO interface, you still need to learn the basics before you can deploy it.
This is the purpose of this course.
In this course you will learn:
What is the ESP32.
What are the various modules with that name, and how these modules are available to us in the form of development kits.
What are the differences and similarities between the ESP32 and the Arduino.
How can we use what we know from the Arduino to make things based on the ESP32.
How can we use the ESP32 GPIOs to work with simple components like LEDs and buttons, but also to drive peripherals like displays, sensors (including the integrated ones) and motors.
How can we set up the familiar Arduino IDE so that we can write programs for the ESP32.
How to store data in non-volatile memory.
How to communicate with near field devices and the Internet.
In this course, I have also included numerous mini-projects to demonstrate how to use capabilities such as GPIO read and write, classic Bluetooth, Bluetooth Low Energy, Wifi, digital to analog conversion, touch sensors, and more.
Larger projects will also show you how to create simple Internet of Things and Bluetooth applications, to name a few.
If you are ready to learn more, please be sure to watch the lectures in this introductory section to find our more.