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

  1. Install Arduino IDE 2.x from arduino.cc.
  2. 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
  1. Open Tools > Board > Board Manager, search for esp32, and install esp32 by Espressif Systems.
  2. Select the board: Tools > Board > ESP32-S3 Dev Module.
  3. Configure the board settings:
    • Flash Size: 8MB
    • PSRAM: OPI PSRAM

Option C: ESP-IDF

For native Espressif development, install ESP-IDF v5.3:

  1. Download the ESP-IDF Windows installer from Espressif.
  2. Run the installer and select the ESP32-S3 target:
ESP-IDF Windows installer download
ESP-IDF Windows installer target selection

Option B: PlatformIO

  1. Install Visual Studio Code.
  2. Install the PlatformIO IDE extension from the VS Code marketplace.
  3. Create or open a project and use the following platformio.ini configuration:
[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:

  1. Connect the USB cable from your computer to the Polverine board.
  2. Select the correct serial port in your IDE (Arduino: Tools > Port; PlatformIO: auto-detected).
  3. Open an example sketch — start with POLVERINE_BLINK from the GitHub repository to verify your setup.
  4. Upload the firmware by clicking the Upload button (or running pio run -t upload in PlatformIO).
  5. 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.

esptool.py flash binary command example

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: