Un autre système d'arrosage automatique de l'usine utilisant ESP8266 et Blynk

Une fois, alors que je me détendais avec des amis dans un camp étudiant au MEPhI, l'un d'eux m'a dit qu'il avait récemment décidé d'essayer de planter des fraises sur un terrain. J'ai acheté des pots, j'ai creusé de la terre quelque part et apporté des tuyaux d'arrosage. Et tout irait bien, le propriétaire dort - les fraises poussent, mais elles ne doivent aller au pays de manière stable qu'une fois par semaine ou même plus souvent pour que les plantes ne sèchent pas sans eau.

En me souvenant de deux Arduino qui traînaient dans une commode, ainsi que d'un désir de longue date d'accomplir quelque chose de plus que de simples LED clignotantes, j'ai immédiatement décidé de me charger de cette tâche et de faire cette fois, si possible, jusqu'à la fin.



En tant qu'interface de gestion du système, il a été décidé de fournir un contrôle manuel «à partir du bouton», ainsi que de mettre en œuvre un contrôle à distance via Internet. Arduino Mega a été choisi comme contrôleur principal, car un bouclier avec un écran LCD et des boutons est facilement connecté, et il a également suffisamment de mémoire et de GPIO pour cette tâche.

Le schéma général du système:



Pour interagir avec le réseau mondial, la carte mère ESP8266, qui gagne activement en popularité, a été choisie. Le choix d'un protocole de transfert de données sans fil est dû, en plus du faible coût du module Wi-Fi, à la présence d'un routeur Wi-Fi constamment sur la datcha du client, ce qui évite de tirer une connexion filaire à l'intérieur de la maison.

Malgré le fait que l'ESP8266 soit apparu à l'horizon de la communauté DIY assez récemment, une ressource de développeurs sur cette puce se développe déjà activement dans RuNet, où vous pouvez toujours chercher la réponse à votre question, trouver un exemple de connexion d'une carte ESP spécifique ou demander de l'aide pour un problème.

Estimation du projet


Pour surveiller l'humidité actuelle du sol, un capteur standard avec Ebay a été commandé.

Pour afficher et saisir des informations, il a été décidé d'utiliser le blindage du clavier LCD, qui est un module électronique avec un écran LCD et 6 boutons connectés à une entrée analogique.

En tant que dispositif de contrôle de l'alimentation en eau, un robinet mécanisé 12 volts à 2 fils a été choisi, dont l'ouverture-fermeture s'effectue en changeant les signes de la tension fournie. Par conséquent, en plus du robinet, un module relais 4 canaux a été commandé (deux relais modifient la polarité fournie, un est responsable de l'alimentation en tension, un autre est laissé en réserve).

Comme ESP8266 sur Ebay, la version la plus simple a été commandée - ESP-01. L'essentiel est de se rappeler que l'ESP8266 est alimenté exclusivement à partir de 3,3 V, ce qui doit être pris en charge à l'avance.

Liste des équipements nécessaires:

  • Grue motorisée
  • Arduino mega
  • Module WiFi (ESP8266)
  • Relais 4 canaux
  • Capteurs d'humidité du sol
  • Écran LCD avec boutons

Coût total (excluant le coût de tout ce qui est nécessaire pour le soudage, l'assemblage ainsi que l'alimentation): 61,01 $. La principale contribution au coût final de mon système a été apportée par une grue motorisée (23,32 $) et un officiel Arduino Mega 2560 (26,80 $).

Fonctionnalité du système


Après une petite réflexion, j'ai décidé que le système d'arrosage automatique devrait pouvoir fonctionner dans les trois modes suivants:

  • Manuel ("à partir du bouton"). Dans ce mode, l'utilisateur décide de l'heure de début de l'irrigation en fonction des informations qui lui sont fournies par le capteur d'humidité du sol ou en fonction de son expérience personnelle;
  • Mode programmé. L'utilisateur définit uniquement les paramètres d'irrigation selon le calendrier (fréquence, durée), après quoi le système lui-même irrigue selon les paramètres sélectionnés;
  • Mode capteur. L'arrosage est effectué automatiquement lorsqu'un seuil d'humidité prédéterminé est atteint. L'utilisateur n'a qu'à régler la valeur seuil d'humidité et la durée de l'arrosage;
  • À distance (depuis un smartphone ou un ordinateur). Il inclut la possibilité de contrôler à distance le système en utilisant la logique de l'un des trois modes énumérés ci-dessus.

