Espark is a lightweight framework for building scalable and efficient ESP32-based IoT applications. It provides a modular architecture, easy-to-use APIs, and built-in support for common IoT protocols.
- Simplify the development of ESP32 applications.
- Provide a modular and extensible architecture.
- Support common IoT protocols like MQTT.
- Ensure efficient resource management for low-power devices.
- Provide a clean and easy-to-use API.
- Provide an user-friendly UI for configuration and monitoring.
- Device Provisioning: Easy setup and configuration of ESP32 devices.
- Telemetry Collection: Built-in support for collecting and sending telemetry data.
- Scalable Architecture: Designed to handle a large number of devices efficiently.
- Seamless Communication: Support for MQTT protocol.
- Over-the-Air Updates: Support for OTA application updates.
- ESP32-based development board
- USB Cable for programming and power
- Optional: Sensors and triggers for specific applications
espark/
├── espark-core/
│ ├── esparkcore/ # FastAPI backend framework
│ │ ├── data/ # Models, repositories
│ │ ├── routers/ # API endpoints
│ │ ├── schedules/ # Background tasks
│ │ ├── services/ # Business logic, MQTT handling
│ │ └── utils/ # Utility functions
│ └── Makefile
├── espark-node/
│ ├── esparknode/ # MicroPython application framework
│ │ ├── actions/ # Action handlers
│ │ ├── data/ # Data storage
│ │ ├── libraries/ # External libraries
│ │ ├── networks/ # Network management
│ │ ├── sensors/ # Sensor interfaces
│ │ ├── triggers/ # Trigger interfaces
│ │ ├── utils/ # Utility functions
│ │ └── base_node.py # Main application file
│ └── Makefile
└── espark-react/ # React frontend application
├── src/
│ ├── data/ # Data models and data providers
│ ├── i18n/ # Internationalization files
│ ├── pages/ # Application pages
│ ├── routes/ # Application routing
│ ├── utils/ # Utility functions
│ ├── App.tsx # Main application component
│ └── index.tsx # Application entry point
└── package.json
- Add espark-core as a dependency in your FastAPI project.
pip install espark-core
- Configure database connections and MQTT settings as environment variables.
- Implement additional data models, repositories, routers, and business logic if needed.
- Add the
DeviceRouter,TelemetryRouter, and other additional routers to your FastAPI app.
- Clone the espark-node repository to your local machine.
- Copy
espark-core/Makefile.templatetoMakefileand customize it for your device. - Run
make upgradeto copy the espark-core library to your device project. - Implement device-specific actions, sensors, and triggers as needed.
- Run
make flashto upload the firmware to your ESP32 device. - Run
make deployto upload the application to the device.
- Add espark-react as a dependency in your React project.
pnpm install espark-react
- Render
<EsparkApp />in your main application file.
- espark-core: Use environment variables, or
.envfile, for database and MQTT configurations. - espark-node: Use
esparknode.configsfor device-specific configurations. - espark-react: Customise
EsparkAppprops for application settings.
- Router Example:
device_router.pyinespark-core/esparkcore/routers/demonstrates how to create API endpoints for device management. - Respository Example:
device_repository.pyinespark-core/esparkcore/data/repositories/shows how to implement data access logic for devices. - Action Example:
esp32_relay.pyinespark-node/esparknode/actions/illustrates how to define actions for ESP32 devices. - Sensor Example:
sht20_sensor.pyinespark-node/esparknode/sensors/demonstrates how to read data from a SHT20 sensor. - Trigger Example:
gpio_trigger.pyinespark-node/esparknode/triggers/shows how to create GPIO-based triggers for device actions. - List, Show, Edit Screens Example:
DeviceList,DeviceShow, andDeviceEditcomponents inespark-react/src/pages/devices/demonstrate how to create CRUD screens for device management.
- Espartan: A smart thermostat and open-door alert automation system using ESP32-C3 devices, leveraging espark for device management and telemetry, available at https://github.com/ayltai/Espartan.