Capteurs DIY Smart Home avec Arduino, MySensors et OpenHAB

Capteurs DIY Smart Home avec Arduino, MySensors et OpenHAB / Maison intelligente

Les capteurs de maison intelligente coûtent une somme d'argent ridicule. À 60 $ - 100 $ rien que pour un détecteur de mouvement ou un capteur d'humidité, le câblage d'une maison entière devient le domaine de ceux dont le revenu disponible est dérisoire. Construisons notre propre.

Heureusement, le travail acharné a déjà été accompli par ceux qui se cachent derrière MySensors.org. Aujourd'hui, je vais vous montrer comment utiliser le framework MySensors pour créer une gamme peu coûteuse de capteurs intelligents pour la maison pouvant alimenter une installation OpenHAB (voir notre guide Mise en route d'OpenHAB sur Raspberry Pi). Mise en route d'OpenHAB Home Automation sur Raspberry Initiation à OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme de domotique mature et à source ouverte, fonctionnant sur divers matériels et ne comportant aucun protocole, ce qui signifie qu’elle peut se connecter à presque tous les équipements de domotique actuellement disponibles sur le marché. Lire la suite . Je suppose que vous avez déjà un serveur MQTT en fonctionnement et que vous comprenez les bases du format de messagerie MQTT; sinon, assurez-vous de lire la suite du guide OpenHAB, qui comprend des instructions pour installer un serveur MQTT. Guide du débutant OpenHAB, partie 2: ZWave, MQTT, Règles et affichage du guide OpenHAB du débutant, partie 2: ZWave, MQTT, Règles et affichage OpenHAB , le logiciel de domotique open source, dépasse de loin les capacités des autres systèmes de domotique du marché, mais sa configuration n’est pas facile. En fait, cela peut être franchement frustrant. Lire la suite .

Bien que je traite spécifiquement de la transmission des données MySensors d’un réseau d’Arduinos utilisant MQTT à une installation OpenHAB, il convient de souligner que la structure MySensors peut alimenter un certain nombre de contrôleurs domotiques différents. Je présente cette solution comme une solution complète, mais consultez le site MySensors, car elle pourrait également convenir à votre objectif, mais en utilisant un matériel légèrement différent ou un protocole de messagerie différent. C'est incroyablement polyvalent.

Le coût matériel de ma configuration est inférieur à 10 USD par nœud (un peu plus pour la passerelle), mais des capteurs et des actionneurs supplémentaires peuvent être ajoutés pour un prix très modique (le capteur d'humidité et de température DHT11, par exemple, coûte environ 1 USD par unité; un relais haute tension est autour de 3 $).

Ce que nous faisons

L’idée de base est que, plutôt que d’ajouter à notre réseau local encombré existant en utilisant un réseau Wi-Fi peu fiable ou des boucliers Ethernet onéreux, nous créons un réseau entièrement compatible avec le maillage, réservé aux Arduinos; reliez ensuite cela au réseau local en utilisant un seul nœud de passerelle, qui dispose d’une connexion Ethernet et d’une connexion radio avec les autres Arduinos. Nous créons donc quelques nœuds de capteurs, qui collectent des données; et un nœud de passerelle, qui relaie ces données sur le serveur OpenHAB.

Encore une fois, c’est ce qui fonctionne pour moi, car ma réception Wi-Fi est tellement horrible et je ne veux pas l’encombrer de données inutiles. Si vous êtes satisfait du Wi-Fi, utilisez l’ESP8266 compatible Arduino à faible coût. Découvrez le tueur Arduino: ESP8266 Découvrez le tueur Arduino: ESP8266 Et si je vous disais qu’il existe une carte de développement compatible Arduino avec -Fi pour moins de 10 $? Eh bien, il y a. En savoir plus avec les cartes Wi-Fi intégrées - MySensors les prend également en charge.

Note importante pour les utilisateurs El Capitan et les clones Arduino: Grâce à de nouvelles mesures de sécurité, Apple a réussi à casser les pilotes série utilisés pour communiquer avec un certain nombre de cartes clones Arduino dans la dernière version d'El Capitan. Pour voir si vous êtes affecté, regardez votre carte et la puce la plus proche du port USB. S'il est écrit CH340, cela vous concerne. Suivez les instructions ici pour désactiver la signature du pilote kext, installez à nouveau les pilotes série CH340.

Composants nécessaires

Pour la passerelle, vous aurez besoin de:

  • Arduino Uno
  • Bouclier Ethernet (basé sur W5100)
  • Module NRF24L01 - J'ai utilisé le +PA + LNA versions partout, qui ont une portée accrue jusqu’à 1 km. Le câblage est le même, quel que soit votre choix.

Pour chaque nœud de capteur:

  • Arduino Uno
  • Module NRF24L01
  • Capteurs (pour commencer, je suggérerais un module DHT11 ou DHT22 de température et d'humidité)

Supplémentaire / facultatif:

  • Condensateurs 10uF, un pour chaque module RF que vous avez (le lien est pour un paquet de 50!)
  • Alimentation avec sortie 5v et 3,3v (YwRobot MB102 fonctionne bien et ils coûtent 1 $ chacun) - requis si vous utilisez un clone Arduino. Vous aurez également besoin d’une alimentation 9-12v DC pour ces.
  • Boucliers de prototypage ou fils de connexion courts mâle-femelle.

Travailler avec les modules NRF24L01

Commençons par les modules NRF24L01, car ils constituent la partie la plus complexe du projet. Je suis allé pour la version la plus chère et à plus longue portée de ceux-ci: techniquement connu comme NRF24L01 + PA + LNA. Ils sont livrés avec un circuit d’amplification du signal et une connexion d’antenne intégrés, bien que je vous suggère d’essayer d’abord la version moins chère des modules sans antenne si vous avez une maison normale avec des murs normaux, et non le type de mur en pierre solide Je fais. La distance revendiquée de ceux-ci est d'environ un kilomètre, plus que suffisant pour moi mis dans le hangar de jardin.

Cependant, ces choses sont vraiment difficile de travailler avec; si vous continuez et branchez tout sans lire ces conseils en premier, vous serez déçu.

  • Le module nécessite une alimentation de 3,3 V à la broche VCC - pas 5v. Si vous mettez 5v, vous le ferez frire.
  • Souder un condensateur 10uF sur les bornes VCC / GND. La ligne grise continue sur le condensateur indique le côté négatif / GND.
  • Utilisez des câbles de saut courts et de haute qualité; ou mieux encore, soudez-les directement sur un blindage de prototypage pour réduire au minimum la longueur des câbles et obtenir des connexions solides.
  • Si vous utilisez un clone Arduino, le régulateur de tension n'en fournit pas assez sur la broche 3.3v - vous devrez utiliser une carte d'alimentation externe (liée ci-dessus), disponible pour environ 1 $ chacun. Ceux-ci fournissent un 3.3v stable. Si vous utilisez un original Arduino marque Uno, cela ne semble pas être un problème.

Je vous suggère fortement de faire quelques tests de base avant d’établir que votre radio fonctionne. Câblez deux radios comme indiqué sur la page MySensors. Peu importe que leur diagramme montre les cartes Arduino Micro - les mêmes numéros de broche sont utilisés. Notez que le diagramme montre le NRF24L01 à partir du Haut; vous allez réellement brancher des choses de dessous. Ajustez mentalement en conséquence. Ignorez le pin gris IRQ, il n'est pas utilisé actuellement. En résumé:

  • VCC passe à 3.3v sur votre alimentation externe
  • GND se dirige vers le rail de terre commun
  • CE à la broche 9
  • CSN / CS sur la broche 10
  • MOSI à la broche 11
  • MISO à la broche 12
  • SCK à la broche 13

Vous aurez besoin de deux nœuds entièrement câblés pour tester. Téléchargez la bibliothèque RF24 et chargez le plus simple Commencer Exemple. Mettez les deux modules sous tension, mais laissez-en un connecté via USB et ouvrez la console série. Type “T” et envoi, pour passer en mode de transmission, à quel moment vous devriez recevoir des messages de débogage disant que le ping est envoyé avec succès à un autre noeud.

Construction de la passerelle client MQTT MySensors

Ok, maintenant que nous savons que les radios RF24 sont câblées et fonctionnent correctement, allez-y et téléchargez la branche de développement du paquet Arduino de MySensors. Ce tutoriel a été écrit avec la version 1.5, mais devrait également convenir avec les versions ultérieures. Nous utilisons la branche de développement car au moment de la rédaction de cet article, le MQTT client la passerelle ne fait pas encore partie du paquet principal.

Bien que MQTTGateway soit disponible dans la branche master, il agit également en tant que serveur, ce que nous ne souhaitons pas, car nous avons déjà un serveur MQTT stable s'exécutant sur le Raspberry Pi. Nous voulons simplement transmettre les données de MySensors à ce sujet. Encore une fois, si ce n'est pas ce que vous voulez, si vous préférez ne pas utiliser MQTT du tout, regardez alors EthernetGateway ou SerialGateway, qui sont également compatibles avec OpenHAB..

Il convient de noter que le package de téléchargement n'inclut pas uniquement les fichiers essentiels de MySensors, il inclut également les bibliothèques compatibles nécessaires pour tous les capteurs possibles. Pour éviter les conflits, je vous suggère simplement de sauvegarder votre dossier entier de bibliothèques en cours et de le remplacer par ceux du package de téléchargement..

Le câblage de la passerelle est un peu différent. Une fois que vous avez votre bouclier Ethernet, utilisez les broches suivantes pour le module radio:

  • CE à la broche 5
  • CSN à la broche 6
  • SCK à épingler A0
  • MOSI à la broche A1
  • MISO à la broche A2

Vous devez également activer le #define SOFTSPI ligne dans le bibliothèques / mySensors / MyConfig.h fichier. Pour ce faire, en supprimant le // pour le commenter, il est proche de la ligne 309 sur le mien.

Nous devons faire cela parce que le module radio et le bouclier réseau utilisent SPI et sont incompatibles. donc nous passons simplement du module radio SPI sur d’autres broches et effectuons une communication SPI à la place du logiciel (d’où, doux SPI).

Chargez le MySensors / GatewayW5100MQTTClient esquisser. Si vous ne voyez pas cela dans le menu MySensors, vous n'avez pas le branche de développement installée. Utilisez le lien fourni ci-dessus pour télécharger à nouveau toute la bibliothèque..

Vous devrez définir une adresse IP statique pour le contrôleur, l'adresse IP de votre routeur réseau et de votre sous-réseau, ainsi que l'adresse IP de votre serveur MQTT existant. N'hésitez pas à modifier les préfixes de sujet aussi si vous le souhaitez. Téléchargez et branchez cette chose sur le réseau. Vérifiez brièvement la console série pour détecter des erreurs flagrantes, telles que l'impossibilité de vous connecter à votre serveur MQTT. Sinon, mettez-la de côté (mais laissez-la activée)..

Construction des nœuds de capteur

Tout d'abord, commentez que #define SOFTSPI ligne dans le MyConfig.h fichier à nouveau en mettant le // retour au début. Ce n'est nécessaire que pour la passerelle - nous utilisons le câblage standard NRF24L01 pour les nœuds de capteurs, qui utilisent le SPI matériel. Si vous avez besoin de rappeler:

  • VCC passe à 3.3v sur votre alimentation externe (ou sur l'Arduino lui-même s'il s'agit d'un original et non d'un clone)
  • GND se dirige vers le rail de terre commun
  • CE à la broche 9
  • CSN / CS sur la broche 10
  • MOSI à la broche 11
  • MISO à la broche 12
  • SCK à la broche 13

Ensuite, connectez votre choix de capteur; J'utilise le capteur d'humidité et de température DHT11 pour les tests, mais si vous faites défiler la liste des capteurs et des actionneurs dans la barre latérale de la page MySensors, vous trouverez un grand choix d'autres options: portes, pluviomètre, lumière, mouvement, voire RFID - et charge plus. Vous pouvez voir que j'ai également ajouté un relais au noeud illustré ci-dessous, mais plus à ce sujet plus tard.

Enfin, chargez le Capteur d'humidité exemple dans le menu MySensors et ajoutez la ligne suivante immédiatement après les commentaires.

#define MY_NODE_ID 2

Étant donné que nous utilisons une version spéciale du contrôleur qui transfère simplement les éléments sur notre propre serveur MQTT, il ne dispose pas de la fonction de contrôleur standard qui attribuerait automatiquement des ID de noeud à chaque nouveau noeud. Au lieu de cela, nous allons simplement le définir manuellement à chaque fois. Notez ce numéro quelque part pour vos propres enregistrements et modifiez-le pour chaque nœud..

Activez également la sortie de débogage:

#define MY_DEBUG

Enfin, vérifiez que la broche de données de votre capteur DHT11 est correcte.

#define HUMIDITY_SENSOR_DIGITAL_PIN 7

Ensuite, téléchargez!

Cela vaut la peine d’ouvrir la console série pour jeter un coup d’œil. Le point crucial à regarder est st =, quel est le statut du message. st = échouer signifie que le message n'a pas été envoyé. Il est possible que vous n'ayez pas défini d'ID de nœud unique ou que votre passerelle soit hors ligne. J'ai simulé ces échecs en débranchant simplement la passerelle:

Si tout fonctionne, vous devriez commencer à voir des lectures de données arriver sur votre serveur MQTT. Les inclure dans OpenHAB n'entre pas dans le cadre de ce didacticiel, mais a été couvert dans la partie 2 du guide OpenHAB Guide du débutant OpenHAB - Partie 2: ZWave, MQTT, Règles et affichage du guide OpenHAB - Débutant - Partie 2: ZWave, MQTT, Règles et affichage OpenHAB Le logiciel de domotique open source dépasse de loin les capacités des autres systèmes de domotique du marché, mais sa configuration n’est pas facile. En fait, cela peut être franchement frustrant. Lisez plus pour pouvoir vous y reporter.

Combinaison de code de capteur

Bien qu'il soit relativement simple de mettre en place un seul nœud de capteur, cela devient un peu plus délicat lorsque vous souhaitez ajouter plusieurs capteurs à chaque nœud. Essentiellement, vous allez mélanger les extraits de code provenant de deux exemples différents. Le moyen le plus simple de vous montrer ceci est l'exemple d'une vidéo! Ici, je combine notre capteur d'humidité de base avec un relais.

Vous pouvez trouver ici le code complet du capteur d'humidité et du relais, qui a déjà été modifié avec une boucle non bloquante, comme je l'ai mentionné dans la vidéo. Pour en savoir plus sur la structure de commande MQTT nécessaire pour activer le relais, consultez l'API série, mais il suffit de dire que le canal suivant contrôle le premier relais dans le code que j'ai donné (avec un corps de message de 0 ou 1):

mysensors-in / 9/1/1/0/2

Votre seule limitation est maintenant la quantité de mémoire sur l’Arduino, et je dirai ceci: les capteurs les plus fiables de ma maison intelligente ne sont pas les modules commerciaux Z-Wave qui coûtent 80 $, mais ceux personnalisés de MySensors..

Je vais y mettre fin aujourd'hui, mais si vous avez des problèmes, vous pouvez les demander dans les commentaires ou sur les forums d'utilisateurs très actifs de MySensors.. Serez-vous en train de créer vos propres nœuds de capteurs bon marché? Comment va votre maison intelligente?

Explorer plus sur: Arduino, Smart Sensor.