Il est difficile d'imaginer la mise en œuvre d'une telle fonctionnalité sans le menu le plus simple, dont la navigation sera effectuée à l'aide des boutons de protection du clavier LCD. Vous pouvez lire sur l'implémentation du menu sur Arduino, par exemple, ici .

Blynk


En réfléchissant à la mise en œuvre du contrôle de l'irrigation à distance, je suis tombé sur un projet Blynk intéressant, dont la collecte de fonds pour la mise en œuvre a été lancée sur Kickstarter le 16 janvier 2015 .

Pendant un mois, le projet a recueilli 49 235 $ au lieu de 10 000 $, ce qui, apparemment, reflète l'énorme intérêt pour de tels projets de la communauté mondiale des geek.

L'objectif principal de Blynk est de créer une plate-forme abordable pour le contrôle sans fil des appareils électroniques faits maison à partir d'un smartphone. Comme prévu par les auteurs, l'accès à Internet n'est pas une condition préalable - Blynk Server peut être téléchargé et déployé sur votre réseau domestique, après avoir reçu une autonomie totale au sein de votre domicile.

La liste complète des plates-formes prises en charge (parmi lesquelles, bien sûr, sont Arduino, Raspberry PI et Intel Edison), sur lesquelles Blynk devrait être porté, est ici .

Schématiquement, le principe de fonctionnement de Blynk est présenté dans la figure suivante:

image

Dans la liste des fonctionnalités d'interface du programme pour smartphone pour contrôler un appareil distant et afficher les informations reçues de celui-ci, une grande variété d'éléments ("widgets") sont annoncés. Nous distinguons les principaux:

  • Boutons
  • Sliders
  • Joysticks monoaxiaux et biaxiaux;
  • Gestion à l'aide d'un gyroscope et d'accéléromètres téléphoniques;
  • Différents types de boutons de commande;
  • Graphiques
  • Indicateurs de flèche;
  • Notifications contextuelles.

Une liste complète des éléments peut être trouvée sur la page du projet Blynk sur Kickstarter.

Il convient de noter que le projet est à un stade de développement actif, par conséquent, toutes les fonctions déclarées par les développeurs n'ont pas été mises en œuvre jusqu'à présent. Cependant, selon eux, ce n'est qu'une question de temps. Les fonctionnalités disponibles pour notre projet seront suffisantes.

Implémentation technique


Schéma de principe de l'appareil:



Comme le montre le schéma présenté, l'échange d'informations entre Arduino et ESP8266 s'effectuera via UART. Afin de ne pas rencontrer de problèmes lors du flashage du contrôleur, nous connectons le module Wi-Fi aux contacts D2, D3, en organisant un UART matériel (Serial3) sur ces jambes et en réglant la vitesse sur 11520 bauds.

Un lecteur attentif devrait avoir une question logique - comment l'Arduino alimenté par la logique 5 volts et l'ESP8266 3,3 volts communiquera-t-il? Après avoir étudié cette question sur Internet, je suis arrivé à la conclusion que la majorité n'accorde absolument aucune importance à ce problème (comme il s'est avéré plus tard - pas en vain) en connectant directement les jambes correspondantes de ces deux planches. Seuls quelques articles ont suggéré d'utiliser le diviseur de tension le plus simple ou des convertisseurs spécialement conçus. Naturellement, je n'avais pas de convertisseur, donc au début, une tentative a été faite pour implémenter la communication à l'aide d'un diviseur, mais cela n'a abouti à aucun résultat, et j'ai rejoint l'ensemble de problèmes de fermeture des yeux susmentionné (l'avantage a fonctionné sans coordination des niveaux logiques) .

Quelques mots sur la puissance de l'ESP8266


