
Points clés ou sujet de cet article
Étant donné que les intérêts des gens sont différents et que les gens ont peu de temps, parlons brièvement du contenu de l'article.
Cet article est un aperçu du projet de contrôleur avec un prix minimum et la possibilité de programmation visuelle via un navigateur WEB.
Puisqu'il s'agit d'un article de revue visant à montrer «ce qui peut être retiré d'un contrôleur de penny», vous ne devriez pas y chercher des vérités profondes et des algorithmes détaillés.
La motivation, les idées et les résultats de la construction d'un contrôleur basé sur la puce WiFI ESP8266 sont pris en compte.
Avertissement
Je ne voulais pas écrire cet article. Je ne suis pas du tout fan d'écrire des articles. Il faut réfléchir et en plus - beaucoup. Penser comment écrire pour minimiser le nombre d'incompréhensions. Penser comment ne pas aller aux extrêmes. Et bien plus encore.
Mais des amis ont dit que puisque mes efforts dans le domaine de l'IoT et d'autres petites automatisations sont intéressants pour eux, ils peuvent être intéressants pour d'autres pour le grand public. Eh bien, où va le public qui s'intéresse à cela? Bien sûr, sur un habr. Et me voici. Ancien lecteur et nouvel écrivain.
Pour les erreurs, inexactitudes, fautes de frappe, style de présentation non moderne, etc. qui pourraient ne pas plaire au lecteur, je n'assume aucune responsabilité. Lisez à vos risques et périls.
Je préviens également immédiatement que je n'expliquerai pas ce que la multidiffusion MQTT, WiFi et UDP et d'autres choses qui ne sont pas directement liées au sujet. Certains liens se trouvent à la fin de l'article.
La naissance d'une idée ou de quelques paroles
Eh bien, la vie n'est pas une chose simple, et Sa Majesté Chance y joue un rôle important. Je veux donc partager comment les événements aléatoires, multipliés par la paresse régulière, ont abouti à une conception de contrôleur plutôt intéressante basée sur ESP8266.
Tout a commencé de façon plutôt nonchalante: je voulais construire un système de contrôle du système d'alimentation en eau et arroser les parterres du jardin à la campagne.
Mais à peu près, puisque je ne peux m'engager pleinement dans des camions-citernes-grues qu'en vacances, avant lesquelles il y avait encore plus de six mois - tout était limité à des discussions au travail avec des collègues et des amis-camarades dans un cadre informel.
Le sujet de la «petite automatisation» ou, comme il est d'usage de le dire dans «ces écoliers hacker-hacker» - le sujet de l'IoT - l'Internet des objets - m'intéresse depuis longtemps. Bien avant l'avènement d'Internet en tant que tel, largement utilisé.
Même dans mon enfance, je voulais que les choses fassent quelque chose «elles-mêmes». Et il est souhaitable que je puisse les contrôler à distance. Mais à cette époque (les années 80, le début des années 90 du dernier millénaire), c'était difficile. Internet n'était pas disponible partout dans le monde, car il n'y avait nulle part et des téléphones portables, des tablettes et même des écrans LCD et des clés USB. J'ai donc dû me limiter aux "interrupteurs d'éclairage sur le clap" et aux télécommandes radio les plus simples. Mais pour ces temps et cet âge, c'était agréable et intéressant.
Mais c'est le passé. Nonche dans la cour du XXIème siècle. Et tout le monde a un smartphone dans sa poche, Internet est presque partout où il est nécessaire et non nécessaire, et la base de données des composants électroniques disponibles est maintenant telle qu'il y a 15 ans, l'habitant ordinaire de la planète Terre n'en rêvait même pas.
Par conséquent, ayant décidé de mouler un contrôleur pour les affaires de l'eau dans le pays, j'ai tourné mes yeux vers la puce ESP8266.
Tout d'abord, cette puce est bon marché. Et si un contrôleur ne suffit pas - vous pouvez en mettre deux, trois ou cinq. Deuxièmement, il dispose du WiFi à bord. Autrement dit, vous pouvez regarder ce qui se passe via Internet et même contrôler le processus depuis n'importe quel smartphone. Bien sûr, vous avez besoin d'un point d'accès avec accès à Internet, mais ce n'est pas un problème. Quoi qu'il en soit, c'est presque partout, ou est sur le point de l'être, y compris - et dans ma maison de campagne.
Après avoir plongé dans le monde merveilleux des projets pour ESP8266, j'ai été surpris de constater que, malgré les capacités impressionnantes de cette puce, les projets dessus, à de rares exceptions près, sont divisés en deux types: ce sont des programmes extrêmement primitifs comme «cliquez sur les rouleaux du smartphone et regardez l'état capteur de température via Internet »; ou de bons et solides interprètes de JavaScript ou Lua, mais malheureusement, ils consomment presque toute la mémoire et ne vous permettent pas de faire quelque chose de sérieux.
Ma première idée était aussi simple qu'une crêpe - écrire un programme de contrôle de pompe simple basé sur l'état des capteurs et c'est tout. Mais, comme un kalach déchiqueté en termes de sauter sur le râteau d'introduire différents systèmes, j'ai réalisé que je ne serais certainement pas en mesure de prévoir tous les virages de l'algorithme que j'aimerais ou que je devrais redresser pendant la construction du système d'approvisionnement en eau et d'irrigation.
D élaborer le programme dans le pays, dans une grange sombre - n'est pas très pratique. Et vous devez.
Quelle est la sortie? Bien sûr, la première chose qui m'est venue à l'esprit était de rendre l'algorithme personnalisable. Un de mes collègues a donné de nombreux conseils - quoi configurer et comment. Avec cela, il a coupé ma première idée dans l'œuf. Merci à lui. S'il n'avait pas déployé sous mes yeux le nombre de paramètres que je devrais configurer, je ne refuserais probablement pas cette option: créer une page de paramètres d'algorithme.
Mais une image terrifiante du nombre de paramètres de réglage, et même de s'influencer mutuellement - m'a dégrisé. Encore une fois, je me suis rendu compte que rien ne pouvait être prévu ...
Je vais réserver tout de suite: je suis paresseux. Très paresseux! Je suis franchement paresseux pour réécrire le programme à chaque fois. Par conséquent, la tâche s'est posée - comment définir rapidement et facilement un algorithme, de préférence sans programmation? De plus, cet algorithme sera assez compliqué; aura beaucoup de paramètres; Elle sera individuelle pour mon cas et inadaptée aux autres. Et je veux vraiment rendre l'appareil plus ou moins universel ...
Puisqu'il y avait encore environ six mois avant les vacances et toute la tuyauterie, j'ai décidé de prendre mon temps pour réfléchir: comment le rendre pratique et beau? Comment programmer sans programmation? Comment faire sans un billion de paramètres qui peuvent être modifiés lors de la configuration?
Comme d'habitude, tout a déjà été pensé devant nous: j'ai réalisé que je voulais dessiner un algorithme sous forme de carrés d'action et les connecter avec des lignes de communication qui montrent d'où et d'où les données volent. Eh bien, en fouillant dans la boîte, je veux pouvoir configurer certains de ses paramètres individuels.
Et l' acte de définir l'algorithme, de le dessiner avec des carrés n'est pas nouveau. Ces systèmes étaient de retour dans les années 80; il existe un système NodeRed super populaire qui est bien connu de ceux qui ont déjà rejoint le monde de la petite automatisation / IoT.
Mais ce n'est pas de chance: de tels systèmes sont conçus pour les «gros PC». Au pire, sur le Raspberry PI. Mais pas du tout sur l'ESP8266, qui n'a que quelques dizaines de kilo-octets de RAM et il n'y a pas de système d'exploitation!
Comment être? Et il n'y a que deux solutions: écrire et dessiner un programme sur un "grand PC" ou un ordinateur portable, puis le transférer sous une forme ou une autre sur ESP8266 ou essayer de "fourrer les indésirables" dans le contrôleur ESP8266 lui-même.
Par conséquent, le programme maximum que j'avais était le suivant: pour programmer votre contrôleur, il ne devrait y avoir besoin de rien d'autre qu'un ordinateur portable avec un navigateur WEB! C'est-à-dire, un ordinateur portable avec un navigateur WEB et mon contrôleur - cela devrait suffire pour configurer complètement et écrire des programmes de contrôle.
Et , il s'est avéré qu'il était tout à fait possible de le réaliser!
Je ne vous ennuierai pas avec tous les détails de l'élaboration du projet. Je peux seulement dire que sur la base des mots qui me sont venus à l'esprit et à la langue au cours du processus de développement, il serait possible de compiler un « Dictionnaire de la vulgarité des travailleurs électroniques » distinct. Mais tout est derrière. Plus précisément, pas tous, mais la première étape, la plus difficile, quand ce n'est pas clair - votre idée sera-t-elle de vivre ou est-ce simplement un non-sens du hongre un soir de pleine lune.
Je partagerai le résultat de ce qui est sorti et s'appelle le «contrôleur ShIoTiny» .
Et que s'est-il passé?
Le matériel du contrôleur ShIoTiny est standard et simple: trois entrées conçues pour les capteurs à contact sec (boutons, interrupteurs reed, ils sont également des capteurs de niveau d'eau dans le réservoir), une entrée ADC, une entrée pour connecter un capteur de température et d'humidité comme DHT22 ou similaire . Et enfin, trois sorties sous forme de relais de commutation pour 220V, 1 Amp. Le relais dit 10A, mais je suis réaliste et je ne les laisserai pas passer la carte d'ampli 10A. Et pour contrôler les démarreurs des pompes et 1 ampère suffit. Tout cela est alimenté par une source d'alimentation avec une tension de 5 à 9 volts.
Bien sûr, j'ai ajouté le capteur de température comme «Schaub était», mais sur l'ADC, on espérait mesurer la tension du secteur. N'est-ce pas suffisant?
Bien sûr, toutes les entrées, à l'exception de l'entrée pour connecter le DHT22, sont protégées contre les résistances et les diodes: je n'avais aucune envie de graver ESP8266, et les diodes et résistances ne coûtent que quelques centimes.
Une photo du produit fini peut être vue au début de l'article. J'ai commandé plusieurs de ces planches - que se passe-t-il si je les brûle ou dois-je couper les chemins et les jambes?
Mais, heureusement - n'a pas eu à le faire.
Le produit est, bien sûr, la beauté et la grandeur. Mais pour plus de commodité, ce qui suit est un schéma de connexion de la carte aux simulateurs de capteurs et d'actionneurs.

À la place des capteurs de niveau - boutons Input1..3, au lieu des démarreurs - LED connectées au relais Relay1..3. Eh bien, une résistance variable sur l'ADC pour simuler la tension d'entrée.
Lorsque le relais est éteint, la LED rouge est allumée. Et lorsqu'il est allumé - vert. J'ai donc débogué sur la table.
En plus de tout cela, il y a un connecteur d'alimentation sur la gauche de la carte et deux boutons de service sur la droite: Reset et AP. Eh bien, un interrupteur DIP qui met l'appareil en mode de programmation. Le connecteur de programmation ESP8266 via l'adaptateur USB-UART est également disponible.
Quelques explications sur les boutons. Qu'est-ce que la réinitialisation - et c'est donc clair. Mais le bouton AP est nécessaire pour mettre ShIoTiny en mode point d'accès ouvert (mode configuration ou mode config). Pourquoi est-ce nécessaire? Eh bien, par exemple, vous avez foiré les paramètres réseau et souhaitez les modifier. Appuyez sur le bouton AP pendant quelques secondes (jusqu'à ce que la belle LED bleue s'allume). Ensuite, prenez votre smartphone ou votre ordinateur portable, allumez le WiFi et voyez-y un point d'accès ouvert avec le nom esp_8266_xxxx et connectez-vous. Ensuite, allez dans le navigateur de votre smartphone ou ordinateur portable et tapez dans la barre d'adresse: 192.168.4.1. Si tout est en ordre, vous serez redirigé vers la page du contrôleur ShIoTiny et vous pourrez le configurer d'une nouvelle manière.
Comme nous le voyons, le matériel n'a rien de compliqué. Par conséquent, à propos de la partie logicielle .
Dans tous les sauts d'implémentation, je décrirai, mais ensuite. Un jour. Et aujourd'hui, je ne considérerai le logiciel que "à l'extérieur", c'est-à-dire du point de vue de l'utilisateur - moi-même ou quelqu'un d'autre qui a osé utiliser mon métier (il y a de tels cascadeurs).
Du point de vue de l'utilisateur, l'appareil est un serveur HTTP accessible via WiFi. Tous les paramètres, la programmation et ainsi de suite - se fait à l'aide d'un navigateur WEB.
Et donc, nous sommes allés à la page du contrôleur. Que voyons-nous? Et nous voyons l'onglet «Contrôle et état», qui montre l'état actuel des appareils utilisés: entrées, sorties, ADC, DHT22. De plus, les paramètres de connexion au point d'accès sont affichés (si nous travaillons en mode station WiFi); les paramètres du point d'accès (si nous travaillons en mode point d'accès WiFi) ou les deux. Eh bien, en plus, les paramètres de connexion avec le courtier MQTT sont affichés si le protocole MQTT est utilisé.

A voir, rien de spécial et d'intéressant. Il n'y a rien à presser! Bien que ... Il y a deux autres onglets! Configuration des paramètres réseau Mise en réseau et schémas de schéma de l'éditeur ElDraw .
Vous l'avez deviné, le réseautage est la mise en place d'un réseau, mais pas seulement cela. Il a quelques paramètres plus intéressants. «Poke» sur l'onglet Networking et voyez-y approximativement ce qui est montré dans la figure.
Configuration du nom et du mot de passe du point d'accès pour chacun des modes - stations WiFi et points d'accès WiFi. Tout semble clair. En plus de l'objectif du bouton Scan WiFi, il est complètement transparent.
Mais la liste déroulante "Mode ShIoTiny" nécessite une clarification. Le fait est que je ne pouvais pas décider dans quel mode il serait plus pratique pour moi de travailler. Et donc, prévu pour 5 modes de fonctionnement de l'appareil.

Nous listons brièvement ces modes de fonctionnement.
Mode config - mode configuration. Il s'agit du mode point d'accès ouvert avec une adresse fixe 192.168.4.1 et le nom esp_8266_xxxx.
Mode Station - le mode de la station WiFi connectée à votre point d'accès.
Mode AP - mode point d'accès fermé. Vous définissez vous-même le nom et le mot de passe.
Le mode AP + Station est l'inclusion simultanée du mode AP + du mode Station.
Mode unique - fonctionne sans se connecter au réseau. Un seul contrôleur portant sa lourde part ...
Dans tous les modes, à l'exception du «Mode de configuration» , vous pouvez bloquer la page WEB en cochant la case «Verrouiller le Web en mode Station» . Il s'agit d'un type pour des raisons de sécurité.
Les paramètres sont évidents pour MQTT: serveur, port, mot de passe, connexion ouverte ou SSL . Je ne m'étendrai pas ici en détail.
En plus de tout le reste, le contrôleur ShIoTiny peut envoyer et recevoir des paquets dans un format spécial pour la multidiffusion. Ses paramètres sont également évidents: l'adresse du groupe et le port.
Bien sûr, si vous décrivez toutes les nuances des paramètres, vous obtenez un article séparé, mais ce n'est pas inclus dans mes plans.
Et donc, avec l'onglet Réseau , tout est plus ou moins clair. Passons à la caractéristique principale du contrôleur - l' éditeur de programme ElDraw .
En appuyant sur l'onglet ElDraw, nous voyons quelque chose comme ce qui suit. Bien sûr, si l'appareil n'a pas de circuit chargé, le champ du circuit sera vide.

À gauche, une palette d'éléments ou de nœuds (nœuds).
A droite, un champ de diagramme ou simplement un «diagramme».
Du haut - boutons pour le chargement et le déchargement sur le disque et sur l'appareil, ainsi que des boutons pour l'édition.
Pour ceux qui ont travaillé avec des éditeurs, la gestion est généralement évidente. Nous devons ajouter un élément au diagramme - prenez-le avec la souris et faites-le glisser de la palette vers le diagramme. Il est nécessaire de supprimer l'élément ou le lien du diagramme - piquez dessus ou dessus avec la souris et appuyez sur la touche SUPPR . Nous devons connecter les éléments - nous prenons l'entrée d'un élément et le connectons à la sortie d'un autre.
Il y a toujours une mise à l'échelle (MAJ + molette de la souris). Malheureusement, il n'existe aucun moyen de copier des éléments et des groupes d'éléments. Mais cela n'interfère pas beaucoup.
De plus, pour des raisons de logique, l'entrée d'un nœud ne peut être connectée qu'à une sortie d'un autre nœud. Mais la sortie du nœud est avec plusieurs entrées d'autres nœuds. Les entrées sont toujours à gauche des nœuds. Les sorties sont toujours à droite.
Quelles capacités avons-nous pour implémenter des algorithmes?
En opportunités - assez vaste. La palette contient des nœuds représentant tout le matériel du contrôleur ShIoTiny : entrées, relais, ADC, DHT11 / 22.
Il existe des nœuds logiques et arithmétiques pour le traitement des données.
Afin que nous puissions travailler avec l'appareil via Internet, il existe des nœuds pour l'abonnement et la publication des paramètres au courtier MQTT.
Si nous voulons que plusieurs contrôleurs ShIoTiny échangent des informations entre eux - vous pouvez utiliser les nœuds pour transmettre et recevoir des paramètres à l'aide du protocole de multidiffusion UDP.
Pour ce rhum, il y a des nœuds de temporisation; nœuds de contrôle de gestion des événements.
Je vais donner quelques exemples. Par exemple, souhaitez-vous que les données de température et d'humidité soient publiées toutes les 30 minutes sur un serveur MQTT? Rien de plus simple. Dessine comme ça.

Eh bien le bouton meme "Upload". C’est tout!
Si vous avez correctement configuré la connexion avec le courtier MQTT dans l'onglet Réseau, c'est tout!
Toutes les demi-heures, la température sera publiée sur le courtier sous le sujet / T, et l'humidité - sous le sujet / H. Ou, si vous demandez les noms de vos sujets, puis sous eux.
Question: Pourquoi 18 000 30 minutes? Parce que tous les temps sont mesurés en dixièmes de seconde.
Maintenant, vous voulez ajouter à ce circuit la possibilité d'activer le relais Relay1 via Internet, et même pendant un certain temps? Pas de problème. Faites comme ça.

Environ cinq, cliquez sur le bouton "Télécharger". C’est tout! Désormais, en plus du fait que toutes les demi-heures, la température et l'humidité seront publiées sur le courtier MQTT, il sera possible d'activer le relais Relay1. Oui, non seulement allumez-le, mais pendant exactement 10 minutes. Vous pouvez activer le relais en publiant le sujet / r1cmd, défini sur 1. Et l'état réel du relais sera publié dans le sujet / r1status.
Est -ce que je veux non seulement allumer, mais aussi désactiver le relais à l'avance? Oui, comme tu dis. La figure ci-dessous montre comment le faire!

Le principe est-il clair? Vous dessinez simplement l'algorithme avec la souris! Et écrivez quelques paramètres: heure, nom du sujet et tout. C'est beaucoup plus clair que d'écrire un tas de code.
Soit dit en passant , mettre en évidence des liens de différentes couleurs n'est pas un «photoshop» - c'est l'une des fonctions de l'éditeur. Vous pouvez coloriser les liens à votre guise, afin de ne pas les confondre.
Mais oh et ce n'est pas tout! Afin de déboguer l'algorithme, il existe un bouton «Monitor start». Aussi étrange que cela puisse paraître, il active le mode «moniteur». Dans ce mode, l'état de toutes les sorties de tous les nœuds est lu périodiquement à partir du contrôleur ShIoTiny et affiché sur le circuit. À peu près comme dans la figure ci-dessous.

Autrement dit, nous pouvons voir en «presque temps réel» ce que nous avons à l'entrée et à la sortie de chaque nœud. Cela aide beaucoup lorsque quelque chose n'est pas clair.
Il y a encore beaucoup de «puces et fonctionnalités» que je voudrais décrire, et ma conscience ne vous permettra pas d'y consacrer votre temps dans un seul article. L'idée principale réalisée est déjà claire: un minimum de paramètres configurables - un maximum de visibilité.
Voler dans la pommade
Bien sûr, je veux qu'il n'y ait pas de mouche dans la pommade, mais le monde n'est pas parfait. Mon éditeur et mon contrôleur ne sont pas parfaits. J'ai trouvé deux fonctionnalités principales que je n'ai pas encore pu éliminer.
Premièrement, des problèmes surviennent parfois lors du mouvement de groupe d'éléments. Mais cela n'interfère pas beaucoup avec le travail. Plus probablement une fonctionnalité qu'un bug.
, -, «Upload», . , .
Conclusion
, , , . , .
, -, . .
, « ».
— : shiotiny@yandex.ru
, , , .
, .
,
ShIoTiny
ESP8266
WiFi
MQTT
UDP Multicast
().
https://github.com/shiotiny/ShIoTinyBin
: https://github.com/shiotiny/ShIoTinyBin/blob/master/bin/esp-07-shiotiny.bin
: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/esp-07-shiotiny.png
: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-01_obzor.pdf
" " .