Actuellement, les systèmes de commande domotique intelligents sont de plus en plus populaires. Une interface centralisée qui contrôle les appareils dans toute la maison vous fait gagner du temps et vous permet de contrôler plus efficacement votre maison. La réalisation de leur vision de tels systèmes est réalisée par d'éminentes marques: Apple, Amazon et Google, qui les intègrent dans leur infrastructure, ainsi que des artisans qui assemblent ces systèmes sur la base de la plate-forme Arduino.
Notre objectif était le suivant: créer un système qui sera disponible sur un grand nombre d'appareils et qui ne sera lié à aucun endroit. Une excellente option pour implémenter le contrôle s'est avérée être un bot pour le messager Telegram. Telegram a des applications sur toutes les principales plates-formes, ainsi qu'une version Web. Vous pouvez y accéder de n'importe où, il vous suffit d'avoir un compte.
Parmi les modules, nous avons sélectionné les éléments suivants:
• Bande LED contrôlée RGB
• Point de vente géré
• capteur de température
• Capteur de lumière (il est utilisé pour allumer automatiquement la lumière)
De quoi avons-nous besoin
1. Raspberry Pi 3
Un ordinateur petit mais distant qui n'a pas besoin d'être présenté, sa puissance nous suffira pour faire ces tâches. La troisième version est bonne avec un module Wi-Fi intégré, nous n'avons donc pas à penser à un adaptateur tiers.
2. Modules ESP8266
Nous en aurons besoin de 4. Nous avons utilisé l'ESP-12F, mais en général il n'y a pas de différence: l'ESP-1 suffira amplement. De plus, les cartes NodeMCU prêtes à l'emploi peuvent vous faire gagner du temps et des efforts.
3. Bande LED
Nous avons pris une bande RVB gérée sur les contrôleurs WS2812b, bien que, soit dit en passant, toute bande fonctionnant sur 5 V et prise en charge par la plate-forme Arduino convient ici.
4. Capteurs de température et de lumière
Nous avons utilisé le module BH1750 pour déterminer l'éclairage de la pièce et le DS18B20 pour la température. Les principaux critères étaient la disponibilité, la prise en charge par la plate-forme Arduino et la capacité de travailler avec la logique 3.3V ESP8266.
5. Relais
Le sous-module MOD-1CH pour Arduino peut passer jusqu'à 10A de courant et est contrôlé par 5V, nous n'avons pas trouvé d'analogues pour 3,3V, nous avons donc utilisé un transistor en mode clé pour le contrôle.
6. Bot télégramme
Le contrôle direct de l'ensemble du système sera effectué à l'aide du bot Telegram, lancé sur Raspberry: cela permettra au système d'être facilement accessible sur n'importe quelle plate-forme de n'importe où dans le monde. La création d'un bot pour Telegram est assez simple, grâce à une plate-forme développée et à la prise en charge d'un grand nombre de langues.
Ainsi, l'ensemble de notre système ressemblera à ceci:

Implémentation
Tout d'abord, nous testons les modules.

Les circuits imprimés prêts à l'emploi adaptent la distance entre les broches, ce qui facilite grandement le soudage, et contiennent également les résistances nécessaires reliant les broches CH_PD et GPIO2 à Vcc.
Malheureusement, les modules ESP8266 sont alimentés et fonctionnent à 3,3 V, et non à 5, comme l'Arduino. Vous pouvez convertir la tension à l'aide d'un module convertisseur prêt à l'emploi, mais vous pouvez également souder le circuit basé sur le stabilisateur linéaire AMS1117, comme nous l'avons fait.

La prochaine étape est la programmation.
Heureusement, la plate-forme ESP8266 est prise en charge par l'IDE Arduino, ce qui nous ouvre de nombreuses possibilités. Pour télécharger directement le firmware sur le module, nous utiliserons l'Arduino Nano, cependant, la même chose peut être effectuée via le convertisseur USB-UART habituel. N'oubliez pas la différence de tension entre Arduino et ESP.
Le schéma est le suivant:

Le bouton est nécessaire pour fermer la broche GPIO1 à GND lors de l'alimentation du module et, par conséquent, le transférer en mode de programmation.
Ensuite, nous configurons l'IDE Arduino pour qu'il comprenne l'ESP ( instructions détaillées avec tous les liens ) et essayons d'enregistrer un croquis de test pour le clignotement de la LED.

Après un clignotement réussi, nous avons commencé à souder tous les modules. Avec un capteur de température et de lumière, tout est assez standard.
Température:


