mirror of
https://gitlab.com/wirelos/sprocket-lib.git
synced 2025-12-14 12:46:50 +01:00
rework readme
This commit is contained in:
164
README.md
164
README.md
@@ -1,20 +1,158 @@
|
|||||||
# Sprocket-Core
|
# Sprocket-Core
|
||||||
A lightweight Arduino framework for event driven programming.
|
|
||||||
|
|
||||||
## Concepts
|
|
||||||
... topic based event channel / pubsub-pattern
|
|
||||||
... plugin system
|
|
||||||
|
|
||||||
|
A lightweight Arduino framework for event-driven programming on ESP8266 devices, featuring a plugin architecture and task scheduling capabilities.
|
||||||
|
|
||||||
## Sprocket Lifecycle
|
## Overview
|
||||||
TODO
|
|
||||||
|
Sprocket-Core provides a modular foundation for building IoT applications with:
|
||||||
|
- **Event-driven architecture** using a topic-based publish/subscribe pattern
|
||||||
|
- **Plugin system** for extensible functionality
|
||||||
|
- **Task scheduling** with priority support
|
||||||
|
- **Network abstraction** layer for communication
|
||||||
|
- **JSON-based messaging** system
|
||||||
|
|
||||||
|
## Core Concepts
|
||||||
|
|
||||||
|
### Event Channel
|
||||||
|
The framework implements a publish/subscribe event system where components can:
|
||||||
|
- Subscribe to topics with callback handlers
|
||||||
|
- Publish messages to specific topics
|
||||||
|
- Handle events asynchronously
|
||||||
|
|
||||||
|
### Plugin Architecture
|
||||||
|
Plugins extend the core functionality and can:
|
||||||
|
- Subscribe to and publish events
|
||||||
|
- Integrate with the task scheduler
|
||||||
|
- Access network capabilities
|
||||||
|
- Be dynamically activated/deactivated
|
||||||
|
|
||||||
|
### Task Scheduler
|
||||||
|
Built on TaskScheduler library with support for:
|
||||||
|
- Priority-based task execution
|
||||||
|
- Sleep-on-idle power management
|
||||||
|
- Standard function callbacks
|
||||||
|
- Layered scheduling priorities
|
||||||
|
|
||||||
|
### Network Layer
|
||||||
|
Abstract network interface supporting:
|
||||||
|
- Connection management
|
||||||
|
- Message broadcasting
|
||||||
|
- Point-to-point communication
|
||||||
|
- Scheduler integration
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Sprocket (EventChannel)
|
||||||
|
├── TaskScheduler
|
||||||
|
├── Network
|
||||||
|
├── Plugins[]
|
||||||
|
└── Configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Components
|
||||||
|
|
||||||
|
- **`Sprocket`**: Main framework class inheriting from EventChannel
|
||||||
|
- **`EventChannel`**: Core pub/sub messaging system
|
||||||
|
- **`Plugin`**: Base class for all framework extensions
|
||||||
|
- **`Network`**: Abstract network communication layer
|
||||||
|
- **`SprocketMessage`**: JSON-structured message format
|
||||||
|
- **`TaskScheduler`**: Task management and execution
|
||||||
|
|
||||||
|
## Usage Example
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <Sprocket.h>
|
||||||
|
|
||||||
|
class MyApp : public Sprocket {
|
||||||
|
public:
|
||||||
|
Task periodicTask;
|
||||||
|
|
||||||
|
MyApp(SprocketConfig cfg) : Sprocket(cfg) {}
|
||||||
|
|
||||||
|
Sprocket* activate(Scheduler* scheduler) {
|
||||||
|
// Set up periodic task
|
||||||
|
periodicTask.set(TASK_SECOND, TASK_FOREVER, [](){
|
||||||
|
Serial.println("Periodic task executed");
|
||||||
|
});
|
||||||
|
|
||||||
|
scheduler->addTask(periodicTask);
|
||||||
|
periodicTask.enable();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
SprocketConfig config = { 3000, 115200 }; // startup delay, baud rate
|
||||||
|
MyApp app(config);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
app.activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
app.loop();
|
||||||
|
yield();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Message Format
|
||||||
|
|
||||||
|
Messages use a structured JSON format:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"domain": "app",
|
||||||
|
"from": "device1",
|
||||||
|
"to": "device2",
|
||||||
|
"payload": "message content",
|
||||||
|
"topic": "sensor/data",
|
||||||
|
"type": 1,
|
||||||
|
"broadcast": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Plugin Development
|
||||||
|
|
||||||
|
Create custom plugins by extending the Plugin class:
|
||||||
|
```cpp
|
||||||
|
class MyPlugin : public Plugin {
|
||||||
|
public:
|
||||||
|
void activate(Scheduler* scheduler) override {
|
||||||
|
// Plugin initialization
|
||||||
|
subscribe("my/topic", [](String msg) {
|
||||||
|
// Handle incoming messages
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void onMessage(SprocketMessage msg) override {
|
||||||
|
// Process framework messages
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Arduino framework
|
||||||
|
- TaskScheduler library
|
||||||
|
- ArduinoJson library
|
||||||
|
- ESP8266 platform support
|
||||||
|
|
||||||
|
## Platform Support
|
||||||
|
|
||||||
|
Currently supports ESP8266 devices with Arduino framework.
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
# Useful commands
|
|
||||||
```sh
|
```sh
|
||||||
# erase flash
|
# Erase flash memory
|
||||||
esptool --port /dev/ttyUSB0 erase_flash
|
esptool --port /dev/ttyUSB0 erase_flash
|
||||||
|
|
||||||
# OTA
|
|
||||||
~/.platformio/packages/tool-espotapy/espota.py -i <espIP> -p 8266 -a <authPW> -f .pioenvs/ota/firmware.bin
|
|
||||||
|
|
||||||
```
|
# Over-the-air (OTA) update
|
||||||
|
~/.platformio/packages/tool-espotapy/espota.py -i <espIP> -p 8266 -a <authPW> -f .pioenvs/ota/firmware.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
See LICENSE file for details.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user