Wednesday, November 9, 2016

ESP32 Linux development environment

To setup the development environment for ESP32 is more simple like it was for the ESP8266.

There are few easy steps ( you can found them also here).

1. Download lubuntu-16.04.1-desktop-amd64.iso file and the 
After you installed you lubuntu VM ( 64 bits) and the VBoxGuestAdditions_5.1.6.iso ( for full screen, shared directories between the windows and Linux, shared clipboard)

2.Install the Lubuntu iso image using the Virtual Box

3.Open a terminal and issue sudo apt install build-essential

4.Mount the VBoxGuestAdditions_5.1.6.iso and run the as root from /media/your_username/VBOXADDITIONS_5.1.6_110634 directory

Now you are ready to install the ESP32 environment.
You can follow the steps from 5 to 10 or get the right scripts from and run it. It will do the steps from 5 to 10 for you.

5. Install the applications:
sudo apt-get install gawk gperf grep gettext ncurses python python-dev automake bison flex texinfo help2man libtool

6.Create a directory:
 make ~/esp32
This will create a directory in the /home/<your_username>/

7.Download the binary toolchain
cd ~/esp32
Untar the archive using 

tar xvf xtensa-esp32-elf-linux64-1.22.0-59.tar.gz

This will create a directory named xtensa-esp32-elf/ int the /home/<your_user>/esp32/

7.Update the PATH variable with the xtensa toolchain

export PATH=$PATH:$HOME/esp32/xtensa-esp32-elf/bin
Attention: This command will set the PATH just for the current terminal and for the current session. To make this permanent update the .bashrc file in the /home/<your_name>/ directory.

To check this open a new terminal and issue the command 

echo $PATH 

and you should see the esp32/xtensa-esp32-elf/bin in the output.

8. Get ESP-IDF from github

cd ~/esp32
git clone --recursive
cd ~/esp32/esp-idf
git submodule update --init
9.Download a template application
cd ~/esp32
git clone myapp
You will have now in the /home/<your_username>/esp32 a directory named myapp.

Update again the .bashrc file if you are not planning to move the IDF directory and add the following line at the end of /home/<your_username>/.bashrc

export IDF_PATH=$(pwd)/esp32/esp-idf

10. Configure and run your firs application

Go to /home/<your_username>/esp32/myapp and issue command

make menuconfig

that will adapt the sdkconfig according to your project and then compile it with


To flash it to the ESP32 use the 

make flash 


Job done !

ESP32 increase the maximum number of sockets

Still didn't found an ESP32 with a decent delivery price so today I've tested the environment provided by EspressIf looking on the maximum number of sockets. On ESP8266 I've managed to have more then 20 sockets opened and carrying MQTT packets ( see

I've noticed that the maximum number of sockets that you can setup from make menuconfig is 16. 

All the values that you are setting from make menuconfig are ending in a file named sdkconfig in the root of you app directory. This sdkconfig file will be converted to sdkconfig.h located in app/build/include/sdkconfig.h.

Even you are modifying a value direct in the sdkconfig on the compile time you will be invited to enter a value 1..16 for maximum number of sockets.

Solution #1. (Safest one)

Change the sdkconfig.h file overwrite the desired value and recompile


Solution #2. (not recommended but possible )

Modify directly the file:


If you modified values in make menuconfig and you don't know what was before don't worry just do a diff between the app/sdkconfig and app/sdkconfig.old file.

Wednesday, October 12, 2016

ESP32 is on preorder

Good new today !!!

Today the ESP32 is on preoder on banggood. Delivery will start by the end of October.

If you are in the first 50 orders $7.69, up to 200 $8.69 and $9.69 after that.

As a reminder the specs from the official espressif site are:

Key Features

  • 240 MHz dual core Tensilica LX6 microcontroller with 600 DMIPS
  • Integrated 520 KB SRAM
  • Integrated 802.11BGN HT40 Wi-Fi transceiver, baseband, stack and LWIP
  • Integrated dual mode Bluetooth (classic and BLE)
  • 16 MByte flash
  • 2.2V to 3.6V operating voltage
  • -40°C to +125°C operating temperature
  • On-board PCB antenna / IPEX connector for external antenna


  • Ultra low noise analog amplifier
  • Hall sensor
  • 10x capacitive touch interface
  • 32 kHz crystal oscillator

32x GPIO

  • 3 x UARTs, including hardware flow control
  • 3 x SPI
  • 2 x I2S
  • 12 x ADC input channels
  • 2 x DAC
  • 2 x I2C
  • PWM/timer input/output availabe on every GPIO pin
  • OpenOCD debug interface with 32 kB TRAX buffer
  • SDIO master/slave 50 MHz
  • Supports external SPI flash up to 16 MB
  • SD-card interface support

Security Related

  • WEP, WPA/WPA2 PSK/Enterprise
  • Hardware accelerated encryption: AES / SHA2 / Elliptical Curve Cryptography / RSA-4096


  • Supports sniffer, station, softAP and Wi-Fi direct modes
  • Max data rate of 150 Mbps@11n HT40, 72 Mbps@11n HT20, 54 Mbps@11g, and 11 Mbps@11b
  • Maximum transmit power of 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11n
  • Minimum receiver sensitivity of -98 dBm
  • 135 Mbps UDP sustained throughput
  • 2.5 μA deep sleep current

Saturday, September 3, 2016

MQTT Broker on ESP32 #2

MQTT Broker on ESP32

I've managed to put an MQTT broker on ESP32 (aka ESP31B).

The code is under development and ESP32 at this time is not yet released, but when it will be I'll also have the code complete. There are some problems but let's hope they will be resolved by the Espressif System. 

I will try to see if I can do the same with ESP8266 which is already on the market. 

Don't forget that the same broker is running on its little brother ESP8266. Check it here.

Monday, May 23, 2016

MQTT Broker on ESP32

Code from ESP8266 has been ported to ESP32 module, except the WI-Fi configure that was using  functions not present into the FreeRTOS SDK.

Everything is working great, having more heap is a big relief. In the next SDK EspressIf must tune a little bit the window sizes and some buffers in FreeRTOS so will achieve same performance like the ESP8266 FreeRTOS SDK.

Friday, January 15, 2016


According to the documentation ESP32 can have up to 5 images to boot from. That is nice.

Monday, December 28, 2015

First program

After the Christmas now let's get back to do some work.

I've updated the SDK from 1.0.0 to 1.1.0 and I've flashed for the first time the ESP32.

Erasing flash...
Erase size 1400 num_blocks 5 offset 0
FLASH_BEGIN failed, applying ESP32 workaround...
Wrote 5120 bytes at 0x00000000 in 0.6 seconds (69.9 kbit/s)...
Erasing flash...
Erase size 2800 num_blocks a offset 4000
Wrote 10240 bytes at 0x00004000 in 1.2 seconds (69.9 kbit/s)...
Erasing flash...
Erase size 3c800 num_blocks f2 offset 40000
Wrote 247808 bytes at 0x00040000 in 28.6 seconds (69.2 kbit/s)...

Erase size 0 num_blocks 0 offset 0

and some printfs:

and first connection to my WiFi router:

Now if the setup is working I should start by moving all my work to from ESP8266 non RTOS to RTOS and test it on ESP32.