New to ESP32? Start here! The ESP32 is a series of low-cost and low-power System on a Chip (SoC) microcontrollers developed by Espressif that include Wi-Fi and Bluetooth wireless capabilities and dual-core processor. If you’re familiar with the ESP8266, the ESP32 is its successor, loaded with lots of new features.
Updated 5 August 2024
New to the ESP32? You’re in the right place. This guide contains all the information you need to get started with the ESP32. Learn what is an ESP32, how to select an ESP32 board, how to get your first program working, and much more. Here’s what we’ll cover in this guide:
Table of Contents
- Introducing the ESP32
- ESP32 Development Boards
- ESP32 DEVKIT DOIT
- ESP32 GPIOs Pinout Guide
- How to program the ESP32?
- ESP32 with Arduino IDE
Introducing the ESP32
First, to get started, what is an ESP32? The ESP32 is a series of chip microcontrollers developed by Espressif.
Why are they so popular? Mainly because of the following features:
- Low-cost: you can get an ESP32 starting at $6, which makes it easily accessible to the general public;
- Low-power: the ESP32 consumes very little power compared with other microcontrollers, and it supports low-power mode states like deep sleep to save power;
- Wi-Fi capabilities: the ESP32 can easily connect to a Wi-Fi network to connect to the internet (station mode), or create its own Wi-Fi wireless network (access point mode) so other devices can connect to it—this is essential for IoT and Home Automation projects—you can have multiple devices communicating with each other using their Wi-Fi capabilities;
- Bluetooth: the ESP32 supports Bluetooth classic and Bluetooth Low Energy (BLE)—which is useful for a wide variety of IoT applications;
- Dual-core: most ESP32 are dual-core— they come with 2 Xtensa 32-bit LX6 microprocessors: core 0 and core 1.
- Rich peripheral input/output interface—the ESP32 supports a wide variety of input (read data from the outside world) and output (to send commands/signals to the outside world) peripherals like capacitive touch, ADCs, DACs, UART, SPI, I2C, PWM, and much more.
- Compatible with the Arduino “programming language”: those that are already familiar with programming the Arduino board, you’ll be happy to know that they can program the ESP32 in the Arduino style.
- Compatible with MicroPython: you can program the ESP32 with MicroPython firmware, which is a re-implementation of Python 3 targeted for microcontrollers and embedded systems.
ESP32 Specifications
If you want to get a bit more technical and specific, you can take a look at the following detailed specifications of the ESP32 (source: http://esp32.net/)—for more details, check the datasheet):
- Wireless connectivity WiFi: 150.0 Mbps data rate with HT40
- Bluetooth: BLE (Bluetooth Low Energy) and Bluetooth Classic
- Processor: Tensilica Xtensa Dual-Core 32-bit LX6 microprocessor, running at 160 or 240 MHz
- Memory:
- ROM: 448 KB (for booting and core functions)
- SRAM: 520 KB (for data and instructions)
- RTC fast SRAM: 8 KB (for data storage and main CPU during RTC Boot from the deep-sleep mode)
- RTC slow SRAM: 8KB (for co-processor accessing during deep-sleep mode)
- eFuse: 1 Kbit (of which 256 bits are used for the system (MAC address and chip configuration) and the remaining 768 bits are reserved for customer applications, including Flash-Encryption and Chip-ID)
- Embedded flash: flash connected internally via IO16, IO17, SD_CMD, SD_CLK, SD_DATA_0 and SD_DATA_1 on ESP32-D2WD and ESP32-PICO-D4.
- 0 MiB (ESP32-D0WDQ6, ESP32-D0WD, and ESP32-S0WD chips)
- 2 MiB (ESP32-D2WD chip)
- 4 MiB (ESP32-PICO-D4 SiP module)
- Low Power: ensures that you can still use ADC conversions, for example, during deep sleep.
- Peripheral Input/Output:
- peripheral interface with DMA that includes capacitive touch
- ADCs (Analog-to-Digital Converter)
- DACs (Digital-to-Analog Converter)
- I²C (Inter-Integrated Circuit)
- UART (Universal Asynchronous Receiver/Transmitter)
- SPI (Serial Peripheral Interface)
- I²S (Integrated Interchip Sound)
- RMII (Reduced Media-Independent Interface)
- PWM (Pulse-Width Modulation)
- Security: hardware accelerators for AES and SSL/TLS
Main Differences Between ESP32 and ESP8266
Previously, we mentioned that the ESP32 is the ESP8266 successor. What are the main differences between ESP32 and ESP8266 boards?
The ESP32 adds an extra CPU core, faster Wi-Fi, more GPIOs, and supports Bluetooth 4.2 and Bluetooth low energy. Additionally, the ESP32 comes with touch-sensitive pins that can be used to wake up the ESP32 from deep sleep, and built-in hall effect sensor.
Both boards are cheap, but the ESP32 costs slightly more. While the ESP32 can cost around $6 to $12, the ESP8266 can cost $4 to $6 (but it really depends on where you get them and what model you’re buying).
So, in summary:
- The ESP32 is faster than the ESP8266;
- The ESP32 comes with more GPIOs with multiple functions;
- The ESP32 supports analog measurements on 18 channels (analog-enabled pins) versus just one 10-bit ADC pin on the ESP8266;
- The ESP32 supports Bluetooth while the ESP8266 doesn’t;
- The ESP32 is dual-core (most models), and the ESP8266 is single core;
- The ESP32 is a bit more expensive than the ESP8266.
For a more detailed analysis of the differences between those boards, we recommend reading the following article: ESP32 vs ESP8266 – Pros and Cons.
ESP32 Development Boards
ESP32 refers to the bare ESP32 chip. However, the “ESP32” term is also used to refer to ESP32 development boards. Using ESP32 bare chips is not easy or practical, especially when learning, testing, and prototyping. Most of the time, you’ll want to use an ESP32 development board.
These development boards come with all the needed circuitry to power and program the chip, connect it to your computer, pins to connect peripherals, built-in power and control LEDs, an antenna for wi-fi signal, and other useful features. Others even come with extra hardware like specific sensors or modules, displays, or a camera in the case of the ESP32-CAM.
How to Choose an ESP32 Development Board?
Once you start searching for ESP32 boards online, you’ll find there is a wide variety of boards from different vendors. While they all work in a similar way, some boards may be more suitable for some projects than others. When looking for an ESP32 development board there are several aspects you need to take into account:
- USB-to-UART interface and voltage regulator circuit. Most full-featured development boards have these two features. This is important to easily connect the ESP32 to your computer to upload code and apply power.
- BOOT and RESET/EN buttons to put the board in flashing mode or reset (restart) the board. Some boards don’t have the BOOT button. Usually, these boards go into flashing mode automatically.
- Pin configuration and the number of pins. To properly use the ESP32 in your projects, you need to have access to the board pinout (like a map that shows which pin corresponds to which GPIO and its features). So make sure you have access to the pinout of the board you’re getting. Otherwise, you may end up using the ESP32 incorrectly.
- Antenna connector. Most boards come with an onboard antenna for Wi-Fi signal. Some boards come with an antenna connector to optionally connect an external antenna. Adding an external antenna increases your Wi-Fi range.
- Battery connector. If you want to power your ESP32 using batteries, there are development boards that come with connectors for LiPo batteries—this can be handier. You can also power a “regular” ESP32 with batteries through the power pins.
- Extra hardware features. There are ESP32 development boards with extra hardware features. For example, some may come with a built-in OLED display, a LoRa module, a SIM800 module (for GSM and GPRS), a battery holder, a camera, or others.
What is the best ESP32 development board for beginners?
For beginners, we recommend an ESP32 board with a vast selection of available GPIOs, and without any extra hardware features. It’s also important that it comes with voltage regular and USB input for power and upload code.
In most of our ESP32 projects, we use the ESP32 DEVKIT DOIT board, and that’s the one we recommend for beginners. There are different versions of this board with a different number of available pins (30, 36, and 38)—all boards work in a similar way.
Where to Buy?
You can check the following link to find the ESP32 DEVKIT DOIT board in different stores:
Other similar boards with the features mentioned previously may also be a good option like the Adafruit ESP32 Feather, Sparkfun ESP32 Thing, NodeMCU-32S, Wemos LoLin32, etc.
ESP32 DEVKIT DOIT
In this article, we’ll be using the ESP32 DEVKIT DOIT board as a reference. If you have a different board, don’t worry. The information on this page is also compatible with other ESP32 development boards.
The picture below shows the ESP32 DEVKIT DOIT V1 board, version with 36 GPIO pins.
Specifications – ESP32 DEVKIT V1 DOIT
The following table shows a summary of the ESP32 DEVKIT V1 DOIT board features and specifications:
Number of cores | 2 (dual core) |
Wi-Fi | 2.4 GHz up to 150 Mbits/s |
Bluetooth | BLE (Bluetooth Low Energy) and legacy Bluetooth |
Architecture | 32 bits |
Clock frequency | Up to 240 MHz |
RAM | 512 KB |
Pins | 30, 36, or 38 (depending on the model) |
Peripherals | Capacitive touch, ADC (analog to digital converter), DAC (digital to analog converter), I2C (Inter-Integrated Circuit), UART (universal asynchronous receiver/transmitter), CAN 2.0 (Controller Area Netwokr), SPI (Serial Peripheral Interface), I2S (Integrated Inter-IC Sound), RMII (Reduced Media-Independent Interface), PWM (pulse width modulation), and more. |
Built-in buttons | RESET and BOOT buttons |
Built-in LEDs | built-in blue LED connected to GPIO2; built-in red LED that shows the board is being powered |
USB to UART bridge | CP2102 |
This particular ESP32 board comes with 36 pins, 18 on each side. The number of available GPIOs depends on your board model.
To learn more about the ESP32 GPIOs, read our GPIO reference guide: ESP32 Pinout Reference: Which GPIO pins should you use?
It comes with a microUSB interface that you can use to connect the board to your computer to upload code or apply power.
It uses the CP2102 chip (USB to UART) to communicate with your computer via a COM port using a serial interface. Another popular chip is the CH340. Check what’s the USB to UART chip converter on your board because you’ll need to install the required drivers so that your computer can communicate with the board (more information about this later in this guide).
This board also comes with a RESET button (may be labeled EN) to restart the board and a BOOT button to put the board in flashing mode (available to receive code). Note that some boards may not have a BOOT button.
It also comes with a built-in blue LED that is internally connected to GPIO 2. This LED is useful for debugging to give some sort of visual physical output. There’s also a red LED that lights up when you provide power to the board.
ESP32 GPIOs Pinout Guide
The ESP32 chip comes with 48 pins with multiple functions. Not all pins are exposed in all ESP32 development boards, and some pins should not be used. The ESP32 DEVKIT V1 DOIT board usually comes with 36 exposed GPIOs that you can use to connect peripherals.
Power Pins
Usually, all boards come with power pins: 3V3, GND, and VIN. You can use these pins to power the board (if you’re not providing power through the USB port), or to get power for other peripherals (if you’re powering the board using the USB port).
General Purpose Input Output Pins (GPIOS)
Almost all GPIOs have a number assigned and that’s how you should refer to them—by their number.
With the ESP32 you can decide which pins are UART, I2C, or SPI – you just need to set that on the code. This is possible due to the ESP32 chip’s multiplexing feature that allows to assign multiple functions to the same pin.
If you don’t set them on the code, the pins will be configured by default as shown in the figure below (the pin location can change depending on the manufacturer). Additionally, there are pins with specific features that make them suitable or not for a particular project.
We have a detailed guide dedicated to the ESP32 GPIOs that we recommend you read: ESP32 Pinout Reference Guide. It shows how to use the ESP32 GPIOs and explains what are the best GPIOs to use depending on your project.
The placement of the GPIOs might be different depending on your board model. However, usually, each specific GPIO works in the same way regardless of the development board you’re using (with some exceptions). For example, regardless of the board, usually GPIO5 is always the VSPI CS0 pin, GPIO 23 always corresponds to VSPI MOSI for SPI communication, etc.
How to Program the ESP32?
The ESP32 can be programmed using different firmware and programming languages. You can use:
- Arduino C/C++ using the Arduino core for the ESP32
- Espressif IDF (IoT Development Framework)
- Micropython
- JavaScript
- LUA
- …
Our preferred method to program the ESP32 is with C/C++ “Arduino programming language”. We also have some guides and tutorials using MicroPython firmware.
Throughout this guide, we’ll cover programming the ESP32 using the Arduino core for the ESP32 board. If you prefer using MicroPython, please refer to this guide: Getting Started with MicroPython on ESP32.
Programming ESP32 with Arduino IDE
To program your boards, you need an IDE to write your code. For beginners, we recommend using Arduino IDE. While it’s not the best IDE, it works well and is simple and intuitive to use for beginners. After getting familiar with Arduino IDE and you start creating more complex projects, you may find it useful to use VS Code with the Platformio extension instead.
If you’re just getting started with the ESP32, start with Arduino IDE.
Installing Arduino IDE
To run Arduino IDE, you need to install JAVA on your computer. If you don’t, go to the following website to download and install the latest version: http://java.com/download.
Downloading and Installing Arduino IDE
To download the Arduino IDE, visit the following URL:
Go to the Arduino website and download the version for your operating system.
- Windows: run the file downloaded and follow the instructions in the installation guide.
- Mac OS X: copy the downloaded file into your application folder.
- Linux: extract the downloaded file, and open the arduino-ide file that will launch the IDE.
If you have doubts, you can go to the Arduino Installation Guide.
Do you need an ESP32 board? You can buy it here.
Recommended reading: ESP32 Development Boards Review and Comparison
Installing the ESP32 in Arduino IDE
To install the ESP32 board in your Arduino IDE, follow these next instructions:
1. In your Arduino IDE 2, go to File > Preferences.
2. Copy and paste the following line to the Additional Boards Manager URLs field.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Note: if you already have the ESP8266 boards URL, you can separate the URLs with a comma, as follows:
http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
3. Open the Boards Manager. You can go to Tools > Board > Boards Manager… or you can simply click the Boards Manager icon in the left-side corner.
4. Search for ESP32 and press the install button for esp32 by Espressif Systems version 3.X.
That’s it. It should be installed after a few seconds.
After this, restart your Arduino IDE.
Then, go to Tools > Board and check that you have ESP32 boards available.
Now, you’re ready to start programming your ESP32 using Arduino IDE.
Testing the Installation and Uploading Code to the ESP32
Now, let’s check if the installation was successful and if we can upload new code to the ESP32 board.
We’ll simply upload an example sketch from the library of available examples.
Connect your ESP32 development board to your computer using a USB cable. If you have an ESP32 DEVKIT DOIT board, the built-in red LED will turn on. This indicates the board is receiving power.
Important: you must use a USB cable with data wires. Some USB cables from chargers or power banks are power only and they don’t transfer data—these won’t work.
With your Arduino IDE open, follow these steps:
1) Select your Board in Tools > Board menu or on the top drop-down menu, click on “Select other board and port…“
A new window, as shown below, will open. Search for your ESP32 board model.
Select the board model you’re using, and the COM port. In our example, we’re using the DOIT ESP32 DEVKIT V1. Click OK when you’re done.
Installing the USB Drivers
If you don’t see the COM Port in your Arduino IDE, you probably need to install the USB-to-UART drivers on your computer. Most ESP32 boards use either the CP210x or the CH340 chip depending on the board you’re using.
If you need to install the CP210x drivers, we recommend taking a look at this tutorial: Install ESP32/ESP8266 USB Drivers – CP210x USB to UART Bridge
2) Open the following example— it searches for wi-fi networks within the range of your board.
- ESP32: File > Examples > WiFi (ESP32) > WiFiScan
3) A new sketch opens in your Arduino IDE:
4) Press the Upload button in the Arduino IDE. Wait a few seconds while the code compiles and uploads to your board.
Note: if you see a lot of dots on the debugging window, followed by an upload error, that means your board doesn’t go into flashing mode automatically. Click the Upload button again, and when you start seeing the dots on the debugging window, press the onboard BOOT button for a couple of seconds.
5) If everything went as expected, it will upload successfully after a few seconds. You’ll get a similar message:
6) Open the Arduino IDE Serial Monitor at a baud rate of 115200:
7) Press the ESP32 on-board Enable/RESET button and you should see the networks available near your board.
If you’re having issues uploading code to your ESP32 board, we recommend taking a quick look at the following troubleshooting guide: ESP32 Troubleshooting Guide.
ESP32 Examples
In your Arduino IDE, you can find multiple examples for the ESP32. First, make sure you have an ESP32 board selected in Tools > Boards. Then, go to File > Examples and check out the examples under the ESP32 section.
Update the ESP32 Core in Arduino IDE
It’s a good practice to periodically ensure you have the latest version of the ESP32 boards installed. In Arduino IDE 2, you’ll receive a pop-up notification prompting you to update whenever a new version becomes available.
Wrapping Up
We hope you’ve found this getting started guide useful. I think we’ve included all the required information for you to get started. You learned what is an ESP32, how to choose an ESP32 development board, and how to upload new code to the ESP32 using Arduino IDE.
Want to learn more? We recommend the following tutorials to get started:
Also, don’t forget to take a look at the ESP32 pinout to learn how to use its GPIOs:
If you’re serious about learning about the ESP32, we recommend taking a look at our best-selling eBook:
You can also check all our free ESP32 tutorials and guides on the following link:
If you like ESP32 make sure you subscribe to our blog, so you don’t miss upcoming projects.
Do you have any questions? Leave a comment down below!
Thanks for reading.
Esp8266/esp32+usb camera stream to webpage is possible?
It won’t be able to stream, but with the ESP you can create a web server that has a camera stream embedded (for example, as you would embedded a youtube video in an HTML page).
How about a little more about the dev board? What are the user-accessible components – buttons, ports, pins,. A look at the back of the board? What are the dimensions? When you said press the Upload button it sounds like there is a button on the board called the Upload button but I think you meant select Upload from the Sketch menu in the Arduino IDE. Is that correct? You might want to make that clearer.
Hi Don,
Thanks for the comment! The back of the board has no components, it looks like the ESP-12E NodeMCU Kit module.
There’s only two buttons in the ESP32 Dev Module: EN and BOOT. I’ve updated the image in the blog post to highlight those two buttons and make it easy to see them.
The Upload button I’ve mentioned in the post was for the Arduino IDE – I’ve also fixed that sentence.
The image in the “Pin assignment” section describes exactly the function of each pin.
I hope this helps,
Thank you!
Rui
Hi RUI I wanted to know about the esp32 so now I can start playing thsnks so much love all your getting started projects jeff
Does esp32 already has BLE functionalities on arduinoIDE today?
I don’t think so, but it should have in the future. I’ll write more on that subject when it’s available
Hi Rui very good will get a esp32 soon
Rui I am a bit confused about your course Build a Home Automation System for $ 100 because I see the need to make a wiring for each element that wants to automate starting from a single ESP8266 this prevents me from using it in an existing construction wasting the wireless qualities of the ESP8266 module by Please tell me what I understood? Thank you
Thanks for posting this. So many people think that going with ESP8266 and ESP32 you have to learn a whole new system and can’t run under the Arduino ide. So many are stuck with limited I/O, processing power, etc. So hopefully getting this sort of information into their hands will help. Thanks.
Great tutorials, you have got me into both the ESP 32 and ESP8266.
Worth pointing out that the Arduino IDE now has lots of examples of using these devices. I used these with your tutorial and got going by just plugging the device into the PC USB port – no extra circuitry necessary.
Hi Ken!
That’s true there are lots of examples on the Arduino IDE that help you get started! That’s great for beginners!
Thank you for sharing!
Regards,
Sara 🙂
I also use Visual Micros IDE for Arduino which uses the Arduino IDE but is an add on for Microsoft Visual Studio. That is really nice because it makes available the power of Visual Studio with for example Intellisense, online debugging and GIT sotware backup and revision control. The community edition of VS is free for small scale users, as is Visual Studio Team Services – their GIT Server. Your tutorials for the ESP32 and ESP8266 work in this environment too.
Best Regards
Ken
So you have to press the button on the esp32 to upload. Won’t that little button wear out soon . for me because I make too many mistakes and have to reload. Is there a work around?
Hi Franklin.
In our first ESP32 boards we didn’t need to press the button to upload code.
But recently, we have to do that every time we want to upload new code.
I know it is a bit frustrating to press the boot button every time you need to upload new code, specially when there are a lot a mistakes and we want to test things right away.
Unfortunately I don’t have any work around to share. You really need to press that button.
However, if anyone knows any work around, please share.
Regards,
Sara 🙂
Thank you Rui and Sara for sharing. It has helped me tremendously as I am sure many others. The projects are well put together and very helpful and easy to understand. You are kind in your answers.
Thank you so much for your kind words!
We’re really happy to hear that.
Regards,
Sara 🙂
Thanks for the article. Does the ESP32 have analog pins? If so, which ones are they?
Kevin
Hi Kevin.
Yes, the ESP32 has analog pins: digital to analog converter pins(DAC) and analog to digital converter (ADC) pins.
If you want to read analog sensors, just use the ADC pins. These are the ADC pins: GPIOs: 0, 2, 4, 12, 13, 14, 15, 25, 26, 27 32, 33, 34, 35, 36, and 39.
If you want to produce analog signals, use the DAC pins: GPIO25 and 26.
Regards,
Sara 🙂
But be careful, the ADCs are separated into two banks.
The 2nd bank is deactivated when you enable WiFi.
Thank you Robin for this great info.
I usualy does not read manuals, so you save me a lot of troubles.
Have a great day.
Trying to compile the blinking LED project I get a compilation error in esptool.py line 34:
Importers of: No module named serial
Can you help, please?
Hi Mariano.
It seems you’re having the same problem as described here: https://github.com/espressif/arduino-esp32/issues/13
Take a look at that article and see if you can solve it.
Other tutorials that may be helpful:
Intallation guide: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/
Troubleshooting guide: https://randomnerdtutorials.com/esp32-troubleshooting-guide/
I hope this helps.
Tell me how it went.
Regards,
Sara 🙂
Please read Alexandre Viriato answer.
It should help. 🙂
Thanks Sara.
Although I am not running Windows but Ubuntu 18, the problem was the same: missing module “serial” in python. In my case the solution was to run
sudo apt-get install python-serial
Now it works OK!!!
Great! 🙂
Are you planing to create similar ESP32 course using esp-idf instead of arduino?
or can you please refer me to a website that teaches how to use esp-idf? Thank you very much
Hi Saber.
At the moment, we don’t have anything planned about esp-idf.
We’re working on a new course using MicroPython that will be available soon.
I don’t know any good website that teaches how to use esp-idf.
A good starting point is the official documentation: docs.espressif.com/projects/esp-idf/en/latest/index.html
I hope this helps.
Regards,
Sara 🙂
So far great work :)..
question, I used this to upload a sketch, it worked the first time. Now I want to do it again but it fails..
any sugestions?
the error i get from the arduino IDE;
///////////////////
esptool.py v2.3.1
Connecting……..
Chip is ESP32D0WDQ6 (revision 1)
A fatal error occurred: Timed out waiting for packet header
A fatal error occurred: Timed out waiting for packet header
Hi.
I think that error means your ESP32 is not in flashing mode when uploading the code.
You need to press the BOOT button while uploading code until you see the “Connecting…” message in the Arduino IDE serial monitor.
Please take a look at bullet 4 in our ESP32 troubleshooting guide: https://randomnerdtutorials.com/esp32-troubleshooting-guide/
Let me know if that solved your problem.
Regards,
Sara 🙂
Thnx,
well, I guess I did it wrong a couple of times, again pressing the boot button until connecting…. and now it worked again 😀
thnx for the quick response.
The above didn’t work for me. LED’s weren’t blinking.
To resolve this, I created a /hardware folder and pasted https://github.com/espressif/arduino-esp32.
Used esp32 Dev module board. Then it worked.
Hi
i am working on esp32 dev kit,for developing Home automation,
suddenly i got struck with spi flash boot error, i am trying to resolve it, but we cannot, please can any one help us solve the problem.
Thanks,
Hi.
What is the error that you are getting?
You can check our troubleshooting guide and see if you can resolve your issue: https://randomnerdtutorials.com/esp32-troubleshooting-guide/
Your error is probably this one: https://randomnerdtutorials.com/solved-failed-to-connect-to-esp32-timed-out-waiting-for-packet-header/
Regards,
Sara
Nice example but you don’t mention that if you use GPIO 2 instead of GPIO23, there is already a blue LED connected to the dev board.
Hello Dave, in my example I’m controlling GPIO 23, but you are right there’s an on-board built-in LED on GPIO 2.
Ok I am completely a nooby to this but can you tell me what kind of computer you are hooking the ESP32 up to in order to write the code?
Hi Mike.
It’s a regular laptop with windows.
Regards,
Sara
I’m running a Wemos ESP32 OLED board. GREAT tutorial! I would never have figured out to add the “Wire.begin(5,4);” line without you. I’m running the Adafruit SSD1306_128x64_i2c sample and don’t understand the display.startscrolldiagright(start, end) function. It doesn’t seem to do anything. Seems 4 parameters would be needed for a diagonal scroll? I’ve looked at the Adafruit_SSD1306.cpp library code without understanding what it does. Is more info on the library available?
Hi Tommy.
You can read this tutorial for more details: https://randomnerdtutorials.com/esp8266-0-96-inch-oled-display-with-arduino-ide/
Regards,
Sara
Hi can any one tell me how to measure elbow angle using MCP6050 GY521 and ESP32?
Hi.
At the moment, we don’t have any tutorial about that subject.
Regards,
Sara
THANKS
Hello Sara
I am using ESP32 Doit devkit v1 as you sugested, from Banggood, but after compiling, it cannot connect to upload the code.
The port is correct because when i plug it first time it did show me the port installed successfully. Here is the error message. What i can do ?
Thank you
Arduino: 1.8.12 (Windows 7), Board: “DOIT ESP32 DEVKIT V1, 80MHz, 115200, None”
Sketch uses 622174 bytes (47%) of program storage space. Maximum is 1310720 bytes.
Global variables use 38736 bytes (11%) of dynamic memory, leaving 288944 bytes for local variables. Maximum is 327680 bytes.
H:\Users\Nelu\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\2.6.1/esptool.exe –chip esp32 –port COM13 –baud 115200 –before default_reset –after hard_reset write_flash -z –flash_mode dio –flash_freq 80m –flash_size detect 0xe000 H:\Users\Nelu\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4/tools/partitions/boot_app0.bin 0x1000 H:\Users\Nelu\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4/tools/sdk/bin/bootloader_dio_80m.bin 0x10000 H:\Users\Nelu\AppData\Local\Temp\arduino_build_604947/Get_Mac.ino.bin 0x8000 H:\Users\Nelu\AppData\Local\Temp\arduino_build_604947/Get_Mac.ino.partitions.bin
esptool.py v2.6
Serial port COM13
Connecting…….._____….._____….._____….._____….._____….._____…..____An error occurred while uploading the sketch
_
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
I forgot to mention that port 13 works perfectly for esp8266.
I wanted to get the MAC from some esp8266, and i did not have any problem with the port.
What i can read when i press TOOLS
Board-Doit ESP32 Devkit V1
Upload speed 115200
Flash frequency 80 MHz
Core debug level none
When i press GET BOARD INFO I GET THIS:
BN Unknown board
VID 10C4
PID EA60
SN none
Programer AVRISP mkII
I bought a batch of 10 pieces.
I tried 3 and all they do the same.
Please help.
Thank you
Sorry,
It is solved by pressing the BOOT button.
I works now
As Sara mentioned it in previously, putting a 10 uF capacitor between the EN and GND will let the IDE upload the code automatically without the need to press the EN button.
Thank you for suggestion Teddy,
But i had a batch of 10 ESP received from Chine and they were not mounted anywhere.
I just had the USB cable attached.
I have the habit to get the MAC for all, when i get them.
Next time i will follow your advice, put it in a bread board and use the capacitor.
I just got an esp32 that is different looking than those above. ESP-32 Dev kit C V4.
I didn’t notice when I bought it but it doesn’t seem to have an internal antenna but does the the jack for an external one. Very happy about that!
Got it here so you can have a look:
amazon.com/gp/product/B081BCDFK3/ref=ppx_yo_dt_b_asin_title_o01_s01?ie=UTF8&psc=1
Might want to add that one to the pics above. 😉
Bob
I developed a device with ESP32 DOIT.
I want to change and move it to ESP32 HUZZAH32.
The reason is the battery charger on board for Adafruit module
I read the whole data sheet but i am confused about the pins i can use without any conflict.
On the DOIT i had, first a membrane keypad.
4 Outputs for horizontal lines with the following GPIO:
KH1-26
KH2-19
KH3-18
KH4-23
3 Inputs for vertical line. Each line is pulled up by 1K resistor:
KV1-35
KV2-33
KV3-34
2 Leds Outputs:
Red-21
Green-22
1 Output = Enable control line for your Adafruit MiniBoost 5V @ 1A – TPS61023:
Pwr_On-5
1 Input from and RFID Reader (TX-line of the reader)
RFID_In-25
I need help please. Just to select some pins coresponding to the one on DOIT and without any conflict.
Adafruit support did not help. They said to post in forum, there nobody read it or answer, so i am stuck.
Please help.
Thank you very much.
Hi Ion.
I have not experience with that board.
But, taking a look at the pinout, I think you can use these pins:
4 Outputs for horizontal lines with the following GPIO:
KH1-26 –> 26 (Huzzah) You can use the same
KH2-19 –> 19 (Huzzah) You can use the same
KH3-18 –> 18 (Huzzah) You can use the same
KH4-23 –> 23 (Huzzah) You can use the same
3 Inputs for vertical line. Each line is pulled up by 1K resistor:
KV1-35 –> 32 (Huzzah) There is no GPIO 35 on the Huzzah, so you can use any other pin that can act as an input
KV2-33 –> 33 (Huzzah) You can use the same
KV3-34 –> 34 (Huzzah) You can use the same
2 Leds Outputs:
Red-21 –> 21 (Huzzah) You can use the same
Green-22 –> 22 (Huzzah) You can use the same
1 Output = Enable control line for your Adafruit MiniBoost 5V @ 1A – TPS61023:
Pwr_On-5 –> 5 (Huzzah) You can use the same
1 Input from and RFID Reader (TX-line of the reader)
RFID_In-25 –> 25 (Huzzah) You can use the same
I think these pins will work taking a look at the pinout, but I haven’t experimented it.
Regards,
Sara
Thank you very much Sara.
You know how to read and interpret better a pin and its functions.
I will get today the Adafruit modules , and test them in a breadboard.
I will send you the result when i am done.
Once again, Thank you very much.
Great!
Then, let me know.
Regards,
Sara
Can you tell me if you have any articles using Platform IO for developing with the ESP 32?
Hi.
We have this article: https://randomnerdtutorials.com/vs-code-platformio-ide-esp32-esp8266-arduino/
Regards,
Sara
i still cannot connect after holding boot. anything else i am doing wrong? i have selected the correct board. th ecode compiles but it will not upload. still getting the following.
Arduino: 1.8.13 (Windows 10), Board: “DOIT ESP32 DEVKIT V1, 80MHz, 921600, None”
Sketch uses 856262 bytes (65%) of program storage space. Maximum is 1310720 bytes.
Global variables use 39696 bytes (12%) of dynamic memory, leaving 287984 bytes for local variables. Maximum is 327680 bytes.
esptool.py v2.6
Serial port COM1
Connecting…….._____….._____….._____….._____….._____….._____….._____
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
Hi.
Read this: https://randomnerdtutorials.com/solved-failed-to-connect-to-esp32-timed-out-waiting-for-packet-header/
I hope this helps.
Regards,
Sara
Hello,
I have a question at which i cannot find the answer, and Google gave up.
An ESP32 development kit has an 5V power pin, an internal regulator down to 3.3 volts and the processor.
At which voltage works the internal processor ?
I mean, if i supply a 3.3V or 3.0V , and not 5V at power pin, meaning the input of the regulator, what will be the output at processor level, and if the whole development kit can function ?
What is the lowest voltage i can supply to the 5V pin , and have the system working ?
Hi,
I just bought two ESP32 wroom
when I connect the USB to my computer (Win10), the board is not recognized by the device manager. I changed the cable and I tried with the second ESP. The problem is always the same.
I think there is some config problem with my PC, can you advise me ?
thanks
in addition : I tried to connect the board to another PC (Win10) and it works !
tge driver is the same, I copy the driver from the Win110PC to the Win11PC but no result
Hi.
Check the ESP32 troubleshooting guide point number 6: https://randomnerdtutorials.com/esp32-troubleshooting-guide/
Regards,
Sara
Hi Sara,
thank you for your help.
I checked the informations :
– the cable is an USB cable including data wires. (it works with Arduino and other boards)
– the USB drivers is not missing. For being sure I perform a new downloaded and install
the cable and the board are OK and work when plugged to another computer running Win10, I compared the 2 computers (the Win10 and the Win11) the drivers are the same. It’s seems the problem come from Win11.
what is your advise
regards
Hi Sara
I tried to manually install the driver with :
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 C:\Users\yodra\Downloads\CP210x_Universal_Windows_Driver\silabser.inf
nothing happends and the file silabser.sys is not copied to the driver directory
it seems something block or prevent the driver installation
please advise , I am lost ….
regards
Hi.
I’m sorry, but I didn’t understand your issue.
Download the driver from here: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
Then, unzip the file and check the installation instructions on the txt file.
Regards,
Sara
Hi,
I downloaded the driver from silabs.com then I right click on the inf file then Install as said in the instruction text.
and nothing, no instruction, nothing happend
that’s why I tried to install manually with the command RUNDLL32.EXE but no result
Hi Sara,
Thank for your answer.
there is no popup whenI right click on the inf file. Nothing happend.
I tried all ways to install manually, nothing works
I received another ESP32 bought at another brand (at Bangood store), this board is equiped with an cp2102 and ….. it works on Win11. I haves not been obliged to install the driver, it use the standard Microsoft driver (I checked with device manager)
So may be the first ESP has a hardware problem, or it use a fake Cp2102,
anyway, I can use it, I will desolder the cp2102 chips and replace with a CH340
Thank you for your support
regards
Hi.
Are you sure the older board was using the CP2102?
Maybe it had a CH340?
Also, did you check your USB cable? Some USB cables are power only and don’t transfer data.
Regards,
Sara
HI
Yes the older board use CP2102
The USB cable in a data xfer cable
This board is it have Hall effect and temparature sensor
Typo:
current: The ESP32 is a bit more expensive than the ESP32.
fix: The ESP32 is a bit more expensive than the ESP8266.
Right!
Thanks. It’s fixed now.
Regards,
Sara
Hello,
I have tried and tried many different things and am unable to get an ESP32 board to send a message via WiFi to a Raspberry Pi. My goal is to sense a switch position and send a message indicating if the switch is closed or open. I have code that works well for sensing position but no matter what I try I can’t get it to successfully send a message to the Raspberry Pi. I have successfully published and subscribed via local host on the Raspberry Pi. I think I have successfully sent a message to the WiFi but can’t get the Raspberry Pi to see it???
I put together a Word document that shows one of the many things I have tried and would like to send it to you to see if you have any ideas on things to try to get it working.
Thanks in advance for any help you could offer.
David
I have made remote motor controller with push buttons. First I used ESP32 – BLE – Raspberry Pi. that works nicely. But then I changed architecture to ESP32 – ESPNow! – ESP32 and that is very easy to get working. So if you don’t need Rasberry PI on other end(why you need?), this is easy solution
can we have the same steps for esp32s module?
Hi Santos’s
I love your work and have purchased items of interest. But it took me a long time to start to use my ESP32’s that I bought when they first hit the market. I have always used Sublime as my editor of choice when working with all the Arduino’s but hated the Arduino IDE. Over the last bunch of years I have tried lots of other editors with bad success. I went back to SublimeText editor and found they changed there add on for Arduino to include Platformio as its base but keeps the simple Sketch directory structure and hides the Platformio layout. I have never been happier. Have you tried the SublimeText editor with the Deviot Arduino extension? Keep up the good work. FYI-my latest project is using 7 ESP32 using ESP-NOW
Hi.
Never tried PlaformIO with Sublime text. I have to take a look at it. Many of our readers like Sublime text too.
My favorite method is using VS Code with the PlatformIO extension.
Regards,
Sara
the address for installing ESP boards are the obsolete ones – even thou the image below shows the correct address :))
these are no more maintained, you’ll get the latest version 1..6 instead of 2.0.5:
https://dl.espressif.com/dl/package_esp32_index.json,
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Right.
Thanks for noticing.
I already fixed that.
Regards,
Sara
Hi Sara and Rui –
What is the difference between VSPI and HSPI on the ESP32?
What do the RTC pins do? And what is EMAC?
Thanks
Hi.
Read the following tutorials:
– https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
– https://randomnerdtutorials.com/esp32-spi-communication-arduino/#esp32-spi-peripherals
Regards,
Sara
PROBLEM: I have not been able to send AT commands to my ESP32 (KeeYees, CP2102)
CONTEXT: Arduino IDE v1.8.19 under Mac OS Catalina
I am able to upload sketches, print on Serial Monitor have used many different sketches to control leds, temperature sensors, etc.
ABOUT AT COMMANDS: I am able to read characters from the text box of Serial Monitor but after reading a string like “AT+GMR”, how do I send it to the “core of ESP32” ?
EXTRAS: I tried Terminal + Screen and the Serial app from decisivetactics and in both cases, I do connect with the ESP32, I do receive strings printed by a basic sketch but no feedback at all when I hit the send button with any AT command.
What am I doing wrong?
Thank you for your excellent work!
Hi.
First I want to say thank you to Rui and Sara for their quality tutorials.
I initially didn’t pay attention to detail in the console when uploading a sketch to my esp32 board, and that was until I got to the step where I should learn how to store webpage files in the board’s flash memory and then access it using the SPIFFS tool. When I uploaded my html, CSS and JS files into the board, then the server program sketch, I observed a very strange behavior from the board.
Trying to dig a little, I discovered that my board uses the ESP32 D0WD V3 core (so doesn’t have onboard flash memory). I don’t know if this behavior is said to lack flash memory; that’s why I seek advice of an Expert in the field.
To clarify, when I just upload the files of my webpage to the board and then a simple sketch that checks if these files are present, it responds successfully. But when I add WiFi functionality to this sketch, the board can’t even connect to the network; whereas when I use the same WiFi configuration without including the SPIFFS library (just for a test), the board doesn’t even take more than 3 seconds to connect to the network.
Anyway, I don’t understand it at all, because, after compiling the entire program, it is indicated that the sketch takes up 11% of RAM and 62% of ROM. I use platformIO.
Your reactions will greatly relieve me. Cordially,
Alexandre
Hi.
I’m sorry, but I’m not familiar with that issue.
Have you tried using a different board?
It might be a hardware problem probably… Can you share a link to your board?
Regards,
Sara
Hii,
I was trying to add esp32 boards to arduino ide via board manager
but i keep getting this errors
Error downloading https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
my internet connection is working perfectly fine, i tried opening this link in my android phone it opened but when i tried to open this in my laptop and pc it didn’t opened.
i don’t know why but this link in not opening in my pc and laptop and that’s why i am not able to add esp32 boards in arduino ide please help.
Did you add it to
File -> Preferences -> Additional boards manager urls:s?
Rui, Sara, Greetings!
I really liked your tutorials, and the ability to explain that leaves few doubts.
When will the ebooks be released in Portuguese.
Abraços do Brasil!!
Hi.
Thank you for your nice words.
Unfortunately, our Portuguese-speaking public is very reduced.
So, I don’t think we’ll have a Portuguese version.
Regards,
sara
is there a trick to powering the esp-wroom-32 via the vin port? I used 5v and would not work, I only am able to ower the board via a the micro usb port…?
Hi.
Did you also connect the GND?
Regards,
Sara
Along the same path, our board powers up and runs just fine using the Micro-USB or the 5V input, but just sets and stares back when supplied with 3.3V. This is on an ESP32-DevKitC V4 board at the heart of the project PCB. The red LED is illuminated, and 3.31Vdc is measured between the 3V3 pin and GND. Is there a pin that needs to be strapped high or low to let the ESP know where it’s receiving it’s power from? Three different and new ESPs have been tried with identical results. The 5V input and on-board LDO can’t be used due to the current demands on the 3.3V distribution (large LCD and surrounding component set).
Thanks
Hi
thanks for this great tutorials!
I used info for my first esp32 and helped me a lot!
but here is not info for newer esp32 like esp32-s3
No difference, it is same enough
From the tutorial at https://randomnerdtutorials.com/getting-started-with-esp32/
“At the time of writing this tutorial, we recommend using the legacy version (1.8.19) with the ESP32.”
I could not find the date this tutorial was posted. Without any context, the above quoted excerpt is not helpful. Please include the date tutorials were posted on at the top of each page, I think it would be helpful to many.
Thanks!
I was thinking the same exact thing.
it is just below header picture
“Updated 29 September 2023”
Hi.
I just updated it after the comment.
Regards,
Sara
Can i run YOLOv5 in this device??
I have been using Adruino IDE 2.2.1 for a while with my ESP32 boards, and everything works fine, so far. So I recommend to use this version, it is so much better than 1.8x. I could say it is so useful now that no need to think switching to other IDE.
Also I backup my skecthes to Arduino Cloud nowdays, it is quite handy too.
Hi.
Yes, except that Arduino IDE 2 doesn’t support SPIFFS and LittleFS plugins yet.
Regards,
Sara
Today Dec 12th 2023, ESP32-S3 does not work with version V3.0.0-alpha3 of ESP32 boards, however ESP32 works properly.
I have to use version V2.0.11 in order to work with any ESP32-XX board.
Using library WiFi at version 2.0.0 in folder: C:\Users\jhon Doe \AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\libraries\WiFi
exit status 1
can i know the range of the wi-fi of Esp32 , and also how to connect extra antenna to increase the range
hello mam i want to buy ‘Doit ESP32 Devkit V1 Based on Wroom32’ but not able to find exact module or in correct price over the internet can you guide me or can you give me link to buy right module on right price i want to buy 1 and after that more than 100
Hi.
From which store do you want to buy your boards from?
You can see our page on Maker Advisor for the DOIT boards : https://makeradvisor.com/tools/esp32-dev-board-wi-fi-bluetooth/
Regards,
Sara
i found this: robocraze.com/products/nodemcu-32-wifi-bluetooth-esp32-development-board30-pin?variant=42268194046176
thi i same product?
Yes. Seems like the same board. It’s the version with 30 pins.
Hi
Have been unsuccessful interfacing my ESP32:DEVKIT V1 DOIT, because my Windows 11 PC complains. ‘specified INF files could not be copied & installed:. So driver will not work. Please can you direct me somewhere I can download a proper driver.
Thanks
Hi.
At what point do you get that error?
Regards,
Sara
When trying to upload my code to a ESP32 DEVKIT V1 – DOIT board, I get the error msg: Wrong boot mode detected (0X13), visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html.
Please help.
Thanks
Hi.
Take a quick look at our troubleshooting guide: https://randomnerdtutorials.com/esp32-troubleshooting-guide/
Regards,
Sara
Have finally found a answer on the internet: Hold the ‘boot’ button down while uploading sketch.
Hi Sara!
I am trying to program ESP32-S2 board using Arduino IDE. Scetch loads but finally there is some problem in order to run it:
WARNING: ESP32-S2FNR2 (revision v1.0) chip was placed into download mode using GPIO0.
esptool.py can not exit the download mode over USB. To run the app, reset the chip manually.
To suppress this note, set –after option to ‘no_reset’.
Any idea how to solve this?
Hi.
I’m not sure. Try to press the RST button on your board when you’re uploading new code.
Regards,
Sara
Hello Sara!
My problem is a bit more complicated but I found a solution:
https://www.studiopieters.nl/esp32-s2/
The other problem is that there is some strange behaviour using Arduino IDE. When I compile a Sketch for ESP32 using OneWire library compiler terminates with error message:
c:\Users\penat\Documents\Arduino\libraries\OneWire\util/OneWire_direct_gpio.h:134:17: error: ‘GPIO’ was not declared in this scope
but same Sketch compiles ok if board is ESP8266. The Sketch I am using is OneWire example Sketch. Any idea about reason?
A serial exception error occurred: Write timeout
Note: This error originates from pySerial. It is likely not a problem with esptool, but with the hardware connection or drivers.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Failed uploading: uploading error: exit status 1
Thanks for this tutorial, it’s clear, simple and correct.
I’m on Debian 12 “bookworm” where the whole install command is:
sudo apt update && sudo apt install -y python3-serial arduino
My generic ESP-VROOM-32 board worked out of the box.
Followed the instructions above to add the esp32 board to Arduino IDE (1.8.19), but no entry exists in the Library Manager. MANY esp32-related entries, but not the one you show in the tutorial.
Bill,
I am running Debian 12 and last week installed Arduino IDE 1.8.19.
Followed the same instructions as above with no issues, it only took more time then then mentions ‘ few seconds’. A lot of dependent packages were installed, took over several minutes.
Make sure the Arduino IDE has internet access (proxy?)
After step 2 in ‘Installing the ESP32 in Arduino IDE’, close the program and restart it, to see if it is set correctly in Preferences.
Then step 3. Open the Boards Manager. Go to Tools > Board >Boards Manager…
I installed ‘ESPEssentials’ instead of the mentioned ESP32, as I wanted to test a WROOM version of ESP, and this worked fine.
Weird issue I face is: only the first compile works, a second, third etc run will always fail (although I run the IDE inside it’s own python virtual environment).