A little bit like Spring/Jakarta/.NET/Django/React, but on top of ESP-IDF/Arduino/STM32 et al

…and not for serving web applications.

Hi all,

First, I just I wanted a cheap way to make a redundant network for my boat, as I was tired of glitching cables, so i combined the ESP32s built-in wireless and wired for backup and that each could report on the others failures. A win, I felt.

A year later it has grown into a framework that makes it feel like I am developing where I have spent most of my work life, on real servers. (incredible how powerful these tiny MCUs are nowadays compared to when I did assembler on the C64)

And it works pretty well at last, not even that ugly anymore and provides most of the functionality at I need when I want to make my boat…I am not saying think, but at least not sink, at least. :slight_smile:

Features:

The thing I feel I use the most is the Pub sub server, it really makes the information flow in the network simple and scalable. Combined with the conductor that times the peer’s sleeping patterns, I get by on very little power even if I have many peers.

  • Communication
    • redundant communication
      • central in/out queues and independent queues per media
      • I2C, ESP-NOW, LoRa, CAN bus (TWAI) (and a UMTS/Cellular GW)
      • scoring media
    • peer management
      • presentation, information exchange
      • problem solving
    • retries over multiple medias
    • fragmentation large messages
  • Management
    • energy
      • sleeping
      • synchronized sleep patterns
    • KConfig/Menuconfig (not only for ESP-IDF, but also for Arduino, STM32)
    • monitoring / reporting / statistics
    • services
    • runlevels
  • Input handling
    • Resistor array
    • Binary ladder decoder
    • ADC monitor and code generator utility
  • Technical
    • flash support
    • logging
  • Misc
    • UMTS/GSM gateway + MQTT + OAuth2 https (google drive and stuff)
    • Publisher subscriber (Pub sub)

…and other things typically only associated with “big” computer systems. But obviously without their memory footprint and power consumption.

I am thinking about how to perhaps break it apart, but I keep find that things needs each others functionality, again like the larger framework. Also dependencies work slightly but importantly differently on PlatformIO, IDF and Arduino. Either way the #ifdefs keeps the size down, basically it is about me having this general aversion to bloat.

So I have decided to put some serious time into it (and later, sailing), and you want to give it a shot or have any feedback, please take a look here: