Avant-propos
DiO est une gamme d'équipements de domotique inter-compatibles, et notamment de prises radio-commandés.
A partir du travail de reverse engineering de "Lstg", j'ai développé une petite bibliothèque Arduino très légère qui permet d'envoyer simplement des commandes à un module DiO. Dans cet article, je vais brièvement expliquer le protocole, avant de détailler l'installation et l'utilisation de ma bibliothèque, et enfin montrer un exemple d'utilisation : l’interrupteur "clap clap".
Principe du protocole
Le protocole de transmission HomeEasy utilise la fréquence 433MHz (réglementée par l’Union internationale des télécommunications), par une modulation ASK.
Une trame HomeEasy est organisée de la manière suivante:
On identifie 4 groupes distincts:
- Bits 0 à 25: Numéro identifiant l’émetteur (numéro unique généré aléatoirement)
- Bit 26: Single/Group
- Bit 27: On/Off
- Bits 28 à 31: Numéro identifiant de l'appareil
- Bits 32 à 36: Dim level (facultatif, non supporté par ma bibliothèque)
De plus, il y a des marqueurs de début et de fin de trame. Les bits de données sont encodés sous la forme 0=01 et 1=10 pour une question de résistance aux interférences RF.
L'objectif de la bibliothèque Arduino est donc de lire la commande émise par chaque boutons d'une télécommande, puis de le ré-émettre avec le bon encodage pour pouvoir interagir avec des modules DiO.
Installation et utilisation de ma bibliothèque
Cette bibliothèque implémente une classe DiOremote pour simuler très simplement une télécommande DiO à partir d'une Arduino et d'un module 433MHz. On peut trouver ces modules émission/réception 433MHz autour de 2$ l'ensemble.
Pour l'ajouter au logiciel Arduino:
- Télécharger l'archive.
- Décompresser l'archive dans <chemin d'installation d'Arduino>/librairies. On peut également utiliser l'option Croquis > Inclure une bibliothèque > Ajouter la bibliothèque .ZIP et sélectionner l'archive.
- Redémarrer le logiciel Arduino.
Un exemple de code qui fait clignoter un module DiO est accessible depuis le menu Fichiers > Exemples > DiOremote. Toutefois, pour pouvoir l'utiliser, il faut impérativement extraire les codes envoyées par la télécommande. Pour cela, suivre la procédure suivante:
- Brancher l'Arduino au module de réception 433MHz comme dans l'image suivante.
- Ouvrir l'exemple ReadCommand puis le téléverser sur la carte Arduino.
- Placer la télécommande devant le module de réception, ouvrir le moniteur série (Outils > Moniteur Série), et appuyer sur les boutons de la télécommande pour voir les données correspondantes. Dans mon cas:
- Ouvrir le code SendCommand, remplacer le CODE_ON et CODE_OFF par les valeurs de votre télécommande, et tester le résultat en branchant le module TX!
Note : j'ai arbitrairement utilisé la pin 2 de l'Arduino dans mes exemples. On peut utiliser toutes les pins sauf 0 et 1.
Cas pratique : interrupteur "clap clap"
Dans le but d'illustrer le fonctionnement de cette bibliothèque, j'ai fait un montage très simple pour contrôler une lampe en tapant dans ses mains. L'état du module DiO basculera à chaque fois que l'on tape deux fois dans ses mains, séparé d'une seconde (+ ou - 500ms). Voici le circuit correspondant:
Voici le code Arduino complet de l'exemple, à programmer sur la carte:
#include <DiOremote.h>
#define TRESHOLD 100
#define PULSE_TIME 250
#define MIN_TIME 500
#define MAX_TIME 1500
const unsigned long ON_CODE = 1278825104;
const unsigned long OFF_CODE = 1278825088;
DiOremote myRemote = DiOremote(2);
byte state = 0;
unsigned long t0;
void setup(){}
void loop(){
reset:
delay(MAX_TIME);
for(;;){
if(analogRead(A0) > TRESHOLD) {
t0 = millis();
delay(PULSE_TIME);
while(millis() - t0 < MIN_TIME)
if (analogRead(A0) > TRESHOLD) goto reset;
while(millis() - t0 < MAX_TIME){
if(analogRead(A0) > TRESHOLD) {
state = !state;
if(state) myRemote.send(ON_CODE);
else myRemote.send(OFF_CODE);
goto reset;
}
}
}
}
}
Le résultat est montré dans la vidéo suivante.
Bien entendu, on peut aller beaucoup plus loin avec ce système, et contrôler l'Arduino à travers une interface web par exemple, pour créer un véritable système domotique.
Auteur : Charles Grassin
What is on your mind?
#1 pixels59
on August 17 2018, 15:30
#2 Fire_Blaim
on September 12 2018, 18:51
#3 splinter
on February 20 2019, 19:48
#4 FLA
on April 8 2019, 22:38
#5 Hugodu21
on December 8 2019, 21:01
#6 Peter
on December 8 2019, 21:43
#7 cristigou
on March 5 2020, 17:48
#8 Author Charles
on March 5 2020, 21:06
#9 john
on March 11 2020, 22:37
#10 cristigou
on March 28 2020, 7:49
#11 Spifthespa
on April 6 2020, 14:18
#12 Titou
on April 19 2020, 18:17
#13 Fabien
on December 5 2020, 19:09
#14 JJS-56
on January 6 2021, 17:55
#15 duclafrite
on January 7 2021, 12:09
#16 Davy
on January 29 2021, 19:32
#17 Eric W
on April 4 2021, 20:06
#18 Manu
on May 28 2021, 15:28
#19 ESV
on January 13 2023, 20:49
#20 Gui
on November 25 2023, 8:20
#21 Gui
on November 25 2023, 8:21
#22 Gui
on November 25 2023, 8:23
#23 Gui
on November 25 2023, 8:23
#24 Gui
on November 25 2023, 20:30
#25 Midame
on December 5 2023, 11:25
#26 Midame
on December 5 2023, 11:26