Table des matières:

Capteur de température du réseau domestique : 7 étapes
Capteur de température du réseau domestique : 7 étapes

Vidéo: Capteur de température du réseau domestique : 7 étapes

Vidéo: Capteur de température du réseau domestique : 7 étapes
Vidéo: Capteur de température connecté ! 2024, Novembre
Anonim
Capteur de température du réseau domestique
Capteur de température du réseau domestique

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

Aller faire les courses
Aller faire les courses

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

Configuration et arrière-plan
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

L'Arduino - Partie ESP12
L'Arduino - Partie ESP12
L'Arduino - Partie ESP12
L'Arduino - Partie 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)

Test de l'ESP en tant que client NTP (Network Time Protocol)
Test de l'ESP en tant que client NTP (Network Time Protocol)
Test de l'ESP en tant que client NTP (Network Time Protocol)
Test de 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

Test du capteur DHT22
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…

Mettre ensemble…
Mettre ensemble…

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

Le côté serveur des choses
Le côté serveur des choses
Le côté serveur des choses
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é: