Getting Started with Polverine
This guide walks you through unboxing, setting up your development environment, and uploading your first firmware to the Polverine environmental sensing board.
What’s in the Box
- Polverine board — fully assembled with ESP32-S3, BMV080, and BME690 sensors
- Two 2.54 mm pitch header strips — for breadboard or carrier board mounting
Requirements
- USB cable — USB-C or micro-USB depending on your board revision
- Computer with Arduino IDE or PlatformIO installed
- WiFi network — required for wireless demo applications
Setting Up Your Development Environment
Polverine supports two primary development environments. Choose the one you are most comfortable with.
Option A: Arduino IDE
- Install Arduino IDE 2.x from arduino.cc.
- Add ESP32 board support: go to File > Preferences and paste the following URL into Additional Board Manager URLs:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
- Open Tools > Board > Board Manager, search for
esp32, and install esp32 by Espressif Systems. - Select the board: Tools > Board > ESP32-S3 Dev Module.
- Configure the board settings:
- Flash Size: 8MB
- PSRAM: OPI PSRAM
Option C: ESP-IDF
For native Espressif development, install ESP-IDF v5.3:
- Download the ESP-IDF Windows installer from Espressif.
- Run the installer and select the ESP32-S3 target:
Option B: PlatformIO
- Install Visual Studio Code.
- Install the PlatformIO IDE extension from the VS Code marketplace.
- Create or open a project and use the following
platformio.iniconfiguration:
[env:polverine]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
board_build.flash_size = 8MB
board_build.psram = opi
Custom board file: For optimal configuration, copy polverine.json from the GitHub repository to your PlatformIO boards directory (~/.platformio/boards/).
Video: Setting Up PlatformIO for Polverine
First Upload
Follow these steps to upload your first sketch to the Polverine board:
- Connect the USB cable from your computer to the Polverine board.
- Select the correct serial port in your IDE (Arduino: Tools > Port; PlatformIO: auto-detected).
- Open an example sketch — start with
POLVERINE_BLINKfrom the GitHub repository to verify your setup. - Upload the firmware by clicking the Upload button (or running
pio run -t uploadin PlatformIO). - Verify — the RGB LED on the board should begin blinking, confirming a successful upload.
Bootloader mode: If the upload fails, hold the BOOT button (SW1) on the board, then press RESET (SW2/EN), release RESET, then release BOOT. This puts the ESP32-S3 into bootloader mode. Retry the upload while the board is in this state.
Serial Monitor
After uploading, open a serial terminal at 115200 baud to view sensor output. Recommended terminal applications:
- Arduino IDE — Built-in Serial Monitor (Tools > Serial Monitor)
- Termite — Lightweight serial terminal for Windows
- TeraTerm — Full-featured terminal emulator for Windows
- Serial USB Terminal — Mobile serial monitor for Android
Flashing with esptool.py
For advanced users, you can flash firmware directly using esptool.py. Key flash parameters: flash_mode=dio, flash_freq=80m.
Flash a binary
esptool.py --chip esp32s3 --port COM5 --baud 460800 \
write_flash 0x10000 polverine_blink.bin
Full initialization (bootloader + partitions + app)
esptool.py --chip esp32s3 --port [YOUR_PORT] --baud 921600 \
--before default_reset --after hard_reset \
write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect \
0x0 bootloader.bin 0x8000 partitions.bin 0x10000 polverine_blink.bin
Verify flash
esptool.py verify_flash --diff yes 0x10000 polverine_mqtt_demo.bin
Erase flash (full reinitialization)
esptool.py --chip esp32s3 --port [YOUR_PORT] --baud 921600 erase_flash
Flash addresses: Bootloader at 0x0, partition table at 0x8000, application at 0x10000.
Connecting to WiFi
Use the Arduino WiFi.h library to connect Polverine to your wireless network. Replace the SSID and password with your own credentials:
#include <WiFi.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Your application code here
}
Reading Sensor Data
Polverine integrates two Bosch sensors: the BMV080 for particulate matter (PM1, PM2.5, PM10) and the BME690 for temperature, humidity, pressure, and VOCs. Below is a simplified example of reading sensor data:
#include "bmv080.h"
#include "bme690.h"
void setup() {
Serial.begin(115200);
bmv080_init();
bme690_init();
}
void loop() {
// Read particulate matter data
float pm1 = bmv080_read_pm1();
float pm25 = bmv080_read_pm25();
float pm10 = bmv080_read_pm10();
// Read environmental data
float temp = bme690_read_temperature();
float humidity = bme690_read_humidity();
float pressure = bme690_read_pressure();
Serial.printf("PM1: %.1f PM2.5: %.1f PM10: %.1f\n", pm1, pm25, pm10);
Serial.printf("Temp: %.1f C Humidity: %.1f %% Pressure: %.1f hPa\n",
temp, humidity, pressure);
delay(5000);
}
For complete, production-ready sensor code, see the demo applications on the Software & Firmware page and the GitHub repository.
Next Steps
Now that you have Polverine up and running, explore these resources to go further: