Tuto DiY - La box connectée - Système de monitoring à distance

Par Curly-Bud ,
Tuto DiY - La box connectée - Système de monitoring à distance

La box connectée - Système de monitoring à distance

Comme évoqué dans mon premier JDC, je me suis enfin sortit les doigts et décidé de rédiger ce tutoriel présentant mon modeste placard connecté.

Ce post est l’objet d’un guide simple mais complet de l’achat à la réalisation d’un projet en passant par l’assemblage et le développement embarqué Arduino.

 

20180617_200522.thumb.jpg.3f7ececd49b1a9dc6317358f60d1165a.jpg

 

I - Présentation du projet 

 

Spoiler

 

La box connectée est le prototype d’un système embarqué connecté à un réseau WiFi muni de divers capteurs permettant de mesurer les conditions à l’intérieur d’un habitacle.

Ces données sont remontées par HTTP sur une application gratuite : ThingSpeak.

 

Les données sont ensuite exploitables depuis un navigateur ou depuis un smartphone :

 

https://thingspeak.com/channels/363334/

 

image.thumb.png.e781c1f9e5b0a9db58d445632aa61787.pngpost-871098-0-49858500-1511713265_thumb.png.6de77dd1b0352b577e1c3f229b368175.png

 

Dans ce guide sera monté un prototype légèrement différent du mien utilisé dans mon premier JDC. Le système sera le même à l’exception des références des capteurs de luminosité et d’humidité au sol.

Seulement ici, il s’agira de concevoir un prototype fonctionnel et (presque) sans soudure nécessaire de façon à ce qu’il soit accessible à tous et le plus basique possible.

Je n'intégrerai donc pas les ventilateurs et donc la board d’alimentation présents dans la première version.

 

Dans la version 1 du prototype nous y trouvons :

 

  • Un capteur de température et d’humidité DHT22. Ce sont les deux facteurs les plus essentiels dans une culture. Permet de constater les niveaux sur la journée en période de nuit ou du jour si vous n’êtes pas là lorsque la période change. Peut également s’avérer utile pour constater un dysfonctionnement de votre chauffage, humidificateur, programmateur ou même lampe.
  • Un capteur de luminosité (luxmètre) TSL256. L’idée est de pouvoir constater avec clarté les changement de cycle. Un luxmètre de ce prix peut difficilement capter une réelle puissance lumineuse.
  • Un capteur d’humidité au sol YL69. Permet de constater les variations des besoins en eau de nos plantounes. Utile surtout pour les systèmes blumat, pouvoir constater un problème rapidement.
  • L’ESP8266. Il s’agit du micro-contrôleur principal. C’est lui qui va lire les capteurs et émettre les données en WiFi avec sa petite antenne.

 

5b27e025d376e_pastedimage0(17).png.bf7846deaee99ac7689e4fd5a1ec3319.png5b27e024bc0cd_pastedimage0(16).thumb.png.df00976db62b5e092d2b92335f901e4c.png

 

Autres intérêts/possibilités :

 

  • Quand je suis loin de chez moi pour au moins 1 semaine, je confie mes clefs à un ami et ainsi, si je constate un soucis dans mes conditions, il peut intervenir.
  • Je travaille sur l’ajout d’un capteur de Co2 (K30) qui pourrait s’intégrer sans problème au système. Cela me permettrait de constater le niveau de Co2 dans mon placo, et ainsi étudier les variation si j’aère ma chambre en journée ou en soirée (par exemple)
  • Il est possible avec ThingSpeak de mettre en place des alertes réglables selon les niveaux. Par exemple, si vous descendez en dessous de 50% d’humidité en croissance, ou montez à 30 C° de jour, pouvoir être alerté en temps réel depuis son smartphone :

 

            5b27e01e4431a_pastedimage0(15).png.f8156e3596476abbba7f6b121b9a5904.png

 

 

 

II - A LIRE Avant de vous lancer 

 

Spoiler

 

Avant de commander vos composants, vérifiez ces conditions :

 

  • Votre système doit pouvoir capter votre réseau WiFi donc ne pas être à environ plus de 15m de votre box sans cloison ou 10m avec cloison(s).
  • Vous devez disposer d’un ordinateur (c’est mieux pour programmer) et savoir un minimum s’en servir
  • Vous savez manier un minimum le fer à souder. Dans cette version étudiée ici, vous n’aurez presque pas besoin de souder. Il y a malgré tout une petite et simple soudure à faire sur le capteur de luminosité pour assembler ses pins, expliqué plus bas

 

