esp_htu21d

Descrizione

esp_htu21d è un componente per il framework esp-idf; il suo compito è interfacciarsi con il sensore di temperatura e umidità HTU21D di TE Connectivity. Questo sensore, con interfaccia I2C, è in grado di misurare temperature comprese tra -40 e 125°C e gradi di umidità da 0 a 100%.

Installazione

Il codice sorgente di esp32_htu21d è disponibile su Github.

Per poterlo utilizzare all’interno di un programma, è necessario innanzitutto scaricare la release più recente. All’interno della cartella che contiene il proprio progetto, creare la sottocartella components.

Al suo interno estrarre l’archivio scaricato da Github, in modo che:

htu21d-comp01

Utilizzo

Per prima cosa è necessario includere nel proprio programma l’header file del componente:

#include "htu21d.h"

Quindi il componente va inizializzato con il metodo htu21d_init:

int htu21d_init(i2c_port_t port, int sda_pin, int scl_pin, 
 gpio_pullup_t sda_internal_pullup, gpio_pullup_t scl_internal_pullup);

I parametri sono:

  • port = controller I2C da utilizzare (può essere I2C_NUM_0I2C_NUM_1)
  • sda_pin, scl_pin = pin del chip a cui mappare i segnali data (SDA) e clock (SCL) del bus I2C
  • sda_internal_pullup, scl_internal_pullup = utilizzo o meno delle resistenze di pullup interne per i segnali di dataclock (GPIO_PULLUP_ENABLEGPIO_PULLUP_DISABLE)

Tutti i metodi del componente restituiscono un codice di errore, che può essere:

htu21d-comp02

Un semplice controllo di errore è quindi:

if(ret != HTU21D_ERR_OK) {	
  printf("Error %d when initializing HTU21D component\r\n", ret);
  while(1);
}

Dopo aver inizializzato il sensore, è possibile ottenere i valori di temperatura e umidità con:

float ht21d_read_temperature();
float ht21d_read_humidity();

E’ anche possibile richiedere al sensore un soft reset, con il metodo:

int htu21d_soft_reset();

Infine è possibile modificare la risoluzione del sensore. Vi sono 4 combinazioni possibili:

  • Umidità 12bits, temperatura 14bits (0b00000000)
  • Umidità 8bits, temperatura 12bits (0b00000001)
  • Umidità 10bits, temperatura 13bits (0b10000000)
  • Umidità 11bits, temperatura 11bits (0b10000001)

Per cambiare la risoluzione deve essere chiamato il metodo:

int ht21d_set_resolution(uint8_t resolution);

Indicando come parametro il valore binario corrispondente alla risoluzione desiderata, ad esempio per 11bits/11bits:

ht21d_set_resolution(0b10000001);

In maniera analoga è possibile ottenere la risoluzione corrente del sensore con:

uint8_t ht21d_get_resolution();

Demo

Un completo esempio che mostra l’utilizzo di questo componente è descritto in questo post.

Ecco un breve filmato dell’esempio in funzione (disponibili sottotitoli in italiano):

Changelog

Release 0.1

- Prima versione pubblica

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi