If you want to use the Arduino IDE with an ESP32 or ESP8266 microcontroller on Ubuntu 20.04, you get the following error when compiling your sketch:
Traceback (most recent call last): File "/home/koan/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 37, in <module> import serial ImportError: No module named serial
This is because
esptool.py is called as a Python 2 program, and Python 2 is deprecated. Ubuntu 20.04 doesn't even have
pip anymore for Python 2, so you can't even install the
serial module to solve this error.
There are two solutions to this problem: using Python 3 or Python 2.
Installing the module for Python 3
One solution is to create a symlink from
/usr/bin/python3. Ubuntu even has a package for this:
After this install the
If you already have the
serial module, you have to remove it first:
After this, try compiling your sketch again. This time the Arduino IDE calls
esptool.py with Python 3, and thus finds the module you just installed with
This approach makes
python behave like
python3 globally. So if you rely on other legacy Python software, this may not be the best approach.
Installing the module for Python 2
Another solution is to keep using Python 2 and thus installing the missing module with
pip2. First enable the
universe repository, where Python 2 has been moved to in Ubuntu 20.04:
Update your package list, install Python 2 if you don't have it (it's not included anymore by default in new Ubuntu installations, but the Arduino IDE would have shown you another error in that case) and then
$ sudo apt update $ sudo apt install python2 $ curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py $ python2 get-pip.py
Then finally install the missing module:
After this, try compiling your sketch again. The Arduino IDE still calls
esptool.py with Python 2, but this time it finds the module you just installed with
pip2, so the error disappears.