Matrix - Temperature and Humidity Sensor

From FriendlyARM WiKi
Jump to: navigation, search



Temperature and Humidity Sensor
  • The Matrix-Temperature_and_Humidity_Sensor module is used to detect temperature and humidity.
  • It utilizes the DHT11 temperature and humidity sensor. Its humidity range is 20% - 80% and the accuracy is 5%. Its temperature range is 0℃ - 50℃ and the accuracy is ±2℃.


  • Humidity range: 20 - 80%RH, Temperature range 0 ~ 50℃
  • Accuracy of humidity: +-5%RH, accuracy of temperature: +-2℃
  • One wire communication
  • 2.54 mm spacing pin
  • PCB dimension (mm): 16 x 32


Pin Description:

Pin Description
V Supply Voltage 5V
G Ground

Basic Device Operation

The DHT11 module uses a simplified single-bus serial communication. DATA controls communication and synchronization between the microprocessor and DHT11. A data transfer takes 4ms. The data format contains an integer part and a decimal part. The basic operation is as follows:

  • a transmission of 40 data, the high first-out
  • data format: 8bit humidity integer data + 8bit the Humidity decimal data
  • 8bit temperature integer data + 8bit fractional temperature data
  • 8 bit parity bit
  • If a transmission is successful the “8bit humidity integer data + 8bit humidity decimal data +8 bit temperature integer data + 8bit temperature fractional data” 8bit checksum is equal to the results of the last eight.
  • After the user host (MCU) sends a signal DHT11 is converted from low-power mode to high-speed mode, until the host begins to signal the end. Then DHT11 sends a response signal to send 40bit data, and trigger a letter collection. If DHT11 doesn't receive a signal from the host it will not begin a letter collection. After the letter collection is done DHT11 will turn to low power mode.


Connect to NanoPi M1

Refer to the following connection diagram to connect the module to the NanoPi M1:

Connection Details:

Matrix-Temperature_and_Humidity_Sensor NanoPi M1
S Pin7
V Pin4
G Pin6

Connect to NanoPi 2

Refer to the following connection diagram to connect the module to the NanoPi 2:

Connection Details:

Matrix-Temperature_and_Humidity_Sensor NanoPi 2
S Pin7
V Pin4
G Pin6

Connect to NanoPi M2 / NanoPi 2 Fire

Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:

Connection Details:

Matrix-Temperature_and_Humidity_Sensor NanoPi M2
S Pin7
V Pin4
G Pin6

Connect to NanoPC-T2

Refer to the following connection diagram to connect the module to the NanoPC-T2:

Connection Details:

Matrix-Temperature_and_Humidity_Sensor NanoPC-T2
S Pin15
V Pin29
G Pin30

Compile & Run Test Program

Boot your ARM board with Debian and copy the matrix code:

$ apt-get update && apt-get install git
$ git clone

If your cloning is done successfully a "matrix" directory will be generated.

Compile and install Matrix:

$ cd matrix
$ make && make install

Run test program:

$ matrix-temp_humidity

Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:

The humidity is 35000
The temperature is 26000

The module successfully read the environment's humidity and temperature values.

Code Sample

This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-temperature_and_humidity_sensor". Here is its source code:

int main(int argc, char ** argv)
    int ret = -1;
    int dhtTemp=0, dhtHdty=0, board;
    char modStr[BUF_SIZE];
    int pin = GPIO_PIN(7);
    if ((board = boardInit()) < 0) {
        printf("Fail to init board\n");
        return -1;
    if (board == BOARD_NANOPI_T2)
        pin = GPIO_PIN(15);
    sprintf(modStr, "modprobe %s gpio=%d", DRIVER_MODULE, pintoGPIO(pin));
    if ((ret = dht11Read(DHT_HUMIDITY, &dhtHdty)) != -1) {
        printf("The humidity is %d\n", dhtHdty);
    } else {
        printf("Faided to get humidity\n");
    if ((ret = dht11Read(DHT_TEMP, &dhtTemp)) != -1) {
        printf("The temperature is %d\n", dhtTemp);
    } else {
        printf("Faided to get temperature\n");
    system("rmmod "DRIVER_MODULE);
    return ret;

For more details about this APIs called in this code sample refer to Matrix API reference manual



Update Log


  • Added the description for "NanoPi 2 branch" in Section 4
  • Added Section 5: Connect to NanoPi 2


  • Re-organized and simplified wiki