Capteurs de maison intelligents DIY avec Arduino, MySensors et OpenHAB

Les capteurs domestiques intelligents coûtent une somme ridicule. Le câblage d'une maison entière est le domaine de ceux qui ont des montants stupides de revenu disponible. Construisons les nôtres avec MySensors.

Les capteurs domestiques intelligents coûtent une somme ridicule.  Le câblage d'une maison entière est le domaine de ceux qui ont des montants stupides de revenu disponible.  Construisons les nôtres avec MySensors.
Publicité

Les capteurs domestiques intelligents coûtent une somme ridicule. À 60 $ - 100 $ juste pour un détecteur de mouvement ou un capteur d'humidité, le câblage d'une maison entière devient le domaine de ceux qui ont des montants stupides de revenu disponible. Construisons les nôtres.

Heureusement, le travail acharné a déjà été fait par les gens bien derrière MySensors.org. Aujourd'hui, je vais vous montrer comment utiliser le framework MySensors pour créer une gamme bon marché de capteurs domestiques intelligents qui peuvent être intégrés dans une installation OpenHAB (voir notre guide d'introduction à OpenHAB sur Raspberry Pi) Démarrer avec OpenHAB Home Automation sur Raspberry OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme domotique mature et open source qui fonctionne sur une variété de matériel et est agnostique de protocole, ce qui signifie qu'elle peut se connecter à presque n'importe quel matériel domotique sur le marché aujourd'hui. Lire la suite . Je suppose que vous avez déjà un serveur MQTT opérationnel et que vous comprenez les bases du format de messagerie MQTT; Sinon, assurez-vous de lire le suivi du guide OpenHAB, qui comprend les instructions pour l'installation d'un serveur MQTT. OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais il n'est pas facile de se mettre en place. En fait, cela peut être carrément frustrant. Lire la suite .

Bien que je traiterai spécifiquement de la transmission des données MySensors à partir d'un réseau d'Arduinos, en utilisant MQTT, vers une installation OpenHAB, je dois souligner que le framework MySensors peut alimenter un certain nombre de contrôleurs domotiques différents. Je l'ai présenté ici comme une solution complète qui fonctionne pour moi, mais s'il vous plaît consulter le site MySensors comme vous pourriez le trouver convient également à votre but similaire, mais en utilisant un matériel légèrement différent ou un protocole de messagerie différent. C'est incroyablement polyvalent.

matériel de mysetors -1

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

Ce que nous faisons

L'idée de base est que plutôt que d'ajouter sur notre réseau local encombré existant en utilisant Wi-Fi peu fiable ou boucliers Ethernet onéreux, nous créons un réseau maillé entièrement distinct juste pour les Arduinos; Ensuite, établissez un pont vers le réseau local en utilisant un seul nœud de passerelle, qui a à la fois une connexion Ethernet et une connexion radio avec les autres Arduinos. Nous faisons 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, parce que ma réception Wi-Fi est si horrible et je ne veux pas l'encombrer de données inutiles. Si vous êtes satisfait du Wi-Fi, regardez avec l'utilitaire ESP8266 compatible Arduino à faible coût Rencontrez le tueur Arduino: ESP8266 Rencontrez le tueur Arduino: ESP8266 Et si je vous disais qu'il y a une carte de développement compatible Arduino avec Wi intégré -Fi pour moins de 10 $? Eh bien, il y a. Lire la suite avec des cartes Wi-Fi intégrées - MySensors prend également en charge ceux-ci.

Note importante pour les utilisateurs d'El Capitan et les clones Arduino: Apple a réussi à casser les pilotes série utilisés pour communiquer avec un certain nombre de clones Arduino dans la dernière version d'El Capitan grâce à de nouvelles mesures de sécurité. Pour voir si vous êtes affecté, regardez votre carte et la puce la plus proche du port USB. Si cela dit CH340, vous êtes affecté par cela. 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
  • Ethernet Shield (basé sur W5100)
  • Module NRF24L01 - J'ai utilisé les versions + PA + LNA partout, qui ont une portée accrue jusqu'à 1km. Le câblage est le même quel que soit votre choix.

