LPS22HB absolute pressure sensor and ESP32 example

In this article we look at a pressure sensor – this time its the LPS22HB and we will see how we can get this to work with our ESP32 based Wemos Lolin32 board

Again lets look at the sensor from a manufacturers blurb.

The LPS22HB is an ultra-compact piezoresistive absolute pressure sensor which functions as a digital output barometer. The device comprises a sensing element and an IC interface which communicates through I2C or SPI from the sensing element to the application.

The sensing element, which detects absolute pressure, consists of a suspended membrane manufactured using a dedicated process developed by ST.
The LPS22HB is available in a full-mold, holed LGA package (HLGA). It is guaranteed to operate over a temperature range extending from -40 °C to +85 °C. The package is holed to allow external pressure to reach the sensing element.


  • 260 to 1260 hPa absolute pressure range
  • Current consumption down to 3 μA
  • High overpressure capability: 20x full-scale
  • Embedded temperature compensation
  • 24-bit pressure data output
  • 16-bit temperature data output
  • ODR from 1 Hz to 75 Hz
  • SPI and I²C interfaces
  • Embedded FIFO
  • Interrupt functions: Data Ready, FIFO flags, pressure thresholds
  • Supply voltage: 1.7 to 3.6 V
  • High shock survivability: 22,000 g


Parts Required


Name Link
Wemos Lolin32 WeMos Mini D1 LOLIN32 ESP32
LPS22HB Semoic Lps22Hb Pressure Resistance Pressure Sensor Module for High Intensity Industrial Control
Connecting wire Free shipping Dupont line 120pcs 20cm male to male + male to female and female to female jumper wire
sensor shield Expansion IO Board Sensor Shield


ESP32 Module
3.3v 3v3
Gnd Gnd


Code Example

This uses the library from hhttps://github.com/adrien3d/IO_LPS22HB

This is a library for the LPS22HB Absolute Digital Barometer
Designed to work with all kinds of LPS22HB Breakout Boards
These sensors use I2C, 2 pins are required to interface, as this :
VDD to 3.3V DC
SCL to A5
SDA to A4
GND to common groud
Written by Adrien Chapelet for IoThings
#include <Wire.h>
#include "IO_LPS22HB.h"
IO_LPS22HB lps22hb;
void setup()
Serial.println("IoThings LPS22HB Arduino Test");
byte who_am_i = lps22hb.whoAmI();
Serial.print("Who Am I? 0x");
Serial.print(who_am_i, HEX);
Serial.println(" (expected: 0xB1)");
if (who_am_i != LPS22HB_WHO_AM_I_VALUE) {
Serial.println("Error while retrieving WHO_AM_I byte...");
while (true) {
// loop forever
void loop()
Serial.print(" mbar, T=");



Open the serial monitor and you should see something like this

IoThings LPS22HB Arduino Test
Who Am I? 0xB1 (expected: 0xB1)

P=992.86 mbar, T=19.01C
P=992.83 mbar, T=19.01C
P=992.83 mbar, T=19.02C
P=992.82 mbar, T=19.02C


Click to access lps22hb.pdf