Équipement sans fil NooLite et maison intelligente (partie 1). Arduino

nooLite

Bonjour chers lecteurs de Geektimes! Cette fois, je veux attirer votre attention sur une série d'articles sur l'intégration de l'équipement sans fil nooLite dans les systèmes domotiques. Ce cycle sera similaire à la série d'articles déjà publiée ( un , deux , trois ) sur l'intégration des modules Laurent dans les systèmes Smart Home, seulement il parlera du système nooLite et après avoir lu ce cycle, vous n'aurez plus de questions sur la gestion des appareils nooLite depuis votre Smart à la maison.

À propos de la série d'articles


Le cycle est divisé en trois parties. Dans la première partie, vous découvrirez les principes de fonctionnement de l'équipement sans fil nooLite et comment le gérer à partir de vos projets Arduino. La deuxième partie décrira en détail l'intégration du module de contrôle MT1132 dans l'Arduino Mega Server et les possibilités de gestion d'une maison intelligente qui s'ouvrent dans cette connexion. Et le troisième article de la série sera consacré à un sujet très intéressant - le concept de création d'appareils «100 en 1» basés sur l'Arduino Mega Server. Un exemple de création d'une station de soudage sans fil sur AMS sera examiné en détail, littéralement à partir de rien - sur la base d'un seul gradateur sans fil nooLite. Il y aura également une quatrième partie à partir de laquelle vous apprendrez à créer un cristal magique.

À propos, la station de soudage, qui sera discutée dans le troisième article, est déjà présente dans le dernier assemblage Arduino Mega Server sous le numéro 0.14. Et les lecteurs les plus curieux ne peuvent pas attendre le troisième article, mais téléchargez immédiatement le kit de distribution et découvrez comment tout cela fonctionne par eux-mêmes.

station de soudure

Et la grande chose est qu'il peut y avoir des centaines de tels appareils dans AMS, et en même temps. Par exemple, une station de soudage, une station météo, une unité de sécurité, un contrôleur de serre, etc. Et tout cela peut fonctionner simultanément ou «démarrer» en chargeant une page Web ou même un site entier dédié à un appareil spécifique.

Mais ne prenons pas de l'avance sur nous-mêmes, laissons le plus intéressant au final, mais pour l'instant nous ferons la préparation théorique nécessaire. Je promets que tout sera énoncé de la manière la plus simple et la plus intelligible. Commençons donc.

Équipement NooLite


L'équipement NooLite est déjà un système bien connu et populaire et il y a beaucoup d'informations à ce sujet sur Internet. Je vais essayer de résumer les principaux points ici.

Le concept est très simple - il existe des unités de puissance pour contrôler la lumière et diverses charges, et des panneaux de commande qui envoient des commandes à ces unités de puissance. Et tout cela fonctionne, naturellement, sans la participation de connexions filaires. En fait, tout. La beauté du système est que tous les composants sont pensés, bien fabriqués et font exactement ce qu'il dit - ils contrôlent de manière fiable l'équipement connecté.

Il existe également des capteurs sans fil, le contrôle des appareils à partir d'un smartphone et bien plus encore, mais il est impossible de tout couvrir dans un seul article, ici, nous nous concentrerons uniquement sur l'intégration de nooLite avec la populaire plateforme de bricolage - Arduino.

De l'ensemble du vaste éventail d'équipements nooLite, nous serons intéressés par le module de contrôle MT1132 car il est conçu pour se connecter à des ordinateurs Arduino et à carte unique tels que le Raspberry Pi. Et cela fonctionne sur une simple interface série. Pour l'avenir, je dirai que j'ai aimé le module en raison de sa simplicité, de sa prévisibilité et de son fonctionnement fiable. Et j'ai pu apprécier ces qualités après un mois de lutte infructueuse avec le module réseau sur la puce W5500, qui ne voulait pas fonctionner normalement.

Module MT1132

Et j'ai particulièrement apprécié le fait que (hormis l'alimentation) le module est connecté à l'Arduino avec un seul (!) Fil (RX). Le second (TX) peut être complètement omis. Le module est "unidirectionnel", c'est-à-dire qu'il est conçu uniquement pour envoyer des signaux de commande. Les plans de la société Nootehnika incluent le développement et la sortie d'une version «bidirectionnelle» du module.

SU111-300

Le deuxième élément dont nous avons besoin de l'équipement nooLite est une unité de commande de puissance, par exemple SU111-300. La connexion de l'unité est élémentaire et peut être vue dans l'illustration. Deux fils sont connectés à un réseau de 220 volts et les deux autres à la charge. La seule chose à laquelle je voudrais faire attention est que les modules sont fournis avec un cavalier qui bloque le mode de gradation et, si vous souhaitez régler la puissance, vous devez couper ce cavalier (et n'oubliez pas d'isoler les fils nus résultants).

