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.

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

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

[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   |
+----------+------+--------+------+-------+

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

cp /usr/src/wiringPi/wiringPi/*.h /usr/include/

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

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

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

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