Software Dependencies¶
This project relies on a set of software tools and libraries to ensure proper functionality, development, and documentation. The following sections provide an overview of these dependencies.
Development Tools¶
- PlatformIO: An open-source ecosystem for IoT development. It provides a command-line interface (CLI) and a VSCode extension for a seamless development experience.
- Task: A task runner and build tool that automates development and build tasks. See the project's
Taskfile.yml
for available commands. - Docker: Used to create a consistent and reproducible development environment for the documentation server.
- Renovate: A tool for automated dependency updates, ensuring that the project's dependencies are always up-to-date.
- SOPS: A tool for managing secrets, allowing for the encryption and decryption of sensitive information.
Task List
task: Available tasks for this project:
* build: Build the firmware using PlatformIO.
* clean: Clean the build files.
* decrypt: Decrypt secret and environment files using sops.
* default: List all available tasks.
* encrypt: Encrypt secret and environment files using sops.
* export: Export the list of available tasks to task-list.txt.
* flash: Flash the latest firmware to the device using the flash.sh script.
* ftp: Connect to the device using an interactive FTP client.
* fullclean: Perform a deep clean of all build and dependency files.
* get: Get device status via API call (unauthenticated).
* geta: Get device status via API call (authenticated).
* getap: Get device status via API call and prettify it (authenticated).
* getp: Get device status via API call and prettyify it (unauthenticated).
* gflash: Run Gemini with the gemini-2.5-flash model.
* gpro: Run Gemini with the gemini-2.5-pro model.
* init: Initialize the project by creating secret and environment files from templates.
* list-devices: List all connected serial devices.
* monitor: Monitor the device's serial output.
* mqtt-disable: Disable the MQTT client via API call (unauthenticated).
* mqtt-disable-a: Disable the MQTT client via API call (authenticated).
* mqtt-enable: Enable the MQTT client via API call (unauthenticated).
* mqtt-enable-a: Enable the MQTT client via API call (authenticated).
* mqtt-toggle: Toggle the MQTT client via API call (unauthenticated).
* mqtt-toggle-a: Toggle the MQTT client via API call (authenticated).
* ping: Ping the device to check network connectivity.
* prune: Prune unused PlatformIO files to save space.
* reset: Reset the dongle by flashing it with the default factory firmware.
* restart: Restart the device via API call.
* serve: Serve the documentation locally using Docker.
* set-brightness: Set brightness level
* sftp: Switch the device to FTP mode via API call.
* smsc: Switch the device to USB Mass Storage (MSC) mode via API call.
* sync: Synchronize local files to the device via FTP using the sync.sh script.
* update-packages: Update all project dependencies to their latest versions.
* upload: Upload the compiled firmware to the device.
* uploadm: Upload the firmware and immediately start monitoring the serial output.
* verbose-build: Build the project with verbose output for debugging.
Libraries¶
- bblanchon/ArduinoJson: A C++ JSON library for Arduino and IoT (Internet of Things).
- knolleary/PubSubClient: A client library for MQTT.
- mathertel/OneButton: A library for debouncing and simplifying button inputs.
- fastled/FastLED: A library for controlling a wide range of addressable LEDs.
- tzapu/WiFiManager: A library for managing Wi-Fi connections on ESP8266 and ESP32 devices.
- SimpleFTPServer: A library for creating an FTP server on an ESP32.
- bodmer/TFT_eSPI: A library for driving TFT displays.
- Preferences: A library for non-volatile storage on ESP32 devices.
Languages and Frameworks¶
- C++: The primary language used for the firmware development.
- Python: Used for scripting and automation tasks.
- Shell Script: Used for various automation and build tasks.
- MkDocs: A static site generator used for creating the project's documentation.
CI/CD¶
- GitHub Actions: Used for automating the build, test, and release process.