Hello! It's been a while since the last time I posted something on this page. It's because things was rough lately and they demand a lot of attention, focus, and energy.
This time I'm gonna tell you about how to get started with ESP32 programming on GNU/Linux environment.
What is ESP32?
ESP32 is the next generation of microcontroller and many said that it is the successor of the infamous ESP8266, microcontroller unit with built-in WiFi support.
ESP32 is a lot better than ESP8266 in so many ways. But, it is still new which means many people haven't touched it yet. Here's the comparison table between ESP8266 and ESP32
The official framework for developing ESP32 program is called ESP IoT Development Framework and often abbreviated as ESP-IDF. ESP-IDF uses C and C++ as the programming language.
We can also use Arduino framework for ESP32 with Arduino IDE as the development environment. Even better, we can use both ESP-IDF and Arduino at the same time!
How? I'll write about it later.
Without further ado, let's get started by installing the required software for developing ESP32 program.
sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial
sudo yum install git wget make ncurses-devel flex bison gperf python pyserial
sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial
Installing the toolchain
If you have finished installing these required software, you need to install the toolchain for ESP32. Fortunately, you can't use the package manager for this, and that's where the fun begins.
For 64 bit client, the download link is
And for the 32 bit client
The next step is to download the ESP32 toolchain. In this post, I'll use the 64 bit version.
Note: my terminal's
$CWD is the
~ or the home folder.
Now, we create
esp directory inside the home folder and move to the newly created directory.
mkdir esp cd esp
Download the toolchain using wget.
$ wget -c https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
Next, extract the newly downloaded toolchain.
tar -xzf xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
The toolchain wil be extracted to
Now, you need to add the path to esp32 toolchain binaries to the PATH environment variable.
You should put that line above to
.profile if you're using bash as shell. If you're not using bash, please add the line above to the file with similar function as
If you don't do that, you'll have to run the
export command whenever you want to develop ESP32 firmware.
Installing ESP IoT Development Framework
After installing the toolchain, you need to install the framework as well.
First, we need to clone the ESP-IDF repository to the
~/esp/esp-idf directory. Inside the
~/esp directory, run:
git clone https://github.com/espressif/esp-idf.git --recursive
Now, add the IDF_PATH environment variable that contains the path to ESP-IDF directory.
Same as before, you should add the above line to
.profile or files with similar function.
To confirm the ESP-IDF installation, restart the terminal and run
If you see nothing, you may want to recheck the installation process.
Yay, we hanve installed the toolchain and framework to our system (or user scope). I will not explain any lines of code here. I'm just gonna explain how to build and flash the ESP32 program.
Ok, we will copy the
hello_world example from the ESP-IDF examples to the
cp -r $IDF_PATH/examples/get-stated/hello_world .
Next, connect your ESP32 to the USB port using USB cable. If you're using a development board such as Nano32, ESP32 dev kit, then you're all set.
Before building & flashing the code to the ESP32 board, we may need to change the default configuration values. In this case, we're going to change the ESP32 serial port and baud rate of the serial flasher.
Use up & down arrow keys to navigate between menu items. Press enter to configure the selected menu and press esc to exit from the current configuration.
Serial flasher config menu. Change the
Default serial port configuration value to match the serial port of your ESP32.
Next, change the baud rate. Optionally, you can use the 2M baud rate which is a lot faster than the default (115200) baud rate.
Exit and save the configuration by pressing esc and select yes if the menuconfig ask you to save the configuration.
Next, build and flash the program.
Alternatively, you may add the
-j flag with the number of your processor core as the flag value e.g
make -j4 flash
This will create 4 jobs for compiling the source code.
Open the serial monitor
If everything went smoothly, you can open the serial monitor by running
You will see the log from the hello world program. Press
CTRL + ] to exit the serial monitor.
You have installed the ESP32 development environment to your GNU/Linux system. So, what's next?
I'll post some more tutorials about ESP32 programming. Next post will be about manipulating GPIO.
Thanks for reading!