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.
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 of large messages
- redundant communication
- Management
- energy
- sleeping
- synchronized sleep patterns
- KConfig/Menuconfig (not only for ESP-IDF, but also for Arduino, STM32)
- monitoring / reporting / statistics
- services
- runlevels
- energy
- Input handling
- Resistor array
- Binary ladder decoder
- ADC monitor and code generator utility
- flash support
- logging
- Misc
- UMTS/GSM gateway + MQTT + OAuth2 https (google drive and stuff)
- Publisher subscriber (Pub sub)
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.
BTW, it is mostly ESP-IDF now, but I will expand it to work better on the other platforms in the future.
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:
https://github.com/RobustoFramework/Robusto/tree/main