Obsługa termometru DS18B20 pod Raspberry Pi jest dziecinnie łatwa. Kolejnym dość ciekawym czujnikiem jest czujnik temperatury i wilgotności DHT21 / AM2301. Potrafi on mierzyć temperaturę w zakresach od -40 do 80 °C oraz wilgotność 0 -100 %RH. Zasilany jest napięciem z zakresu 3,3 do 5,5 V, więc idealnie pasuje pod GPIO w Raspberry Pi.

Przykład podłączenia z Raspberry Pi

Schemat przedstawia najprostszy sposób połączenia układu z dowolnym mikrokontrolerem przy pomocy interfejsu jednoprzewodowego.

DHT21/AM2301 - schemat

  • VDD – napięcie zasilania, 3.3V (pin 1)
  • DATA – linia danych z rezystorem podciągającym 1 k Ohm, GPIO24 (pin 18)
  • GND – masa układu podłączona do GDN (pin 6)

DHT21-AM2301 - uklad

Układ z podłączonym czujnikiem DHT21/AM2301 oraz DS1820+

Komunikacja z Raspbbery Pi

Do komunikacji z układem wykorzystamy bibliotekę Wiring Pi, która umożliwia zarządzanie pinami GPIO w prosty sposób. Instalacja samej biblioteki i oprogramowania jest bardzo prosta.

[bash]sudo apt-get install git-core
cd /usr/src
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build[/bash]

Po zainstalowaniu biblioteki możemy sprawdzić jej działanie za pomocą polecenia:

[bash][07:36:10] [root@rubus /]# gpio readall
+———-+——+——–+——+——-+
| wiringPi | GPIO | Name | Mode | Value |
+———-+——+——–+——+——-+
| 0 | 17 | GPIO 0 | IN | Low |
| 1 | 18 | GPIO 1 | IN | Low |
| 2 | 27 | GPIO 2 | IN | Low |
| 3 | 22 | GPIO 3 | IN | Low |
| 4 | 23 | GPIO 4 | IN | Low |
| 5 | 24 | GPIO 5 | OUT | High |
| 6 | 25 | GPIO 6 | IN | Low |
| 7 | 4 | GPIO 7 | IN | High |
| 8 | 2 | SDA | IN | High |
| 9 | 3 | SCL | IN | High |
| 10 | 8 | CE0 | IN | Low |
| 11 | 7 | CE1 | IN | Low |
| 12 | 10 | MOSI | IN | Low |
| 13 | 9 | MISO | IN | Low |
| 14 | 11 | SCLK | IN | Low |
| 15 | 14 | TxD | ALT0 | High |
| 16 | 15 | RxD | ALT0 | High |
| 17 | 28 | GPIO 8 | ALT2 | Low |
| 18 | 29 | GPIO 9 | IN | Low |
| 19 | 30 | GPIO10 | ALT2 | Low |
| 20 | 31 | GPIO11 | ALT2 | Low |
+———-+——+——–+——+——-+[/bash]

Kolejnym krokiem jest skopiowanie plików nagłówkowych, które będą niezbędne do kompilacji programu, do odczytu danych. Wydajemy polecenie:

[bash]cp /usr/src/wiringPi/wiringPi/*.h /usr/include/[/bash]

Teraz pozostaje nam pobranie modułu do odczytu danych, skompilowanie go i zbieranie wyników. Wydajemy następujące polecenia:

[bash]cd /usr/src
git clone https://github.com/paszczak000/DHT21-AM2301.git
cd DHT21-AM2301/
make
[/bash]

Jeżeli wszystko poprawnie się skompiluje, po uruchomieniu aplikacji zobaczymy dane o temperaturze oraz wilgotności:

[bash][08:15:31] [root@rubus DHT21-AM2301]# ./am2301
t = 28.5, rh = 24.0[/bash]

13 Komentarze

  1. Hi, I have tested this program, but it seems I have problem with negative temerature values.
    Wroks fine till 0.0°C, for lower temperatures it returns nothing.
    Enybody else with the same problem?

  2. this change is solution for negative temperatures:
    (from line 153 of am2301.c)
    s->rh = (float) (((uint16_t) vals[0] <rh /= 10.0f;
    s->t = (float) (((uint16_t) (vals[2] & 0x7F) <t /= 10.0f;
    if (vals[2] & 0x80)
    s->t *= -1;

    if (s->rh > 100.0 || s->rh < 0.0 ||

Odpowiedz