Skip to content
RobustoFrameworkPublic

About

The robusto framework

Resources

Stars

4 stars

Watchers

2 watching

Forks

Repository files navigation

Join the chat at https://app.gitter.im/#/room/!WtMzOtrXhykXImnhsr:gitter.im

The Robusto framework

"Handling failure is much cheaper than never failing" - The Robusto paradigm

Getting started

The easiest way is to:

  1. Clone this repository,
  2. Open it in PlatformIO
  3. See if any of your MCU:s match the platform.ini ones (can also try using platform.ini.all)
  4. Run the examples.

...or.. use ESP-IDF- or PlatformIO-dependency management and start with a blank project. A little harder, so please check out the examples. Bare bones projects will be added soon™.

For more general information, the Robusto web site will hold everything together. (bit of a work in progress currently)

Optional ESP-IDF dependencies

Robusto resolves large managed components only when their owning Kconfig feature is enabled. Disabled features therefore do not download, configure, compile, or link their optional dependency:

Kconfig feature Managed dependency
CONFIG_ROBUSTO_SUPPORTS_LORA RadioLib
CONFIG_ROBUSTO_UI LVGL and ESP LVGL Port
CONFIG_ROBUSTO_UI with SH1106 or SH1107 selected ESP LCD SH1107
CONFIG_ROBUSTO_UMTS_SERVER ESP Modem
CONFIG_ROBUSTO_UMTS_MQTT_GATEWAY ESP MQTT

Enable features through sdkconfig.defaults or idf.py menuconfig; do not add these packages merely to make an unrelated build pass. Robusto uses compatible version ranges in idf_component.yml, allowing the component manager to select suitable minor and patch releases. Dependency lockfiles are generated build outputs and should not replace those manifest constraints as project configuration.

Each optional dependency is guarded twice: its manifest rule controls resolution, and the matching condition in CMakeLists.txt controls REQUIRES. Keep both conditions identical when adding or changing an optional feature.

Migration for existing ESP-IDF projects

This changes the transitive dependency graph. An existing application can fail after upgrading if it used LVGL, an LCD driver, MQTT, ESP Modem, or RadioLib directly while relying on Robusto to download that package for an unrelated disabled feature.

  • If the application uses the corresponding Robusto feature, enable its CONFIG_ROBUSTO_* option in sdkconfig.defaults or through idf.py menuconfig. Robusto then resolves and links the dependency.
  • If application code uses the package independently of Robusto, declare that package in the application's own idf_component.yml and add it to the owning component's REQUIRES or PRIV_REQUIRES list. Do not enable an unrelated Robusto feature merely to recover a transitive package.
  • Delete the affected build directory once after changing the manifest or Kconfig defaults. The next configure regenerates dependency resolution from the new ownership rules.
  • Do not edit managed_components or commit a generated dependency lock as a workaround.

For example, an application that renders its own LVGL interface while CONFIG_ROBUSTO_UI is disabled must declare lvgl/lvgl and, when used, espressif/esp_lvgl_port itself. A project using Robusto's UI enables CONFIG_ROBUSTO_UI=y instead.

Table of contents

Documentation

More conceptual information:

The more technical documentation on features are in their README:s:

If you want to help out developing Robusto:

What is Robusto?

Robusto is a framework that in some ways tries to rethink IoT development to produce cheap and robust networks, applications and services on microcontrollers.

Features include:

  • Communication
    • redundant communication
      • central in/out queues and independent queues per media
      • I2C, ESP-NOW, LoRa, BLE, CAN bus (TWAI) (and a UMTS/Cellular gateway)
      • scoring media
    • peer management
      • presentation, information exchange
      • problem solving
    • retries over multple 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
    • Publisher subscriber (Pub sub)

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

What is it not?

Robusto is not designed to provide high-speed streaming communications for high definition video.

Instead, it is about reliably connecting sensors, actuators, controls, microcontrollers and similar components, and while it can transfer security footage and lower-grade live feeds, much more than that veers out its focus and is typically beyond the abilities and needs of the involved components1. It is also a matter of positioning.

Obviously that may change, but currently, if you want to do these things using cheap MCU:s please visit the ESP32-Camera project, bringing tempered expectations.

Tested boards

Microcontroller Framework Comments
ESP32-DevKit V4 ESP-IDF Works
ESP32-SIM7000G ESP-IDF Works
TTGO T-BEAM SX1262 ESP-IDF Works
LoRa32 V1 SX1278 ESP-IDF Works
RaspberryPi Pico Arduino Works
STM32 F407VE Arduino Builds, uploads, boots, but untested
Arduino UNO* Arduino Too little RAM/Flash
Atmel ATtiny85* Arduino Way too little RAM/Flash
STM32 F03C8* Arduino Too little RAM/Flash

* Note that these chips may still communicate with Robusto peers via I2C using the Fletch16 checksum library.

Work in progress (WIP)

  • Tell users about problems
    This will help them take the proper corrective action before problems escalate.2
  • Provide almost unbreakable wireless information security
    This is achieved by using Out-of-band (OOB) communication to transfer OTP encryption keys, which can be done either continuously when devices are permanently wired, or for mobile devices; while charging.3

Footnotes

  1. Netflix or other high definition streaming services provide a pleasant viewing experience not only by using a lot bandwidht, but power-consuming real-time processing. ↩

  2. Sometimes that information, for example about radio interference may even help you troubleshoot other issues, like your WiFi network. ↩

  3. Perhaps using a 4-pin charger connector (I2C + 5V). ↩

About

The robusto framework

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages