Table des matières:

Drapeau de boîte aux lettres alimentée par MQTT et Wifi : 7 étapes (avec photos)
Drapeau de boîte aux lettres alimentée par MQTT et Wifi : 7 étapes (avec photos)

Vidéo: Drapeau de boîte aux lettres alimentée par MQTT et Wifi : 7 étapes (avec photos)

Vidéo: Drapeau de boîte aux lettres alimentée par MQTT et Wifi : 7 étapes (avec photos)
Vidéo: SCP-1269 - Boîte Aux Lettres Harceleuse 2024, Juillet
Anonim
Drapeau de boîte aux lettres alimentée par MQTT et Wifi
Drapeau de boîte aux lettres alimentée par MQTT et Wifi

Remarque: mise à jour avec un nouveau firmware, un schéma et des conseils pour un programmeur

Il y a quelques années, je me suis lancé dans mon propre projet de domotique. Il a commencé par construire un émetteur 433 MHz contrôlé par un serveur avec un Arduino pour commuter de nombreux commutateurs distants basés sur PT2262 bon marché. Plus tard, j'ai ajouté un récepteur basé sur Arduino pour ma station météo, branché le contact de contrôle de mon chargeur EV, etc. Les choses sont devenues de plus en plus imbriquées (et compliquées !). Ainsi, il y a quelques mois, j'ai décidé de tout standardiser basé sur MQTT pour la messagerie, Node-RED pour l'automatisation (tous deux fonctionnant sur un seul Raspberry Pi B+) et MariaDb pour la journalisation (fonctionnant sur mon Synology NAS). Plus tard, j'ai également déplacé le courtier MQTT (Mosquitto) et Node-RED sur le NAS.

Cette instructable décrit un projet idiot pour le plaisir accrochant ma boîte aux lettres montée dans la rue dans cette infrastructure domestique. L'idée est que si quelqu'un ouvre la boîte aux lettres montée sur clôture à environ 10 mètres de la porte d'entrée, cela me signale sur mon téléphone et éventuellement sur d'autres appareils.

Étape 1: Aperçu, conditions préalables et pièces

Contour

À un niveau élevé, la boîte aux lettres doit, lorsqu'elle est ouverte, envoyer un message MQTT unique au courtier, afin que les abonnés à ce sujet soient informés. Node-RED s'abonne également et fait de l'automatisation, dans ce cas en envoyant un e-mail et/ou un message push sur mon téléphone.

La boîte aux lettres doit fonctionner sur piles et fonctionner pendant au moins un an, et doit le faire en utilisant mon réseau WiFi. Comme réveiller un micro-contrôleur et se connecter à un réseau WiFi peut prendre plusieurs secondes, je n'ai pas pu utiliser l'interrupteur d'activation pour couper l'alimentation. Au lieu de cela, le processeur devrait être autorisé à terminer ses affaires après la fermeture du couvercle de la boîte aux lettres.

Prérequis

Je suppose que vous avez des compétences modestes en soudure, que vous avez un peu travaillé avec l'IDE Arduino et que vous avez installé les cartes ESP8266 à l'aide du gestionnaire de cartes. Vous devez également disposer d'un adaptateur série USB de 3,3 volts pour programmer le micro-contrôleur.

Je suppose également que vous avez un courtier MQTT et un serveur Node-RED en cours d'exécution. Sinon, il existe de nombreuses instructions sur Internet, mais je vous conseillerais de prendre la route paresseuse et d'utiliser l'excellent script d'installation de Peter Scargill si vous souhaitez l'exécuter sur n'importe quel Pi ou Ubuntu, ou d'utiliser l'image d'Andreas Spiess pour le Pi Zero W (liens dans la description de cette vidéo), ce qui vous fera économiser quelques heures à regarder les scripts d'installation en cours d'exécution. Alternativement, vous pouvez faire en sorte que le micrologiciel envoie un e-mail directement, mais vous perdrez beaucoup de flexibilité en le faisant.

les pièces

  • 1 boîtier fermé, 3 piles AA
  • 2 piles AA
  • 1 module ESP8266. Pour ce projet j'ai utilisé un ESP-01
  • 1 micro-interrupteur
  • 1 résistance 47K
  • 1 résistance 4M7
  • 1 condensateur 2.2uF
  • 1 tube fin en plastique. j'ai utilisé un stylo
  • 1 bâton d'allumette ou de sucette épais et long. Il devrait facilement s'adapter et se déplacer dans le tube en plastique