Pour chaque nœud de capteur:

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

Supplémentaire / facultatif:

  • Des condensateurs de 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 sont 1 $ chacun) - requis si vous utilisez un clone Arduino. Vous aurez également besoin d'une alimentation CC 9-12V pour ceux-ci.
  • Boucliers de prototypage, ou brins courts de connexion 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, plus longue portée de ceux-ci: techniquement connu comme NRF24L01 + PA + LNA . Ils viennent avec un circuit d'amplification de signal et une connexion d'antenne, mais je vous suggère d'essayer d'abord la version non-antenne moins chère des modules si vous avez une maison normale avec des murs réguliers, pas le type de mur en pierre Je fais. La portée revendiquée de ces derniers est d'environ un kilomètre, plus que suffisant pour moi mis dans l'abri de jardin.

Cependant, ces choses sont vraiment difficiles à travailler; Si vous allez de l'avant et branchez tout sans lire ces conseils d'abord, vous serez déçu.

  • Le module a besoin d'une puissance d'entrée de 3, 3 V pour la broche VCC - pas 5v . Si vous mettez en 5v, vous le ferez frire.
  • Souder un condensateur 10uF à travers les bornes VCC / GND. La ligne grise solide 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 à un bouclier de prototypage pour maintenir la longueur du câble à un minimum et des connexions solides.
  • Si vous utilisez un clone Arduino, le régulateur de tension ne fournit pas assez pour eux sur la broche 3.3v - vous aurez besoin d'utiliser une carte d'alimentation externe (liée ci-dessus), disponible pour environ 1 $ chacun. Ceux-ci fournissent une 3.3v stable. Si vous utilisez une marque originale Uno d'Arduino, cela ne semble pas être un problème.

Je vous suggère fortement de faire d'abord quelques tests de base juste pour établir que votre radio fonctionne. Câblez deux radios comme indiqué sur la page MySensors. Peu importe que leur schéma montre des 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 du dessous . Mentalement ajuster en conséquence. Ignorer la broche IRQ grise, elle n'est pas utilisée actuellement. En résumé:

  • VCC va à 3.3v sur votre alimentation externe
  • GND va au common ground rail
  • CE à la broche 9
  • CSN / CS à la broche 10
  • MOSI à la broche 11
  • MISO à la broche 12
  • SCK à la broche 13

câblage de la page mysetors

Vous aurez besoin de deux nœuds entièrement câblés pour tester. Téléchargez la bibliothèque RF24 et chargez l'exemple de démarrage le plus simple. Allumez les deux modules, mais laissez-en un connecté par USB et ouvrez la console série. Tapez "T" et envoyez, pour passer en mode transmission, à quel point vous devriez recevoir des messages de débogage indiquant qu'il est en train d'envoyer un ping avec succès un message à l'autre nœud.

Construction de la passerelle client MySQL MQTT

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 MySensors Arduino. Ce tutoriel a été écrit en utilisant la version 1.5, mais devrait aussi être compatible avec les versions ultérieures. Nous utilisons la branche de développement car au moment de l'écriture, la passerelle client MQTT ne fait pas encore partie du package principal.

Bien qu'il y ait MQTTGateway disponible dans la branche master, il agit également comme un serveur, ce que nous ne voulons pas car nous avons déjà un serveur MQTT stable fonctionnant sur le Raspberry Pi. Nous voulons juste transmettre les données de MySensors sur cela. Encore une fois, si ce n'est pas ce que vous voulez - si vous préférez ne pas utiliser MQTT du tout - alors regardez EthernetGateway ou SerialGateway, qui sont également compatibles avec OpenHAB.

