Amazon Freertos Espressif ESP32 DevKitC demo is failing to connect

sblu wrote on December 18, 2018:

I am trying to get the demo to run correctly and hitting ttwo errors
1. Failing to connect
2. failing to find SPIFFS partition.

here is the log

LD build/aws_demos.elf
esptool.py v2.2.1
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)…
esptool.py v2.2.1
Connecting…_____…_
Chip is ESP32D0WDQ5 (revision (unknown 0xa))
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 921600
Changed.
Configuring flash size…
Auto-detected Flash size: 4MB
Compressed 21952 bytes to 13045…
Wrote 21952 bytes (13045 compressed) at 0x00001000 in 0.2 seconds (effective 1150.7 kbit/s)…
Hash of data verified.
Compressed 596272 bytes to 378049…
Wrote 596272 bytes (378049 compressed) at 0x00010000 in 5.4 seconds (effective 882.3 kbit/s)…
Hash of data verified.
Compressed 3072 bytes to 82…
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 6164.3 kbit/s)…
Hash of data verified.

Leaving…
Hard resetting…
MONITOR
— idf_monitor on /dev/ttyUSB0 115200 —
— Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H —
ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:6064
ho 0 tail 12 room 4
load:0x40078000,len:0
load:0x40078000,len:15784
entry 0x400792e8
I (30) boot: ESP-IDF v3.1-dev-322-gf307f41-dirty 2nd stage bootloader
I (30) boot: compile time 19:22:47
I (31) boot: Enabling RNG early entropy source…
I (36) boot: SPI Speed : 40MHz
I (40) boot: SPI Mode : DIO
I (44) boot: SPI Flash Size : 4MB
I (48) boot: Partition Table:
I (52) boot: ## Label Usage Type ST Offset Length
I (59) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (67) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (74) boot: 2 factory factory app 00 00 00010000 00100000
I (82) boot: End of partition table
I (86) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x12b2c ( 76588) map
I (121) esp_image: segment 1: paddr=0x00022b54 vaddr=0x3ffb0000 size=0x02424 ( 9252) load
I (125) esp_image: segment 2: paddr=0x00024f80 vaddr=0x40080000 size=0x00400 ( 1024) load
0x40080000: _iram_start at /home/owais/Documents/freeRTOS/amazon-freertos/lib/FreeRTOS/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vectors.S:1685

I (128) esp_image: segment 3: paddr=0x00025388 vaddr=0x40080400 size=0x0ac88 ( 44168) load
I (155) esp_image: segment 4: paddr=0x00030018 vaddr=0x400d0018 size=0x6e600 (452096) map
0x400d0018: _stext at ??:?

I (312) esp_image: segment 5: paddr=0x0009e620 vaddr=0x4008b088 size=0x032dc ( 13020) load
0x4008b088: _frxt_task_coproc_state at /home/owais/Documents/freeRTOS/amazon-freertos/lib/FreeRTOS/portable/ThirdParty/GCC/Xtensa_ESP32/portasm.S:647