PU311-2

Je ne m'attarderai pas sur les télécommandes car il s'agit d'un contrôle «manuel», et nous, en lien avec l'automatisation, nous intéressons davantage à l'automatique. Je peux seulement dire que les expériences ont été effectuées avec la télécommande PU311-2, faite sous la forme d'un interrupteur mural et qu'elle s'est montrée de la meilleure façon, c'est-à-dire qu'elle a allumé et éteint la lumière clairement et sans échecs. En fait, quel est le bon équipement et différent du mauvais - vous ne remarquez tout simplement pas le bon.

Concept de travail. Liaison et dissociation


Avant de pouvoir allumer et éteindre les appareils électriques à l'aide du système nooLite, vous devez «relier» les modules de commande aux unités d'alimentation correspondantes. Cela se fait en utilisant la procédure dite. «Liaisons» et «déliement», décrites en détail dans la documentation nooLite. En bref, tout se résume à appuyer sur une paire de boutons sur les blocs liés et ne présente aucune difficulté.

Dans le cas où le module de contrôle MT1132 est utilisé à la place de la télécommande, la procédure se déroule de manière légèrement différente. A savoir: puisque le module n'a pas de boutons, vous devez générer et envoyer par programmation une commande de contrôle sur le canal souhaité, puis appuyez sur le bouton de l'unité d'alimentation, confirmant la «liaison» ou le «déliement».

Les canaux sont des «lignes de contrôle» et il y en a 32 dans le module MT1132, comme en témoignent les deux derniers chiffres du nom. Cela signifie qu'avec ce module, vous pouvez gérer 32 groupes d'équipements distincts, ce qui est plus que suffisant pour un appartement ou une petite maison. Si vous avez une grande maison, les modules peuvent fonctionner conjointement et s'adapter à n'importe quel nombre de canaux.

Description du protocole


Il y a un merveilleux document sur le site Web de la société Nootehnika qui décrit de manière complète et détaillée la connexion du module et son protocole de contrôle. Je n'encombrerai pas l'article de détails techniques inutiles, n'importe qui peut lire ce document, je ne décrirai que les points principaux.

Pour contrôler le module, nous devons former une commande de contrôle composée de 12 octets. Les principes de formation de cette équipe sont décrits dans le document ci-dessus. Et comme vous le verrez ci-dessous, toutes ces règles sont déjà programmées dans les fonctions de contrôle et il suffit de les utiliser pour émettre des commandes sur le module.

Équipes de test


nooLite possède un système de commande assez développé, à partir duquel nous sélectionnerons les plus simples et les plus courants et illustrerons le système à l'aide de leur exemple.

  • Snap
  • Délier
  • Inclusion
  • Éteint
  • Réglage de puissance (gradation)

Comprendre le fonctionnement des équipes de base, vous pouvez facilement en utiliser une autre.

Connexion du module MT1132


Comme je l'ai déjà dit, le module MT1132 est littéralement connecté avec un fil (sauf pour l'alimentation). Le module peut être alimenté à la fois par une tension de 5 volts et une tension de 3,3 volts. Par conséquent, il n'y a eu aucun problème de connexion à l'Arduino Mega 5 volts ou à l'Arduino Due 3,3 volts. Le seul point est qu'avec une puissance réduite, la plage de fonctionnement fiable du système diminue. Et cela doit être pris en compte si vous souhaitez alimenter le module à partir d'une tension de 3,3 volts.

Arduino

Le module possède des broches RX et TX pour recevoir et envoyer des signaux via l'interface série. La connexion du RX, pour recevoir les commandes de contrôle du contrôleur, est essentielle pour le fonctionnement du module. Par conséquent, la broche RX côté module est connectée à la broche TX (18) côté Arduino. Ce brochage est valable pour Arduino Mega et Arduino Due.

Partie logiciel


Voyons maintenant comment gérer toute cette économie à partir de croquis sur Arduino. Tout d'abord, initialisez Serial1, auquel nous avons connecté le module MT1132 (cela se fait à la fréquence standard 9600):

Serial1.begin(9600);

Maintenant, le code de la fonction de contrôle principale:

void nooSendCommand(byte channel, byte command, byte data, byte format) {
  byte buf[12];

  for (byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }

  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[3] = format;
  buf[5] = channel;
  buf[6] = data;

  int checkSum = 0;
  for (byte i = 0; i < 10; i++) {
    checkSum += buf[i];
  }

  buf[10] = lowByte(checkSum);
  buf[11] = 170;

  for (byte i = 0; i < (12); i++) {
    Serial1.write(buf[i]);
  }
}

En principe, nous n'avons même pas besoin de savoir comment cela fonctionne, nous pouvons l'utiliser en mode «boîte noire» ou une sorte d'API, avec une certaine interface qui sort. Nous avons juste besoin de savoir comment utiliser cette interface.