Il convient de noter que le paquet de téléchargement ne comprend pas seulement les fichiers MySensors essentiels, il comprend également les bibliothèques compatibles nécessaires pour chaque capteur possible. Pour éviter les conflits, je vous suggère de sauvegarder tout votre dossier de bibliothèques actuel et de le remplacer par celui du paquet de téléchargement.

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

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

Vous devez également activer la ligne #define SOFTSPI dans le fichier libraries / mySensors / MyConfig.h . Pour ce faire, en supprimant le // pour le décommenter, c'est autour de la ligne 309 sur le mien.

Nous devons le faire parce que le module radio et le bouclier de réseau utilisent SPI, et ils sont incompatibles; donc nous passons juste le module radio SPI à d'autres broches et effectuons la communication SPI dans le logiciel à la place (d'où, soft SPI).

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

passerelle de mysetors

Vous devez définir une adresse IP statique pour le contrôleur, l'adresse IP de votre routeur et sous-réseau, ainsi que l'adresse IP de votre serveur MQTT existant. N'hésitez pas à modifier les préfixes de sujet si vous le souhaitez. Upload, et branchez cette chose dans le réseau. Vérifiez brièvement la console série pour toute erreur flagrante, comme l'impossibilité de se connecter au serveur MQTT, sinon mettez-la de côté (mais laissez-la allumée).

adresses IP à changer

Construire les nœuds de capteur

Tout d'abord, commentez cette ligne #define SOFTSPI dans le fichier MyConfig.h en mettant // le début au début. C'est seulement nécessaire 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 va à 3.3v sur votre alimentation externe (ou sur l'Arduino lui-même si c'est un original et non un clone)
  • GND va au common ground rail
  • CE à la broche 9
  • CSN / CS à la broche 10
  • MOSI à la broche 11
  • MISO à la broche 12
  • SCK à la broche 13

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

mysetors matériel -2

Enfin, chargez l'exemple HumiditySensor depuis le menu MySensors et ajoutez la ligne suivante immédiatement après les commentaires.

 #define MY_NODE_ID 2 

Puisque nous utilisons une version spéciale du contrôleur qui ne fait que transférer les choses sur notre propre serveur MQTT, il ne possède pas la fonction de contrôleur standard qui attribuerait automatiquement des ID de nœud à chaque nouveau nœud. 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 noeud.

Activer la sortie de débogage aussi:

 #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 bit crucial à regarder est st =, qui est le statut du message. st = fail signifie que le message n'a pas été envoyé. Il est possible que vous n'ayez pas défini d'ID de noeud unique ou que votre passerelle soit hors ligne. J'ai truqué ces échecs en débranchant simplement la passerelle:

st-fail

Si tout fonctionne, vous devriez commencer à voir des lectures de données arriver sur votre serveur MQTT. La mise en OpenHAB est hors de portée de ce tutoriel, mais a été abordée dans la partie 2 du guide OpenHAB Guide d'initiation OpenHAB Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB, le logiciel domotique open source dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais il n'est pas facile de se mettre en place. En fait, cela peut être carrément frustrant. Lisez la suite pour vous y référer.

Combinaison du code du capteur

Bien que l'obtention d'un seul nœud de capteur soit relativement simple, cela devient un peu plus compliqué lorsque vous voulez ajouter plusieurs capteurs à chaque nœud. Essentiellement, vous allez fusionner les extraits de code à partir de deux exemples différents. La façon la plus simple de vous montrer ceci est par exemple avec une vidéo! Ici, je combine notre capteur d'humidité de base avec un relais.

Vous trouverez ici le code complété pour le capteur d'humidité et le 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, vérifiez l'API série - mais il suffit de dire que le canal suivant contrôle le premier relais du code que j'ai donné (avec un corps de message de 0 ou 1):

 mysetors-in / 9/1/1/0/2 

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

Je vais y mettre fin aujourd'hui, mais si vous avez des problèmes, vous pouvez demander dans les commentaires ou 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?

In this article