Vous êtes sur la page 1sur 27

Capteur de Température Humidité DHT11

Ce module intègre capteur DHT11 et d'autres composants nécessaires sur un petit PCB.
Le capteur DHT11 comprend
✓ un composant de mesure de l'humidité de type capacitif,
✓ une thermistance pour mesurer la température
✓ Un microcontrôleur 8 bits qui fournit un signal numérique calibré.
Protocole global

1. L’entrée est à l’état haut en raison de la résistance de pull-up.

2. Le Raspberry force la sortie à l’état basse pendant au moins 18 ms pour signaler la demande d’une
lecture et puis libère la sortie, ce qui permet à la ligne de revenir à l’état haut.

3. Après une pause d'environ 20 à 40 µs, le capteur réagit en mettant la ligne à l’état basse pendant
80 µs, puis permet à la ligne de prendre l’état haut pendant encore 80 µs. Cela signale son intention
de renvoyer des données.

4. 40 bits d'information sont ensuite écrites dans le bus: chaque bit commence avec 50 µs à l’état bas
suivie par 26 à 28 µs à l’état haut pour indiquer un bit 0 ou 70 µs à l’état haut pour indiquer un bit 1.

5. La transmission se termine par le capteur qui met la ligne à l’état basse une fois de plus pendant
50 µs.

6. Le capteur libère le bus, permettant à la ligne de revenir à l’état haute de repos.


40 bits d'information
/*
* dht11.c:
* Simple test program to test the wiringPi functions
* DHT11 test
*/

#include <wiringPi.h>

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define MAXTIMINGS 85
#define DHTPIN 7

int dht11_dat[5] = { 0, 0, 0, 0, 0 };

void read_dht11_dat()
{
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;
float f; /* fahrenheit */
dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
/*
* dht11.c:
* Simple test program to test the wiringPi functions
* DHT11 test
*/

#include <wiringPi.h>

#include <stdio.h> //ajout pour base de donnees


#include <stdlib.h> void finish_with_error(MYSQL *con)
#include <stdint.h> {
fprintf(stderr, "%s\n",
#define MAXTIMINGS 85 mysql_error(con));
#define DHTPIN 7 mysql_close(con);
// exit(1);
int dht11_dat[5] = { 0, 0, 0, 0, 0 }; }
//fin pour base de donnees
void read_dht11_dat()
{
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;
float f; /* fahrenheit */
dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
/* pull pin down for 18 milliseconds */

pinMode( DHTPIN, OUTPUT );

digitalWrite( DHTPIN, LOW );

delay( 18 );

/* then pull it up for 40 microseconds */

digitalWrite( DHTPIN, HIGH );

delayMicroseconds( 40 );

/* prepare to read the pin */

pinMode( DHTPIN, INPUT );


/* detect change and read data */

for ( i = 0; i < MAXTIMINGS; i++ )


{
counter = 0;

while ( digitalRead( DHTPIN ) == laststate )


{
counter++;
delayMicroseconds( 1 );

if ( counter == 255 )
{
break;
}
}

laststate = digitalRead( DHTPIN );

if ( counter == 255 )
break;
/* ignore first 3 transitions */
/* les transition pair */

if ( (i >= 4) && (i % 2 == 0) )
{
/* shove each bit into the storage bytes */
/* c’est un tableau d’entier, cette méthode permet de remplir l’entier bit par bit */
dht11_dat[j / 8] <<= 1; /* se déplacer vers le bon bit */

if ( counter > 16 )
dht11_dat[j / 8] |= 1; /* mettre à 1 si > 28 microSeconde */

j++;
}
}
/*
* check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
* print it out if data is good
*/

if ( (j >= 40) &&


(dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] +
dht11_dat[3]) & 0xFF) ) )
{
f = dht11_dat[2] * 9. / 5. + 32;
printf( "Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)\n",
dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );

} else {
printf( "Data not good, skip\n" );
}
}
/*
* check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
* print it out if data is good //debut ajout de la partie base de donnees
MYSQL *con = mysql_init(NULL);
*/
if (con == NULL) {
if ( (j >= 40) && fprintf(stderr, "%s\n", mysql_error(con));
(dht11_dat[4] == ( (dht11_dat[0]
} + dht11_dat[1] + dht11_dat[2] +
dht11_dat[3]) & 0xFF) ) )
{ if (mysql_real_connect(con, "192.162.70.207", "mtfst_us
f = dht11_dat[2] * 9. / 5. + 32; "mtfstonligne", 0, NULL, 0) == NULL) {
finish_with_error(con);
printf( "Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)\n",
}
dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
char str[100] = "";

sprintf(str,"INSERT INTO DB_WSN_RTDC(temp) VALUES(%d)",

if (mysql_query(con, str)) {
finish_with_error(con);
}
} else {
mysql_close(con);
printf( "Data not good, skip\n" );
//fin ajout base de donnees
}
}
int main( void )
{
printf( "Raspberry Pi wiringPi DHT11 Temperature test program\n" );

if ( wiringPiSetup() == -1 )
exit( 1 );

while ( 1 )
{
read_dht11_dat();
delay( 1000 ); /* wait 1sec to refresh */
}

return(0);
}
sudo apt-get install mariadb-client

apt-get install default-libmysqlclient-dev

gcc -o dht11db dht11db.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient_r -l wiringPi


Internet

Base de
données
Capteurs Raspberry

Serveur
Web

Clients
Internet
Stockage en local dans un Fichier
Stockage en local dans un Fichier
Arduino et Raspberry
Programmation Arduino sans IDE avec Raspberry
Test du Port Série avec un Terminal

Vous aimerez peut-être aussi