Breakout compact DHT Température & Humidité pour Raspberry Pi – ATtiny85 & DHT22/DHT11
Composants matériels : Atmel ATTiny85 × 1, Capteur température DHT22 × 1, Capteur température & humidité DHT11 × 1, Programmeur Tiny AVR SparkFun × 1, Résistance Adafruit 4,7K Ω × 3, Résistance Adafruit 10K Ω × 1, Résistance Adafruit 100 Ω × 1, LED bleue diffuse 3mm Adafruit × 1, Interrupteur tactile Adafruit × 1, Barrette male 0,1″ 36 broches cassable 1 pièce @ longueur 6, 1 pièce @ longueur 2 (total 8 broches) × 1, Jumper générique (0,1″) × 1, Arduino UNO & Genuino UNO Optionnel – pour débogage et test. × 1 Applications logicielles et services en ligne : Microsoft Visual Studio 2015, Microsoft Windows 10 IoT Core, Arduino IDE
HISTOIRE
Introduction
Les DHT11 et DHT22 sont des capteurs de température et d'humidité populaires grâce à leur précision à très faible coût. Un problème avec eux, cependant, est qu'ils fonctionnent sur un protocole one-wire propriétaire qui nécessite un timing précis. Ces capteurs se sont avérés difficiles à lire sur des cartes avec systèmes d'exploitation non temps-réel.
Il y a un moment, j'ai posté un article intitulé « DHT11 /DHT22 Temperature Sensor » démontrant comment utiliser l'exemple de code C++ Microsoft depuis C# pour lire ces capteurs. La bibliothèque arrivait à obtenir une lecture mais j'ai dû ajouter une logique de retry pour la rendre plus fiable. Cela a fonctionné pour la plupart mais certaines personnes avaient des problèmes pour le faire fonctionner de manière cohérente.
Compte tenu de l'intérêt pour l'utilisation de ces capteurs sur Raspberry Pi sous Windows 10 IoT Core, j'ai décidé de créer une seconde option qui fournit une méthode très fiable de lecture de ces capteurs tout en maintenant un faible coût.
Aperçu
L'approche présentée ici consiste à attacher le capteur DHT à un ATtiny85 peu coûteux et à le configurer en périphérique esclave I2C. Cela est accompli en utilisant la bibliothèque TinyWireS et en créant un ensemble de registres qui peuvent être lus et écrits pour interagir avec le dispositif.
Le dispositif supporte les fonctions suivantes :
- Intervalle de lecture configurable pour spécifier à quelle fréquence lire le capteur DHT. La valeur par défaut est une lecture toutes les 2 secondes.
- Mode manuel qui désactive l'intervalle et prend une lecture à la demande.
- Seuils de température haut et bas configurables qui déclenchent la broche d'interruption quand la lecture courante dépasse ou tombe sous le seuil.
- Mode sauvegarde de configuration permettant de restaurer les paramètres configurés au démarrage ou après réinitialisation.
- Réinitialisation de configuration permettant de remettre la configuration sauvegardée aux valeurs par défaut.
- Contrôle d'alimentation du capteur permettant d'activer et désactiver l'alimentation du capteur pour économiser l'énergie.
- Adresse I2C programmable. L'adresse par défaut de ce dispositif est 0x26, mais elle peut être changée via une commande. Le dispositif mémorisera l'adresse. Si réinitialisé, l'adresse reviendra à 0x26. La bibliothèque C# inclut aussi du code pour rechercher le dispositif sur le bus I2C donc vous n'avez pas besoin de connaître l'adresse pour vous connecter.
- Sélection modèle DHT programmable. Le firmware défaut au DHT22, mais cela peut être changé en envoyant une commande au dispositif pour utiliser un autre modèle. Le modèle est sauvegardé pour qu'après chaque redémarrage ou cycle d'alimentation il retienne le type de modèle à utiliser.
Le code source
Il y a trois ensembles de code dans ce projet. Le firmware principal pour la carte, un sketch maître Arduino utilisé pour tester et démontrer la carte connectée à un Arduino Uno et l'application Windows 10 IoT Code qui montre comment utiliser le dispositif depuis le Raspberry Pi. Tout le code est disponible dans le dépôt GitHub lié.
Le dispositif/circuit
Le circuit est petit et n'utilise que quelques composants peu coûteux. L'ATtiny85 peut être acheté auprès de plusieurs vendeurs. Je recommande d'en prendre quelques-uns car ils ont de nombreuses utilisations utiles.
Le circuit a un connecteur six broches qui permet de le connecter soit à un autre circuit soit directement au Raspberry Pi. Les broches sont définies comme suit :
- GND → Connectez ceci à la masse sur votre circuit ou à la broche masse sur votre Raspberry Pi.
- RST → Cette broche est utilisée pour réinitialiser ou redémarrer le dispositif. Cette broche doit être connectée à 5V en fonctionnement normal. Pour réinitialiser le dispositif, déclenchez une impulsion LOW momentanée sur cette broche.
- INT → Cette broche a deux fonctions. Quand les seuils sont activés, cette broche sera HIGH chaque fois qu'un seuil est dépassé et LOW sinon. En mode économie d'énergie, cette broche est utilisée pour réveiller le dispositif en déclenchant une impulsion HIGH momentanée.
- SDA → Ligne I2C SDA.
- SCL → Ligne I2C SCL.
- 5V → Alimentation 5V.
Il y a aussi un connecteur deux broches où un jumper peut être ajouté pour activer, ou retiré pour désactiver la LED embarquée.
Lors de l'utilisation dans un projet plus large, le circuit pour le DHT Tiny peut être fusionné ou embarqué dans le circuit existant du projet. Dans ce cas, les broches d'en-tête et la LED sont optionnelles.
Le circuit peut aussi être construit sur une carte séparée et connecté à votre Raspberry Pi avec quelques fils ou un câble de connexion.
Programmation de l'ATtiny85
Chargez le sketch appelé DHT_Tiny_Breakout.ino sur l'ATtiny85 en utilisant votre programmeur AVR. Si vous n'avez pas de programmeur, vous pouvez utiliser un Arduino Uno (ou carte similaire). Jetez un œil à un ou plusieurs des articles listés ci-dessous pour de l'aide.
- Programming ATtiny85 with Arduino Uno sur 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
J'utilise le programmeur Tiny AVR SparkFun pour charger mon ATtiny85.
Je fais tourner ma puce à 16 MHz. Voir mon article « ATtiny @ 16MHz » pour les instructions.
Quand vous utilisez l'ATtiny85, le sketch esclave nécessite la bibliothèque TinyWireS installée dans votre dossier libraries. Cette bibliothèque peut être téléchargée depuis https://github.com/rambo/TinyWire.
Câblage sur breadboard
La première étape est de faire fonctionner le DHT Tiny sur une breadboard. En utilisant une demi-breadboard, construisez le circuit en suivant le schéma et les diagrammes breadboard inclus dans le projet.
Voici quelques astuces pour faciliter :
- Construisez le DHT Tiny sur sa propre breadboard puis utilisez une autre breadboard pour la connexion entre le DHT Tiny et l'Uno ou le Raspberry Pi.
- L'utilisation de broches d'en-tête est recommandée car cela facilite la connexion et déconnexion du DHT Tiny comme une unité unique.
- Si vous prévoyez d'utiliser les en-têtes mâles cassables standards sur la breadboard, vous devrez ajuster le rebord en plastique noir au centre des broches pour qu'il rentre dans la breadboard (voir images ci-dessous). Utilisez une pince à bec long pour faire les ajustements.
- Si vous avez des en-têtes mâles cassables 0,1″ extra-longs, utilisez-les sur votre breadboard. Restez avec les tailles normales si vous prévoyez de souder des composants sur PCB. Les extra-longs ne sont pas recommandés pour les PCB.
- Vous aurez besoin de fils de liaison femelle-femelle si vous utilisez les broches d'en-tête sur la breadboard. Si vous n'en avez pas, omettez les broches d'en-tête et utilisez des fils mâle-mâle entre les deux cartes.
- Gardez les fils éloignés de la puce autant que possible pour qu'il soit plus facile de mettre vos doigts et sortir la puce pour la programmation.
Ci-dessous quelques images de la version breadboard de mon DHT Tiny.
Connexion à l'Arduino Uno
Si vous êtes intéressé par un test rapide, une démonstration, ou si vous avez des difficultés à faire fonctionner cela avec votre Raspberry Pi, vous pouvez connecter le DHT Tiny à un Arduino Uno (ou dispositif similaire).
- Connectez la broche GND à GND sur l'Uno.
- Connectez la broche 5V à 5V sur l'Uno.
- Connectez la broche RST à D4 sur l'Uno.
- Connectez la broche SDA à A4 sur l'Uno.
- Connectez la broche SCL à A5 sur l'Uno.
- Connectez la broche INT à D3 sur l'Uno et activez la LED via le jumper.
Chargez et exécutez le sketch nommé DHT_Tiny_Master.ino. Ce sketch affichera la sortie dans le Moniteur Série.
Lors de la connexion I2C entre les deux cartes, il est important d'avoir des résistances de pull-up sur les lignes SDA et SCL. Dans ce circuit, il y a deux résistances 4,7K Ω connectées entre les broches et 5V.
Ci-dessous quelques images du DHT Tiny sur breadboard connecté à l'Arduino Uno.
Connexion au Raspberry Pi
Si vous êtes intéressé par un test rapide, une démonstration, ou si vous avez des difficultés à faire fonctionner cela avec votre Raspberry Pi, vous pouvez connecter le DHT Tiny à un Arduino Uno (ou dispositif similaire).
- Connectez la broche GND à GND (broche 9) sur le Raspberry Pi 2/3.
- Connectez la broche 5V à 5V (broche 2) sur le Raspberry Pi 2/3.
- Connectez la broche RST à GPIO4 (broche 7) sur le Raspberry Pi 2/3.
- Connectez la broche SDA à SDA (broche 3) sur le Raspberry Pi 2/3.
- Connectez la broche SCL à SCL (broche 5) sur le Raspberry Pi 2/3.
- Connectez la broche INT à GPIO17 (broche 11) et activez la LED.
Lors de la connexion I2C entre les deux cartes, il est important d'avoir des résistances de pull-up sur les lignes SDA et SCL. Dans ce circuit, il y a deux résistances 4,7K Ω connectées entre les broches et 3V3.
TRÈS IMPORTANT ! La carte DHT Tiny sera alimentée par la broche 5V du Raspberry Pi, mais les résistances de pull-up doivent être connectées à la broche 3V3 du Raspberry Pi (3V3 est sur les broches 1 et 17).
Ci-dessous quelques images du DHT Tiny sur breadboard connecté au Raspberry Pi 3.
Exécution de l'application Windows 10
Récupérez le code depuis le lien du dépôt GitHub au bas du projet et décompressez-le sur votre ordinateur. Ouvrez le code source de l'application universelle dans Visual Studio 2015 et déployez-le sur le Raspberry Pi et lancez-le depuis la console d'administration ou exécutez-le en mode debug depuis Visual Studio.
Si c'est la première fois que vous exécutez du code depuis Visual Studio pour une application Windows 10 IoT Core, jetez un œil à ces articles de Microsoft :
- Deploying an App with Visual Studio
- Windows Device Portal
Regardez la vidéo de démonstration ci-dessous pour voir l'application s'exécuter sur un Raspberry Pi 3 connecté au DHT Tiny.
Points forts de l'application
L'application UWP Windows 10 est une application de démonstration qui montre toutes les fonctionnalités du DHT Tiny. Le code affiche la température actuelle, l'humidité et d'autres valeurs de registres du dispositif. L'UI fournit aussi un moyen de changer la configuration du dispositif y compris l'adresse du dispositif.
Bibliothèque DHT Tiny
L'exemple de code utilise une bibliothèque écrite pour interagir avec le DHT Tiny. Cette bibliothèque est prête à l'emploi et peut être incluse directement dans toutes vos applications.
Obtenir la bibliothèque depuis NuGet
Si vous ne voulez pas inclure le projet directement dans votre application, téléchargez simplement la bibliothèque DHT Tiny depuis NuGet en utilisant la commande ci-dessous. Ouvrez la Console du Gestionnaire de Paquets dans Visual Studio et tapez la commande.
PM> Install-Package IoT.DhtTiny
Balayage du bus I2C pour le dispositif
La bibliothèque DHT Tiny inclut une méthode qui recherche le bus I2C pour tout dispositif DHT Tiny et retourne une liste d'adresses. Cette liste peut être utilisée pour initialiser un ou plusieurs des dispositifs trouvés. Cela s'avère particulièrement utile si vous avez changé l'adresse du dispositif mais ne vous souvenez pas de ce que vous avez défini. Notez que la méthode de callback est optionnelle.
// ***
// *** Énumérer les dispositifs DHT Tiny sur le bus i2c.
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** Méthode de callback
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Localisation dispositifs [0x{0:X2}] [{1}%] [Trouvés = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Schématiques du DHT Tiny Breakout pour Raspberry Pi
Démonstration logicielle
Cette vidéo démontre à la fois l'application universelle s'exécutant sur un Raspberry Pi 3 connecté au DHT Tiny sur breadboard.
[VIDÉO À VENIR]
Création du dispositif final
La façon la plus facile et la plus rentable de créer la carte est d'utiliser une carte de prototype PCB comme le Perma-Proto Quarter-sized Breadboard PCB d'Adafruit. L'image ci-dessous montre le breakout utilisant cette carte de prototype. Notez que j'ai utilisé une Dremel pour enlever les sections de rail d'alimentation de la carte.
Voir plus : DHT Tiny Breakout pour Raspberry Pi
Processus de fabrication
- Surveillance de température professionnelle sur Raspberry Pi avec DS18B20
- Construction d'une station météo extérieure avec Raspberry Pi 2 et ADS‑WS1
- Mesurer des capteurs analogiques sur Raspberry Pi sans ADC natif
- Connecter un capteur ultrasonique HC‑SR04 à un Raspberry Pi – Guide pratique
- Les meilleurs accessoires pour exploiter pleinement le potentiel de votre Raspberry Pi
- Utiliser un ADC MCP3008 pour lire des capteurs analogiques avec Raspberry Pi
- SIGHT : Lunettes intelligentes pour autonomiser les aveugles
- SparkFun Qwiic HAT pour Raspberry Pi — Guide de Connexion Complet
- Installation de Windows 10 IoT Core sur Raspberry Pi 3 Model B+ : Guide Étape par Étape