HowTo Build MicroPython for ESP32 on OSX

A prebuild toolchain for the ESP32 is available from Espressif: https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz

If you’re interested in building from scratch check the docs for IDF v.3.3 https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started/macos-setup.html

Get MicroPython and initialise its dependencies
git clone https://github.com/micropython/micropython.git
git submodule update --init
Get the correct version of the IDF and its dependencies

As of 09/2019 the MicroPython build needs v3.3 of the IDF. Later versions use cmake instead of make.

git clone https://github.com/espressif/esp-idf.git
git checkout 6ccb4cf5b7d1fdddb8c2492f9cbc926abaf230df
git submodule update --init --recursive
Unpack the toolchain and add IT to the PATH
tar -zxf xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
export PATH=$PATH:<replace with absolute path to toolchain>/bin
Virtual Environment

Some of the build tools and dependencies require Python 3. Lets create a virtual environment and activate it to keep things separated.

virtualenv --python=python3 esp32buildEnv
source esp32buildEnv/bin/activate
Install the python dependencies required by the IDF
pip install -r esp-idf/requirements.txt
Build the crosscompiler
cd mpy-cross
make
Build the ESP32 port
cd ports/esp32
ESPIDF=<path to IDF root> PYTHON2=/usr/bin/python make  

The resulting “firmware.bin” can be uploaded to your ESP32 with the “esptool” as usual.

How To change a MAC address on OSX

List all interfaces by running the command ‘ifconfig’ in a terminal. Pick the interface you want to change e.g “en0

To set a different MAC on the interface run:

sudo ifconfig [interface] lladdr [MAC]

e.g: sudo ifconfig en0 lladdr dc:03:be:a0:a5:ab

You can generate a random MAC by running:
openssl rand -hex 6 | sed ‘s/\(..\)/\1:/g; s/.$//’

Formatting a Disk with FAT32 on OSX Command-Line

If the Disk Utility GUI on OSX doesn’t allow you to format a USB Stick or SD Card with FAT32 the command-line does.

  1. List the available disks with: “diskutil list”
  2. Find the device you want to format eg.: “/dev/disk2” and use this device in the next command.
  3. Format with:sudo diskutil eraseDisk FAT32 DISKNAME MBRFormat /dev/disk2″

The Difference Between 127.0.0.1 and Localhost

Most of the time it doesn’t make a difference what you use, “localhost” or 127.0.0.1. It turns out that it does make a somehow big difference when connecting to a mysql server.

If you use “localhost” most clients will try to “connect” via the socket file that the server puts, if it adheres to the standard, into /tmp, if you use 127.0.0.1 a IP connection is made.

I was made aware of this fact when I tried to connect to the mysql server that comes with XAMP. Its configuration does not adhere to the standard and puts the socket file into /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock on OSX.

The clients that wasn’t aware of this fact obviously failed to connect and threw the error: “Connect Error: SQLSTATE[HY000] [2002] No such file or directory” when a connection attempt was made. Hope who ever has the same problem finds this and spends less time debugging then I did 🙂