Étape 2: Matériel: le boîtier, le commutateur et le câblage

Matériel: la Box, le Switch et le Câblage
Matériel: la Box, le Switch et le Câblage
Matériel: la Box, le Switch et le Câblage
Matériel: la Box, le Switch et le Câblage
Matériel: la Box, le Switch et le Câblage
Matériel: la Box, le Switch et le Câblage

J'ai commencé avec une vieille boîte à piles d'une décoration de Noël défunte. Il a été conçu pour trois piles AA. Comme l'ESP8266 fonctionnera bien sur 3 volts, je pourrais utiliser deux batteries et utiliser la troisième position pour le micro-contrôleur. Remarquez comment la boîte avait un petit compartiment supplémentaire que je pouvais utiliser pour le commutateur d'activation. J'ai utilisé un type d'interrupteur très courant montré sur les images, mais j'ai retiré le ressort qui le verrouille en position marche ou arrêt. J'ai soudé deux fils minces aux contacts NC et je les ai collés dans la boîte avec une petite goutte de super colle.

Ensuite, j'ai percé un trou dans le couvercle supérieur correspondant à un tube en plastique tiré d'un stylo à bille. Le trou s'aligne exactement avec l'interrupteur et guide un piston fabriqué à partir d'une allumette épaisse.

Enfin, j'ai soudé deux autres fils aux contacts de la batterie et guidé les quatre fils vers la position de la troisième batterie, où le micro-contrôleur allait être.

Étape 3: Matériel: l'ESP-01

Matériel: l'ESP-01
Matériel: l'ESP-01
Matériel: l'ESP-01
Matériel: l'ESP-01
Matériel: l'ESP-01
Matériel: l'ESP-01

Compte tenu de l'exigence WiFi, l'ensemble du projet crie ESP8266. Ce petit contrôleur WiFi est devenu le cheval de bataille préféré de la communauté des bricoleurs en tant que module pouvant être acheté sous 2,50 euros et intégrant une pile WiFi et TCP/IP complète, avec une capacité plus que suffisante pour exécuter vos propres programmes. L'IDE Arduino (ou Atom avec le plugin PlatformIO) prend entièrement en charge l'ESP8266.

Je prenais généralement un ESP-12F, mais j'avais une petite carte ESP-01 qui était parfaite pour le travail et qui s'insère bien dans le boîtier de la batterie. Le seul problème est qu'il est assez compliqué de flasher le firmware dans l'ESP-01. Plus à ce sujet dans la prochaine étape. Il y a une modification à faire: vous devez retirer la LED d'alimentation rouge de la carte, car elle consomme en permanence 3mA. Une fois la LED retirée, le module n'utilise que quelques dizaines d'uA en mode veille profonde, ce qui lui permettra de durer plus d'un an avec deux piles AA de qualité.

Il s'est avéré que je pouvais utiliser deux bandes d'en-têtes femelles à 4 broches et souder les quelques composants supplémentaires sous forme libre afin que je puisse retirer l'ESP-01 pour mettre à jour le firmware, alors qu'il tiendrait toujours dans le troisième compartiment de la batterie.

Il est très important de câbler correctement l'ESP. À l'aide de l'aide-mémoire ci-dessus, câblez-le comme suit.

  1. Batterie plus à Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) et une résistance de 47K.
  2. Moins de batterie à GND (A1) et un fil de l'interrupteur.
  3. L'autre fil du switch vers un condensateur 100nF et une résistance 4M7.
  4. Les extrémités ouvertes des deux résistances et du condensateur à RST (C2).
  5. TXD (A2) peut rester déconnecté.

Edit: j'ai dû remplacer l'ESP-01 car j'ai fait une erreur stupide et je l'ai détruit. Il s'est avéré qu'à ma grande surprise, le nouvel ESP-01 ne s'est pas réinitialisé avec le condensateur 100nF d'origine. Il a probablement un design légèrement différent. Je l'ai remplacé par un 2.2 uF et maintenant cela fonctionne à nouveau

Une fois terminé, tout peut être monté dans la boîte, mais attendez, nous devons d'abord programmer le module.

Étape 4: Programmation de l'ESP-01

Programmation de l'ESP-01
Programmation de l'ESP-01
Programmation de l'ESP-01
Programmation de l'ESP-01
Programmation de l'ESP-01
Programmation de l'ESP-01

Pour flasher le firmware sur votre ESP-01, vous pouvez soit construire un petit rig, soit acheter un programmateur (presque) complet pour environ 1 euro.

