Certains dispositifs de commande à distance en domotique peuvent fonctionner sur 433 MHz ou 315 MHz (bande d’onde AM).
Il est alors facile de récupérer leur puce et de la contrôler avec un minimum de code, par exemple avec un micro-contrôleur (PIC, AVR...).
Sans faire de récupération (quel dommage), on peut aussi acheter des kits d’émetteur/récepteur basés sur les puces suivantes :
– SC5262 / SC5272
– HX2262 / HX2272
– PT2262 / PT2272
– EV1527, RT1527, FP1527, HS1527...
La version que nous avons utilisée vient d’une boutique en ligne, et utilise les puces PT2262 (émetteur) et PT2272 (récepteur).
Le protocole utilisé est implémenté dans une bibliothèque pour Arduino mais peut être repris. Il fonctionne sur n’importe quelle patte GPIO pour l’émetteur et sur interruption pour le récepteur.
Le code peut être téléchargé ici : http://code.google.com/p/rc-switch/ et il est également accessible sur le PC de notre local pour ceux qui participent à nos ateliers.
L’archive contient un répertoire "RCswitch" que l’on va copier dans le "sketchbook" ou "carnet de croquis" en créant s’il n’existe pas un dossier "Libraries" : Arduino\Libraries\RCswitch
Possibilités de communication
Comme il est fait pour la domotique, il est possible d’utiliser ce qui avait été prévu pour des interrupteurs (d’où le nom "RC switch" qui signifie interrupteur radio-commandé en anglais) : switch on, switch off.
Dans l’usage que nous lui réservons (commande unidirectionnelle d’un robot), nous utiliserons simplement "send" pour envoyer et "available" (disponible) pour recevoir.
Un des atouts de ce protocole est de pouvoir envoyer directement sur un nombre de bits variable (8, 16, 24, ...).
Adaptation du protocole
Lorsqu’on teste, on s’aperçoit que les messages sont reçus plusieurs fois. Il n’y a pas de retour pour valider la réception, donc il faut trouver une solution pour éviter de lire plusieurs fois le même octet et ainsi introduire un décalage :
> received 255 / 8bit Protocol: 1
> received 255 / 8bit Protocol: 1
> received 255 / 8bit Protocol: 1
> received 309 / 16bit Protocol: 2
> received 309 / 16bit Protocol: 2
> received 309 / 16bit Protocol: 2
> received 309 / 16bit Protocol: 2
> received 309 / 16bit Protocol: 3
> received 309 / 16bit Protocol: 3
Il y a deux façons de tourner cet inconvénient en avantage :
– en changeant le "protocole" comme ci-dessus
– en utilisant le "protocole" comme une adresse
Dans les deux cas, on peut traiter la nouvelle valeur reçue ou bien l’oublier, en considérant qu’il faut attendre le changement de protocole. Tout dépend de votre programme.