Contiki-NG
Macros | Functions | Variables
dht11-sensor.c File Reference

 DHT 11 sensor implementation
More...

#include "contiki.h"
#include "dht11-sensor.h"
#include <string.h>
#include "dev/gpio-hal.h"

Go to the source code of this file.

Macros

#define DHT11_SIGNAL_HIGH   (1)
 GPIO High. More...
 
#define DHT11_SIGNAL_LOW   (0)
 GPIO Low. More...
 
#define DHT11_SIGNAL_START_PHASE1_DURATION   (40)
 Duration of signal start phase 1 according to data sheet. More...
 
#define DHT11_SIGNAL_START_PHASE2_DURATION   (80)
 Duration of signal start phase 2 according to data sheet. More...
 
#define DHT11_SIGNAL_START_PHASE3_DURATION   (80)
 Duration of signal start phase 3 according to data sheet. More...
 
#define DHT11_SIGNAL_RESPONSE_PHASE1_DURATION   (50)
 Duration of signal response phase 1 according to data sheet. More...
 
#define DHT11_SIGNAL_RESPONSE_BIT_0_DURATION   (28)
 Duration of signal response if bit is set to 0, according to data sheet. More...
 
#define DHT11_SIGNAL_RESPONSE_BIT_1_DURATION   (70)
 Duration of signal response if bit is set to 1, according to data sheet. More...
 
#define DHT11_TICKS_GUARD   (1)
 Sensor timer drift in ticks. More...
 
#define DHT11_US_GUARD   RTIMERTICKS_TO_US(1)
 Sensor timer drift in us from rtimer. More...
 
#define DHT11_DATA_SAMPLES   (40)
 Number of data requests. More...
 
#define DHT11_DATA_SIZE   (5)
 Number of bytes in data. More...
 
#define DHT11_SAMPLING_RATE_SECONDS   (1)
 DHT11 maximum sample rate is 1 Hz (1 second) More...
 

Functions

static uint8_t dht_read (void)
 

Variables

static dht_t dht
 DHT struct. More...
 

Detailed Description

 DHT 11 sensor implementation
See also
https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf
Author
Yago Fontoura do Rosario <yago..nosp@m.rosa.nosp@m.rio@h.nosp@m.otma.nosp@m.il.co.nosp@m.m.br

Definition in file dht11-sensor.c.

Macro Definition Documentation

◆ DHT11_DATA_SAMPLES

#define DHT11_DATA_SAMPLES   (40)

Number of data requests.

Definition at line 119 of file dht11-sensor.c.

◆ DHT11_DATA_SIZE

#define DHT11_DATA_SIZE   (5)

Number of bytes in data.

Definition at line 125 of file dht11-sensor.c.

◆ DHT11_SAMPLING_RATE_SECONDS

#define DHT11_SAMPLING_RATE_SECONDS   (1)

DHT11 maximum sample rate is 1 Hz (1 second)

Definition at line 131 of file dht11-sensor.c.

◆ DHT11_SIGNAL_HIGH

#define DHT11_SIGNAL_HIGH   (1)

GPIO High.

Definition at line 53 of file dht11-sensor.c.

◆ DHT11_SIGNAL_LOW

#define DHT11_SIGNAL_LOW   (0)

GPIO Low.

Definition at line 59 of file dht11-sensor.c.

◆ DHT11_SIGNAL_RESPONSE_BIT_0_DURATION

#define DHT11_SIGNAL_RESPONSE_BIT_0_DURATION   (28)

Duration of signal response if bit is set to 0, according to data sheet.

Definition at line 89 of file dht11-sensor.c.

◆ DHT11_SIGNAL_RESPONSE_BIT_1_DURATION

#define DHT11_SIGNAL_RESPONSE_BIT_1_DURATION   (70)

Duration of signal response if bit is set to 1, according to data sheet.

Definition at line 95 of file dht11-sensor.c.

◆ DHT11_SIGNAL_RESPONSE_PHASE1_DURATION

#define DHT11_SIGNAL_RESPONSE_PHASE1_DURATION   (50)

Duration of signal response phase 1 according to data sheet.

Definition at line 83 of file dht11-sensor.c.

◆ DHT11_SIGNAL_START_PHASE1_DURATION

#define DHT11_SIGNAL_START_PHASE1_DURATION   (40)

Duration of signal start phase 1 according to data sheet.

Definition at line 65 of file dht11-sensor.c.

◆ DHT11_SIGNAL_START_PHASE2_DURATION

#define DHT11_SIGNAL_START_PHASE2_DURATION   (80)

Duration of signal start phase 2 according to data sheet.

Definition at line 71 of file dht11-sensor.c.

◆ DHT11_SIGNAL_START_PHASE3_DURATION

#define DHT11_SIGNAL_START_PHASE3_DURATION   (80)

Duration of signal start phase 3 according to data sheet.

Definition at line 77 of file dht11-sensor.c.

◆ DHT11_TICKS_GUARD

#define DHT11_TICKS_GUARD   (1)

Sensor timer drift in ticks.

DHT uses 1us granularity and rtimer granularity is higher. So, allow the reading to drift by 1 tick

Definition at line 104 of file dht11-sensor.c.

◆ DHT11_US_GUARD

#define DHT11_US_GUARD   RTIMERTICKS_TO_US(1)

Sensor timer drift in us from rtimer.

DHT uses 1us granularity and rtimer granularity is higher. So, allow the reading to drift by 1 tick in us

Definition at line 113 of file dht11-sensor.c.

Function Documentation

◆ dht_read()

static uint8_t dht_read ( void  )
static

Data Single-bus free status is at high voltage level. When the communication between MCU and DHT11 begins, the programme of MCU will set Data Single-bus voltage level from high to low and this process must take at least 18ms to ensure DHT’s detection of MCU's signal, then MCU will pull up voltage and wait 20-40us for DHT’s response.

Once DHT detects the start signal,it will send out a low-voltage-level response signal, which lasts 80us. Then the programme of DHT sets Data Single-bus voltage level from low to high and keeps it for 80us for DHT’s preparation for sending data.

When DHT is sending data to MCU, every bit of data begins with the 50us low-voltage-level and the length of the following high-voltage-level signal determines whether data bit is "0" or "1"

26-28us voltage-length means data "0" 70us voltage-length means 1 bit data "1"

Definition at line 227 of file dht11-sensor.c.

Variable Documentation

◆ dht

dht_t dht
static

DHT struct.

Definition at line 169 of file dht11-sensor.c.