This research deep dive was inspired from using my Dust Collector Remote. It works great, but after a year using it I’ve found the delay to connect pretty annoying. On bad days with a router misbehaving the 4 or 5 second delay while I’m waiting to turn a tool on can get frustrating.

This started getting me thinking about how it could be handled faster. I’ve used ESP-Now a handful of times and have appreciated it’s quick boot to ‘do something useful’ time. But in past projects, I’ve mostly used it as a raw socket and formatted my own messages. Wouldn’t it be nice to have MQTT infrastructure without the setup latency of WiFi or the complexity of BLE/GAP/GATT? I also spent some time dabbling with CoAP a bit this year and while it seems common to treat it more like HTTP, but when using features like Observe Resource it looks a lot more like MQTT or BLE Notifications.

This thinking has concluded in a question; What would Serverless MQTT look like?

Goals

  • esp_netif_now component
  • esp_netif_lora component (bonus!)
  • Device discovery
  • CoAP service/resource discovery
  • CoAP data persistence
  • Device resource configuration
  • Serverless MQTT

esp_netif_now

ESP-Now is a broadcast over WiFi management frames protocol. By default in the ESP-IDF it does not get an LwIP interface. For the first part of this stream I will rework my proof of concept code to write a proper ESP-NETIF driver to bind ESP-Now to LwIP. The proof-of-concept already works and writing a proper driver should be fairly straight forward.

This ESP-IDF component is complete and available here:

and as a bonus I also wrote the same for LoRa

CoAP

With the LwIP interface brought up automatic CoAP service and resource discovery can be run. This will reach out to unknown devices and see if they have services compatible with theirs, ie; a button looking for a switch.

This data should be persisted to assist with further configuration and future bringups.

Serverless MQTT

My vision for this draws heavily from Tasmota and it’s use of MQTT endpoints for control and status. CoAPs Observe functionality will be used a lot like MQTT server push.

Configuration

Unlike Tasmota I will forgo the web interface and all configuration should be accomplished over CoAP. Resources being provided will start unconfigured and provide an output endpoint that points to another devices input resource endpoint.