Table des matières:
- Étape 1: faire du shopping
- Étape 2: Configuration et arrière-plan
- Étape 3: La partie Arduino - ESP12
- Étape 4: tester l'ESP en tant que client NTP (Network Time Protocol)
- Étape 5: Test du capteur DHT22
- Étape 6: Assembler…
- Étape 7: Le côté serveur des choses
Vidéo: Capteur de température du réseau domestique : 7 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
Que faut-il savoir pour réaliser ce projet:
Vous devez connaître:- Quelques compétences en électronique (soudage)
-Linux
- IDE Arduino
(vous devrez mettre à jour des cartes supplémentaires dans l'IDE:
- mise à jour/programmation d'une carte ESP via l'IDE Arduino.
(il y a de jolis tutos disponibles sur le web)
Cela peut être fait en utilisant un Arduino Uno ou en utilisant un FTDI (adaptateur USB vers série).
J'ai utilisé mon Uno car je n'avais pas de port série sur mon PC et je n'avais pas de FTDI
Étape 1: faire du shopping
De quoi aurez-vous besoin pour que cela se produise ?
Pour le capteur numérique de température et d'humidité:
- Soit une maquette ou une alternative comme un prototype de PCB, de la soudure, du fer à souder…
- Du fil
- deux cavaliers
- une résistance de 10k Ohm
- un ESP12F (d'autres modèles peuvent fonctionner aussi…)
- un DHT22 (un peu plus cher que le DHT11 mais plus précis)
- 3 piles rechargeables AA et un porte-piles
- une petite boîte en plastique pour y mettre votre projet
- Dans une étape ultérieure, je prévois d'ajouter un HT7333 avec deux condensateurs 10uF entre la batterie et l'ESP
pour stabiliser la tension d'entrée (VCC) aux 3,3V recommandés mais aussi pour protéger l'ESP des surtensions.
Pour la partie Réseau:
- Votre réseau Wi-Fi domestique
Pour la partie Serveur:
- Tout système basé sur Linux (toujours allumé !)
J'ai utilisé un Raspberry Pi (que j'utilise également comme serveur pour mes caméras IP extérieures.)
- compilateur gcc pour compiler votre code serveur
- package rrdtool pour stocker les données et générer des graphiques
- apache (ou un autre serveur web)
Votre PC ou ordinateur portable préféré avec Arduino IDE dessus.
Étape 2: Configuration et arrière-plan
Dans cette version d'un capteur de température et d'humidité connecté WiFi - pour ne pas dire IOT - j'ai utilisé un ESP12F, un DHT22 et un support 3 piles AA avec piles rechargeables.
Toutes les 20 minutes, l'ESP prend une mesure du DHT22 et l'envoie à un serveur (un Raspberry Pi) via UDP sur mon réseau WiFi domestique. Une fois les mesures envoyées, l'ESP se met en veille prolongée. Cela signifie que seule l'horloge temps réel du module reste alimentée, ce qui permet une économie d'énergie incroyable. Pendant environ 5 secondes, le module nécessite environ 100mA, puis pendant les 20 minutes de veille profonde seulement 150uA.
Je ne voulais utiliser aucun service basé sur Internet car j'ai mon Raspberry Pi qui est toujours allumé de toute façon et de cette façon j'ai également eu le plaisir d'écrire la partie serveur.
Sur le serveur (un Raspberry Pi exécutant Raspbian), j'ai écrit un simple écouteur UDP (serveur) qui stocke les valeurs dans un simple RRD. (Base de données Round Robin utilisant RRDtool par Tobias Oetiker.)
L'avantage de RRDtool est que vous créez votre base de données une seule fois et que la taille reste la même. De plus, vous n'avez pas besoin d'avoir un serveur de base de données (comme mySQLd) exécuté en arrière-plan. RRDtool vous donne les outils pour créer la base de données et générer les graphiques.
Mon serveur crée les graphiques sur une base périodique et affiche tout dans une page http très simple. Je peux consulter mes relevés avec un simple navigateur en me connectant au serveur web Apache2 sur le Raspberry Pi !
Enfin, je n'avais pas de FTDI (USB to Serial) alors j'ai utilisé mon Arduino UNO. Vous devez connecter les TX et les RX et le GND de l'ESP et de l'UNO. (Je sais, votre instinct pourrait vous dire de croiser les RX et les TX… j'ai essayé aussi, ça ne marche pas.)
Je n'ai pas fait de conversion de niveau (UNO: High=5V mais l'ESP est fondamentalement un appareil de 3,3V… Il existe de jolis FTDI sur le marché où vous pouvez même sélectionner votre niveau élevé à 5 ou 3,3V.
Mon circuit est alimenté par 3 piles rechargeables AA - donc en fait 3 X 1,2V. Dans une phase ultérieure, j'ai l'intention de mettre un HT7333 entre la batterie et le circuit pour plus de sécurité; les batteries nouvellement chargées peuvent avoir plus de 1,2 V et l'ESP doit être alimenté avec min. 3V et max. 3.6V. Aussi si je décide - dans un moment de faiblesse - de mettre des piles alcalines (3 X 1.5V = 4.5V) mon ESP ne sera pas grillé !
J'ai également envisagé d'utiliser un panneau solaire de 10 cm x 10 cm, mais cela ne valait tout simplement pas la peine. En faisant 3 mesures par heure (essentiellement 3x 5 secondes @ 100mA max. et le reste du temps @100uA), j'espère alimenter mon circuit pendant 1 an avec les mêmes batteries rechargeables.
Étape 3: La partie Arduino - ESP12
J'ai réalisé ce projet en différentes étapes.
Il existe plusieurs liens qui vous aident à importer l'ESP12 (alias ESP8266) dans l'IDE Arduino. (J'ai dû utiliser la version 2.3.0 au lieu de la dernière à cause d'un bug qui aurait pu être résolu entre-temps…)
J'ai commencé par connecter l'ESP, via mon Arduino UNO (uniquement utilisé comme pont entre mon PC via USB et le Serial) à l'interface série ESP. Il existe des Instructables distincts expliquant cela.
Dans mon projet terminé, j'ai laissé les fils pour se connecter au Serial au cas où j'aurais besoin de dépanner. RX
Ensuite, vous devez câbler votre ESP12 comme suit:
Broches ESP…
GND UNO GND
RX UNO RX
TX UNO TX
FR VCC
GPIO15 GND
Au départ, j'ai essayé d'alimenter mon ESP à partir du 3,3 V sur l'UNO, mais je suis rapidement passé à l'alimentation de mon ESP avec une alimentation de banc, mais vous pouvez également utiliser votre batterie.
GPIO0 J'ai connecté celui-ci avec un cavalier à GND pour permettre le clignotement (= programmation) de l'ESP.
Premier test: laissez le cavalier ouvert et démarrez un moniteur série dans l'IDE Arduino (à 115200 baud !).
Redémarrez l'ESP, vous devriez voir des caractères inutiles, puis un message comme:
Ai-Thinker Technology Co. Ltd. prêt
Dans ce mode, l'ESP agit un peu comme un modem à l'ancienne. Vous devez utiliser les commandes AT.
Essayez les commandes suivantes:
AT+RST
et les deux commandes suivantes
AT+CWMODE=3
d'accord
AT+CWLAP
Cela devrait vous donner une liste de tous les réseaux WiFi de la région.
Si cela fonctionne, vous êtes prêt pour la prochaine étape.
Étape 4: tester l'ESP en tant que client NTP (Network Time Protocol)
Dans l'IDE Arduino, sous Fichier, Exemples, ESP8266WiFi, chargez NTPClient.
Des ajustements mineurs sont nécessaires pour que cela fonctionne; vous devez entrer votre SSID et le mot de passe de votre réseau WiFi.
Placez maintenant le cavalier, en court-circuitant GPIO0 à GND.
Mettez l'ESP sous tension et téléchargez le croquis sur l'ESP.
Après la compilation, le téléchargement vers l'ESP devrait commencer. La LED bleue de l'ESP clignotera rapidement pendant le téléchargement du code.
J'ai remarqué que je devais jouer un peu avec le redémarrage de l'IDE, le redémarrage de l'ESP avant que le téléchargement ne fonctionne.
Avant de commencer à compiler/télécharger le sketch, assurez-vous de fermer la console série (= moniteur série) car cela vous empêchera de faire le téléchargement.
Une fois le téléchargement réussi, vous pouvez rouvrir le moniteur série pour voir l'ESP obtenir l'heure à partir d'Internet.
Super, vous avez programmé votre ESP, connecté à votre WiFi et obtenu l'heure d'Internet.
Prochaine étape, nous testerons le DHT22.
Étape 5: Test du capteur DHT22
Maintenant, un câblage supplémentaire est nécessaire.
Broches DHT…Connectez la broche 1 (à gauche) du capteur à VCC (3,3V)
Connectez la broche 2 ESP GPIO5 (DHTPIN dans le croquis)
Connectez la broche 4 (à droite) du capteur à la TERRE
Connectez une résistance de 10K de la broche 2 (données) à la broche 1 (alimentation) du capteur.
Semblable au test NTP, recherchez le croquis DHTtester et modifiez-le de la manière suivante:
#define DHTPIN 5 // nous avons sélectionné GPIO5 pour nous connecter au capteur#define DHTTYPE DHT22 // puisque nous utilisons un DHT22 mais ce code/bibliothèque est également adapté pour DHT11
Encore une fois, fermez le moniteur série, éteignez et rallumez l'ESP et compilez et flashez l'ESP.
Si tout se passe bien, vous devriez voir les mesures apparaître sur le moniteur série.
Vous pouvez jouer un peu avec le capteur. Si vous respirez dessus, vous verrez l'humidité monter.
Si vous avez une lampe de bureau (non LED), vous pouvez éclairer le capteur pour le réchauffer un peu.
Super! Deux grandes parties du capteur fonctionnent maintenant.
Dans l'étape suivante, je commenterai le code final.
Étape 6: Assembler…
Encore un peu de câblage supplémentaire… c'est pour rendre le DeepSleep possible.
N'oubliez pas que DeepSleep est une fonction incroyable pour les appareils IoT.
Cependant, si votre capteur est câblé pour DeepSleep, il peut être difficile de reprogrammer l'ESP, nous allons donc faire une autre connexion par cavalier entre
GPIO16-RST.
Oui, il DOIT être GPIO16, car c'est le GPIO qui est câblé pour réveiller l'appareil lorsque l'horloge en temps réel se déclenche après le DeepSleep !
Pendant que vous testez, vous pouvez décider de faire un DeepSleep de 15 secondes.
Lorsque je déboguais, je déplaçais le cavalier sur GPIO0 pour pouvoir flasher mon programme.
Une fois le téléchargement terminé, je déplacerais le cavalier vers GPIO16 pour que DeepSleep fonctionne.
Le code de l'ESP s'appelle TnHclient.c
Vous devez changer votre SSID, votre mot de passe et l'adresse IP de votre serveur.
Il existe des lignes de code supplémentaires que vous pouvez utiliser pour dépanner ou tester votre configuration.
Étape 7: Le côté serveur des choses
C'est un malentendu courant que UDP n'est pas fiable et TCP est…
C'est aussi idiot que de dire qu'un marteau est plus utile qu'un tournevis. Ce sont simplement des outils très utiles différents et ils ont tous deux leur utilité.
Au fait, sans UDP, Internet ne fonctionnerait pas… Le DNS est basé sur UDP.
J'ai donc choisi UDP car il est très léger, facile et rapide.
J'ai tendance à penser que mon WiFi est très fiable donc le client enverra au plus 3 paquets UDP si l'accusé de réception "OK!" n'est pas reçu.
Le code C du serveur TnH se trouve dans le fichier TnHServer.c.
Il y a plusieurs commentaires dans le code qui l'expliquent.
Nous aurons besoin d'outils supplémentaires sur le serveur: rrdtool, apache et peut-être tcpdump.
Pour installer rrdtool sur Raspbian, vous pouvez simplement installer le paquet comme ceci: apt-get install rrdtool
Si vous avez besoin de déboguer le trafic réseau, tcpdump est pratique apt-get install tcpdump
J'avais besoin d'un serveur web pour pouvoir utiliser un navigateur afin de consulter les graphiques: apt-get install apache2
J'ai utilisé cet outil: https://rrdwizard.appspot.com/index.php pour obtenir la commande permettant de créer la base de données Round Robin. Vous n'avez besoin de l'exécuter qu'une seule fois (si vous réussissez du premier coup).
rrdtool create TnHdatabase.rrd --start now-10s
--étape '1200'
'DS:Température:JAUGE:1200:-20.5:45.5'
'DS:Humidity:GAUGE:1200:0:100.0'
'RRA:MOYEN:0.5:1:720'
'RRA:MOYEN:0.5:3:960'
'RRA:MOYENNE:0,5:18:1600'
Enfin, j'utilise une entrée crontab pour redémarrer mon serveur TnH tous les jours à minuit. Je lance le TnHserver en tant qu'utilisateur normal (c'est-à-dire PAS root) par mesure de sécurité.
0 0 * * * /usr/bin/pkill TnHserver; /home/user/bin/TnHserver>/dev/null 2>&1
Vous pouvez vérifier que le serveur TnH est en cours d'exécution en faisant
$ ps -elf | grep TnHserver
et vous pouvez vérifier qu'il écoute les paquets sur le port 7777 en faisant
$ netstat -anu
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse étrangère État
udp 0 0 0.0.0.0:7777 0.0.0.0:*
Enfin, CreateTnH_Graphs.sh.txt est un exemple de script pour générer les graphiques. (Je génère les scripts en tant que root, vous ne voudrez peut-être pas le faire.)
À l'aide d'une page Web très simple, vous pouvez regarder les graphiques à partir de n'importe quel navigateur sur votre réseau domestique.
Conseillé:
Capteur de température et d'humidité à énergie solaire Arduino en tant que capteur Oregon 433 mhz : 6 étapes
Capteur de température et d'humidité à énergie solaire Arduino en tant que capteur Oregon à 433 mhz : il s'agit de la construction d'un capteur de température et d'humidité à énergie solaire. Le capteur émule un capteur Oregon de 433 mhz et est visible dans la passerelle Telldus Net. Capteur de mouvement à énergie solaire" d'Ebay. Assurez-vous qu'il est écrit 3.7v pâte
Nouvelle couche de capteur IOT sans fil pour le système de surveillance de l'environnement domestique : 5 étapes (avec photos)
Nouvelle couche de capteur IOT sans fil pour le système de surveillance de l'environnement domestique : ce Instructable décrit une couche de capteur IOT sans fil à moindre coût et alimentée par batterie pour mon Instructable précédent : LoRa IOT Home Environmental Monitoring System. Si vous n'avez pas déjà vu ce plus tôt Instructable, je vous recommande de lire l'introduc
Réseau domestique OpenWrt : 9 étapes (avec images)
Réseau domestique OpenWrt : OpenWrt est une distribution Linux open source que les utilisateurs installent généralement sur leurs routeurs Wi-Fi domestiques standard. mettre à jour
Comment configurer un réseau domestique : 6 étapes
Comment configurer un réseau domestique : La configuration d'un réseau peut sembler intimidante au début, mais une fois que vous avez tout ce dont vous avez besoin, c'est très facile à faire. La configuration traditionnelle nécessite un modem et un routeur, mais certains peuvent nécessiter plus d'équipement et d'autres moins. Il y a beaucoup de différents
Contrôleur de réseau de capteur de température tolérant aux pannes : 8 étapes
Contrôleur de réseau de capteurs de température à tolérance de pannes : ce Instructable vous montre comment convertir une carte Arduino Uno en un contrôleur à usage unique pour un ensemble de capteurs de température DS18B20 capables d'isoler automatiquement les capteurs défectueux. Le contrôleur peut gérer jusqu'à 8 capteurs avec Arduino Uno. (UNE