Matériel de programmation

Construisez une petite plate-forme avec à nouveau deux en-têtes femelles pour l'ESP-01. De plus, vous avez besoin d'un module série USB, capable de fournir 3,3 volts. Notez que la puce ESP8266 n'est pas durcie à 5 volts, donc une erreur ici pourrait tuer votre module. Quoi qu'il en soit, toujours en utilisant l'aide-mémoire, câblez votre plate-forme comme suit:

  1. 3.3V du module USBSerial vers Vcc, CH_PD, RST et GPIO2.
  2. GND du module USBSerial à GND et GPIO0.
  3. TXD du module USBSerial vers RXD.
  4. RDX du module USBSerial vers TXD.

Programmeur de pré-construction

Aussi amusant que ce soit de créer vos propres trucs, l'approche la plus paresseuse consiste à obtenir une interface ESP-01 vers série à partir de votre site d'enchères préféré, voir l'image ci-dessus. C'est beaucoup plus facile, plus compact et plus fiable qu'une plate-forme. Cependant, certains d'entre eux ne sont pas des programmeurs, juste des interfaces série. Vous devez souder un pont de fil entre GND (broche A1) et GPIO0 (broche C1) à l'arrière de l'interface, voir la deuxième image. Notez que l'ESP-01 doit être branché avec l'antenne face à la prise USB, et non l'inverse !

A noter: ils existent aussi avec un interrupteur, voir troisième photo, très joli.

Charger le micrologiciel

En supposant un Arduino IDE de 1.8.3 ou version ultérieure, sélectionnez Outils > Carte et sélectionnez la carte que vous possédez. Pour un ESP-01 comme celui que j'ai utilisé, choisissez "Module générique ESP8266" et définissez les options suivantes (cela devrait être toutes les valeurs par défaut):

  1. Mode Flash: DIO
  2. Fréquence du flash: 40 MHz
  3. Fréquence du processeur: 80 MHz
  4. Taille du flash: 512 Ko (64 Ko SPIFFS) Remarque: si vous utilisez une carte ESP-01 noire, choisissez 1 Mo (64 Ko SPIFFS)
  5. Port de débogage: désactivé
  6. Niveau de débogage: aucun
  7. Méthode de réinitialisation: ck
  8. Vitesse de téléchargement 115200
  9. Port: sélectionnez le port qui est connecté à votre interface série USB. Pour mon PC Ubuntu qui était /dev/ttyUSB0

Branchez le rig / programmeur, chargez le Sketch que vous pouvez trouver ici https://gitlab.com/jeroenmeijer/Mailbox.git. Fournissez vos informations d'identification de courtier WiFi et MQTT et votre configuration IP dans config.h et choisissez Upload.

Étape 5: Assembler le tout

Tout assembler
Tout assembler

J'ai percé un trou pour le tube en plastique dans le couvercle intérieur de ma boîte aux lettres, aussi près que possible de la charnière, puis j'ai collé à chaud le boîtier de la batterie sous ce couvercle. Ensuite, j'ai utilisé une allumette épaisse comme piston. J'ai utilisé une cisaille pour couper l'allumette à la longueur afin que l'interrupteur s'ouvre si le couvercle extérieur était fermé. J'ai vérifié la connectivité en ouvrant le couvercle lors de l'exécution de mosquitto_sub pour surveiller les messages MQTT (remplacez mqttbroker, user et password par votre configuration MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u utilisateur -P mot de passe

Environ six secondes après l'ouverture du couvercle extérieur, le message MQTT suivant est publié. Le temps est utilisé pour réveiller le microcontrôleur et établir la connexion WiFi et courtier.

stat/mailbox/trigger {"vcc":3050, "flap":true, "prev":0, "RSSI":29, "version": "005"}

Pendant ce temps, le microcontrôleur a utilisé environ 70 mA. Une fois terminé, il entre en sommeil profond et dans mon cas, il a utilisé moins de 20 uA. "flap" est toujours vrai, "vcc" indique la tension de la batterie en mV et "prev" doit être 0. S'il est 1 ou 2, cela signifie que la boîte aux lettres n'a pas pu envoyer de message plus tôt, soit parce qu'elle n'a pas pu se connecter à le WiFi, ou parce qu'il n'a pas pu se connecter au courtier MQTT. "RSSI" est la force du signal WiFi. Les deux sont très pratiques pour diagnostiquer les problèmes.