J’insiste sur le fait qu’il ne s’agit pas d’un système automatisé. L’ajout de relay reste toutefois envisageable mais je n’en n’intègre pas dans ce projet.
Il s’agit d’un système de monitoring à distance.

 

Ce tutoriel n’est qu’une ébauche à la conception d’un prototype

 

Voici le produit au terme de ce tutoriel :
 

20180616_201304.thumb.jpg.a696635f7ff9a10e4207e0a2ae2e44cc.jpg

 

Le produit est encore “nu”. Libre à vous d’imaginer donc un boîtier permettant d’accueillir votre système et d’adapter la solution à votre installation.

 

 

 

III - Achat du matériel 

 

Spoiler

 

Pour de la petite électronique, je me permet d’acheter mes composants sur AliExpress. Les prix sont des plus intéressants et les frais de ports le plus souvent gratuit. Seul les délais de livraison peuvent être longuet (15 à 40 jours selon les vendeurs). 

 

Etant donné que les vendeurs, produits et les prix sur Aliexpress change beaucoup d’un jour à l’autre, les meilleurs deals vers les articles que je mettrais pourrait changer à l’heure à laquelle vous suivez ce tuto. Je vais donc ici vous lister l’ensemble des composants à acheter avec les étapes à suivre :

  • Se rendre sur aliexpress.com
  • Rechercher avec la référence du composant
  • Trier non pas par pertinence mais par commandes
  • Trouver le meilleur produit en adéquation avec la note, le nombre de commandes, le prix et éventuellement les délais de livraison
  • S’assurer que l’article correspond bien à la photo dans ce tutoriel. Les noms et description des articles sur Aliexpress ne sont souvent pas très claire. Une même référence peut vous donner des articles de version différente.

 

Liste du matériel

 

ESP8266 ESP12E
Rôle : Contrôleur principal et émetteur WiFi
Référence à taper : ESP12E
Lien direct (au 16/06/18) : https://fr.aliexpress.com/item/a/32656775273.html

Prix : 2,31€ fdp gratuit
Datasheet : https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

5b27e01d78e74_pastedimage0(14).png.56d25cc07862e31fa01868d005440600.png


DHT22
Rôle : Capteur d’humidité et de température
Référence à taper : DHT22
Lien direct (au 16/06/18) : https://fr.aliexpress.com/item/a/32759158558.html 
Prix : 2,51€ fdp gratuit
Datasheet : https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

5b27e01d1e662_pastedimage0(13).png.71e3db1d7ac9ad9766e22c49a24c6cfb.png

Note : Préférez cette version de board rouge que la noir, elle est plus grande donc couvre mieux la sonde si celle-ci est amené à être exposé à la lumière. La sonde est légèrement déportée de la board, ce qui lui permet de ne pas chauffé à la lumière.

 

MAX44009 GY49
Rôle : Capteur de luminosité (luxmètre)
Référence à taper : MAX44009
Lien direct (au 16/06/18) : https://fr.aliexpress.com/item/a/32563205188.html
Prix : 2,07€ et 0,13€ de fdp
Datasheet : https://datasheets.maximintegrated.com/en/ds/MAX44009.pdf

5b27e01cbd40c_pastedimage0(12).png.1823a1359180514bca8ce6e88e352936.png

Note : A l’heure ou je vous écrit je n’ai pas trouvé de version assemblée. Vous devrez donc vous munir exceptionnellement d’un fer à souder ou demander à un ami pour souder les broches vendues avec l’article.

 

SEN0193

/!\ EDIT (23/12/18) : Initialement, le capteur d'humidité au sol choisi était le YL100. 

