PROTOCOLLO DHT11 DTH22

Il protocollo che vado a descrivere, non è un protocollo standard ma proprietario ed è utilizzato per dialogare con i sensori siglati DHT11 e DHT22.


Questi sensori permettono di misurare la temperatura e l'uminidità ambientale con più o meno precisione, in base al modello scelto.
Il protocollo è di tipo 1 wire, (1 filo).
Questo sistema "costringe" la comunicazione a trasmettere e ricevere i dati su un solo filo più GND. La sua alimentazione può variare da 3 a 5,5Volt e necessita di una resistenza da 5Kohm tra l'alimentazione ed il piedino DATA.


Le informazioni inviate dal sensore sono di 40 bit in seriale divise per 5 byte così descritte:
1byte ---> RH data intero (Uminità)
2byte ---> RH data decimale (Uminità)
3byte ---> C data intero (Temperatura)
4byte ---> C data decimale (Temperatura)
5byte ---> Somma dei due valori precedenti (check-sum)

Per poter ricevere le informazioni, il microcontrollore (o altro dispositivo), deve portare a zero per 18ms il piedino data e poi portarlo a livello logico uno per 20us (il sensore accetta valori da 20 a 40 us), come si può vedere nella foto.


Il microcontrollore risponde ponendo l'usicta DATA a livello logico zero per 80us e poi a livello logico 1 per altro 80us


Ha inizio la trasmissione, il piedino DATA si pone a livello logico zero per 50us tra un bit ed un altro.


Per distinguere un valore zero da un valore alto, il sensore utilizza dei tempi nel seguente modo:
Valore zero ---> Tensione alta per 26-28 us
Valore uno ---> Tensione alta per 70 us

Calcolando il tempo in cui il piedino DATA rimane alto si può sapere se è un valore zero o uno.
Contanto e memorizzando i singoli byte si ottendono le misure di umidità e temperatura.

Il quinto byte (check-sum) è la somma dei due valori e di solito è usato come controllo per la ricezione dei dati.
Da notare che il modello DHT11 usa solo i byte 1 e 3 oltre al 5, mentre il modello DHT22 li usa tutti e 5, da quì si capisce perchè il modello DHT22 è più preciso.