I (318) esp_image: segment 6: paddr=0x000a1904 vaddr=0x400c0000 size=0x00000 ( 0) load
I (327) boot: Loaded app from partition at offset 0x10000
I (327) boot: Disabling RNG early entropy source…
I (331) cpu_start: Pro cpu up.
I (334) cpu_start: Single core mode
I (339) heap_init: Initializing. RAM available for dynamic allocation:
I (346) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (352) heap_init: At 3FFC07A8 len 0001F858 (126 KiB): DRAM
I (358) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM
I (364) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (371) heap_init: At 4008E364 len 00011C9C (71 KiB): IRAM
I (377) cpu_start: Pro cpu start user code
I (59) cpu_start: Starting scheduler on PRO CPU.
I (84) wifi: wifi firmware version: f79168c
I (84) wifi: config NVS flash: enabled
I (84) wifi: config nano formating: disabled
I (84) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (94) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (104) wifi: Init dynamic tx buffer num: 32
I (104) wifi: Init data frame dynamic rx buffer num: 32
I (114) wifi: Init management frame dynamic rx buffer num: 32
I (114) wifi: wifi driver task: 3ffc73d8, prio:23, stack:4096
I (124) wifi: Init static rx buffer num: 10
I (124) wifi: Init dynamic rx buffer num: 32
I (134) wifi: wifi power manager task: 0x3ffcc018 prio: 21 stack: 2560
0 6 [main] WiFi module initialized. Connecting to AP insta…
I (194) phy: phy_version: 383.0, 79a622c, Jan 30 2018, 15:38:06, 0, 0
I (194) wifi: mode : sta (30:ae:a4:dd:8b:b4)
I (194) WIFI: SYSTEM_EVENT_STA_START
I (1524) wifi: n:11 0, o:1 0, ap:255 255, sta:11 0, prof:1
I (2504) wifi: state: init -> auth (b0)
I (2514) wifi: state: auth -> assoc (0)
I (2514) wifi: state: assoc -> run (10)
I (2534) wifi: connected with insta, channel 11
I (2534) WIFI: SYSTEM_EVENT_STA_CONNECTED
1 301 [IP-task] vDHCPProcess: offer c0a801f4ip
I (3104) event: sta ip: 192.168.1.244, mask: 255.255.255.0, gw: 192.168.1.1
I (3104) WIFI: SYSTEM_EVENT_STA_GOT_IP
2 303 [IP-task] vDHCPProcess: offer c0a801f4ip
3 303 [main] WiFi Connected to AP. Creating tasks which use network…
4 304 [main] Write code signing certificate…
I (3124) PKCS11: Initializing SPIFFS
E (3124) SPIFFS: spiffs partition could not be found
E (3124) PKCS11: Failed to find SPIFFS partition
5 306 [main] Key provisioning done…
6 306 [main] Creating MQTT Echo Task…
7 307 [MQTTEcho] MQTT echo attempting to connect to a19lc3yo4jfkf5.iot.us-east-1.amazonaws.com.
I (3254) PKCS11: Initializing SPIFFS
E (3254) SPIFFS: spiffs partition could not be found
E (3254) PKCS11: Failed to find SPIFFS partition
8 318 [MQTT] ERROR: Object with label Device Priv TLS Key not found.
9 319 [MQTTEcho] ERROR: MQTT echo failed to connect with error 1.
10 319 [MQTTEcho] MQTT echo test could not connect to broker.
11 320 [MQTTEcho] MQTT echo demo finished.
12 320 [MQTTEcho] ----Demo finished----
I (5514) wifi: pm start, type:0

FreeOurToes wrote on December 18, 2018:

Hey,

Have you set up esp IDF path to user profleas in https://docs.espressif.com/projects/esp-idf/en/latest/get-started/add-idf_path-to-profile.html ?
“export IDF_PATH=~/esp/esp-idf”
Because you don’t need to.
Try “make clean” and then recompile your project and do “make erase_flash” before flashing new firmware.

sblu wrote on December 19, 2018:

no, IDF_PATH is not defined.
doing the other items described did not help. fails the same way.

SarenaAtAws wrote on December 21, 2018:

Hi sblu,

To to re-iterate what FreeOurToes has suggested:

  1. Make sure that IDF_PATH is not defined in your system environment variables.
    2. Run “make erase_flash” before running “make flash monitor”.

I see the error message “ERROR: Object with label Device Priv TLS Key not found.” As you may already know, that is probably related to the SPIFFS unable to mount and so the keys could not not be written.

I have a ESP32DevKitC and I am running the latest version of Amazon FreeRTOS from https://github.com/aws/amazon-freertos. The only files I have updated are: aws_clientcredential.h. aws_clientcredential_keys.h, and sdkconfig with only my serial port.

Here are my commands and the output following in the msys32 terminal:


sarem@DOMAIN MINGW32 /c/amazon-freertos/demos/espressif/esp32_devkitc_esp_wrover_kit/make
$ make erase_flash
Erasing entire flash...
esptool.py v2.2.1
Connecting........_
Chip is ESP32D0WDQ5 (revision 0)
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 3.2s
Hard resetting...

