Table des matières:

Moniteur de température et d'humidité : 6 étapes (avec photos)
Moniteur de température et d'humidité : 6 étapes (avec photos)

Vidéo: Moniteur de température et d'humidité : 6 étapes (avec photos)

Vidéo: Moniteur de température et d'humidité : 6 étapes (avec photos)
Vidéo: Arduino: Capteur de température/humidité + Afficheur LCD | HD Français 2024, Juillet
Anonim
Moniteur de température et d'humidité
Moniteur de température et d'humidité
Moniteur de température et d'humidité
Moniteur de température et d'humidité

Dans ce instructable, je vais vous montrer comment faire votre propre moniteur de température et d'humidité pour votre salon. L'appareil dispose également de capacités WiFi, dans le but d'enregistrer les données sur un serveur distant (par exemple un Raspberry Pi) et d'y accéder ultérieurement via une simple interface Web.

Les principales parties de l'appareil sont un microcontrôleur ESP8266, un capteur de température et d'humidité DHT11 et un écran LCD 16x4 caractères. Le projet est entièrement open source, alors n'hésitez pas à télécharger le schéma, la disposition de la carte et les fichiers de conception du boîtier et d'apporter les modifications que vous souhaitez.

Étape 1: Outils et pièces

Outils et pièces
Outils et pièces
Outils et pièces
Outils et pièces
Outils et pièces
Outils et pièces
Outils et pièces
Outils et pièces

Pour construire le moniteur, vous aurez besoin des pièces suivantes:

1 x ESP-12F [2€] - Pour autant que je sache, l'ESP-12E et l'ESP-12F sont fondamentalement identiques, à la différence que l'ESP-12F a une meilleure antenne.

1 x Capteur de Température et d'Humidité DHT11 [0.80€] - Le DHT22 va également fonctionner mais quelques modifications devront être apportées sur le modèle 3D du boîtier, le DHT22 est également un peu plus cher.

1 x LCD 16x4 Caractères 5V [3.30€] - Oui, vous aurez besoin d'un 5V car le PCB est conçu pour que l'écran LCD soit alimenté directement à partir de 5V plutôt que du régulateur de tension. Cela a été fait afin de réduire la charge sur le régulateur de tension, mais aussi parce que les écrans 5V ont tendance à être moins chers. Mais ne vous inquiétez pas, même si l'ESP8266 fonctionne à 3,3 V, il fonctionnera toujours très bien.

1 x Régulateur de Tension CMS LD1117V33, également appelé LD33 (boîtier SOT223) [0.80€]

1 x Condensateur SMD Céramique 100nF (paquet 0603)

1 x condensateur SMD au tantale 10uF (paquet 3528)

1 x résistance SMD 10K (boîtier 0805)

1 x pot de coupe 10K (trou traversant)

1 x 47Ω SMD Resistor (0805 package) - C'est juste pour limiter le courant qui va au rétro-éclairage de l'écran LCD. N'hésitez pas à expérimenter différentes valeurs de résistance et choisissez l'intensité que vous préférez.

1 x SMD Momentary Switch [0,80 €] - Le particulier que j'ai utilisé est celui-ci, mais vous pouvez utiliser n'importe quel commutateur momentané avec le même encombrement. J'ai également pu trouver les mêmes commutateurs sur eBay pour moins cher en en obtenant plus d'un.

1 x Jack DC 5,5x2,1 mm (montage sur panneau) [0,50 €] - Celui que j'ai utilisé a un diamètre de découpe de panneau de 8 mm et une longueur de 9 mm. Il peut être facilement trouvé sur eBay en recherchant "Panneau DC Jack" (voir photo ci-jointe).

1 embase mâle à 40 broches de 2,54 mm (100 mil) (trou traversant)

1 embase femelle usinée à 40 broches de 2,54 mm (100 mil) (trou traversant)

1 cavalier de 2,54 mm (100 mil) - C'est le même que ceux utilisés sur les cartes mères d'ordinateur.

4 boulons M3 de 8 mm

4 x inserts filetés M3 4x4mm - Ils peuvent être facilement trouvés en recherchant "Inserts en cuivre en laiton à presser M3" sur eBay (voir photo ci-jointe).

4 boulons M2 de 12 mm

4 écrous M2