Comme déjà mentionné dans de nombreux tutoriels, pour le fonctionnement normal de l'ESP, vous avez besoin d'une alimentation stable dans la gamme de 3,0 à 3,6 volts. Pour ce faire, vous pouvez utiliser différents convertisseurs linéaires, par exemple le populaire AMS1117 3.3 d'aujourd'hui. La fiche technique de l'AMS1117 indique que la tension d' entrée peut atteindre 15 V.Cependant , pour un fonctionnement stable dans le mode de courant de sortie d'environ 1 A, il est recommandé de baisser la tension d'entrée (en pratique, 5-6 V suffisent). D'après ma propre expérience, je dirai que lorsque le convertisseur est connecté à une source 12 V, l'AMS commence à chauffer activement, ce qui entraîne rapidement une diminution de la tension de sortie et, par conséquent, un redémarrage de l'ESP8266.

Configurer ESP8266


L'interaction d'Arduino et d'ESP8266 lors de l'utilisation de Blynk peut être implémentée de deux manières différentes:

  • «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
  • ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).

Les deux options ont leurs avantages et leurs inconvénients, mais la première option est plus pratique car il n'est pas nécessaire de travailler avec deux programmes et de surveiller en permanence la compatibilité des deux appareils.

Pour contrôler à l'aide de Blynk, vous devez pouvoir télécharger le firmware souhaité sur l'ESP8266. Dans notre cas, la version du firmware AT v0.22 SDK v1.0.0 sera utilisée .

Pour flasher les cartes ESP8266, vous avez besoin d'un convertisseur USB-TTL (par exemple, un ), cependant, vous pouvez également utiliser Arduino en fermant les jambes RST et GND dessus et en connectant le module RX Wi-Fi à la jambe Arduino RX, similaire à TX à TX. Ensuite, mettez l'ESP8266 en mode clignotant (pour ce faire, fermez la sortie GPIO0 à la masse), et en utilisant l'utilitaire XTCom Util, remplissez le firmware, comme décrit ici. Il ne reste plus qu'à augmenter la vitesse UART à 115200 bauds avec la commande AT AT + UART_DEF = 115200,8,1,0,0, après quoi la configuration du module Wi-Fi sera terminée.

Croquis pour Arduino


La bibliothèque principale pour travailler avec Blynk sous l'IDE Arduino est la bibliothèque BlynkSimpleEsp8266.h. Considérez ses principales fonctions.

1) Blynk.begin (auth, "ssid", "pass")
Comme vous l'avez peut-être deviné, la fonction reçoit les paramètres de connexion à un point Wi-Fi - son SSID et son mot de passe, ainsi que le jeton d'authentification de notre appareil pour la connexion au serveur Blynk.

Important! Le processus de connexion au serveur Blynk commence uniquement après que l'une des fonctions suivantes a été appelée pour la première fois dans le programme: Blynk.run () ou Blynk.connect ().

Pour se déconnecter / se connecter au serveur Blynk, les fonctions Blynk.disconnect () et Blynk.connect () sont utilisées, renvoyant le résultat dans un type booléen. Pour établir une connexion (délai d'expiration en secondes), Blynk.connect (s) est utilisé (par défaut, le délai d'expiration est défini sur 30 s).

2) Blynk.run ()
La fonction principale pour synchroniser l'appareil avec le serveur Blynk et recevoir les commandes du smartphone. Couramment utilisé dans une boucle. De plus, cette fonction vous permet de contrôler les entrées et sorties de la carte ESP (en mode «autonome») sans utiliser les fonctions telles que digitalRead, digitalWrite, analogRead, analogWrite n'importe où dans le code. Il suffit d'ajouter les éléments nécessaires à l'écran de contrôle dans l'application sur le smartphone et de les corréler avec le GPIO ESP8266 nécessaire.

