Custom Arduino board package for the Polverine environmental sensing board by BlackIoT sagl.
The Polverine is a mikroBUS-compatible (25.4 x 28.6 mm) environmental monitoring board featuring:
- MCU: ESP32-S3-MINI-1 — Dual-core Xtensa LX7 @ 240 MHz, 8 MB Flash, 0.5 MB PSRAM
- Connectivity: Wi-Fi 802.11 b/g/n, Bluetooth 5 LE, USB-C
- Sensors:
- BMV080 — Bosch PM sensor (PM1, PM2.5, PM10) via SPI
- BME690 — Bosch environmental sensor (temperature, humidity, pressure, VOC) via I2C
- Interfaces: SPI, I2C, UART, JTAG, GPIO/PWM, analog, Qwiic connector
- User I/O: RGB LED (Red=GPIO47, Green=GPIO48, Blue=GPIO38), user button (GPIO0), reset button
- Arduino IDE 2.x installed
- USB-C cable
The Polverine board package depends on the official ESP32 Arduino core by Espressif.
- Open Arduino IDE
- Go to Tools → Board → Boards Manager
- Search for esp32
- Install esp32 by Espressif Systems (version 3.x or later, IDF v5.5 based)
- Wait for the installation to complete (this may take several minutes)
-
Go to File → Preferences (or Arduino IDE → Settings on macOS)
-
In the Additional Boards Manager URLs field, add:
https://raw.githubusercontent.com/BlackIoT/Firmware_Polverine_Arduino/main/package_blackiot_index.jsonIf you already have other URLs there, separate them with a comma.
-
Click OK
- Go to Tools → Board → Boards Manager
- Search for BlackIoT
- Install BlackIoT Boards (latest version)
- Wait for the installation to complete
-
Go to Tools → Board → BlackIoT → Polverine
-
Configure board settings under Tools menu as needed:
Setting Recommended Default CPU Frequency 240 MHz (WiFi) Flash Mode QIO 80 MHz Flash Size 8 MB Partition Scheme 8M with spiffs (3MB APP/1.5MB SPIFFS) Upload Speed 921600 Upload Mode UART0 / Hardware CDC USB Mode Hardware CDC and JTAG USB CDC On Boot Disabled JTAG Adapter Disabled Core Debug Level None
- Connect the Polverine board to your computer via USB-C
- Go to Tools → Port and select the corresponding serial port
- Linux: typically
/dev/ttyACM0or/dev/ttyUSB0 - Windows:
COM3or similar (check Device Manager) - macOS:
/dev/cu.usbmodem*
- Linux: typically
Linux users: If the port is not accessible, add your user to the
dialoutgroup:sudo usermod -aG dialout $USERThen log out and log back in.
This board package includes a Blink_Polverine example that cycles through the RGB LED.
- Go to File → Examples → Blink_Polverine → Blink_Polverine
- Click Upload (or press
Ctrl+U) - The RGB LED should cycle: Red → Green → Blue, each for 1 second
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Polverine is alive!");
// Initialize RGB LED pins
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
}
void loop() {
// Red
digitalWrite(RED_LED_PIN, HIGH);
delay(1000);
digitalWrite(RED_LED_PIN, LOW);
// Green
digitalWrite(GREEN_LED_PIN, HIGH);
delay(1000);
digitalWrite(GREEN_LED_PIN, LOW);
// Blue
digitalWrite(BLUE_LED_PIN, HIGH);
delay(1000);
digitalWrite(BLUE_LED_PIN, LOW);
}| Function | GPIO |
|---|---|
| TX | 17 |
| RX | 18 |
| SDA | 8 |
| SCL | 9 |
| SS | 34 |
| MOSI | 35 |
| MISO | 37 |
| SCK | 36 |
| PWR | 2 |
| INT | 7 |
| AN | 1 |
| Sensor | Interface | Pins |
|---|---|---|
| BMV080 (PM) | SPI | CS=10, MOSI=11, MISO=13, SCK=12, INT=5 |
| BME690 (Env) | I2C | SDA=14, SCL=21 |
| Color | GPIO |
|---|---|
| Red | 47 |
| Green | 48 |
| Blue | 38 |
| Signal | GPIO |
|---|---|
| TMS | 42 |
| TDI | 41 |
| TDO | 40 |
| TCK | 39 |
To use the BMV080 and BME690 sensors, you need to download the official SDKs from Bosch Sensortec (license acceptance required):
- BMV080 SDK: Bosch Sensortec BMV080
- BME690 SDK: Bosch Sensortec BME690
For complete demo projects including MQTT, BLE, and Home Assistant integration, see the main repository: BlackIoT/Polverine
- Try a different USB-C cable (make sure it supports data, not charge-only)
- On Linux, check permissions:
ls -l /dev/ttyACM0and ensure your user is in thedialoutgroup - On Windows, check Device Manager for the COM port
- Make sure the correct port and board are selected
- Try lowering the upload speed to 115200 under Tools → Upload Speed
- Enter bootloader mode manually:
- Press and hold SW1/BOOT (GPIO0)
- Press and release SW2/EN (reset)
- Release SW1/BOOT
- Retry the upload
Enter bootloader mode using the sequence above and re-flash your firmware.
Using esptool.py or arduino-cli:
esptool.py --chip esp32s3 --port /dev/ttyACM0 --baud 921600 erase_flashSee LICENSE for details.