Éclairage:


Mais la bande et la prise intelligente ont causé quelques difficultés.
Une simple connexion de l'entrée de contrôle de la bande à l'ESP a échoué. Ce n'est pas surprenant, car WS2812b nécessite au moins 70% de l'entrée VCC (5x0,7 = 3,5) pour l'entrée de commande, et une carte 3,3 V n'est clairement pas suffisante. Cependant, nous avons trouvé béquille Une façon intéressante de les démarrer sans utiliser de convertisseur boost. Si la diode nécessite un minimum de 0,7xVcc pour réagir au signal et que nous ne pouvons pas augmenter le niveau de ce signal, alors Vcc doit être réduit! Oui, les LED ne s'allumeront pas si brillamment, cependant, nous n'avons pas besoin d'alimenter la bande entière de cette façon; une diode suffit. En transmettant le signal plus loin le long de la chaîne, la LED utilise déjà le niveau Vcc pour former le signal, ce qui est suffisant pour une LED «normale». Ainsi, en connectant la première diode de la bande à l'alimentation via la diode, qui "consomme" environ 0,6 V, nous obtenons une bande parfaitement fonctionnelle directement contrôlée à partir de notre module ESP8266. Et nous avons laissé la première LED légèrement plus faible pour les besoins de débogage: afficher l'état de la connexion réseau.
Voici ce qui s'est passé:


Nous voulions placer complètement notre prise intelligente dans le boîtier de l'ancienne prise avec une minuterie. Il fallait qu'ils y entrent: l'ESP-12F lui-même, une alimentation électrique et un relais contrôlant la prise. Cependant, ayant placé le relais et l'alimentation électrique là-bas, nous ne pouvions toujours pas y accueillir le module ESP. Par conséquent, j'ai dû attacher une petite boîte ci-dessous.

Le résultat n'était pas aussi élégant que nous le voulions à l'origine, mais c'était un appareil solide qui devait simplement être branché sur une prise de courant.


L'étape suivante consistait à configurer Raspberry. Le plan était le suivant: nos modules se connectent au point d'accès Wi-Fi, qui est Raspberry, et, plus précisément, à son module Wi-Fi intégré. Raspberry exécute Telegram-bot, qui se trouve avec tous les modules sur le réseau local et peut facilement échanger des requêtes http avec eux. Tout est connecté à Internet via Ethernet.
Pour implémenter ce plan, nous avons utilisé deux packages:
- hostapd - vous permet d'utiliser le module wi-fi intégré comme point d'accès
- dnsmasq - combine les serveurs DHCP et DNS.
Nous avons essayé d'obtenir une relative indépendance du code et des périphériques, par conséquent, toutes les requêtes ont été exécutées non pas vers des adresses IP, mais vers des noms de la zone .sh inventée (light.sh, socket.sh, etc.). Pour ce faire, nous avons configuré des adresses IP statiques pour chaque module et ajouté des enregistrements correspondant aux modules à ces adresses DNS. Heureusement, dnsmasq est très facile à configurer ( instructions détaillées pour configurer ce système ).
Et enfin, le bot lui-même.
Nous avons écrit un bot en Python en utilisant la bibliothèque python-telegram-bot. Nous avons développé une interface à boutons, qui simplifie la gestion, transformant l'appareil en une sorte de télécommande:


Le code source du bot peut être trouvé ici .
Et pour que personne ne puisse l'utiliser, nous avons défini la protection par mot de passe.
Conclusion
Bien sûr, nous n'avons créé aucun système révolutionnaire; il existe un grand nombre d'implémentations plus holistiques et réfléchies. Les modules de température et d'éclairage pourraient être rendus autonomes, car l'ESP8266 dispose d'un mode veille spécial dans lequel il consomme très peu d'énergie. On pourrait ajouter une extensibilité utilisateur facile, qui ne nécessite pas de changer le code source et de reconfigurer les connexions réseau, et bien plus encore. Cependant, l'objectif de tout ce projet n'était pas du tout cela. Tout d'abord, nous voulions créer un système simple qui pourrait bien être créé par n'importe qui dans notre maison et ne nécessiterait pas de préparation et de coûts sérieux. Et le plus important: nous voulions apprendre beaucoup de choses pendant que nous faisions ce projet. Et si le caractère pratique et la fonctionnalité de notre solution peuvent être développés pendant longtemps, alors les connaissances que nous avons acquises dans le processus de planification et de mise en œuvre de ce système en valaient vraiment la peine.