3) Travailler avec des contacts virtuels ("Pins virtuels")
L'une des caractéristiques de Blynk est l'utilisation de contacts virtuels. Ce terme fait référence à un canal logique pour transmettre diverses informations entre une application mobile et un appareil, qu'il s'agisse de variables booléennes, de valeurs numériques (entières ou longues) ou de données texte sous forme de chaîne. Les contacts virtuels n'ont pas de connexion directe avec les terminaux de l'appareil et sont principalement utilisés pour l'interaction avec les bibliothèques de modules périphériques (LCD, servos, etc.) ou une interface d'application mobile.

Dans le code d'esquisse, le traitement de l'appel au contact virtuel avec le numéro n s'effectue à l'aide des blocs BLYNK_READ (Vn) {...} et BLYNK_WRITE (Vn) {...}. À l'intérieur des accolades, le code de traitement pour accéder au contact virtuel est indiqué. Par exemple, si le widget d'application demande que la valeur d'humidité du sol pour l'affichage virtuel n ° 2 soit affichée sous forme de graphique, nous devons écrire quelque chose comme ceci dans le croquis:

BLYNK_READ(V2)
{
//     ,    humidity:
  Blynk.virtualWrite(2, humidity);
}

De même, vous pouvez considérer le paramètre envoyé, par exemple, via le contact virtuel n ° 9 de l'utilisateur de l'application Blynk:

BLYNK_WRITE(V9)
{
//      x:
int x = param.asInt();
}

Cela utilise la conversion de la variable d'entrée en une valeur entière à l'aide de param.asInt (). Les conversions param.asStr () et param.asDouble () sont également autorisées.

Important! Les procédures BLYNK_READ / BLYNK_WRITE doivent être exécutées le plus rapidement possible afin que l'appareil puisse gérer toutes les demandes de l'application. Par conséquent, il est fortement déconseillé d'utiliser les fonctions sllep / delay dans de telles routines.

Des informations plus détaillées sur la fonctionnalité Blynk peuvent être trouvées sur la page github du développeur dans le dossier des exemples ou sur la page des documents .

Maintenant, armés de connaissances, revenons à l'auto-arrosage et écrivons un croquis. Nous fournirons les possibilités suivantes pour que l'application mobile interagisse avec le système:

  • Le choix du mode de fonctionnement du système: manuel, par capteur, par programme;
  • Affichage de l'humidité du sol reçue du système et sortie des données historiques;
  • Échange d'informations via l'élément d'application terminal.

J'ai essayé de commenter chaque morceau de code qui est responsable d'une fonction particulière du système, donc nous ne nous attarderons pas sur le code du programme en détail. Je note seulement que pour la facilité d'utilisation, tous les réglages effectués par l'utilisateur sont enregistrés dans la mémoire Arduino non volatile (EEPROM).

Le croquis peut être téléchargé sur GitHub.

Configuration de l'application mobile Blynk


La dernière étape est à gauche - la configuration de l'application mobile. Dans mon cas, les éléments suivants seront utilisés:

  • 4 indicateurs LED (broches virtuelles 1, 29, 30, 31);
  • 2 boutons (broches virtuelles 2, 3);
  • Terminal pour l'échange d'informations (Virtual Pin 4);
  • Indicateur numérique «Affichage de la valeur» (broche virtuelle 8);
  • Graphique avec la possibilité d'afficher les données historiques "History Graph" (Virtual Pin 8);
  • Widget pour activer le travail avec le courrier ("Email");
  • Un widget pour activer les notifications pop-up ("Push").