Comme vous pouvez le voir, il n'y a que quatre paramètres - canal, commande, données et format. Vous pouvez lire par quel principe les requêtes à cette API peuvent être lues dans le document susmentionné, mais nous simplifierons encore plus notre tâche et encapsulerons cette interface dans de simples commandes de contrôle de périphérique nooLite.

void nooBind  (byte ch)         {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind(byte ch)         {nooSendCommand(ch,  9, 0, 0);}
void nooOn    (byte ch)         {nooSendCommand(ch,  2, 0, 0);}
void nooOff   (byte ch)         {nooSendCommand(ch,  0, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch,  6, v, 1);}

Une équipe relativement complexe n'est que la dernière, là, en plus du canal, le niveau de puissance est également réglé. Il y a aussi des équipes dans le croquis sur lesquelles nous ne nous attarderons pas maintenant, mais elles se forment tout aussi facilement.

En fait ... c'est tout! Nulle part est plus facile. Dans le code, les commandes de contrôle ressemblent à ceci:

nooBind(ch);
nooUnbind(ch);
nooOn(ch);
nooOff(ch);
nooValue(ch, v);

Prenons maintenant la pratique de la gestion du module d'alimentation nooLite. Donc, nous lions le bloc d'alimentation sur le canal zéro:

nooBind(0);

Le voyant du bloc d'alimentation commence à clignoter. Appuyez sur le bouton du bloc - la LED cesse de clignoter - le bloc d'alimentation est connecté. Au lieu du canal zéro, vous pouvez utiliser n'importe quel autre. Et vous pouvez facilement générer le numéro de canal dans le code d'esquisse en fonction de vos besoins.

Allumez la lampe (si nous avons attaché la lampe sur le canal zéro, les commandes doivent être envoyées sur ce canal):

nooOn(0);

Réglez la puissance (luminosité de la lampe):

nooValue(0, 100);

Ici, vous devez parler un peu des règles de formation d'une équipe qui définit le niveau de puissance. La valeur de la puissance ne change pas de 0 à 255, comme on pourrait le penser, mais de 35 à 155. Si la valeur est supérieure à 155, alors la puissance sera maximale, si elle est de 0, alors ce sera équivalent à une commande d'arrêt.

Voici (juste au cas où) une formule qui traduit les valeurs «standard» de 0 à 100 dans un format compris par le module nooLite:

v = x * 1.2 + 34;

En utilisant cette formule, vous pouvez régler la luminosité de la lampe dans le pourcentage de puissance habituel. Et, bien sûr, si vous avez besoin d'ajuster la puissance de manière non linéaire, vous pouvez créer une variable v selon n'importe quelle loi ou même simplement choisir des valeurs fixes. Cela sera discuté dans la troisième partie du cycle, lorsque nous ajusterons la température de chauffage de la station de soudage.

Éteignez l'appareil:

nooOff(0);

Délier:

nooUnbind(0);

Le voyant du bloc d'alimentation commence à clignoter. Nous confirmons le découplage en appuyant sur le bouton du bloc d'alimentation. Ça y est, maintenant le bloc d'alimentation a cessé de répondre à nos commandes et nous pouvons le «snap» à nouveau sur l'un des 32 canaux du module nooLite MT1132.

Voici le croquis complet.

Code d'esquisse complet
byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];

for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}

buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;

int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}

buf[10] = lowByte(checkSum);
buf[11] = 170;

for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}

void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}

void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}

void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}

void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}

void setup() {
Serial1.begin(9600);

/*
loop(), */

//nooBind(0);

//nooOn(0);
//nooOff(0);
//nooValue(0, 100);

//nooUnbind(0);
}

void loop(){

}

Sous-total


Comme vous pouvez le voir, il n'y a rien de compliqué à contrôler les modules de puissance nooLite en utilisant Arduino, au contraire, le contrôle est incroyablement simple: le module est connecté avec un seul fil, et les commandes sont presque un langage humain naturel - «allumez le canal 0», «éteignez le canal 1», «Régler la puissance de 50% sur le canal 3» n'est vraiment nulle part plus simple.

Bonus pour ceux qui ont lu jusqu'au bout


L'autre jour, une nouvelle version d' Arduino Mega Server est sortie sous le numéro 0.14, dans laquelle toutes les maladies infantiles de la technologie sont surmontées et qui fonctionne rapidement et de manière stable. Et la même version contient le noyau de contrôle d'instrument nooLite intégré et comment tout cela fonctionne, vous apprendrez du prochain article de la série «Équipement sans fil nooLite et maison intelligente (partie 2). Arduino Mega Server. "

Les deuxième , troisième et quatrième parties du cycle.

Source: https://habr.com/ru/post/fr389067/


All Articles