C'est une bonne idée de surveiller la tension de la batterie pendant quelques jours pour s'assurer que l'appareil fonctionne comme prévu et ne vide pas sa batterie pour une raison quelconque.

Le firmware est également capable de se mettre à jour par liaison radio (OTA), mais cela dépasse un peu le cadre de cette instructable. Pour ceux que ça intéresse, la configuration OTA est aussi dans config.h.

Étape 6: Utilisation de Node-RED pour agir sur le message MQTT

Utiliser Node-RED pour agir sur le message MQTT
Utiliser Node-RED pour agir sur le message MQTT

Enfin, j'ai créé un flux simple dans Node-RED. Le premier nœud s'abonne au sujet de la boîte aux lettres (stat/postbox/trigger). Lorsqu'un message est reçu, le deuxième nœud formate un e-mail *). Le nœud final l'envoie à mon adresse gmail, en utilisant gmail comme serveur SMTP. Mon téléphone m'avertit alors d'un nouveau courrier.

J'ai ajouté le flux Node-RED à un extrait de code gitlab afin que vous puissiez l'importer dans vos flux Node-RED.

Bien sûr, vous pouvez ajouter des nœuds supplémentaires, par exemple pour enregistrer les événements de la boîte aux lettres sur MariaDb ou SqlLite, ou créer des alarmes supplémentaires lorsque la tension de la batterie passe en dessous de 2,7 volts.

Bonne chasse au courrier !

*) Voir page suivante, j'utilise maintenant PushBullet au lieu de l'e-mail.

Étape 7: réflexions après coup

Il y a toujours ce sentiment que les choses auraient pu être mieux faites.

Changer

J'aurais préféré utiliser un (super) aimant et un contact Reed au lieu de l'approche un peu maladroite du piston. Il y avait deux raisons. La première est qu'il n'y avait aucun moyen de faire fonctionner cela avec le contact se fermant lorsque la boîte était ouverte, et l'avoir toujours fermée signifiait qu'un petit courant circulerait toujours. Rétrospectivement, le moins de 1 uA traversant la résistance 4M7 n'aurait pas été un gros problème en termes de durée de vie de la batterie. L'autre était plus pratique. J'ai fait ce projet samedi et j'ai écrit le logiciel, j'ai tout construit dimanche à partir de ce qui traînait. Je n'avais tout simplement pas de contact Reed dans la boîte à ordures.

Remarque: comme l'a commenté diy_bloke, les contacts Reed ont tendance à devenir collants lorsqu'ils sont magnétisés pendant une longue période, alors peut-être que le piston n'était pas du tout une si mauvaise idée. Nous verrons. *)

Message sur la vidange

La boîte aux lettres envoie également un message lorsqu'elle est vide. Ce n'est pas grave, mais avec de plus en plus de personnes dans la maison recevant l'avertissement, on pourrait se retrouver en boucle en vérifiant la boîte aux lettres en défiant tout son objectif ! Il existe plusieurs moyens de contourner ce problème, par exemple en vérifiant si le couvercle intérieur est levé et, si c'est le cas, n'envoyez pas de message. Ou au lieu d'utiliser l'interrupteur du couvercle, installez un détecteur au fond de la boîte aux lettres. Ou un petit bouton de réinitialisation à appuyer lors de la vidange. Cependant, tout cela compliquerait les choses et détériorerait probablement la fiabilité.

Messagerie

L'envoi d'e-mails est un moyen assez efficace mais grossier d'émettre l'avertissement. Une manière plus élégante serait une application téléphonique, mais je n'ai pas trouvé d'application de tableau de bord Android MQTT pouvant être configurée pour déclencher une alerte du système d'exploitation lorsqu'un certain message est reçu. S'il y en a un autour, s'il vous plaît ajouter aux commentaires. **)

*) Après plus d'un an de fonctionnement, il s'avère que le bâton de sucette que j'ai utilisé, essentiellement du papier laminé dur, a tendance à se raccourcir sous la pression constante du ressort de l'interrupteur. Après quelques dépannages, je l'ai remplacé par un bâton en bois.

**) J'utilise maintenant PushBullet pour les messages push, distincts du tableau de bord MQTT. Une minuscule interface Node-RED à l'API peut être trouvée ici. Assurez-vous de fournir le jeton d'accès dans le nœud "Préparer pour pushbullet" et votre adresse e-mail à des fins de secours dans le nœud "Réessayer".

Conseillé: