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.
- 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)
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]
Ania Czubrowska liked this on Facebook.
Aga Derejska liked this on Facebook.
Raspberry Pi i obsługa czujnika temperatury i wilgotności DHT21/AM2301 http://t.co/jN4QxoCykN via @Picoboardpl
Michał Olber liked this on Facebook.
Cyryl Sochacki liked this on Facebook.
Łukasz Wòjcik liked this on Facebook.
Michal Lesniewski liked this on Facebook.
Wojciech Drzęśla liked this on Facebook.
Kordian Adamczyk liked this on Facebook.
[…] Raspberry Pi i obsługa czujnika temperatury i wilgotności DHT21/AM2301 […]
[…] Raspberry Pi i obsługa czujnika temperatury i wilgotności DHT21/AM2301 […]
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?
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 ||
…