sarem@DOMAIN MINGW32 /c/amazon-freertos/demos/espressif/esp32_devkitc_esp_wrover_kit/make
$ make flash monitor
Flashing binaries to serial port COM31 (app at offset 0x20000)...
esptool.py v2.2.1
Connecting....
Chip is ESP32D0WDQ5 (revision 0)
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 21872 bytes to 13022...
Wrote 21872 bytes (13022 compressed) at 0x00001000 in 1.2 seconds (effective 152.0 kbit/s)...
Hash of data verified.
Compressed 595072 bytes to 377858...
Wrote 595072 bytes (377858 compressed) at 0x00020000 in 33.5 seconds (effective 142.0 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 119...
Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.0 seconds (effective 1441.7 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...
MONITOR
--- idf_monitor on COM31 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5988
load:0x40078000,len:0
load:0x40078000,len:15784
entry 0x400792e8
I (28) boot: ESP-IDF v3.1-dev-322-gf307f41-dirty 2nd stage bootloader
I (28) boot: compile time 13:47:58
I (29) boot: Enabling RNG early entropy source...
I (35) boot: SPI Speed      : 40MHz
I (39) boot: SPI Mode       : DIO
I (43) boot: SPI Flash Size : 4MB
I (47) boot: Partition Table:
I (50) boot: ## Label            Usage          Type ST Offset   Length
I (58) boot:  0 nvs              WiFi data        01 02 00010000 00006000
I (65) boot:  1 otadata          OTA data         01 00 00016000 00002000
I (73) boot:  2 phy_init         RF data          01 01 00018000 00001000
I (80) boot:  3 ota_0            OTA app          00 10 00020000 00100000
I (88) boot:  4 ota_1            OTA app          00 11 00120000 00100000
I (95) boot:  5 storage          Unknown data     01 82 00220000 00010000
I (103) boot: End of partition table
I (107) esp_image: segment 0: paddr=0x00020020 vaddr=0x3f400020 size=0x126b0 ( 75440) map
I (142) esp_image: segment 1: paddr=0x000326d8 vaddr=0x3ffb0000 size=0x023f0 (  9200) load
I (146) esp_image: segment 2: paddr=0x00034ad0 vaddr=0x40080000 size=0x00400 (  1024) load
0x40080000: _iram_start at C:/b/amazon-freertos/lib/FreeRTOS/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vectors.S:1
685

I (149) esp_image: segment 3: paddr=0x00034ed8 vaddr=0x40080400 size=0x0b138 ( 45368) load
I (176) esp_image: segment 4: paddr=0x00040018 vaddr=0x400d0018 size=0x6e604 (452100) map
0x400d0018: _stext at ??:?

I (334) esp_image: segment 5: paddr=0x000ae624 vaddr=0x4008b538 size=0x02e2c ( 11820) load
0x4008b538: xStreamBufferGenericCreate at C:/b/amazon-freertos/lib/FreeRTOS/stream_buffer.c:636

I (339) esp_image: segment 6: paddr=0x000b1458 vaddr=0x400c0000 size=0x00000 (     0) load
I (349) boot: Loaded app from partition at offset 0x20000
I (349) boot: ota rollback check done
I (351) boot: Disabling RNG early entropy source...
I (357) cpu_start: Pro cpu up.
I (360) cpu_start: Single core mode
I (365) heap_init: Initializing. RAM available for dynamic allocation:
I (371) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (377) heap_init: At 3FFC0778 len 0001F888 (126 KiB): DRAM
I (384) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM
I (390) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (396) heap_init: At 4008E364 len 00011C9C (71 KiB): IRAM
I (403) cpu_start: Pro cpu start user code
I (85) cpu_start: Starting scheduler on PRO CPU.
I (109) wifi: wifi firmware version: f79168c
I (109) wifi: config NVS flash: enabled
I (109) wifi: config nano formating: disabled
I (109) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (119) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (129) wifi: Init dynamic tx buffer num: 32
I (139) wifi: Init data frame dynamic rx buffer num: 32
I (139) wifi: Init management frame dynamic rx buffer num: 32
I (139) wifi: wifi driver task: 3ffc742c, prio:23, stack:4096
I (149) wifi: Init static rx buffer num: 10
I (149) wifi: Init dynamic rx buffer num: 32
I (159) wifi: wifi power manager task: 0x3ffcc06c prio: 21 stack: 2560
0 6 [main] WiFi module initialized. Connecting to AP Mobile...
I (229) phy: phy_version: 383.0, 79a622c, Jan 30 2018, 15:38:06, 0, 0
I (229) wifi: mode : sta (30:ae:a4:80:21:08)
I (229) WIFI: SYSTEM_EVENT_STA_START
I (349) wifi: n:1 0, o:1 0, ap:255 255, sta:1 0, prof:1
I (1339) wifi: state: init -> auth (b0)
I (1339) wifi: state: auth -> assoc (0)
I (1339) wifi: state: assoc -> run (10)
I (1359) wifi: connected with Mobile, channel 1
I (1359) WIFI: SYSTEM_EVENT_STA_CONNECTED
1 402 [IP-task] vDHCPProcess: offer c0a83683ip
I (4119) event: sta ip: 192.168.54.131, mask: 255.255.224.0, gw: 192.168.32.1
I (4119) WIFI: SYSTEM_EVENT_STA_GOT_IP
2 402 [IP-task] vDHCPProcess: offer c0a83683ip
3 403 [main] WiFi Connected to AP. Creating tasks which use network...
4 404 [main] Write code signing certificate...
I (4139) PKCS11: Initializing SPIFFS
W (4139) SPIFFS: mount failed, -10025. formatting...
I (4449) wifi: pm start, type:0

I (4449) PKCS11: Partition size: total: 52961, used: 0
5 436 [main] Write device private key...
I (4569) PKCS11: Initializing SPIFFS
6 448 [main] Key provisioning done...
7 448 [main] Creating MQTT Echo Task...
8 448 [MQTTEcho] MQTT echo attempting to connect to a2zk5tjv9x07ct.iot.us-west-2.amazonaws.com.
I (9619) PKCS11: Initializing SPIFFS
I (9619) PKCS11: Initializing SPIFFS
I (9729) PKCS11: Initializing SPIFFS
I (9729) PKCS11: Initializing SPIFFS
I (9729) PKCS11: Initializing SPIFFS
I (12729) PKCS11: Initializing SPIFFS
9 1441 [MQTTEcho] MQTT echo connected.
10 1441 [MQTTEcho] MQTT echo test echoing task created.
11 1444 [MQTTEcho] MQTT Echo demo subscribed to freertos/demos/echo
12 1447 [MQTTEcho] Echo successfully published 'Hello World 0'
13 1454 [Echoing] Message returned with ACK: 'Hello World 0 ACK'
14 1949 [MQTTEcho] Echo successfully published 'Hello World 1'
15 1955 [Echoing] Message returned with ACK: 'Hello World 1 ACK'
16 2451 [MQTTEcho] Echo successfully published 'Hello World 2'
17 2458 [Echoing] Message returned with ACK: 'Hello World 2 ACK'
18 2953 [MQTTEcho] Echo successfully published 'Hello World 3'
19 2960 [Echoing] Message returned with ACK: 'Hello World 3 ACK'
20 3455 [MQTTEcho] Echo successfully published 'Hello World 4'
21 3461 [Echoing] Message returned with ACK: 'Hello World 4 ACK'
22 3957 [MQTTEcho] Echo successfully published 'Hello World 5'
23 3963 [Echoing] Message returned with ACK: 'Hello World 5 ACK'
24 4459 [MQTTEcho] Echo successfully published 'Hello World 6'
25 4465 [Echoing] Message returned with ACK: 'Hello World 6 ACK'
26 4961 [MQTTEcho] Echo successfully published 'Hello World 7'
27 4967 [Echoing] Message returned with ACK: 'Hello World 7 ACK'
28 5466 [MQTTEcho] Echo successfully published 'Hello World 8'
29 5473 [Echoing] Message returned with ACK: 'Hello World 8 ACK'
30 5969 [MQTTEcho] Echo successfully published 'Hello World 9'
31 5976 [Echoing] Message returned with ACK: 'Hello World 9 ACK'
32 6474 [MQTTEcho] Echo successfully published 'Hello World 10'
33 6481 [Echoing] Message returned with ACK: 'Hello World 10 ACK'
34 6976 [MQTTEcho] Echo successfully published 'Hello World 11'
35 6982 [Echoing] Message returned with ACK: 'Hello World 11 ACK'
36 7479 [MQTTEcho] MQTT echo demo finished.
37 7479 [MQTTEcho] ----Demo finished----


sblu wrote on January 08, 2019:

hi, I followed all your steps, but it did not help. I’m wanting to start from scratch again, but there is a hangup in a policy that is not allowing the setup to execute properly. How do I delete this policy or find the culprit?

owais@ub:~/Documents/amazon-freertos/tools/aws_config_quick_start$ python SetupAWS.py setup
Traceback (most recent call last):
File “SetupAWS.py”, line 198, in
setup()
File “SetupAWS.py”, line 150, in setup
prereq()
File “SetupAWS.py”, line 64, in prereq
policy_obj.create()
File “/home/owais/Documents/amazon-freertos/tools/aws_config_quick_start/policy.py”, line 14, in create
assert self.exists() == False, “Policy already exists”
AssertionError: Policy already exists

sblu wrote on January 09, 2019:

got it. In the meantime, i just worked around it by renaming my thing so that the policy name was different.
it is now working!

33 6351 [Echoing] Message returned with ACK: ‘Hello World 10 ACK’
34 6845 [MQTTEcho] Echo successfully published ‘Hello World 11’
35 6857 [Echoing] Message returned with ACK: ‘Hello World 11 ACK’
36 7355 [MQTTEcho] MQTT echo demo finished.
37 7355 [MQTTEcho] ----Demo finished----

mradula-aws wrote on January 09, 2019:

Hello, the setup script is to configure the Thing, Policy and Certificate for the 1st time. It looks like your Policy is already created. Try running python SetupAWS.py cleanup and then python SetupAWS.py setup. Please follow the README in https://github.com/aws/amazon-freertos/tree/master/tools/aws_config_quick_start.

borch84 wrote on February 16, 2019:

I am running these steps in order to connect to MQTT broker from the AWS ESP32 example:
https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html

When esp32 is trying to connect to MQTT broker it is showing ERROR: MQTT echo failed to connect with error 1.

System information

ESP32 DevKitC V1
Operating System Linux
Version of Amazon FreeRTOS (run git describe --tags to find it): v1.4.6-58-ga81bf209
Project MQTT Sub pub Demo

Expected behavior
Demo should connect to MQTT broker

Screenshots or console output

I (8534) WIFI: SYSTEM_EVENT_STA_GOT_IP
2 840 [IP-task] vDHCPProcess: offer c0a8046aip
3 841 [main] WiFi Connected to AP. Creating tasks which use network…
4 842 [main] Write certificate…
I (8554) PKCS11: Initializing NVS partition: “storage”
5 846 [main] Write device private key…
6 856 [main] Creating MQTT Echo Task…
7 856 [MQTTEcho] MQTT echo attempting to connect to XXXXXXXXXX-ats.iot.us-east-1.amazonaws.com.
8 856 [MQTTEcho] Sending command to MQTT task.
9 857 [MQTT] Received message 10000 from queue.
10 1858 [IP-task] Socket sending wakeup to MQTT task.
11 2358 [MQTT] About to close socket.
12 2358 [MQTT] Socket closed.
13 2358 [MQTT] Stack high watermark for MQTT task: 4696
14 2358 [MQTT] Notifying task.
15 2358 [MQTT] Received message 0 from queue.
16 2358 [MQTTEcho] Command sent to MQTT task failed.
17 2358 [MQTTEcho] ERROR: MQTT echo failed to connect with error 1.
18 2358 [MQTTEcho] MQTT echo test could not connect to broker.
19 2358 [MQTTEcho] Sending command to MQTT task.
20 2359 [MQTT] Received message 20000 from queue.
21 2359 [MQTT] Notifying task.
22 2360 [MQTTEcho] Command sent to MQTT task passed.
23 2360 [MQTTEcho] MQTT echo demo finished.
24 2360 [MQTTEcho] ----Demo finished----

I am testing the connection from my computer using mosquitto_pub client and the connection is successful:

$ mosquitto_pub -d --cafile AmazonRootCA1.pem --cert esp32-reedswitch-aws-certificate/27eb999b86-certificate.pem.crt --key esp32-reedswitch-aws-certificate/27eb999b86-private.pem.key -h XXXXXXXX-ats.iot.us-east-1.amazonaws.com -p 8883 -m “test message” -t “freertos/demo/echo” -q 1

Client mosqpub/14670-g4560 sending CONNECT
Client mosqpub/14670-g4560 received CONNACK
Client mosqpub/14670-g4560 sending PUBLISH (d0, q1, r0, m1, ‘freertos/demo/echo’, … (12 bytes))
Client mosqpub/14670-g4560 received PUBACK (Mid: 1)
Client mosqpub/14670-g4560 sending DISCONNECT

I’ve already cleaned up the certificate, thing and policy using the command BASE_DIRECTORY/tools/aws_config_quick_start/SetupAWS.py cleanup but it is still showing the same MQTT failed to connect with error 1.

Thank you!

TiglathIII wrote on June 03, 2019:

I fixed the problem by raising the wait time between attempts from 1 second to 2 seconds.

under demos/common/ota/ is a program aws_ota_update_demo.c
look for the following line and change the 1000UL to 2000UL:

#define myappONE_SECOND_DELAY_IN_TICKS pdMS_TO_TICKS( 2000UL )

Edited by: TiglathIII on Jun 5, 2019 2:44 PM

Although this fixed the connect problem a couple of days ago, I then ran into different problems with respect to version number mismatching and then job test mode vs. platform test mode issues. None of which I fully understood but the fix from AWS was to download the latest Amazon FreeRTOS firmware which I did today. My 2 second fix had to then be reverted back to 1 second and now I have OTA updates to ESP 32 devices working a treat.