Celui-ci a été remplacé par le SEN0193 pour palier au problème de corrosions (voir ce post : https://www.cannaweed.com/forums/topic/216604-tuto-diy-la-box-connectée-système-de-monitoring-à-distance-temphumlumièresolco2-pour-12€/?do=findComment&comment=4136698). Si vous avez déjà acheté le YL100 avant cette update (23/12/2018), une version du code pour lire ce capteur est toujours disponible, voir la section "Développement de l'embarqué".
Rôle : Capteur d’humidité au sol
Référence à taper : Étrangement la référence SEN0193 ne recense pas l’article qui nous intéresse. Il faut donc taper “Soil moisture sensor” pour trouver notre bonheur.
Lien direct (au 23/12/18) : https://fr.aliexpress.com/item/a/32882371718.html
Prix : 1.07€ et 0.31€ de fdp
Datasheet : https://media.digikey.com/pdf/Data Sheets/DFRobot PDFs/SEN0193_Web.pdf

image.png.f78d1f5da403a450e1adf378a89eff5c.png

 

Une alimentation 5V 1A
L’ESP8266 dispose d’un port Micro USB B. Ce port est à la fois utilisé pour le programmer et pour l’alimenter. Ainsi, un simple chargeur de portable peut faire l’affaire. Vérifiez toutefois que votre chargeur délivre du 5V et une intensité d’au moins 1A.
Il nous faut donc un chargeur et un câble suffisamment long selon votre installation.
Préférez un câble à part du chargeur si vous n’en disposez pas pour connecter l’ESP à votre ordinateur.
Vous trouverez également votre bonheur sur aliexpress si jamais vous n’avez pas ça dans vos cartons : https://fr.aliexpress.com/item/a/32783433931.html (1,93€ fdp gratuit)

 

Un lot d’au moins 10 câbles femelle - femelle
Référence à taper : câble femelle femelle
Lien direct (au 16/06/18) : https://fr.aliexpress.com/item/a/32675262586.html
Prix : 0,59€ fdp gratuit

5b27e01bb3f9e_pastedimage0(9).png.4a966485959a86372f44fcee83d9064f.png

Note : Si vous comptez faire comme dans la première photo de ce post pour le capteur d'humidité au sol (sans soudure, sans câble, à la roots) pensez à achetez des câbles plus long ou des rallonges avec des câbles mâle/mâle

 

COÛT TOTAL (au 16/06/18) frais de port compris : 11,04 €

 

Une fois votre panier complet, il ne vous reste plus qu’à valider votre commande et attendre les composants pour passer à la suite.

 

 

IV - Assemblage 

 

Spoiler

 

Comme expliqué plus haut, ce tutoriel n’est qu’une ébauche à un prototype fonctionnel. Ce n’est en rien un produit fini. 
Libre à vous de monter le système sur une platine en époxy comme je l’ai fait ou même de concevoir un petit pcb “plug-and-play”.

 

Ici, le proto sera assemblé avec de simple fil. Par chance, les pins de l’ESP12E suffise pour l’ensemble des composants. Il y a juste assez de pin d’alimentation 3v3 pour les 3 capteurs. 

 

Voici le schéma de câblage :

 

image.png.951da6c39fded5d12c024c44cc58713e.png

 

Les pins VCC ou VIN (phase, +) de chaque composant doivent être relié aux pins 3V3 de l’ESP8266.
Les pins GND (neutre, -) de chaque composant doivent être reliées aux pins GND de l’ESP8266.
La pin OUT du SEN0193 doit être connecté sur la seule entrée analogique A0 de l’ESP8266.
La pin DAT (data) du DHT22 doit être relié sur une entrée digital de l’ESP8266. J’ai choisi la pin D3 ici.
Les pins SCL et SDA du GY-49 doivent être relié au réseau I2C de l’ESP8266. Dans notre cas, les pins D1 (SCL) et D2 (SDA) ont été choisi pour les communications par I2C.

 

 

 

V - Création du channel ThingSpeak 

 

Spoiler

 

Avant de débuter le développement du soft embarqué, nous allons mettre en place votre channel ThingSpeak afin d’avoir tous les éléments en main.

 

ThingSpeak est une plateforme permettant de collecter et d’héberger les données émises par des équipements connectés. ThingSpeak propose également des outils permettant d’exploiter ces données visuellement ou la mise en place d’actionneur pour faire dialoguer des objets connectés / services entre eux par exemple.

 

Le service est gratuit pour une utilisation non commercial. Toutefois vous serez limité à 1 message toute les 15 secondes et à 8200 par jour.
Personnellement, j’ai choisi d’émettre mes données toutes les 30 secondes, ce qui fait 2880 messages par jour. Libre à vous d’augmenter ou de diminuer cette fréquence.

 

1. Vous devez donc en premier lieu créer votre compte ici : https://thingspeak.com/login 


2. Une fois votre compte vérifié, revenez sur ThingSpeak et connectez-vous


3. Validez que vous souhaitez utiliser ThingSpeak pour “Personnal non commercial project” et cliquez sur “New Channel” 


4. Ici, vous pouvez créer vos champs accueillant les données de vos capteurs. Créez donc 4 champs pour les valeurs de température, d’humidité, de luminosité et d’humidité au sol. 

 

     5b27e0104aec0_pastedimage0(7).thumb.png.8cc1662e553ad9538ea3ef2d27809bf1.png

 

5. Une fois chose faite, apparaît la vue dite “Privée” de votre channel avec 4 graphiques vide. 

 

Explication sur les channels privés/publics
Par défaut votre channel est privé et visible uniquement par vous une fois connecté. Personnellement, je rend mon channel public pour partager ces graphiques avec vous mais surtout car les cookies de connexion de ThingSpeak ne dure que quelques heures et que je trouve ça chiant de devoir me reconnecter à chaque fois que je veux consulter mes graphs. Rendre un channel public fait que n’importe qui peut se rendre sur mon channel ayant son URL (https://thingspeak.com/channels/363334/)

 

6. (OPTIONNEL) Pour rendre votre channel public, rendez vous dans l’onglet Sharing puis sélectionnez l’option “Share channel view with everyone”.


7. Pour permettre à notre système d’émettre les données sur notre channel, nous aurons besoin de l’API key pour l’écriture. Rendez-vous donc dans l’onglet “API Keys” et copier la clef présente dans le champ “Write API Key”.

 

 

Une fois l’API key, récupérer nous pouvons passé au développement embarqué.

 

 

 

VI - Développement de l'embarqué 

 

Spoiler

 

L’ESP8266 est un micro-contrôleur très présent dans les projets connectés DIY. Il dispose d’une grande communauté open-source au même titre que l’Arduino.

 

Le micro-contrôleur est le plus communément utilisé comme périphérique WiFi piloté par commande AT par un micro-contrôleur tel qu’une Arduino ou autre µc. 
Mais de nombreux projets communautaires ont fait naître la possibilité d’utiliser l’ESP8266 en tant que contrôleur principal.
Parmis eux, se trouve le projet Arduino pour l’ESP8266. Il s’agit d’un framework permettant de compiler un firmware en C++ en proposant les mêmes librairie que celles utilisées pour Arduino.
C’est la solution que nous utiliserons dans ce tutoriel.

 

Installation

 

1. En premier lieu, il vous faut le logiciel Arduino IDE téléchargeable à cette adresse : https://www.arduino.cc/en/Main/Software

Choisissez la version correspondant à votre système. Si vous êtes sous Windows, téléchargez “Windows Installer”.

 

ATTENTION

Ce tutoriel a été écrit avec la version 1.8.5 de Arduino IDE et la version 2.4.1 du framework Arduino ESP8266. Si des bug subviennent, vérifier que votre version n’est pas obsolète. Si vous disposez d’une version plus récente, merci de m’en informer ici.

 

2. Installez le logiciel en laissant l’ensemble des informations par défaut.

 

3. Une fois installé, vous devez installez le plug-in permettant d’ajouter le framework EP8266 à l’IDE.
Lancez Arduino IDE et allez dans Fichier > Préférences. Dans le champ “URL de gestionnaire de cartes supplémentaires” collez-y ceci :




http://arduino.esp8266.com/stable/package_esp8266com_index.json

Cliquez sur Ok puis allez dans Outils -> Type de carte > Gestionnaire de carte.
Ici recherchez “esp8266” et sélectionnez “esp8266 by ESP8266 Community”. Sélectionnez la version 2.4.2 (il est possible que les versions postérieures ne soient pas compatibles) puis cliquez sur “Installer”.

 

4. Vous pouvez maintenant allez dans Outils -> Type de carte et sélectionner “NodeMCU 1.0 (ESP12-E Module)”.


5. Rendez-vous dans Outils -> Port et visualisez les ports disponibles (si il y en a). Connectez votre ESP8266 à votre ordinateur sur un port USB puis retournez dans Outil -> Port. Une entrée COMX (où X est un chiffre) est normalement apparue. Sélectionnez-la.

 

Votre ESP8266 est désormais prêt à être programmé :plus:

 

Programmation

 

1. Téléchargez les fichiers du projet ici : https://github.com/RaphikiCW/smartgrow 
Cliquez sur “Clone or Download” puis “Download ZIP”.

/!\ EDIT (23/12/18) : Initialement, le capteur d'humidité au sol choisi était le YL100. Si vous disposez du YL100 et non du SEN0193, vous devez cliquer sur le bouton "Branch: master" et sélectionner la branche "yl100", puis cliquez enfin sur "Download ZIP" 


2. Ouvrez l’archive, décompressez uniquement le dossier smartgrow dans votre répertoire Documents/Arduino/smartgrow


3. Vous devriez normalement trouver les 3 couples de fichier .cpp et .h correspondant aux librairies permettant de lire nos capteurs.
Ouvrez le fichier smartgrow.ino avec Arduino IDE, qui correspond au fichier principal de notre application.


4. Je ne ferais pas une explication complète du code ici. Toutefois, j’ai laissé des commentaires dans mon code pour que vous puissiez le comprendre.
Nous allons donc nous focaliser sur les éléments qui importe :




#define WIFI_SSID "mon-reseau-wifi
#define WIFI_KEY "ma-clef-wifi
// Remplacez ici mon-reseau-wifi et ma-clef-wifi par vos informations, en gardant les doubles quotes.

#define THINGSPEAK_API_KEY "ABCDEFGH12345678"
// Remplacez ici la clef ABCDEFGH12345678 par votre API key récupérée plus tôt depuis ThingSpeak.

#define FIELD_TEMPERATURE 1
#define FIELD_HUMIDITY 2
#define FIELD_SOIM_MOISTURE 3
#define FIELD_LIGHT 4
// Ici, adaptez le numéro des champs selon votre configuration sur ThingSpeak. Laissez ces champs tel quel si vous avez suivi le même ordre.

#define TIME_SLEEP 1000
#define CPT_PUBLISH 30
/*
Vous pouvez également ici changer ces informations selon vos préférences.
TIME_SLEEP : Il s’agit du temps en millisecondes où le système ne fait rien entre 2 cycles de lecture des capteurs. 
CPT_PUBLISH : Il s’agit du nombre de cycles (1 cycle = 1 exécution de la fonction loop()) après le quel l’ESP8266 doit émettre les données.
Pour exemple, avec ces paramètres, le système va lire chaque capteur toute les secondes (1000ms). Au bout de 30 secondes (30 x 1000ms), il fait la moyenne des valeurs lues par les capteurs et émet les données sur api.thingspeak.com.
*/

5. Une fois le programme prêt, cliquez sur “Moniteur Série” en haut à droite pour vous préparer à voir l’état de votre système une fois flashé

 

5b27e00b2f35d_pastedimage0(6).png.5f03273742f45cf0471acaeed1e8ebe4.png


6. Votre ESP8266 connecté, vous pouvez désormais cliquer sur “Téléverser” en haut à gauche pour flasher votre ESP8266 avec votre programme.

 

5b27e00ae5e6f_pastedimage0(5).png.01592244ddee7af65aaed354f829766a.png

 

Si le programme se compile bien et vous n’avez pas d’erreur, vous devriez avoir une progression du téléversement de votre programme dans la console.

Une fois terminé, votre système démarre et commence par se connecter à votre réseau WiFi :

 

5b27e00a91217_pastedimage0(4).png.37ef6baed76914e9504cd1ccbe026c4e.png


Au bout de 30 secondes, il est censé émettre les premières données :

 

image.png.39fb11037c42be89733323e0da02bf08.png

 

Vous pouvez dès lors constater si vos capteurs fonctionnent correctement.


Si votre humidité au sol (Moisture) est à 0.00 et que votre capteur est à l’air libre, et ben… Tout est normal.
De même pour votre luxmètre, celui-ci devrait renvoyer une valeur entre 0 et 3000 selon comment est exposé votre capteur. Si vous le placez directement sous votre lampe, votre capteur risque de saturer et de vous renvoyez une valeur > 10 000. Essayez d'évitez donc.
Si vous avez des valeurs incorrectes, vérifiez vos branchement. Si le problème persiste vous pouvez m’en faire part ici.

 

REMARQUE

Pour le capteur d’humidité au sol, la valeur lue sur celui-ci peut varier selon le produit et selon la profondeur dans laquelle vous l’avez placé. C’est pourquoi c’est un capteur utile pour constater les variations anormale de l’humidité au sol mais cette valeur n’est en rien justifiée scientifiquement.
Autre remarque : Ce capteur met environ 10 minutes (selon l’humidité de la terre) à se stabiliser après avoir été mis en terre. La valeur va grimper très légèrement jusqu’à se stabiliser et devenir exploitable.

 

7. Une fois que le système vous indique “Data sent !” foncez vérifier sur votre channel ThingSpeak que vous recevez bien les données.
Vous devriez avoir “Last entry” et “Updated” à “Less than a minute ago” ou “about a minute ago” 

Vous pouvez alors voir les premières données se dessiner sur vos graphiques.

 

Et voilà :xD: le tour est joué

 

8. La dernière étape ne devrait pas être trop complexe. Depuis ThingSpeak, vous devez réglez vos graphique pour que ces derniers soit plus agréable à lire. 
Placez vous donc sur l’onglet “Private View” ou “Public View” selon la vue que vous voulez modifier.
Cliquez sur le petit icône modifier sur un graphique et régler les paramètres à votre convenance. 


Voici par exemple ce que j’ai pour la température :

5b27e00948d0c_pastedimage0(1).thumb.png.537713cdf101222a90285253226ddddd.png5b27e0052ff5f_pastedimage0.thumb.png.468117fc7e132be80f8451198d926437.png

 

Dynamic à true si vous voulez que les dernières données soit ajouter dynamiquement sur le graphique.
Color et Background correspondent au couleur que vous voulez données à vos graph. Voici mes couleurs :

  • Température : #d54747, #fdd1d1
  • Humidité : #3170b9, #e7f2ff
  • Humidité au sol : #7bc055, #d9ffc4
  • Luminosité : #ffe20c, #ffffd8

Days correspond aux nombres de jours de données à charger
Timescale correspond au groupage des données en minute. C’est un élément essentiel dans notre cas si nous voulons charger 2 jour de données. Avec une donnée toute les 30 secondes, ça fait 5760 donnée à charger et cela ralentit le téléchargement des données, la fluidité du graphique et des courbes. Réglé à 10 ainsi fera que les données sont groupées et moyennées par 10 minutes.
Y-Axis Min et Y-Axis Max correspondent à l’échelle voulue en ordonnée.

 

 

 

VII - [BONUS] - Mise en place d'alerte

 

Spoiler

 

Parmi les services proposées par ThingSpeak figure la possibilité de mettre en place des déclencheurs et des actions suivant le niveau des données remontées. Il s'agit dans notre cas de créer des déclencheurs suivant la température, l'humidité ambiante, l'humidité au sol ou même la lumière à un moment donné performant un appel HTTP POST sur l'API de Telegram.

 

Telegram est une application de messagerie Internet au même titre que Whatsapp. Nous allons grâce au service développeurs de cette appli mettre en place un Bot qui, en recevant nos appels HTTP, va transmettre ce message sur un groupe de discussion (privée bien-sur) créé préalablement.

 

Telegram est disponible sur toutes les plateformes, desktop, navigateur, Android ou IOS. Nous pourrons donc paramétrer notre appli pour être alerté d'un nouveau message par notification sur PC ou smartphone.

 

Telegram

 

1. Commencez par vous créer un compte ici : https://web.telegram.org/#/login

Seul un numéro de téléphone seul vous sera demandez pour créer un compte. Vous pouvez ensuite vous y connectez.

 

2. Pour créer un bot, vous devrez invoquer.... un bot.. Qui répond au nom de BotFather. Commencez une discussion avec @BotFather en tapant dans la barre de recherche puis envoyez lui ceci : /newbot

BotFather vous demande ensuite de donner un nom puis un surnom à votre bot. Tapez ce que vous voulez en terminant le username par "Bot" comme indiqué.

image.thumb.png.70fe7a30bc237508acfa5a0583956501.png

 

Notez le token de votre Bot en rouge que vous transmet BotFather.

 

3. Créez un groupe en cliquant sur le bouton burger en haut à gauche puis "New group". 

Ici, tapez le nom de votre bot en entier en commençant par un arobase. @SmartGrowBot pour mon cas.

Puis créez votre groupe en lui donnant un nom.

 

4.  Pour émettre nos appels HTTP nous aurons besoin du chat_id faisant référence au groupe, qui va permettre à notre Bot d'envoyer des messages sur le groupe.

Pour obtenir ce chat_id rendez-vous avec votre navigateur à l'adresse suivante en remplaçant (TokenBot) par le token précédemment récupéré : https://api.telegram.org/bot(TokenBot)/getUpdates.

Exemple : https://api.telegram.org/bot498547466:AAGDjeIoZlekJRtRaoYX15MUkomFy5LNnJY/getUpdates

Puis récupérez la valeur (nombre négatif) de la clef id pour plus tard : 




[...],"chat":{"id":-365988339,"title":[...]

 

ThingSpeak

 

Nous allons maintenant créer une alerte dans le cas ou l'humidité descendrai en dessous de 50% pour exemple. 

 

Depuis https://thingspeak.com, connectez-vous et visitez le menu Apps -> ThingHTTP puis cliquez sur New ThingHTTP.

Remplissez ces champs :

Name : Basse humidité

URL : https://api.telegram.org/bot(TokenBot)/sendMessage

Method : POST

Content Type : application/x-www-form-urlencoded

Host : api.telegram.org

Body : chat_id=(chat_id)&text=Humidity < 50 !

En remplaçant (TokenBot) par votre token bot et (chat_id) par votre chat_id (en gardant le -)

Une fois fait, cliquez sur Save ThingHTTP

 

Choix 1 : Création d'une alerte de dépassement de seuil (température,humidité,etc.)

 

Révélation

 

1. Visitez maintenant le menu Apps -> React puis cliquez sur New React

Remplissez ces champs de cette façon :

image.thumb.png.37615a3714fa63dc06273c470b61f761.png

 

Cela reste plutôt intuitif, vous ne devriez pas avoir trop de mal à comprendre et potentiellement modifier ces paramètres selon vos besoins.

Cliquez finalement sur Save React

 

2. Pour s'assurer que tout fonctionne, vous pouvez reprendre la même requête effectué par l'ESP8266 sur ThingSpeak en modifiant le paramètre de requête field2=49 (si l'humidité est le champ n°2) puis en vous rendant à cette URL avec votre navigateur.

Rendez-vous donc à l'URL suivante, en modifiant (API_KEY) par votre Write API_KEY utilisé plus tôt dans ce tutoriel : 

http://api.thingspeak.com/update?api_key=(API_KEY)&field2=49

Si todo bene, vous devriez avoir une notification depuis web.telegram.org vous alertant du nouveau message posté par le Bot dans votre groupe.

Notez que dans notre cas, si vous avez laissé le champ "Options" à "Run action only the first time the condition is met", le react ne se déclenchera qu'à la première requête. Repasser à field2=51 puis à field2=49 pour refaire un test (à 15 secondes d'intervalle car vous disposez d'un accès gratuit)

 

 

Choix 2 : Création d'une alerte de dépassement de seuil à un moment précis (lumière,etc.)
 

Révélation

 

Mettre en place un déclencheur horodaté diffère légèrement de la procédure précédente. Il s'agira ici de créer non pas un React mais un TimeControl exécutant un script MATLAB Analysis.

 

1. Rendez-vous dans Apps -> MATLAB Analysis puis cliquez sur New. Ici laissez à Custom puis cliquez sur Create. Ici on va coder un script très simple dans le champ MATLAB Code, qui ne vaudrait même pas la peine d'être expliqué :













channelID = 123456;
lightFieldID = 4;
readAPIKey = 'HASD2ZZ2N22B453R';
thingHTTPLightAPIKey = '3HFR1YMM4D2LGBYK';

lux = thingSpeakRead(channelID,'Fields',lightFieldID,'ReadKey',readAPIKey); 

if (lux > 50)
    thingSpeakURL = ['https://api.thingspeak.com/apps/thinghttp/send_request?api_key=' thingHTTPLightAPIKey];
    webread(thingSpeakURL);
end

Vous avez toutefois plusieurs informations à récupérer. Vous trouverez les 3 premières variables dans le menu à droite. Pour thingHTTPLightAPIKey il s'agit de l'API Key pour déclencher le ThingHTTP créé préalablement qui émettra un message sur Telegram. Vous trouverez cette clef dans Apps -> ThingHTTP

Ici j'ai mis un seuil de dépassement à 50. En gros si mon capteur de lux dépasse les 50 à l'heure à laquelle mes petites devraient être plongées dans le noir, j'émet l'alerte.

Si vous n'êtes pas dans la pénombre total, voyez à combien vous êtes de nuit et prenez le seuil qui vous semble correct.

 

2. Une fois fait donnez un titre à votre script et cliquez sur Save and run. Si votre capteur lit en ce moment une valeur supérieur à 50, vous devriez recevoir l'alerte Telegram. Si il ne fais pas encore jour, changez la condition (< 50 au lieu de > 50) pour au moins s'assurer que votre script fonctionne. 

 

3. Maintenant retournez dans Apps -> TimeControl puis cliquez sur New TimeControl. Ici c'est toujours assez intuitif, remplissez les champs de cette façon :

 

image.png.064c11880b68313af234c672fc75c18e.png

 

Vous choisissez donc si votre alerte doit être exécutée une seule fois ou de façon récurrente et à quelle fréquence. Ici j'ai choisi que mon TimeControl se déclenche tout les jours à 10:20 du matin, ma lampe étant normalement éteinte à cette heure là. Sélectionnez finalement votre script précédemment créé dans Code to execute.

 

4. N'oubliez pas de cliquer sur Save TimeControl

 

 

Et voilà :D je vous conseil également de télécharger l'appli Telegram sur votre portable, ce qui vous permettra d'être alerté plus rapidement si vous vous baladez avec votre phone. 

Si vous voulez muter les notification, vous pourrez faire ça depuis les paramètres de l'app.

 

Il ne vous reste plus qu'à créer autant d'alertes que voulues selon vos besoins.

 

 

 

VIII - [BONUS] - Ajout d'un capteur de Co2

 

Spoiler

 

Les micro-capteurs de co2 sont plus difficiles à trouver que nos petits capteurs d'humidité ou de température. Il s'agit d'un gaz, la mécanique employée pour le mesurer avec justesse est donc bien plus complexe. Il va sans dire que leur prix suit également.

 

Pour ma part, j'ai eu la chance de déjà disposer d'un capteur. Nous partirons donc sur cette référence dans cette partie.

Il s'agit du K30 de Senseair.

 

Le capteur

 

20180825_012703.thumb.jpg.d519128370c17a2fa7582fe280539693.jpg

 

Le K30 est réputé pour être de bonne facture. Sa précision est de +-30ppm et sature à partir de 10 000 ppm. 

Et j'en témoigne : pour exemple, je l'ai laissé tourné dans ma chambre (à 5m de mon placo) quelques semaines. Je pouvais clairement constater des petites hausses de co2 quand je rentrais chez moi, et des hausses d'a peu près 200 ppm quand je me trouvais dans ma chambre (à ~2m du capteur).

 

Datasheet https://img.ozdisan.com/ETicaret_Dosya/456729_1584920.PDF

 

Son coût est toute fois assez élevé. 

Le meilleur deal est sur Tindie : https://www.tindie.com/products/AlfredC/senseair-k30-co2-sensor/

Cela donne donc 56,21€ + 21,62€ de fdp.

 

Le K30 est pré-calibré à 400 ppm en sortie d'usine. Il est toutefois possible de le re-calibrer manuellement en cas de grosse saturation.

 

Assemblage

 

Dans cette partie, le K30 sera ajouté en supplément du reste du système.

Voici donc le nouveau schéma de câblage :

 

image.thumb.png.536661f8f73679b3568d9deaed08ef9b.png

 

Attention !

Le capteur est très probablement livré nu (la board seule). Un peu de soudure s'imposera donc pour pouvoir le relié à votre ESP8266.

 

J'ai fais le choix d'utiliser l'interface série (UART) du capteur pour le lire. Cependant, le K30 peut être également lue par I2C.

Nous utiliserons les pins D6 (Rx) et D7 (Tx) pour communiquer avec notre capteur.

Le capteur devra être alimenté en 5V. Votre ESP étant normalement branché sur une alimentation 5V, il sera relié à la pin VIN.

Le K30 consomme jusqu'à 300mA. C'est un paramètre à prendre en compte selon la capacité de votre alimentation et le reste de votre système. Personnellement, j'arrive à faire tenir le tout connecté à mon PC (donc avec 5V 1A) mais pour être plus tranquille vous pouvez passer sur une alim de 5V 2A.

 

Si le capteur est correctement alimenté et opérationnel, il doit clignoter toutes les 2 secondes d'une lumière jaune

 

Ajout du nouveau champ ThingSpeak

 

Pour pouvoir remonter nos valeurs de co2, nous aurons besoin d'ajouter un nouveau champ à votre Channel ThingSpeak.

Si vous avez suivit la partie V de ce tuto, vous ne devriez pas avoir trop de mal ici.

 

Développement embarqué

 

Depuis mon dépôt Github vous trouverez une variante du projet (une branche) intégrant le k30 au reste du système.

Pour cela rendez-vous là-bas : https://github.com/RaphikiCW/smartgrow et cliquez sur "Branch: master" pour sélectionner la nouvelle branche k30-co2 :

image.png.b329a41d5d618586db12779794d3bd63.png

 

Depuis ici, vous pouvez télécharger les nouveaux fichiers comme expliqué dans la partie VI de ce tutoriel. Notez l'apparition des nouveaux fichiers de librairie pour lire le K30. 

Je ne ferais pas une explication du code ici, le capteur s'intègre assez simplement au reste du projet dans le .ino.

 

Si todo bene, les premières données commencent à se dessiner sur ThingSpeak :

 

image.png.41460d124e5b63500ad8e063e885c82a.png

 

 

Voilà c’est à vous de jouer maintenant !

 

 

 


  • Thanks 1
  Signaler Guide