Getting started with MicroPython and ESP8266
Introduction
A while ago I bought some ESP8266 and ESP32 dev boards to play around with and I finally found a project to try it out.
For my project, I used ESP32 but I could easily choose ESP8266. This guide contains which tools I use and how I prepared my workspace to code for ESP8266.
This guide covers:
- flashing SOC
- install proper tooling
- deploying a simple script
Make sure that you are using a good USB cable. I had some problems with mine and once I replaced it everything started to work.
Flashing the SOC
Plug your ESP8266 to USB port and check if the device was recognized with
executing dmesg | grep ch341-uart
.
Then check if the device is available under /dev/
by running ls /dev/ttyUSB*
.
Linux users: if a device is not available be sure you are in
dialout
group. You can check this by executinggroups $USER
. You can add a user todialout
group withsudo adduser $USER dialout
.
After these conditions are meet go to the navigate to
https://micropython.org/download/esp8266/
and download esp8266-20200902-v1.13.bin
.
mkdir esp8266-test
cd esp8266-test
wget https://micropython.org/resources/firmware/esp8266-20200902-v1.13.bin
After obtaining firmware we will need some tooling to flash the firmware to the board.
sudo pip3 install esptool
You can read more about esptool
at
https://github.com/espressif/esptool/.
Before flashing the firmware we need to erase the flash on device. Substitute
USB0
with the device listed in output of ls /dev/ttyUSB*
.
esptool.py --port /dev/ttyUSB0 erase_flash
If flash was successfully erased it is now time to flash the new firmware to it.
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20200902-v1.13.bin
If everything went ok you can try accessing MicroPython REPL with screen /dev/ttyUSB0 115200
or picocom /dev/ttyUSB0 -b115200
.
Sometimes you will need to press
ENTER
inscreen
orpicocom
to access REPL.
When you are in REPL you can test if all is working properly following steps.
> import machine
> machine.freq()
This should output a number representing a frequency of the CPU (mine was
80000000
).
When you are in screen
or picocom
these can help you a bit.
Key | Command |
---|---|
CTRL+d | preforms soft reboot |
CTRL+a x | exits picocom |
CTRL+a \ | exits screen |
Install better tooling
Now, to make our lives a little bit easier there are couple of additional tools that will make this whole experience a little more bearable.
There are twq cool ways of uploading local files to SOC flash.
ampy
# installing ampy
sudo pip3 install adafruit-ampy
Listed below are some common commands I used.
# uploads file to flash
ampy --delay 2 --port /dev/ttyUSB0 put boot.py
# lists file on flash
ampy --delay 2 --port /dev/ttyUSB0 ls
# outputs contents of file on flash
ampy --delay 2 --port /dev/ttyUSB0 cat boot.py
I added
delay
of 2 seconds because I had problems with executing commands.
rshell
Even though ampy
is a cool tool I opted with rshell
in the end since it's
much more polished and feature rich.
# installing ampy
sudo pip3 install rshell
Now that rshell
is installed we can connect to the board.
rshell --buffer-size=30 -p /dev/ttyUSB0 -a
This will open a shell inside bash and from here you can execute multiple
commands. You can check what is supported with help
once you are inside of a
shell.
m@turing ~/Junk/esp8266-test
$ rshell --buffer-size=30 -p /dev/ttyUSB0 -a
Using buffer-size of 30
Connecting to /dev/ttyUSB0 (buffer-size 30)...
Trying to connect to REPL connected
Testing if ubinascii.unhexlify exists ... Y
Retrieving root directories ... /boot.py/
Setting time ... Sep 06, 2020 23:54:28
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 2000
Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
/home/m/Junk/esp8266-test> help
Documented commands (type help <topic>):
========================================
args cat connect date edit filesize help mkdir rm shell
boards cd cp echo exit filetype ls repl rsync
Use Control-D (or the exit command) to exit rshell.
Inside a shell
ls
will display list of files on your machine. To get list of files on flash folder/pyboard
is remapped inside the shell. To list files on flash you must performls /pyboard
.
Moving files to flash
To avoid copying files all the time I used rsync
function from the inside of
rshell
.
rsync . /pyboard
Executing scripts
It is a pain to continuously reboot the device to trigger /pyboard/boot.py
and
there is a better way of testing local scripts on remote device.
Lets assume we have src/freq.py
file that displays CPU frequency of a remote
device.
# src/freq.py
import machine
print(machine.freq())
Now lets upload this and execute it.
# syncs files to remove device
rsync ./src /pyboard
# goes into REPL
repl
# we import file by importing it without .py extension and this will run the script
> import freq
# CTRL+x will exit REPL
Additional resources
Other posts
- Using DigitalOcean Spaces Object Storage with FUSE
- My journey from being an internet über consumer to being a full hominum again
- Microsoundtrack — That sound that machine makes when struggling
- Encoding binary data into DNA sequence
- Converting Valgrind callgrinds to SVG format
- Configuration and plugin hell and why I don't use Vim and Tmux anymore
- LED technology might not be as eco-friendly as you think
- Using Digitalocean Spaces to sync between computers
- The abysmal state of GNU/Linux and a case against shared object libraries
- Golang profiling simplified
- Remote work and how it affects the daily lives of people
- Debian based riced up distribution for Developers and DevOps folks
- Trying to build a New kind of terminal emulator for the modern age
- Simple world clock with eInk display and Raspberry Pi Zero