Firmware & Software
Software Architecture
Polverine firmware follows a modular architecture designed for flexibility and ease of customisation. Built on the Arduino/ESP-IDF framework, it leverages the full capabilities of the ESP32-S3 dual-core processor while remaining accessible to developers of all skill levels.
The complete data flow follows a proven IoT pipeline:
Sensors → ESP32-S3 → MQTT → Node-RED → MongoDB → Dashboard
Each stage is independently configurable, allowing you to replace or extend any component without affecting the rest of the stack.
Demo Applications
Six ready-to-use firmware examples are included in the repository, progressing from simple sensor reads to a full cloud-connected dashboard.
BMV080 Basic
Read PM2.5 data from the BMV080 particulate matter sensor and output readings to the serial console. A minimal starting point for air quality monitoring.
BME690 Environmental
Read temperature, humidity, pressure, and VOC gas data from the BME690 environmental sensor. Demonstrates I²C communication and multi-parameter acquisition.
Combined Sensors
Read both BMV080 and BME690 sensors simultaneously with formatted output. Combines PM2.5 with environmental data for comprehensive air quality assessment.
WiFi MQTT Publisher
Connect to WiFi and publish sensor data to an MQTT broker. Enables wireless data collection from multiple Polverine devices to a central server.
BLE Beacon
Broadcast sensor readings via BLE advertising packets. Ideal for mobile app integration and short-range deployments without WiFi infrastructure.
Full Dashboard
Complete end-to-end solution: dual sensor reading, MQTT publishing, Node-RED processing, MongoDB storage, and real-time dashboard visualisation. See the detailed MQTT demo tutorial on Hackster.io.
Data Flow
The Polverine data pipeline uses MQTT as its messaging backbone, providing a lightweight and scalable path from sensor to dashboard.
- Publish: Polverine devices publish sensor readings to MQTT topics such as
polverine/pm25,polverine/temperature,polverine/humidity, andpolverine/voc. Each message is JSON-formatted for easy parsing. - Subscribe & Process: Node-RED subscribes to the MQTT topics, applies transformations, threshold alerts, and data enrichment rules via visual flow programming. Optionally integrates with the OpenWeatherMap API for external environmental data (temperature, humidity, barometric pressure, wind speed, cloud cover) to correlate with indoor sensor readings.
- Store: Processed data is persisted to MongoDB time-series collections, enabling efficient historical queries and trend analysis.
- Visualise: Node-RED Dashboard or Grafana renders real-time charts, gauges, and maps from the stored data, accessible from any web browser.
Repository Structure
-
firmware/
- bmv080_basic/
- bme690_basic/
- combined_sensors/
- mqtt_publisher/
- ble_beacon/
- full_dashboard/
-
hardware/
- schematic/
- pcb/
- docs/
- README.md
Development Tools
Polverine supports several development environments. Choose the one that best fits your workflow:
- Arduino IDE — the easiest way to get started. Install the ESP32 board support package by Espressif and open any demo sketch.
- PlatformIO — recommended for larger projects. Provides dependency management, multi-board builds, and integrated debugging via VS Code.
- ESP-IDF v5.3 — Espressif’s native framework for advanced users who need full control over the ESP32-S3 SDK and FreeRTOS configuration.
- Espressif Tools — includes
esptool.pyfor flashing,idf.py monitorfor serial output, and the ESP32-S3 partition table editor.
For step-by-step setup instructions, see the Getting Started guide.