DHT Tiny Breakout für den Raspberry Pi
Hardwarekomponenten: Atmel ATTiny85×1DHT22 Temperatursensor×1DHT11 Temperatur- und Feuchtigkeitssensor×1SparkFun Tiny AVR Programmer×1Adafruit 4,7K Ω Widerstand×3Adafruit 10K Ω Widerstand×1Adafruit 100 Ω Widerstand×1Adafruit Diffuse blaue 3mm LED×1Adafruit taktile Tasterschalter ×1 .da ″ 36-polige Stiftleiste 1 Stück @ Länge 6, 1 Stück @ Länge 2 (insgesamt 8 Pins)×1Generic Jumper (0,1″)×1Arduino UNO &Genuino UNOOptional – wird zum Debuggen und Testen verwendet.×1Software-Apps und Online-Dienste: Microsoft Visual Studio 2015Microsoft Windows 10 IoT CoreArduino IDE
GESCHICHTE
Einführung
Der DHT11 und DHT22 sind aufgrund ihrer Genauigkeit bei sehr geringen Kosten beliebte Temperatur- und Feuchtigkeitssensoren. Ein Problem bei ihnen ist jedoch, dass sie über ein proprietäres Ein-Wire-Protokoll arbeiten, das ein genaues Timing erfordert. Diese Sensoren haben sich auf Boards mit Nicht-Echtzeit-Betriebssystemen als schwierig zu lesen erwiesen.
Vor einiger Zeit habe ich einen Artikel mit dem Titel „DHT11 /DHT22 Temperatursensor . gepostet ” zeigt, wie Sie den Microsoft C++-Beispielcode aus C# verwenden, um diese Sensoren zu lesen. Die Bibliothek konnte einen Messwert abrufen, aber ich musste eine Wiederholungslogik hinzufügen, um sie zuverlässiger zu machen. Dies erwies sich für die meisten als erfolgreich, aber einige Leute hatten Probleme, dies durchgängig zum Laufen zu bringen.
Angesichts des großen Interesses, diese Sensoren auf dem Raspberry Pi zu verwenden, während Windows 10 IoT Core ausgeführt wird, habe ich mich entschieden, eine zweite Option zu entwickeln, die eine sehr zuverlässige Methode zum Lesen dieser Sensoren bei gleichzeitig niedrigen Kosten bietet.
Übersicht
Der hier vorgestellte Ansatz besteht darin, den DHT-Sensor an einem preiswerten ATtiny85 zu befestigen und als I2C-Slave-Gerät einzurichten. Dies wird mit der TinyWireS-Bibliothek und dem Erstellen eines Satzes von Registern erreicht, die gelesen und geschrieben werden können, um mit dem Gerät zu interagieren.
Das Gerät unterstützt folgende Funktionen:
- Ein konfigurierbares Leseintervall, um anzugeben, wie oft der DHT-Sensor gelesen werden soll. Standardmäßig wird alle 2 Sekunden gelesen.
- Ein manueller Modus, der das Intervall deaktiviert und bei Bedarf eine Messung durchführt.
- Ein konfigurierbarer oberer und unterer Temperaturschwellenwert, der den Interrupt-Pin auslöst, wenn der aktuelle Temperaturmesswert über oder unter dem Schwellenwert liegt.
- Konfigurationsspeichermodus, der es ermöglicht, konfigurierte Einstellungen beim Einschalten oder nach einem Reset wiederherzustellen.
- Konfigurationsreset ermöglicht das Zurücksetzen der gespeicherten Konfiguration auf die Standardwerte.
- Sensorstromsteuerung, mit der die Stromversorgung des Sensors aktiviert und deaktiviert werden kann, um Strom zu sparen.
- Programmierbare i2c-Geräteadresse. Die Standardadresse dieses Geräts ist 0x26, kann aber über einen Befehl geändert werden. Das Gerät merkt sich die Adresse. Beim Zurücksetzen wird die Adresse auf 0x26 zurückgesetzt. Die C#-Bibliothek enthält auch Code zum Suchen des Geräts auf dem i2c-Bus, sodass Sie die Adresse für die Verbindung nicht kennen müssen.
- Programmierbare DHT-Modellauswahl. Die Firmware ist standardmäßig auf das DHT22 eingestellt, dies kann jedoch geändert werden, indem ein Befehl an das Gerät gesendet wird, ein anderes Modell zu verwenden. Das Modell wird gespeichert, sodass es nach jedem Neustart oder Aus-/Einschalten den zu verwendenden Modelltyp beibehält.
Der Quellcode
Es gibt drei Codesätze in diesem Projekt. Die Hauptfirmware für das Board, eine Arduino-Masterskizze, die zum Testen und Demonstrieren des Boards verwendet wird, während es mit einem Arduino Uno verbunden ist, und die Window 10 IoT Code-Anwendung, die die Verwendung des Geräts vom Raspberry Pi demonstriert. Der gesamte Code ist im verlinkten GitHub-Repository verfügbar.
Das Gerät/die Schaltung
Die Schaltung ist klein und verwendet nur wenige kostengünstige Komponenten. Der ATtiny85 kann von mehreren Anbietern erworben werden. Ich empfehle, ein paar davon mitzunehmen, da sie viele nützliche Zwecke haben.
Die Schaltung hat einen sechspoligen Header, mit dem sie mit einer anderen Schaltung oder direkt mit dem Raspberry Pi verbunden werden kann. Die Pins sind wie folgt definiert:
- GND -> Verbinden Sie dies mit der Masse Ihres Stromkreises oder mit dem Massestift Ihres Raspberry Pi.
- RST -> Dieser Pin wird verwendet, um das Gerät zurückzusetzen oder neu zu starten. Dieser Pin sollte im Normalbetrieb mit 5V verbunden sein. Um das Gerät zurückzusetzen, lösen Sie einen kurzzeitigen LOW-Impuls an diesem Pin aus.
- INT -> Dieser Stift hat zwei Zwecke. Wenn die Schwellenwerte aktiviert sind, ist dieser Pin HIGH, wenn ein Schwellenwert überschritten wird, und ansonsten LOW. Im Energiesparmodus wird dieser Pin verwendet, um das Gerät aufzuwecken, indem ein kurzzeitiger hoher Impuls ausgelöst wird.
- SDA -> I2C-SDA-Leitung.
- SCL -> I2C SCL-Leitung.
- 5V -> 5V Netzteil.
Es gibt auch einen zweipoligen Header, an dem ein Jumper hinzugefügt oder entfernt werden kann, um die integrierte LED zu deaktivieren.
Wenn Sie dies in einem größeren Projekt verwenden, kann die Schaltung für den DHT Tiny zusammengeführt oder in die bestehende Schaltung des Projekts eingebettet werden. In diesem Fall sind die Header-Pins und die LED optional.
Die Schaltung kann auch auf einer separaten Platine aufgebaut und mit ein paar Drähten oder einem Verbindungskabel an deinen Raspberry Pi angeschlossen werden.
Programmieren des ATtiny85
Laden Sie die Skizze mit dem Namen DHT_Tiny_Breakout.ino auf den ATtiny85 mit Ihrem AVR-Programmierer. Wenn Sie keinen Programmierer haben, können Sie ein Arduino Uno (oder ein ähnliches Board) verwenden. Sehen Sie sich einen oder mehrere der unten aufgeführten Artikel an, um Hilfe zu erhalten.
- ATtiny85 mit Arduino Uno programmieren auf Hackster.io
- Virtueller Workshop:ATTiny85 mit Arduino programmieren
- Einen ATtiny mit Arduino 1.6 (oder 1.0) programmieren
- Einen ATtiny mit Arduino 0022 programmieren
Ich verwende den SparkFun Tiny AVR Programmer, um meinen ATtiny85 zu laden.
Ich betreibe meinen Chip mit 16 MHz. Siehe meinen Artikel mit dem Titel „ATtiny @ 16MHz ” für Anweisungen dazu.
Bei Verwendung des ATtiny85 erfordert die Slave-Skizze die TinyWireS Bibliothek, die in Ihrem Bibliotheksordner installiert werden soll. Diese Bibliothek kann von https://github.com/rambo/TinyWire heruntergeladen werden.
Breadboard the Circuit
Der erste Schritt besteht darin, das DHT Tiny auf einem Steckbrett zum Laufen zu bringen. Verwenden Sie ein Steckbrett halber Größe, um die Schaltung aufzubauen, indem Sie den im Projekt enthaltenen Schaltplänen und Steckbrettdiagrammen folgen.
Hier sind ein paar Tipps, um es einfacher zu machen:
- Bauen Sie das DHT Tiny auf seinem Steckbrett auf und verwenden Sie dann ein anderes Steckbrett für die Verbindung zwischen dem DHT Tiny und dem Uno oder Raspberry Pi.
- Die Verwendung von Stiftleisten wird empfohlen, da dies das Anschließen und Trennen des DHT Tiny als einzelne Einheit erleichtert.
- Wenn Sie die standardmäßigen abbrechbaren Stiftleisten auf dem Steckbrett verwenden möchten, müssen Sie den schwarzen Kunststoffrand auf die Mitte der Stifte einstellen, damit er in das Steckbrett passt (siehe Bilder unten). Nehmen Sie die Anpassungen mit einer Spitzzange vor.
- Wenn Sie extra lange abbrechbare 0,1-Zoll-Steckerleisten haben, verwenden Sie diese auf Ihrem Steckbrett. Bleiben Sie bei den Headern normaler Größe, wenn Sie Komponenten auf eine Leiterplatte löten möchten. Die extra langen werden nicht für PCBs empfohlen.
- Sie benötigen weibliche-weibliche Überbrückungsdrähte, wenn Sie die Stiftleisten auf dem Steckbrett verwenden. Wenn Sie diese nicht haben, lassen Sie die Header-Pins weg und verwenden Sie männlich-männliche Überbrückungsdrähte zwischen den beiden Platinen.
- Halten Sie die Drähte so weit wie möglich vom Chip fern, damit Sie Ihre Finger leichter herausziehen und den Chip zum Programmieren herausziehen können.
Unten sind einige Bilder der Steckbrettversion meines DHT Tiny.
Anschließen des Arduino Uno
Wenn Sie an einem schnellen Test oder einer Demonstration interessiert sind oder Probleme haben, dies mit Ihrem Raspberry Pi zum Laufen zu bringen, können Sie das DHT Tiny mit einem Arduino Uno (oder einem ähnlichen Gerät) verbinden.
- Verbinden Sie die GND an GND anstecken auf der Uno.
- Schließen Sie die 5V an an 5V anstecken auf der Uno.
- Verbinden Sie den RST an D4 anheften auf der Uno.
- Verbinden Sie das SDA an A4 anheften auf der Uno.
- Verbinden Sie die SCL an A5 anheften auf der Uno.
- Verbinden Sie die INT an D3 anheften am Uno und aktivieren Sie die LED über den Jumper.
Laden Sie die Skizze mit dem Namen DHT_Tiny_Master.ino . und führen Sie sie aus . Diese Skizze zeigt die Ausgabe im Serienmonitor . an .
Beim Anschließen des I2C zwischen den beiden Boards ist es wichtig, Pull-Up-Widerstände auf den SDA- und SCL-Leitungen zu haben. In dieser Schaltung sind zwei 4,7K zwischen den Pins und 5V angeschlossen.
Unten sind einige Bilder des DHT Tiny Steckbretts, das mit dem Arduino Uno verbunden ist.
Verbindung zum Raspberry Pi
Wenn Sie an einem schnellen Test, einer Demonstration interessiert sind oder Probleme haben, dies mit Ihrem Raspberry Pi zum Laufen zu bringen, können Sie das DHT Tiny an ein Arduino Uno (oder ein ähnliches Gerät) anschließen.
- Verbinden Sie die GND an GND anstecken (Pin 9) in auf dem Raspberry Pi 2/3.
- Schließen Sie die 5V an an 5V anstecken (Pin 2) in auf dem Raspberry Pi 2/3.
- Verbinden Sie den RST an GPIO4 anpinnen (Pin 7) auf dem Raspberry Pi 2/3.
- Verbinden Sie das SDA an SDA anheften (Pin 3) auf dem Raspberry Pi 2/3.
- Verbinden Sie die SCL an SCL anheften (Pin 5) auf dem Raspberry Pi 2/3.
- Verbinden Sie die INT an GPIO17 anpinnen (Pin 11) und aktivieren Sie die LED.
Beim Anschließen des I2C zwischen den beiden Boards ist es wichtig, Pull-Up-Widerstände auf den SDA- und SCL-Leitungen zu haben. In dieser Schaltung sind zwei 4,7K zwischen den Pins und 3V3 angeschlossen.
SEHR WICHTIG! Das DHT Tiny Board wird vom 5V-Pin des Raspberry Pi mit Strom versorgt, aber die Pull-up-Widerstände müssen mit dem 3V3-Pin des Raspberry Pi verbunden werden (3V3 liegt an den Pins 1 und 17).
Unten sind einige Bilder des DHT Tiny Steckbretts, das mit dem Raspberry Pi 3 verbunden ist.
Ausführen der Windows 10-Anwendung
Holen Sie sich den Code aus dem GitHub-Repository-Link am Ende des Projekts und entpacken Sie ihn auf Ihrem Computer. Öffnen Sie den Universal Application-Quellcode in Visual Studio 2015 und stellen Sie ihn entweder auf dem Raspberry Pi bereit und starten Sie ihn über die Admin-Konsole oder führen Sie ihn im Debug-Modus von Visual Studio aus.
Wenn Sie zum ersten Mal Code aus Visual Studio für eine Windows 10 IoT Core-Anwendung ausführen, sehen Sie sich diese Artikel von Microsoft an:
- Bereitstellen einer App mit Visual Studio
- Windows-Geräteportal
Sehen Sie sich die Videodemonstration unten an, um zu sehen, wie die Anwendung auf einem Raspberry Pi 3 läuft, während sie mit dem DHT Tiny verbunden ist.
Anwendungshighlights
Die Windows 10 UWP-Anwendung ist eine Demonstrationsanwendung, die alle Funktionen des DHT Tiny vorführt. Der Code zeigt die aktuelle Temperatur, Luftfeuchtigkeit und andere Registerwerte des Geräts an. Die Benutzeroberfläche bietet auch die Möglichkeit, die Konfiguration des Geräts einschließlich der Geräteadresse zu ändern.
DHT Tiny Library
Der Beispielcode verwendet eine Bibliothek, die für die Interaktion mit dem DHT Tiny geschrieben wurde. Diese Bibliothek ist sofort einsatzbereit und kann direkt in alle Ihre Anwendungen eingebunden werden.
Holen Sie sich die Bibliothek von NuGet
Wenn Sie das Projekt nicht direkt in Ihre Anwendung einbinden möchten, laden Sie einfach die DHT Tiny-Bibliothek von NuGet mit dem unten gezeigten Befehl herunter. Öffnen Sie die Paket-Manager-Konsole in Visual Studio und geben Sie den Befehl ein.
PM> Installationspaket IoT.DhtTiny
Scannen des i2c-Busses nach dem Gerät
Die DHT Tiny-Bibliothek enthält eine Methode, die den i2c-Bus nach DHT Tiny-Geräten durchsucht und eine Liste von Adressen zurückgibt. Diese Liste kann verwendet werden, um eines oder mehrere der gefundenen Geräte zu initialisieren. Dies ist besonders praktisch, wenn Sie die Adresse des Geräts geändert haben, sich aber nicht mehr erinnern können, auf was Sie die Adresse eingestellt haben. Beachten Sie, dass die Rückrufmethode optional ist.
// ***// *** Zählen Sie die DHT Tiny-Geräte auf dem i2c-Bus auf.// ***IEnumerable address =wait DhtTiny.FindAllDhtTinyAsync(this. FindAllDhtTinyCallback);// ***// *** Rückrufmethode// ***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());}
Schema von DHT Tiny Breakout für den Raspberry Pi
Software-Demonstration
Dieses Video zeigt, wie die Universalanwendung auf einem Raspberry Pi 3 läuft, der mit dem DHT Tiny auf einem Steckbrett verbunden ist.
[VIDEO DEMNÄCHST]
Erstellen des letzten Geräts
Der einfachste und kostengünstigste Weg, das Board zu erstellen, besteht darin, ein PCB-Prototyp-Board wie das Perma-Proto Quarter-Size Breadboard PCB von Adafruit zu verwenden. Das Bild unten zeigt den Breakout mit diesem Prototyp-Board. Beachten Sie, dass ich einen Dremel verwendet habe, um die Stromschienenabschnitte des Boards zu entfernen.
Mehr sehen: DHT Tiny Breakout für den Raspberry Pi
Herstellungsprozess
- Temperaturüberwachung auf dem Raspberry Pi
- Raspberry Pi 2 Wetterstation
- Analoge Sensoren ohne analoge Eingänge auf dem Raspberry Pi
- HC-SR04 Ultraschall-Reichweitensensor auf dem Raspberry Pi
- Das beste Zubehör für Ihren Raspberry Pi
- Analoge Sensoren auf dem Raspberry Pi mit einem MCP3008
- SICHT:Für Blinde
- Anleitung zum Anschluss von Qwiic HAT für Raspberry Pi
- Windows 10 IoT Core für Raspberry Pi 3 Model B+
- Bau des MonkMakes Raspberry Pi Robot Kit