Kompakter DHT Temperatur- & Feuchtigkeits-Breakout für Raspberry Pi – ATtiny85 & DHT22/DHT11
Hardware-Komponenten: Atmel ATTiny85 × 1, DHT22 Temperatursensor × 1, DHT11 Temperatur- & Feuchtigkeitssensor × 1, SparkFun Tiny AVR Programmer × 1, Adafruit 4,7K Ω Widerstand × 3, Adafruit 10K Ω Widerstand × 1, Adafruit 100 Ω Widerstand × 1, Adafruit Diffused Blue 3mm LED × 1, Adafruit Tactile Button Switch × 1, Adafruit Break-away 0,1″ 36-pin Strip Male Header 1 Stück @ Länge 6, 1 Stück @ Länge 2 (gesamt 8 Pins) × 1, Generic Jumper (0,1″) × 1, Arduino UNO & Genuino UNO Optional – für Debugging und Testing. × 1
Software Apps und Online Services: Microsoft Visual Studio 2015, Microsoft Windows 10 IoT Core, Arduino IDE
STORY
Einführung
DHT11 und DHT22 sind beliebte Temperatur- und Feuchtigkeitssensoren aufgrund ihrer Genauigkeit bei sehr niedrigen Kosten. Ein Problem damit ist jedoch, dass sie über ein proprietäres One-Wire-Protokoll arbeiten, das präzises Timing erfordert. Diese Sensoren haben sich auf Boards mit Nicht-Echtzeit-Betriebssystemen als schwer auslesbar erwiesen.
Vor einiger Zeit habe ich einen Artikel mit dem Titel „DHT11/DHT22 Temperatursensor“ veröffentlicht, der demonstrierte, wie man den Microsoft C++ Beispielcode von C# nutzt, um diese Sensoren auszulesen. Die Library konnte einen Messwert erhalten, aber ich musste Retry-Logik hinzufügen, um sie zuverlässiger zu machen. Das war für die meisten erfolgreich, aber einige hatten Probleme, dies konsistent zum Laufen zu bringen.
Angesichts des Interesses an der Nutzung dieser Sensoren auf dem Raspberry Pi unter Windows 10 IoT Core entschied ich mich, eine zweite Option zu schaffen, die eine sehr zuverlässige Methode zum Auslesen dieser Sensoren bietet, während sie weiterhin kostengünstig bleibt.
Überblick
Der hier vorgestellte Ansatz besteht darin, den DHT-Sensor an einen kostengünstigen ATtiny85 anzuschließen und ihn als I2C-Slave-Gerät einzurichten. Dies wird mittels der TinyWireS Library und der Erstellung eines Registersatzes erreicht, der gelesen und geschrieben werden kann, um mit dem Gerät zu interagieren.
Das Gerät unterstützt folgende Funktionen:
- Konfigurierbares Leseintervall, wie oft der DHT-Sensor gelesen wird. Standard ist alle 2 Sekunden.
- Manueller Modus, der das Intervall deaktiviert und eine Messung auf Anfrage durchführt.
- Konfigurierbare obere und untere Temperaturschwellen, die den Interrupt-Pin triggern, wenn die aktuelle Messung darüber oder darunter liegt.
- Konfigurations-Speichermodus, der konfigurierte Einstellungen bei Power-Up oder nach Reset wiederherstellt.
- Konfigurations-Reset, der die gespeicherte Konfiguration auf Standardwerte zurücksetzt.
- Sensor-Stromsteuerung, die die Stromversorgung des Sensors aktivieren/deaktivieren kann, um Strom zu sparen.
- Programmierbare I2C-Geräteadresse. Standardadresse ist 0x26, kann per Kommando geändert werden. Das Gerät merkt sich die Adresse. Nach Reset kehrt die Adresse zu 0x26 zurück. Die C# Library enthält auch Code zum Suchen des Geräts auf dem I2C-Bus, sodass Sie die Adresse nicht kennen müssen, um zu verbinden.
- Programmierbare DHT-Modellauswahl. Firmware defaultet auf DHT22, kann aber per Kommando auf ein anderes Modell geändert werden. Das Modell wird gespeichert, sodass es nach jedem Reboot oder Power-Cycle beibehalten wird.
Der Quellcode
Es gibt drei Codesets in diesem Projekt. Die Haupt-Firmware für das Board, ein Arduino Master Sketch zum Testen und Demonstrieren des Boards bei Verbindung mit einem Arduino Uno und die Windows 10 IoT Code Applikation, die demonstriert, wie man das Gerät vom Raspberry Pi nutzt. Der gesamte Code ist im verlinkten GitHub Repository verfügbar.
Das Gerät / Die Schaltung
Die Schaltung ist klein und nutzt nur wenige kostengünstige Komponenten. Der ATtiny85 kann von verschiedenen Händlern bezogen werden. Ich empfehle, ein paar davon zu besorgen, da sie viele nützliche Zwecke haben.
Die Schaltung hat einen Sechspin-Header, der es ermöglicht, sie entweder an eine andere Schaltung oder direkt an den Raspberry Pi anzuschließen. Die Pins sind wie folgt definiert:
- GND → Mit Ground Ihrer Schaltung oder dem Ground-Pin Ihres Raspberry Pi verbinden.
- RST → Dieser Pin wird zum Reset oder Reboot des Geräts genutzt. Unter normalem Betrieb an 5V anschließen. Zum Reset einen momentanen LOW-Puls auf diesen Pin triggern.
- INT → Dieser Pin hat zwei Zwecke. Wenn Schwellenwerte aktiviert sind, geht dieser Pin HIGH, wann immer ein Schwellenwert überschritten wird, sonst LOW. Im Power-Save-Modus wird dieser Pin genutzt, um das Gerät durch einen momentanen HIGH-Puls aufzuwecken.
- SDA → I2C SDA Leitung.
- SCL → I2C SCL Leitung.
- 5V → 5V Stromversorgung.
Es gibt auch einen Zweipin-Header, wo ein Jumper hinzugefügt werden kann, um die On-Board-LED zu aktivieren, oder entfernt, um sie zu deaktivieren.
Bei Nutzung in einem größeren Projekt kann die Schaltung für den DHT Tiny in das bestehende Projekt-Schaltbild integriert oder eingebettet werden. In diesem Fall sind Header-Pins und LED optional.
Die Schaltung kann auch auf einem separaten Board aufgebaut und mit wenigen Drähten oder einem Verbindungskabel an Ihren Raspberry Pi angeschlossen werden.
ATtiny85 programmieren
Sketch DHT_Tiny_Breakout.ino auf den ATtiny85 laden mit Ihrem AVR-Programmer. Falls Sie keinen Programmer haben, können Sie einen Arduino Uno (oder ähnliches Board) nutzen. Schauen Sie sich einen oder mehrere der unten aufgelisteten Artikel an für Hilfe.
- Programming ATtiny85 with Arduino Uno auf Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
Ich nutze den SparkFun Tiny AVR Programmer für meine ATtiny85.
Ich betreibe meinen Chip mit 16 MHz. Siehe meinen Artikel „ATtiny @ 16MHz“ für Anweisungen dazu.
Bei Nutzung des ATtiny85 benötigt der Slave-Sketch die TinyWireS Library in Ihrem Libraries-Ordner. Diese Library kann von https://github.com/rambo/TinyWire heruntergeladen werden.
Schaltung auf Breadboard aufbauen
Der erste Schritt ist, den DHT Tiny auf einem Breadboard zum Laufen zu bringen. Mit einem Halbgrößen-Breadboard die Schaltung gemäß Schaltplan und Breadboard-Diagrammen im Projekt aufbauen.
Ein paar Tipps zur Erleichterung:
- DHT Tiny auf eigenem Breadboard aufbauen und dann ein zweites Breadboard für die Verbindung zwischen DHT Tiny und Uno oder Raspberry Pi nutzen.
- Header-Pins empfohlen, da sie das An- und Abkoppeln des DHT Tiny als einzelne Einheit erleichtern.
- Falls Sie Standard Break-away Male Headers auf dem Breadboard nutzen wollen, müssen Sie den schwarzen Plastikrand in die Mitte der Pins justieren, damit er in das Breadboard passt (siehe Bilder unten). Mit Spitzzange justieren.
- Falls Sie extra-lange Break-away 0,1″ Male Headers haben, nutzen Sie diese auf Ihrem Breadboard. Bei Standardgröße bleiben, wenn Sie Komponenten auf PCB löten wollen. Extra lange sind für PCBs nicht empfohlen.
- Female-Female Jumper-Kabel benötigt, wenn Header-Pins auf Breadboard genutzt werden. Falls nicht vorhanden, Header-Pins weglassen und Male-Male Jumper-Kabel zwischen den Boards nutzen.
- Drähte so weit wie möglich vom Chip fernhalten, damit es einfacher ist, Finger reinzustecken und Chip zum Programmieren herauszuziehen.
Unten sind einige Bilder der Breadboard-Version meines DHT Tiny.
Arduino Uno anschließen
Falls Sie an einem schnellen Test, einer Demonstration interessiert sind oder Probleme haben, das mit Ihrem Raspberry Pi zum Laufen zu bringen, können Sie den DHT Tiny an einen Arduino Uno (oder ähnliches Gerät) anschließen.
- GND Pin an GND am Uno anschließen.
- 5V Pin an 5V am Uno anschließen.
- RST Pin an D4 am Uno anschließen.
- SDA Pin an A4 am Uno anschließen.
- SCL Pin an A5 am Uno anschließen.
- INT Pin an D3 am Uno anschließen und LED via Jumper aktivieren.
Sketch DHT_Tiny_Master.ino laden und ausführen. Dieser Sketch zeigt Ausgabe im Serial Monitor.
Beim Verbinden des I2C zwischen den beiden Boards ist es wichtig, Pull-Up-Widerstände an den SDA und SCL Leitungen zu haben. In dieser Schaltung sind zwei 4,7K Ω zwischen den Pins und 5V verbunden.
Unten sind einige Bilder des DHT Tiny Breadboards, verbunden mit dem Arduino Uno.
Mit Raspberry Pi verbinden
Falls Sie an einem schnellen Test, einer Demonstration interessiert sind oder Probleme haben, das mit Ihrem Raspberry Pi zum Laufen zu bringen, können Sie den DHT Tiny an einen Arduino Uno (oder ähnliches Gerät) anschließen.
- GND Pin an GND (Pin 9) am Raspberry Pi 2/3 anschließen.
- 5V Pin an 5V (Pin 2) am Raspberry Pi 2/3 anschließen.
- RST Pin an GPIO4 (Pin 7) am Raspberry Pi 2/3 anschließen.
- SDA Pin an SDA (Pin 3) am Raspberry Pi 2/3 anschließen.
- SCL Pin an SCL (Pin 5) am Raspberry Pi 2/3 anschließen.
- INT Pin an GPIO17 (Pin 11) anschließen und LED aktivieren.
Beim Verbinden des I2C zwischen den beiden Boards ist es wichtig, Pull-Up-Widerstände an den SDA und SCL Leitungen zu haben. In dieser Schaltung sind zwei 4,7K Ω zwischen den Pins und 3V3 verbunden.
SEHR WICHTIG! Das DHT Tiny Board wird vom 5V Pin des Raspberry Pi gespeist, aber die Pull-Up-Widerstände müssen an den 3V3 Pin des Raspberry Pi angeschlossen sein (3V3 liegt an Pins 1 und 17).
Unten sind einige Bilder des DHT Tiny Breadboards, verbunden mit dem Raspberry Pi 3.
Windows 10 Applikation ausführen
Code vom GitHub Repository Link am Projektende holen und auf Ihrem Computer entpacken. Universal Application Source Code in Visual Studio 2015 öffnen und entweder auf dem Raspberry Pi deployen und von der Admin-Konsole starten oder im Debug-Modus aus Visual Studio heraus ausführen.
Falls dies das erste Mal ist, dass Sie Code aus Visual Studio für eine Windows 10 IoT Core Applikation ausführen, schauen Sie sich diese Microsoft-Artikel an:
- Deploying an App with Visual Studio
- Windows Device Portal
Schauen Sie sich die Video-Demonstration unten an, um die Applikation auf einem Raspberry Pi 3 laufen zu sehen, verbunden mit dem DHT Tiny.
Applikation Highlights
Die Windows 10 UWP Applikation ist eine Demonstrationsapplikation, die alle Features des DHT Tiny zeigt. Der Code zeigt aktuelle Temperatur, Feuchtigkeit und andere Registerwerte vom Gerät. Die UI bietet auch Möglichkeit, die Gerätekonfiguration inklusive Geräteadresse zu ändern.
DHT Tiny Library
Der Beispielcode nutzt eine Library, geschrieben für die Interaktion mit dem DHT Tiny. Diese Library ist einsatzbereit und kann direkt in all Ihren Applikationen inkludiert werden.
Library von NuGet holen
Falls Sie das Projekt nicht direkt in Ihre Applikation inkludieren wollen, einfach die DHT Tiny Library von NuGet herunterladen mit dem unten gezeigten Befehl. Package Manager Console in Visual Studio öffnen und Befehl eingeben.
PM> Install-Package IoT.DhtTiny
I2C-Bus nach Gerät scannen
Die DHT Tiny Library beinhaltet eine Methode, die den I2C-Bus nach DHT Tiny Geräten durchsucht und eine Liste von Adressen zurückgibt. Diese Liste kann genutzt werden, um eines oder mehrere der gefundenen Geräte zu initialisieren. Besonders nützlich, wenn Sie die Adresse des Geräts geändert haben, aber sich nicht erinnern, was Sie eingestellt haben. Die Callback-Methode ist optional.
// ***
// *** DHT Tiny Geräte auf dem i2c Bus enumerieren.
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** Callback Methode
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Schaltplan des DHT Tiny Breakout für den Raspberry Pi
Software-Demonstration
Dieses Video demonstriert sowohl die Universal Application, die auf einem Raspberry Pi 3 läuft und mit dem DHT Tiny auf einem Breadboard verbunden ist.
[VIDEO COMING SOON]
Finales Gerät erstellen
Der einfachste und kosteneffektivste Weg, das Board zu erstellen, ist die Nutzung eines PCB-Prototyp-Boards wie dem Perma-Proto Quarter-sized Breadboard PCB von Adafruit. Das Bild unten zeigt den Breakout mit diesem Prototyp-Board. Ich nutzte einen Dremel, um die Stromschienen-Sektionen des Boards zu entfernen.
Mehr sehen: DHT Tiny Breakout für den Raspberry Pi
Herstellungsprozess
- Professionelle Temperaturüberwachung mit Raspberry Pi und DS18B20
- Outdoor-Wetterstation mit Raspberry Pi 2 & ADS-WS1 bauen
- Analoge Sensoren am Raspberry Pi ohne nativen ADC auslesen – Step-Response Methode
- HC-SR04 Ultraschallsensor an Raspberry Pi anschließen – Praktischer Leitfaden
- Top-Zubehör, um das volle Potenzial Ihres Raspberry Pi auszuschöpfen
- MCP3008 ADC zum Auslesen analoger Sensoren mit Raspberry Pi nutzen
- SIGHT: Smarte Brille für Blinde – Raspberry Pi & TensorFlow
- SparkFun Qwiic HAT für Raspberry Pi – Kompletter Anschlussleitfaden
- Windows 10 IoT Core auf Raspberry Pi 3 Model B+ installieren – Schritt-für-Schritt
- Eigenen Raspberry Pi Roboter mit MonkMakes RRB2 Kit bauen – Detaillierte Anleitung