1 x câble USB Type A vers 5,5 x 2,1 mm DC [1,5 €] - Cela permettra d'alimenter votre appareil soit à partir d'un chargeur de téléphone standard, soit à peu près n'importe quel ordinateur doté d'un port USB. L'appareil ne consomme que 300 mA dans le pire des cas et 250 mA en moyenne, donc même un port USB 2.0 fera l'affaire.

1 x PCB - L'épaisseur de la carte n'est pas critique, alors optez pour 1,6 mm qui est généralement l'option la moins chère avec la plupart des fabricants de PCB.

3 x morceaux de fil toronné (environ 60 mm chacun)

3 x morceaux de tube thermorétractable (environ 10 mm chacun)

Et les outils suivants:

Fer à souder

Convertisseur USB vers série - Vous en aurez besoin pour programmer l'ESP8266 sur la carte.

Tournevis Phillips et/ou clé hexagonale - Selon le type de vis que vous utiliserez.

Imprimante 3D - Si vous n'avez pas accès à une imprimante 3D, vous pouvez toujours utiliser une boîte de projet en plastique générique et faire les découpes vous-même avec un Dremel. Les dimensions intérieures minimales d'une telle boîte devront être de 24 mm de hauteur, 94 mm de longueur et 66 mm de largeur. Vous devrez également utiliser des entretoises M2 de 8 mm pour le montage de l'écran LCD.

Dremel - Uniquement nécessaire si vous n'allez pas pour le boîtier imprimé en 3D.

Étape 2: faire le PCB

Faire le PCB
Faire le PCB
Faire le PCB
Faire le PCB
Faire le PCB
Faire le PCB

La première étape consiste à faire le PCB. Vous pouvez le faire soit en le gravant vous-même, soit en vous rendant simplement sur le site Web de votre fabricant de circuits imprimés préféré et en passant une commande. Si vous ne prévoyez pas d'apporter des modifications à la disposition de la carte, vous pouvez simplement récupérer le fichier ZIP contenant les fichiers gerber joints à cette étape et l'envoyer directement au fabricant. Si vous souhaitez apporter des modifications, les fichiers de schéma et de mise en page de la carte KiCAD peuvent être trouvés ici.

Après avoir mis la main sur les cartes, il est temps de souder les composants. Cela devrait être assez simple, mais il y a quelques points à noter. Tout d'abord, ne procédez pas encore à la soudure du PCB sur l'en-tête LCD, cela devra être fait lors de l'assemblage final en raison de la façon dont le boîtier a été conçu. Si vous créez votre propre enclos, n'hésitez pas à ignorer ce conseil.

Le connecteur U3 est l'endroit où le capteur DHT11 va être connecté. Idéalement, vous devriez utiliser une embase femelle usinée à 90° à cet effet. Mais si vous comme moi n'arrivez pas à en trouver un, prenez-en un droit et pliez-le vous-même. Si vous faites plus tard, les fils du DHT11 seront également un peu courts, vous devrez donc souder quelques extensions. La distance entre la tête de broche et le capteur une fois connecté doit être d'environ 5 mm.

La raison pour laquelle vous souhaitez utiliser une embase à broches usinée est que les trous sont plus petits que les embases à broches femelles ordinaires. Ainsi, les fils du capteur peuvent s'y asseoir étroitement, créant une connexion solide. Mais vous pouvez également essayer de souder le DHT11 sur un morceau d'en-tête de broche mâle et le connecter de cette façon à un en-tête de broche femelle coudé régulier, ce qui devrait tout aussi bien fonctionner.

Étape 3: fabrication de l'enceinte

Faire l'enceinte
Faire l'enceinte
Faire l'enceinte
Faire l'enceinte
Faire l'enceinte
Faire l'enceinte
Faire l'enceinte
Faire l'enceinte

Maintenant que le PCB est soudé, il est temps de fabriquer le boîtier. Il y a deux parties différentes qui doivent être imprimées, le corps principal du boîtier et le couvercle. Le couvercle comporte également des trous de montage pour le fixer sur votre mur.

Les deux parties peuvent être imprimées avec une buse standard de 0,4 mm à une hauteur de couche de 0,2 mm. Dans mon cas, le temps d'impression était d'environ 4 heures pour les deux parties combinées. Le couvercle ne nécessite aucun support, mais la partie principale du boîtier le fait, principalement pour la partie sous les douilles à vis. Après l'impression, faites très attention à retirer les supports, j'ai réussi à casser l'un des entretoises de l'écran LCD en faisant cela et j'ai dû le recoller avec de la superglue.

