A DIY handheld battery-powered differential pressure meter for measuring and adjusting airflow in air valves, diffusers, or grilles. Accurate measurement of small pressure drops (typically ±50 Pa) is often required, but professional equipment (e.g., Fluke 922) is expensive. This project is a low-cost alternative built with:
- Sensirion SDP810-500Pa differential pressure sensor (±500 Pa range, 0.1 Pa zero-point accuracy)
- ESP32-WROOM-32E microcontroller
- 1.8" LCD display (ST7735S)
- Li-ion battery with TP4056 USB charging
- 5-way navigation switch with buzzer feedback
- 6 pre-configured air valve types (KSO, NE, CLIK100, RK-PK, SP-DVP, VT-DVS)
- ESPHome-based firmware, flashable via web.esphome.io
- Automatic power-off on inactivity or low battery
Pressure drop is used to calculate flow through an air valve using the formula:
where
For example, Fläkt Group air valves provide k-factor charts:
Source: KSO air valve product page
Use the 5-way switch to navigate between screens: live differential pressure reading, valve type/size selection, and computed airflow. The device displays real-time measurements on the 1.8" LCD.
Additional features:
- Automatic power-off after ~10 minutes of inactivity (with audio warning)
- Automatic power-off on low battery level
Firmware is developed using ESPHome with an additional custom component for calculating flow. The configuration file can be edited to include more air valve types or customize as needed.
To install precompiled firmware:
- Download the latest firmware (
.binfile) from the releases page - Connect with USB cable
- Use web.esphome.io to prepare the device for first use and to flash the firmware
Note: Web flashing requires Chrome or Edge (browsers supporting the Web Serial API).
Key components for building the device:
- Sensirion SDP810-500Pa differential pressure sensor
- ESP32-WROOM-32E module
- 1.8" LCD (ST7735S)
- TP4056 Li-ion charger module
- 5-way navigation switch
- Li-ion battery
- PKLCS1212E40A1-R1 buzzer
- 3D printed case (STL files)
- PCB (gerber files for ordering from JLCPCB or similar)
- 1 mm acrylic sheet for screen protection (37 mm x 50 mm)
- M2x5 screws for screen mounting
- DIN912 M3x12 screws for case assembly
For the full parts list, see the Bill of Materials (BOM).
Electrical design uses KiCad 7.0 software. The main components are:
- ESP32-WROOM-32E + USB-to-UART converter (
CH340C): main controller - Sensirion SDP810-500Pa: I2C differential pressure sensor
- 1.8" LCD ST7735S: screen
- PKLCS1212E40A1-R1: buzzer for audio feedback
- 5-way navigation switch
- Battery charging management (
TP4056)
For details, see:
| Front | Back |
|---|---|
![]() |
![]() |
![]() |
![]() |
The mechanical design is done using Onshape: project files. The case is mostly 3D printed:
- Front (STL)
- Back (STL)
- Screen spacers (STL)
- 1 mm thick acrylic sheet for screen protection (37 mm x 50 mm)
- M2x5 screws for screen mounting
- DIN912 M3x12 screws for case
Printer parameters:
- Printer: Ender-3 V2 (Trianglelab DDB Extruder V2.0 + BLTouch)
- Slicer: Ultimaker Cura 4.11.0
- Filament: eSun PLA+ 1.75mm 1kg Black
- Profile: Standard Quality
- Printing temperature: 210 °C
- Build plate temperature: 60 °C
- Initial layer horizontal expansion: -0.1 mm
- Generate support: yes
| Powered on | Powered off | Case opened |
|---|---|---|
![]() |
![]() |
![]() |
This section is for contributors and developers of the firmware.
To compile and upload firmware, run:
uv run esphome run dif-pressure-meter.yamlLint checks:
uv run pre-commit run --all-filesTo enable automatic lint checks on every commit:
uv run pre-commit installIf requirements change or need to be updated, run:
uv lock --upgrade
uv syncThis project is licensed under the MIT License - see the LICENSE file for details.








