mirror of
https://gitlab.com/wirelos/sprocket-lib.git
synced 2025-12-14 04:36:50 +01:00
3.5 KiB
3.5 KiB
Sprocket-Core
A lightweight Arduino framework for event-driven programming on ESP8266 devices, featuring a plugin architecture and task scheduling capabilities.
Overview
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 EventChannelEventChannel: Core pub/sub messaging systemPlugin: Base class for all framework extensionsNetwork: Abstract network communication layerSprocketMessage: JSON-structured message formatTaskScheduler: Task management and execution
Usage Example
#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:
{
"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:
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
# Erase flash memory
esptool --port /dev/ttyUSB0 erase_flash
# 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.