Table des matières
Bonjour à tous,
Aujourd’hui, nous allons voir comment émettre et recevoir à la fréquence 433 MHz sur votre Raspberry Pi.
À quoi correspond cette fréquence ?
D’après Wikipédia, la bande des 433 - 434 MHz désigne une bande de fréquence permettant différents types d’applications comme des télécommandes, télécontrôles, télémesures … Sans entrer dans les détails, dans notre cas, cette plage de fréquences est très utilisée dans le monde de la domotique. De nombreux appareils appliqués à la domotique utilisent cette plage: prises électriques, ampoules connectées, détecteurs de mouvement mais également certaines portes de garages.
Matériel nécessaire
Le matériel nécessaire est relativement peu couteux, tout dépend surtout du besoin que vous avez en réception.
- Un Raspberry Pi
- Un émetteur 433 MHz de type FS1000A
- Un récepteur 433 MHz de type RXB6 (ou CDR03A mais de moins bonne qualité)
- Une prise électrique 433 MHz (ou une ampoule ou tout autre appareil fonctionnant sous cette fréquence)
Un Raspberry Pi | Un émetteur FS1000A | Un récepteur RXB6 |
---|---|---|
Plus de détails sur le Raspberry Pi
N’importe lequel fera l’affaire. Ce qui nous intéresse sont ses ports GPIO (General Purpose Input-Output ou Entrée/Sortie à usage général pour les non anglophones). Ce sont donc des entrées/sorties très utilisées dans le monde des microcontrôleurs qui permettent à un circuit électronique de communiquer avec des composants externes (ici nos émetteur et récepteur).
L’avantage du Raspberry Pi ici est son accessibilité et son faible coût.
Plus de détails sur les prises électriques
Quand on cherche des prises électriques, on ne sait pas lesquelles choisir. Et bien je ne saurais pas vous conseiller, je sais juste que j’ai des prises de la marque Tibelec qui fonctionnent à 99% du temps avec quelques caprices. Je vous souhaite donc une bonne chance lors de votre choix de prises !
Mise en place du système
On va commencer par faire les branchements nécessaires puis les premiers tests avec des utilitaires clés en main.
Branchements
Quels que soient les émetteurs et récepteurs que vous avez choisi, vous devriez retrouver des broches pour la terre, pour l’alimentation (souvent appelées Vcc pour Alimentation Tension Continue en français), une broche pour la data et une dernière facultative pour l’antenne du récepteur.
Globalement, votre schéma devra ressembler à ça:
Côté récepteur, les couleurs sont les suivantes:
- Noir pour la terre (port 06 - GND)
- Rouge pour l’alimentation (port 17 - 3.3V PWR)
- Vert pour la data (port 13 - GPIO27)
- Bleu pour l’antenne
Côté émetteur, les couleurs sont moins conventionnelles mais permettent plus de lisibilité sur le schéma:
- Jaune pour la terre (port 09 - GND)
- Marron pour l’alimentation (port 02 - 5V PWR)
- Orange pour la data (port 11 - GPIO17)
Voici un schéma de correspondance des ports GPIO des Raspberry Pi 40 broches.
Software
Installation
2 options s’offrent à nous, avec des outils différents. La première repose sur la librairie WiringPi et l’API rc-switch tandis que la deuxième utilise un paquet Python rpi_rf qui package déjà tout.
Option 1
Tout d’abord, nous devons installer la librairie WiringPi:
git clone https://git.pofilo.fr/mirrors/wiringPi
(dépôt original anciennement ici)cd wiringPi
- Et on compile et installe la librairie en root:
./build
Ensuite, nous allons avoir besoin d’utilitaires disponibles dans un dépôt Git:
git clone https://github.com/ninjablocks/433Utils
(mirroir ici)- Le dépôt a des dépendances, initialisons les
git submodule init
suivi degit submodule update
(mirroir ici) cd 433Utils/RPi_utils
- Et on compile:
make
Cette librairie utilise par défaut les ports que nous avons utilisés lors des branchements précédents, à savoir:
- Pour la partie émetteur: WiringPi 0 sur le GPIO 17 (port 11)
- Pour la partie récepteur: WiringPi 2 sur le GPIO 27 (port 13)
Tests
Nous allons ici avoir besoin de 2 consoles en tant que root:
La première va lire ce que reçoit notre récepteur:
cd 433Utils/RPi_utils
./RFSniffer
La seconde pour envoyer un message:
cd 433Utils/RPi_utils
./codesend 12345678
Lors de l’envoi du message, celui-ci devrait apparaitre dans la console de lecture. Si comme moi vous avez des prises électriques avec leur télécommande, essayez d’appuyer sur un bouton de celle-ci, vous devriez voir le message s’afficher.
Option 2
Je vois renvoie directement à la partie Home Assistant, si vous ne désirez pas utiliser d’environnement virtuel ou si vous n’utilisez pas Home Assistant, vous pouvez commencer au troisième point.
Tests
Pour les tests, je vous renvoie aux tests de l’option 1 mais en utilisant les commandes rpi-rf_send
et rpi-rf_receive
.
Cas d’utilisation
Prises électriques
La majorité des prises fonctionnent de la même façon, vous avec 4 canaux sur lesquels vous pouvez envoyer 4 messages différents. Vous pouvez donc avoir (pour une même marque, à voir si d’autres marques ne se chevauchent pas), 4 x 4 = 16
réseaux différents.
Je vous invite donc à ouvrir un tableur et à le remplir en jouant avec le binaire RFSniffer
ou la commande rpi-rf_receive
et votre télécommande.
Une fois cela fait, on peut passer à l’étape suivante, c’est-à-dire l’intégrer dans un logiciel de domotique (dans mon cas, ce fut Gladys au démarrage mais Home Assistant à l’heure actuelle).
Home Assistant
On va prendre un cas concret que j’ai chez moi. J’ai un disque dur derrière une prise 433 MHz que je veux contrôler à l’aide de Home Assistant. Ses codes sont les suivants:
- 5526613 pour l’allumer
- 5526612 pour l’éteindre
Dans Home Assistant, le composant permettant d’utiliser le 433 MHz se nomme RF Switch.
Le paquet python rpi-rf
est nécessaire pour que cela fonctionne. Dans mon cas, il était déjà installé mais sinon, voici les commandes à exécuter pour le faire (à adapter selon votre installation):
sudo -u homeassistant -H -s
pour se mettre sur l’utilisateur homeassistantsource /srv/homeassistant/bin/activate
pour sourcer l’environnement pythonpip list
pour regarder sirpi-rf
figure dans la listepip install rpi-rf
pour l’installer si celui-ci n’y est pas- Vous avez accès aux commandes
rpi-rf_send
(à utiliser avec un paramètre correspondant au message à envoyer) etrpi-rf_receive
pour recevoir.
Comme le montre la documentation, celui-ci s’ajoute dans le fichier configuration.yaml
de cette façon:
switch:
- platform: rpi_rf
gpio: 17
switches:
Disque dur:
code_on: 5526613
code_off: 5526612
Autres
Ici, on ne se sert que de la partie émission, on peut également utiliser des détecteurs de présence et imaginer des scénarios tels qu’allumer la lumière du couloir pendant 15 secondes après 23h si on détecte une personne dans le salon.
Conclusion
Voilà la fin de cet article. Comme toujours, il y a plusieurs façons d’arriver à nos fins. Ce que j’ai écrit ici a fonctionné pour moi, ce n’est pas dit que ce soit toujours le cas au fil du temps. Pour cela, si une étape est obsolète, n’hésitez pas à en faire part dans les commentaires pour en faire profiter la communauté.