Le boîtier est conçu sur FreeCAD, donc si vous souhaitez apporter des modifications, cela devrait être assez simple. Les fichiers STL pour l'impression du boîtier ainsi que les fichiers de conception FreeCAD sont disponibles sur Thingiverse.

Étape 4: Assemblage du moniteur

Avec le boîtier imprimé, il est temps de tout assembler. Tout d'abord, placez l'écran LCD à l'intérieur du boîtier et faites-le glisser vers la gauche, de sorte qu'il y ait un espace entre celui-ci et le trou pour le capteur.

Image
Image

Ensuite, placez le PCB dessus, avec le capteur déjà fixé sur l'en-tête des broches.

Image
Image

Après cela, poussez le capteur dans le trou, faites glisser l'écran LCD en place et insérez le PCB sur l'embase à broches. Fixez maintenant l'écran LCD à l'aide d'écrous et de boulons M2 et soudez le PCB sur l'embase à broches.

Image
Image

Ensuite, mettez la prise d'alimentation en place, attachez-y des fils et soudez leurs autres extrémités au PCB. L'utilisation de certains tubes thermorétractables ici serait également une bonne idée.

Image
Image

La dernière étape consiste à installer les inserts filetés en métal afin que le couvercle puisse être vissé en place avec des boulons M3. Pour cela, vous devrez utiliser votre fer à souder pour les chauffer, afin qu'ils puissent être poussés dans les trous. Vous pouvez jeter un oeil sur cette instructable si vous avez besoin de plus d'informations sur l'ajout de fils métalliques à vos impressions 3D.

Image
Image

Étape 5: Configuration du serveur

Configuration du serveur
Configuration du serveur

Avant de télécharger le firmware sur l'ESP8266, il reste une chose à faire, à savoir la configuration d'un serveur pour enregistrer les données reçues par l'appareil. À cette fin, vous pouvez utiliser à peu près n'importe quelle machine Linux, d'un Raspberry Pi sur votre réseau privé à un droplet DigitalOcean. Je suis allé avec le plus tard, mais le processus est à peu près le même, peu importe ce que vous choisissez.

Installation d'Apache, MySQL (MariaDB) et PHP

Nous devons d'abord configurer LAMP, ou en d'autres termes installer Apache, MySQL (MariaDB) et PHP sur le serveur. Pour cela, vous devrez utiliser le gestionnaire de paquets de votre distribution, pour l'exemple, j'utiliserai apt qui est le gestionnaire de paquets utilisé par à peu près toutes les distributions basées sur Debian, y compris Raspbian.

mise à jour sudo apt

sudo apt installer apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

Après cela, si vous mettez l'adresse IP de votre serveur dans la barre d'adresse de votre navigateur, vous devriez pouvoir voir la page par défaut d'Apache.

Mise en place de la base de données

Nous avons maintenant besoin d'une base de données pour enregistrer les données. Tout d'abord, connectez-vous à MySQL en tant que root en exécutant, sudo mysql

Et créez la base de données et un utilisateur avec accès comme suit, CRÉER UNE BASE DE DONNÉES « capteurs »

UTILISER « capteurs »; CREATE TABLE `temperature` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTEUR=InnoDB; CREATE TABLE `humidité` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTEUR=InnoDB; CREATE USER '[username]'@'localhost' IDENTIFIED BY '[password]'; ACCORDER TOUS LES PRIVILÈGES SUR 'sensors'.* À 'sensors'@'localhost'; SORTIR

Assurez-vous de remplacer [username] et [password] par le nom d'utilisateur et le mot de passe réels de l'utilisateur MySQL que vous aimez. Notez-les également, car vous en aurez besoin pour la prochaine étape.

Configuration des scripts de journalisation et d'interface Web

Accédez au répertoire /var/www/html qui est la racine du document de l'hôte virtuel par défaut d'Apache, supprimez le fichier HTML qui contient la page Web par défaut et téléchargez les scripts de journalisation et d'interface Web qu'il contient.

cd /var/www/html

sudo rm index.html sudo wget https://raw.githubusercontent.com/magkopian/esp-arduino-temp-monitor/master/server/log.php sudo wget https://raw.githubusercontent.com/magkopian/esp- arduino-temp-monitor/master/server/index.php

Modifiez maintenant le script de journalisation à l'aide de nano, sudo nano log.php

Vous devrez remplacer le [nom d'utilisateur] et le [mot de passe] par le nom d'utilisateur et le mot de passe de l'utilisateur MySQL que vous avez créé à l'étape précédente. Remplacez également la [clé client] par une chaîne unique et notez-la. Cela va être utilisé comme mot de passe afin que le moniteur puisse s'authentifier auprès du serveur.

Enfin, éditez le fichier index.php avec nano, sudo nano index.php

et remplacez le [nom d'utilisateur] et le [mot de passe] par le nom d'utilisateur et le mot de passe de l'utilisateur MySQL comme vous l'avez fait avec le script de journalisation.

Configuration de HTTPS (facultatif)

Cela peut être facultatif, mais si la connexion entre l'ESP8266 et le serveur se fait via Internet, il est fortement recommandé d'utiliser un cryptage.

Malheureusement, vous ne pouvez pas simplement utiliser quelque chose comme Let's Encrypt pour obtenir un certificat. En effet, au moins au moment de l'écriture, la bibliothèque cliente HTTP pour l'ESP8266 nécessite toujours que l'empreinte du certificat soit fournie comme deuxième argument lors de l'appel de http.begin(). Cela signifie que si vous utilisez quelque chose comme Let's Encrypt, vous devrez reflasher le firmware sur la puce tous les 3 mois afin de mettre à jour l'empreinte du certificat après chaque renouvellement.

Un moyen de contourner cela serait de générer un certificat auto-signé qui expire après une très longue période (par exemple 10 ans) et de conserver le script de journalisation sur son propre hôte virtuel avec son propre sous-domaine. De cette façon, vous pouvez avoir l'interface Web pour accéder aux données sur un sous-domaine distinct, qui utilisera un certificat approprié d'une autorité de confiance. L'utilisation d'un certificat auto-signé dans ce cas n'est pas un problème de sécurité, car l'empreinte du certificat qui l'identifie de manière unique sera codée en dur dans le micrologiciel et le certificat ne sera utilisé que par l'ESP8266.

Avant de commencer, je suppose que vous possédez déjà un nom de domaine et que vous pouvez créer des sous-domaines dessus. Ainsi, pour générer un certificat qui expire après 10 ans, exécutez la commande suivante et répondez aux questions.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

Comme il s'agit d'un certificat auto-signé, ce à quoi vous répondez dans la plupart des questions n'a pas trop d'importance, à l'exception de la question qui demande le nom commun. C'est ici que vous devrez fournir le sous-domaine complet qui sera utilisé pour cet hôte virtuel. Le sous-domaine que vous donnerez ici devra être le même que le ServerName que vous définirez plus tard dans votre configuration d'hôte virtuel.

Créez ensuite une nouvelle configuration d'hôte virtuel, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

avec le contenu suivant, ServerName [sous-domaine] DocumentRoot /var/www/sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Options +FollowSymlinks -Index AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors- error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-access-ssl.log combiné

Encore une fois, assurez-vous de remplacer le [sous-domaine] par le même sous-domaine que vous avez utilisé avec le certificat. À ce stade, vous devrez désactiver l'hôte virtuel par défaut d'Apache, sudo a2dissite 000-par défaut

changer le nom du répertoire racine du document, sudo mv /var/www/html /var/www/capteurs

et enfin activer le nouvel hôte virtuel et redémarrer Apache, sudo a2ensite capteurs-ssl

sudo systemctl redémarrer apache2

La dernière chose à faire est d'obtenir l'empreinte du certificat, car vous devrez l'utiliser dans le code du micrologiciel.

openssl x509 -noout -fingerprint -sha1 -inform pem -in /etc/ssl/certs/sensors.crt

Le http.begin() s'attend à ce que les délimiteurs entre les octets de l'empreinte digitale soient des espaces, vous devrez donc remplacer les deux points par des espaces avant de l'utiliser dans votre code.

Maintenant, si vous ne souhaitez pas utiliser de certificat auto-signé pour l'interface Web, configurez un nouveau sous-domaine et créez une nouvelle configuration d'hôte virtuel, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

avec le contenu suivant, ServerName [sous-domaine] DocumentRoot /var/www/sensors #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain]/privkey.pem #SSLCertificateChainFile /etc /letsencrypt/live/[sous-domaine]/chain.pem Options +FollowSymlinks -Index AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors-web-error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-web-access-ssl.log combiné

Assurez-vous de remplacer le [sous-domaine] par le sous-domaine que vous avez configuré pour l'interface Web. Activez ensuite le nouvel hôte virtuel, redémarrez Apache, installez certbot et obtenez un certificat pour le nouveau sous-domaine auprès de Let's Encrypt, sudo a2ensite capteurs-web-ssl

sudo systemctl redémarrer apache2 sudo apt mettre à jour sudo apt installer certbot sudo certbot certonly --apache -d [sous-domaine]

Après avoir obtenu le certificat, modifiez à nouveau la configuration de l'hôte virtuel pour décommenter les lignes SSLEngine, SSLCertificateFile, SSLCertificateKeyFile et SSLCertificateChainFile, puis redémarrez Apache.

Et maintenant, vous pouvez utiliser le premier sous-domaine qui utilise le certificat auto-signé pour envoyer les données de l'ESP8266 au serveur, tout en utilisant le second pour accéder à l'interface Web depuis votre navigateur. Certbot s'occupera également de renouveler automatiquement votre certificat Let's Encrypt tous les 3 mois, en utilisant un timer systemd qui devrait être activé par défaut.

Étape 6: Programmation de l'ESP8266

Programmation de l'ESP8266
Programmation de l'ESP8266

Enfin, il ne reste plus qu'à charger le firmware sur le microcontrôleur. Pour ce faire, téléchargez le code source du firmware à partir d'ici et ouvrez-le à l'aide de l'IDE Arduino. Vous devrez remplacer [SSID] et [Password] par le SSID et le mot de passe réels de votre réseau WiFi. Vous devrez également remplacer [Client ID] et [Client Key] sur l'appel de fonction sprintf par ceux que vous avez utilisés sur le script PHP sur le serveur. Enfin, vous devrez remplacer le [Host] par le nom de domaine ou l'adresse IP du serveur. Si vous utilisez HTTPS, vous devrez également fournir l'empreinte de votre certificat comme deuxième argument lors de l'appel de fonction de http.begin(). J'ai expliqué comment obtenir l'empreinte du certificat dans la section "Configuration du HTTPS" à l'étape précédente.

Ensuite, si vous ne l'avez pas déjà fait, vous devrez installer le package principal de la communauté ESP8266 à l'aide du gestionnaire de carte de l'IDE Arduino. Une fois cela fait, sélectionnez le NodeMCU 1.0 (module ESP-12E) dans le menu des cartes. Ensuite, vous devrez installer la bibliothèque SimpleDHT à l'aide du gestionnaire de bibliothèque. Enfin, appuyez sur le bouton Vérifier dans le coin supérieur gauche de votre fenêtre IDE pour vous assurer que le code se compile sans erreur.

Et maintenant, il est enfin temps de graver le firmware sur le microcontrôleur. Pour cela déplacez le cavalier JP1 sur la droite, ainsi GPIO0 de l'ESP8266 sera connecté à la masse ce qui activera le mode programmation. Ensuite, connectez votre convertisseur USB vers série à l'aide de câbles de connexion à l'en-tête de programmation étiqueté P1. La broche 1 de l'en-tête de programmation est la masse, la broche 2 est la broche de réception de l'ESP8266 et la broche 3 la transmission. Vous avez besoin de la réception de l'ESP8266 pour passer à la transmission de votre convertisseur USB vers série, de la transmission à la réception et bien sûr de la masse à la masse.

Enfin, alimentez l'appareil en 5V à l'aide de votre câble jack USB vers DC et connectez le convertisseur USB vers série à votre ordinateur. Vous devriez maintenant pouvoir voir le port série virtuel sur lequel l'ESP8266 est connecté, dès que vous ouvrez le menu des outils sur votre IDE. Maintenant, appuyez simplement sur le bouton Télécharger et c'est tout ! Si tout s'est déroulé comme prévu, vous devriez pouvoir voir les lectures de température et d'humidité sur l'écran LCD de l'appareil. Une fois que l'ESP8266 se connecte à votre réseau et commence à communiquer avec le serveur, la date et l'heure actuelles devraient également s'afficher à l'écran.

Après quelques heures, lorsque le serveur aura collecté une bonne quantité de données, vous devriez pouvoir voir les graphiques de température et d'humidité en visitant http(s)://[host]/index.php?client_id=[client id]. Où [host] est soit l'adresse IP de votre serveur ou le sous-domaine que vous utilisez pour l'interface Web, et [client id] l'identifiant client de l'appareil qui, si vous le laissez à sa valeur par défaut, devrait être 1.

Conseillé: