Ich versuche, ein DHT21 mit einem Lamobo R1 alias Banana PI R1 zu verwenden, um Temperatur und Luftfeuchtigkeit zu lesen, mit Armbian/Jessie und einem 4.5.2-Kernel. Ein Lamobo R1 ist im Grunde ein A20-Board, das mit einem Raspberry Pi kompatibel ist, mit einem umgekehrt kompatiblen Raspberry Pi 2-Bus.
Ich habe es in GPIO5, Himbeer-Pin-kompatibel 24, WirinPi 5, physischer Pin 18, gemäß einer Tabelle hier , plus den GND- und +5V-Pins eingerichtet.
Ich habe versucht, die Temperatur und Luftfeuchtigkeit mit und ohne den empfohlenen Widerstand abzulesen. Während die Temperatur gut abgelesen wird und auch durch einen an GPIO2 angeschlossenen DS18b20-Sensor bestätigt wird, liegt die Luftfeuchtigkeit immer bei 99,9 %.
Ich habe die WiringPi-kompatible Bibliothek aus dem WiringBP- Repository installiert.
Wenn ich jedoch zum Beispiel DHT21-AM2301 oder lol_dht22 verwende , habe ich immer die Ausgabe der Luftfeuchtigkeit als 99,9 % oder 99,90 %
Ein benutzerdefiniertes Kernel-Modul für diesen Chip, am2301 hängt einfach die Maschine auf.
Was ich bisher gefunden habe ist:
Hat jemand noch etwas hinzuzufügen?
Zusätzliche Anmerkungen gemäß Kommentar:
Die Ausgabe von
gpio readall
Ist
+----------+-Rev3-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name | Mode | Value |
+----------+------+------+--------+------+-------+
| 0 | 17 | 11 | GPIO 0 | IN | Low |
| 1 | 18 | 12 | GPIO 1 | IN | High |
| 2 | 27 | 13 | GPIO 2 | IN | Low |
| 3 | 22 | 15 | GPIO 3 | IN | Low |
| 4 | 23 | 16 | GPIO 4 | IN | Low |
| 5 | 24 | 18 | GPIO 5 | OUT | High |
| 6 | 25 | 22 | GPIO 6 | IN | Low |
| 7 | 4 | 7 | GPIO 7 | IN | Low |
| 8 | 2 | 3 | SDA | ALT5 | High |
| 9 | 3 | 5 | SCL | ALT5 | High |
| 10 | 8 | 24 | CE0 | IN | Low |
| 11 | 7 | 26 | CE1 | IN | Low |
| 12 | 10 | 19 | MOSI | ALT5 | Low |
| 13 | 9 | 21 | MISO | ALT5 | Low |
| 14 | 11 | 23 | SCLK | ALT5 | Low |
| 15 | 14 | 8 | TxD | ALT0 | Low |
| 16 | 15 | 10 | RxD | ALT0 | Low |
| 17 | 28 | 3 | GPIO 8 | IN | Low |
| 18 | 29 | 4 | GPIO 9 | ALT4 | Low |
| 19 | 30 | 5 | GPIO10 | OUT | High |
| 20 | 31 | 6 | GPIO11 | ALT4 | Low |
+----------+------+------+--------+------+-------+
Laut Datenblatt sind die DHT21 -Timings mit 3,3 V kürzer und mit 5 V länger. Ich habe es von 5 V auf 3,3 V umgestellt und jetzt liest es die Luftfeuchtigkeit richtig ab. Es scheint, dass, während Sie es im Arduino bei 5 V haben, die Softwareseite / Routinen für den Bananen-Pi und die Himbeere davon ausgehen, dass es bei 3,3 V angeschlossen ist.
Von der in der Frage erwähnten Software scheint die schnellste lol_dht22 zu sein. Ich verwende eine leicht geänderte Version davon (von mir selbst), die ungefähr alle 9-10 Sekunden Dateien in /var/run erstellt, um rpimonitor zu füttern .
Wie @ChrisStratton richtig sagt, ist diese Methode des Bit-Banging/Polling sehr fehleranfällig, insbesondere wenn sie im Benutzerland ausgeführt wird.
Die vom DHT21 implementierte einfache Protokollprüfsumme ist eindeutig nicht stark genug, um die meisten Fehler/Spitzen (und es gibt viele) auszusortieren. Ich musste einfache Software-Korrekturroutinen hinzufügen, um falsche Werte zu ignorieren, und selbst dann gibt es Spitzen.
Der Code zum Auslesen der DHT11/DHT21/DHT22-Sensoren befindet sich auf meinem Github https://github.com/ruyrybeyro/rdht .
Ich war auch im Zweifel, ob ich die R1-Gerätebaumkonfiguration berühren müsste, wie ich es getan habe, um das 1Wire-Protokoll mit einem anderen Temperatursensor zu konfigurieren. Es wurde nicht benötigt.
Als zusätzlicher Hinweis ist Vorsicht geboten, wenn Sie Schaltplänen online blind folgen. Während der Arduino-Bus mit +5 V arbeitet, arbeiten Raspberry und kompatible Geräte mit +3 V; Während dies beim DHT21 anscheinend nicht der Fall ist (ich betone anscheinend, da der R1-Bus widerstandsfähiger ist als der RPI-Bus), kann die Speisung zufälliger Geräte / Sensoren von + 5 V, die an einen RPI-Bus angeschlossen sind, potenziell schädlich für Ihren SBC sein.
Die gemessene(n) Temperatur(en) scheinen auch durchgängig höher als +2 Grad Celsius zu sein, als sie sein sollten, und diese Temperaturinkonsistenzen werden von vielen anderen gemeldet, die DHT21-Geräte verwenden.
Der Feuchtigkeitsmesswert beträgt 99,9 %, wenn Sie den Sensor mit 5 V versorgen. Versuchen Sie, es mit 3,3 V zu versorgen, und es wird funktionieren. Ich habe eine Schaltung mit einer MCU auf 5 V getestet und nur wenn der AM2301 auf 3,3 V liegt, funktioniert er wie erwartet.
Ich denke, das Hauptproblem liegt nicht in der Versorgungsspannung oder einem zusätzlichen Widerstand. Das Hauptproblem ist die Verzögerungszeit. Docs sagt
- Die Erfassungsperiode sollte sein: >1,7 Sekunden.
Wenn Sie also eine Verzögerungszeit von 5000 ms hinzufügen, wurde mein Problem behoben. Ich habe mit dht21 getestet
Chris Stratton
Chris Stratton
Chris Stratton
Rui F. Ribeiro