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:
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:
[checklist]
- port = controller I2C da utilizzare (può essere I2C_NUM_0 o I2C_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 data e clock (GPIO_PULLUP_ENABLE o GPIO_PULLUP_DISABLE)
[/checklist]
Tutti i metodi del componente restituiscono un codice di errore, che può essere:
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