Soletta Project
Soletta Project is an open source framework for making IoT applications
Soletta Project is a framework for making IoT devices. With Soletta Project's libraries developers can easily write software for devices that control actuators/sensors (I2C, SPI, UART, GPIO, ADC, PWM and others) and communicate using standard technologies (OIC, CoAP, HTTP, MQTT, LWM2M, Mavlink and others). It enables adding smartness even on the smallest edge devices.
Portable and scalable, it abstracts details of hardware and OS, enabling developers to reuse their code and knowledge on different targets. The framework has ports done to the following targets:
- Linux
- Zephyr OS
- RIOT OS
- (Partially) Contiki OS
By writing a Soletta application, it's a matter of parametrising specific OS values, like GPIO pin numbers and such (Soletta already eases that task) and, with a makefile that builds with the respective toolchains/SDKs, the same application would be functional for all supported targets.
One of the ways Soletta exposes of writing applications is by flow-based programming (FBP), which allows the programmer to express business logic as a directional graph of nodes connected to type-specific ports.
The connected node ports will exchange information packets (IP) that will be used to run the flow. The packet can be either empty, used just to trigger an action, or carry a value such as booleans, integers, floats and even complex data types such as blobs. Ports can decide if the packets they produce will be queued or replaced if they were not consumed by target ports when a new packet is to be produced.
For those used to traditional object oriented programming (OOP) it's like using the observer pattern on source nodes, calling the associated data getter which is then forwarded to target nodes by calling their setter. However this is done by the core in an efficient and safe way as no memory leaks, type mismatch or invalid memory access can happen.
Besides that, Soletta exposes all its functionality on a C API, so that FBP is not mandatory.