ESP32-dev platform PoC for IoT projects

ESP32 is a feature-rich MCU with integrated Wi-Fi and Bluetooth connectivity for a wide-range of applications. For more information please go to ESP32 vendor website.

PoC was implemented to show ESP32-dev board capabilities. The application enables the following features:‌‌

1. UART data handling

2. SoftAP and STA WiFi

3. HTTP Server

4. MQTT client

5. OTA update functionality


1. Esp32-PoC application displays data received over UART on a console (one character a time)

> I (18957) UART: : Received: f

2. Esp32-PoC application setup WiFi to work in both modes (softAP and STA) simultaneously. As soon it receives SSID and password for AP it will connect to STA automatically.

> I (342) wifi: mode : sta (24:6f:28:de:79:94) + softAP (24:6f:28:de:79:95)
> I (352) POC: wifi_init_ap_sta finished. ssid:TestAP password:nopassword

3. Esp32-PoC application starts HTTP server right after the client connects to softAP over WiFi.

> I (16282) POC: Starting server on address: port: '80'

Afterwards user can connect to HTTP server running on ESP32 board using the browser, as shown on the picture:

Here 192.168.4.1 is the ESP32-dev IP address. Every time user reloads the main page on 192.168.4.1 the Esp32-PoC application scans and returns the list of APs found.

There is a POST form in HTTP response and if user sends the SSID and password the Esp32-PoC application is trying to connect to that AP.

After connection to STA AP the HTTP server is not stopped and continues functioning giving the user a possibility to connect to another AP.

>  softAP assign IP to station,IP is: 192.168.4.2
> I (26852) wifi: connected with PYUR C5A10, channel 1
> I (27712) event: sta ip: 192.168.0.6, mask: 255.255.255.0, gw: 192.168.0.1

4. As soon as esp32-poc application gets connected to STA AP it starts MQTT client which is connecting to a broker mqtts://iot.eclipse.org:8883.

CA certificate is embedded into Esp32-PoC binary and used afterwards in order to connect to the broker.

> I (44757) MQTT: : MQTT_EVENT_SUBSCRIBED, msg_id=62033

MQTT client subscribes on “ota_update” topic and waits until somebody notifies that there is a new Firmware available.

A special python script  was implemented mqtt_test.py in order to publish messages on a channel which in turn trigger the OTA update on Esp32-PoC application.

> I (52437) OTA: : There is new OTA update! Connecting to OTA server....  

5. When new OTA update notification is received Esp32-PoC application connects to HTTPS server and downloads the Firmware binary.

The self-signed CA certificate was embedded into the Esp32-PoC binary.

When the FW binary is downloaded Esp32-PoC application resets the board and boots from another partition.

> I (64367) esp_https_ota: Connection closed,all data received
>  I (65597) esp_https_ota: esp_ota_set_boot_partition succeeded
> I (159) POC: POC version v0.2

Conclusions:

  • The Esp32-PoC image size: 726KB
  • Free heap memory before OTA update run is 152Kb comparing to 276Kb when the app starts.
  • Esp32-PoC uses 2 RootCA certificates to connect to SSL servers.
  • Esp32-PoC runs HTTP server and softAP constantly allowing user to connect to STA AP.

Find logs in here.