Après avoir installé l'application mobile Blynk , vous devez vous inscrire et sélectionner l'appareil que vous souhaitez gérer (dans notre cas, c'est ESP8266). De plus, afin de ne pas perdre, nous nous envoyons un jeton d'authentification unique, qui est utilisé dans le croquis pour l'authentification sur les serveurs Blynk. Vous trouverez ci-dessous des captures d'écran illustrant la configuration de l'application.

Créer un nouveau projet


Dans la fenêtre ouverte du projet créé dans le coin supérieur droit, il y a 3 boutons: paramètres globaux du projet, ajout d'éléments (widgets) au formulaire et lancement:

Formulaire vide pour un nouveau projet


Il reste à ajouter des contrôles au formulaire de demande et à les configurer. Certains des widgets disponibles au moment de la rédaction sont présentés ci-dessous:

Liste des widgets à ajouter au formulaire de candidature


Pour contrôler le fonctionnement du système, ajoutez 2 boutons au formulaire: l'un sera responsable du choix du mode de fonctionnement, le second - pour démarrer l'irrigation en mode manuel. L'état actuel du système sera établi à l'aide de quatre indicateurs LED. Un indicateur s'allume pendant l'irrigation, les trois autres sont nécessaires pour afficher le mode actuel.

Reste à choisir les couleurs des éléments, ajouter des légendes et les lier aux contacts virtuels souhaités.

Configuration des voyants et boutons LED


Pour afficher la dynamique de l'humidité du sol, ajoutez au formulaire un graphique avec la possibilité d'afficher des données historiques ("History Graph"). Nous afficherons la valeur actuelle de l'humidité sur l'affichage numérique ("Value Display").

Ajouter un graphique d'historique et des éléments d'affichage de valeur


Pour la commodité de la configuration à distance des paramètres du système, ainsi que pour obtenir des informations plus complètes sur l'état actuel, nous ajoutons un terminal à l'application. Et pour recevoir des notifications par e-mail et par téléphone, vous devez également placer les éléments «Push» et «Email» sur le formulaire.

Ajouter des éléments Terminal, Push et Email


Il reste à placer sur le formulaire tous les widgets décrits ci-dessus et nous obtiendrons quelque chose comme ceci:



Résultat


Vous trouverez ci-dessous quelques photos du système dans l'état actuel et une vidéo du travail de l'auto-arrosage et de Blynk.
Je réserverai tout de suite que je n'ai pas branché de robinet mécanisé dans l'appartement et fourni de l'eau au pot de fleur, et il n'y a aucun besoin urgent - au moment de tester le système, le processus d'arrosage (lorsque le robinet est ouvert) est émulé avec succès par ma femme et un arrosoir ordinaire.

Photo n ° 1:



Photo n ° 2:



Vidéo:



Au lieu d'une conclusion


Résumant la création d'un système d'arrosage automatique utilisant Blynk, nous pouvons dire ce qui suit:

1. En soi, le service Blynk est un outil très pratique et facile à apprendre qui, grâce à l'abondance de cartes et d'appareils pris en charge, peut être facilement intégré dans presque n'importe quel appareil. Associés au prix bas du module Wi-Fi ESP8266, ces avantages vous permettent d'ajouter la télécommande à un projet spécifique avec le moins d'effort.
Les inconvénients de l'utilisation d'une telle solution sont, bien sûr, moins de flexibilité dans la personnalisation du système pour vous-même et la dépendance vis-à-vis des développeurs d'applications, ce qui, cependant, ne réduit en rien ses avantages lorsqu'il est utilisé dans de petits projets de bricolage.

2. Les deux principaux inconvénients de la mise en œuvre ci-dessus du système d'irrigation automatique sont son coût et la faible qualité du capteur d'humidité du sol utilisé.

Le premier inconvénient est causé, comme mentionné ci-dessus, par le coût élevé du robinet électromagnétique et de la carte Arduino Mega officielle. Cependant, il peut être considérablement réduit en utilisant, par exemple, des analogues Arduino ou en implémentant la partie électronique entière sur un autre MK approprié. La grue, malheureusement, ne pouvait pas être trouvée beaucoup moins chère, et ce n'était pas mon objectif.
Quant au capteur d'humidité, afin d'augmenter sa durée de vie et de réduire les produits d'électrolyse entre ses contacts, d'une part, il est nécessaire de lui appliquer de la tension juste immédiatement avant de mesurer l'humidité (qui est implémentée dans mon système), et d'autre part, il vaut mieux remplacer soit sur des tiges de graphite, soit utiliser des contacts en acier inoxydable.

Dans un avenir proche, il est prévu d'assembler la partie électronique et de la placer dans un bâtiment décent et, je l'espère, d'installer enfin tout dans le pays.

Merci de votre attention!

Source: https://habr.com/ru/post/fr388589/


All Articles