The device core is an ultra-low-power STM32L431 Cortex-M4 MCU with FPU, low power peripherals and seven different low-power modes that gives a lot of flexibility. As an example, it consumes 1.8uA in Stop2 mode with RTC enabled, SRAM and register contents preserved, I/O pins state preserved, and the wakeup capability of some peripherals like LPUART, I2C or LPTIM.

I started this project as a research of the possibilities offered by this family of MCUs (STM32L4) with low power modes. Once you know the architecture, the results are really amazing.


Gas Sensor

The indoor air quality is monitored with a ZMOD4410 sensor from Renesas. This sensor integrates several custom firmware libraries to perform AI machine learning algorithms to output total volatile organic compounds (TVOC), estimated carbon dioxide level (eCO2) and indoor air quality (IAQ) to meet UBA air quality standard.

eCO2 calculation is especially accurate with these algorithms, as detailed in this report.

For this project, the selected library is the IAQ 2nd Generation Ultra Low Power firmware. This firmware requires to perform a measurement with a sample rate of 90 seconds. This gives a lot of room to put the MCU in a low power mode between measurements.

Temperature and Humidity

Temperature and relative Humidity are obtained with a highly accurate, fully calibrated HS300x series sensor, also from Renesas. It integrates calibration and temperature-compensation logic with a very low power consumption (24.4 μA average with 14-bit resolution, 3.3 V supply, one RH and temperature measurement per second).

Initially I used the HS3002 variant, but finally opted for the HS3003 as it offers enough accuracy for home environments:

  • +-2.5% of RH accuracy from 20 to 80% (3.5% max.)
  • +-0.25 ºC for temperature accuracy from 0 to 70ºC (0.35 ºC max.)

Anyway, all variants have the same pinout and can be replaced for more accurate reads.

Barometric Pressure

For the barometric pressure it uses an SPL06-001 sensor from Goertek, with slightly better accuracy than the one offered by the BMP280 sensor from Bosch. 

The device is not intended to be used for weather purposes, but I think that tracking barometric pressure is quite useful.

Ambient Light Sensor (ALS)

The device features an OPT3001 ambient light sensor from TI. It is used to increase energy savings, so no display update is performed if ambient light is below a configured value. If you can't see it, why update it? :-) 

Detail of the Ambient Light Sensor (ALS)

Once ambient light exceeds the threshold, display will be updated if previous refresh process have been skipped.

I've chosen this sensor because of its low power consumption: 3.7 uA on full active mode with interrupt enabled when input light is higher than or lower than a light level of interest. 


The use of an e-paper display for an ultra-low-power device is obvious. Requires very little power to update and needs no power to maintain an image. 

The selected display is a 2.71" panel from Pervasive Displays, with a resolution of 264 x 176 pixels over an active area of 57 x 38 mm (that is 117dpi). I choose it for its squarer aspect ratio, since this kind of screens are usually more narrowed.

I have implemented four different views: two with general values (with more or less detail), and two more with graphs to check the evolution of the data. There is also an additional screen for remote data (see LoRa section).

Different screens with general and historic data


Hermetis features a dual power supply in ORing configuration, so you can use it plugged with an USB Micro-B connector or with a 2xAAA batteries. Or both. Two LM66100 Ideal Diodes are used to allow this ORing configuration, plus a P-Channel Mosfet to add reverse polarity protection with the batteries. 

This ideal diodes features a status pin that...

Read more »