Commander une lampe avec un Raspberry Pi et un beacon

Commander une lampe avec un Raspberry Pi et un beacon

La technologie de proximité iBeacon est un outil intéressant, déjà utilisé par les développeurs et les commerçants, pour créer des applications mobiles géolocalisées visant à améliorer l’expérience utilisateur, mais elle permet bien plus encore, notamment avec un Raspberry Pi…

Dans cet article, nous allons voir un moyen facile d’exploiter la technologie iBeacon chez vous, sans avoir besoin de faire de la programmation ou du développement très complexe. Dans l’exemple ci-dessous, nous allons allumer une lampe en utilisant un Raspberry Pi lorsque celui-ci détecte un beacon donné.

A minima un Raspberry Pi et un beacon…

Liste des composants:

  1. un Raspberry Pi avec une clé bluetooth LE et une carte SD
  2. un chargeur de téléphone portable micro-USB 5V standard
  3. un interrupteur d’alimentation (type PowerSwitch Tail II)
  4. des cavaliers ou du fil conducteur ordinaire
  5. une lampe de bureau ou une autre source lumineuse

Autres outils et accessoires nécessaires:

  1. une balise iBeacon
  2. un clavier USB
  3. un écran d’ordinateur avec une entrée HDMI
  4. un petit tournevis plat
  5. éventuellement une connexion internet

 

Avant d’assembler tout cela, regardons chaque composante individuellement, et pour commencer nous supposons que vous avez votre Rasbperry Pi déjà configuré (avec BlueZ installé, la pile Bluetooth pour Linux) et que vous êtes familiers avec les opérations basiques en ligne de commande. Si vous le souhaitez, vous pouvez utiliser le Kit de Développement Beacon de RadiusNetwork, qui comprend un Raspberry Pi, une clé Bluetooth une carte SD ainsi que toutes les outils logiciels nécessaires au développement d’applications compatibles beacon.

Rechercher des beacons

La possibilité de rechercher des beacons est la dernière fonctionnalité du Kit de développement beacon, nouveauté de la version 3. Dans ce guide, nous utiliserons le tout dernier kit de développement pour effectuer le scan des beacons. Vous pouvez trouver plus d’information sur comment mettre à jour votre Raspberry Pi vers cette dernière version ici. Si vous possédez déjà votre propre Raspberry Pi et votre propre clé Bluetooth, vous pouvez créer votre propre  script de recherche de beacon en suivant pas à pas ce qui est décrit ici.

Avant de commencer à scanner, nous avons besoin d’un beacon à proximité pour tester. LE moyen le plus simple de faire cela est de télécharger l’application gratuite pour iOS « Locate for iBeacon » (ou toute autre application capable d’émuler un beacon ou tout simplement un vrai beacon que vous pourrez trouver un peu partout sur le web). Dans ce tutoriel, nous utiliserons un beacon de test avec les identifiants suivants:

  • UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6
  • Major: 1
  • Minor: 1

Une fois que vous avez votre beacon de test actif, faisons un premier petit scan de test. Tout d’abord, assurez-vous que le kit de développement n’est pas en train de diffuser en utilisant la commande « ibeacon stop », puis lancez la commande suivante pour commencer le scan et voir apparaître l’identifiant de votre beacon de test:

$ ibeacon scan
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 1 POWER: -59
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 1 POWER: -59
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 1 POWER: -59

Pour interrompre le scan, faites un Ctrl+c.

Note (pour les utilisateurs du Kit de développement Beacon): vous pouvez constater quelques instabilités en utilisant cette nouvelle fonctionnalité de scan, lorsqu’il est effectué sur une longue période et sur des zones où il y a un gros traffic, dues à une erreur de l’adapteur Bluetooth. Si vous rencontrez ce problème, le seul moyen d’en sortir est de réinitialiser la clé Bluetooth ou de redémarrer simplement la machine.

 

Pour allumer/éteindre la lampe de notre exemple, nous allons utiliser l’option « -b » pour un affichage épuré. Vous devriez alors voir quelque chose comme:

$ ibeacon scan -b
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1 -59
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1 -59
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1 -59

Maintenant que nous arrivons à détecter les beacons qui sont à proximité avec le Raspberry Pi, l’étape suivante est d’allumer et d’éteindre  la lampe.

Commander la lampe

Pour commander la lumière, nous tirerons partie de la broche GPIO du Raspberry Pi d’une part, qui peut fournir une différence de potentiel, et de l’interrupteur d’alimentation (type Power Switch Tail) d’autre part, qui , à partir d’un faible voltage, permet de contrôler le courant d’une prise électrique. La première étape consiste à connecter l’interrupteur à la broche GPIO sur votre Raspberry Pi, en utilisant des cavaliers. Le diagramme ci-dessous montre le schéma de connexion,  la broche de la masse étant raccordée à l’entrée « + » de l’interrupteur.

RPi_powerswitch_connection

 

 

 

 

 

Une fois que tout est connecté, branchez l’interrupteur dans la prise électrique et branchez votre lampe sur l’interrupteur. Assurez-vous, si votre lampe possède un interrupteur, qu’il soit en position allumé. Vous êtes maintenant prêts à tester l’interrupteur, pour commander le voltage sur la broche GPIO nous utiliserons la librairie Wiring Pi qui est installée par défaut avec le Kit de développement Beacon de Radius Network. La première étape consiste à passer GPIO 1 en mode « out ». Envoyez ensuite un état 1 sur la broche, ce qui activera l’interrupteur et allumera la lampe. Pour cela, lancez les commandes suivantes:

$ gpio mode 1 out 
$ gpio write 1 1

Vous pouvez ensuite éteindre la lumière en passant GPIO 1 à « off »:

$ gpio write 1 0

Maintenant, tout ce qu’il reste à faire, c’est de combiner cela avec la recherche de beacons, et nous aurons une lampe commandée par un beacon.

Faire fonctionner le tout ensemble

Nous allons écrire un petit script Bash, qui lira, une par une, les lignes retournées par le scan, et cherchera l’identifiant d’un beacon donné. Une fois le beacon détecté, il commandera l’allumage de la lampe, si vous quittez le script (Ctrl+c), la lampe s’éteindra. Prenez votre éditeur de texte favori pour créer le script « welcome_light » et y copier/coller le code ci-dessous:

#!/bin/bash
 gpio mode 1 out
 trap "gpio write 1 0" exit
 while read line
 do
 if [[ `echo $line | grep "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 1" ` ]]; then
 gpio write 1 1
 fi
 done

Assurez-vous d’avoir bien changé l’identifiant du beacon dans la condition « if », si vous utilisez votre propre beacon pour tester. Sauvez ce fichier et tenez votre beacon prêt, en prenant soin de le mettre sur « off » pour débuter le test. Lancez ensuite la commande suivante pour débuter la séquence de scan et d’allumage de la lampe, elle lance le scan du beacon avec une sortie des données brutes, passées elle-même à notre script « welcome_light ». Si vous avez fait votre propre script de scan, lancez- simplement celui-ci en redirigeant sa sortie vers le script « welcome_light ».

$ ibeacon scan -b | ./welcome_light

Une fois le script démarré, activez votre beacon et vous devriez voir la lampe s’allumer automatiquement. Le clip ci-dessous vous montre ce tutoriel en action.

 

Pour une utilisation en domotique, vous pouvez faire en sorte que votre script éteigne la lampe lorsque le beacon n’est plus détecté (par exemple si vous quittez la pièce).

Et voilà!

Ce tutoriel vous montre un bon exemple des possibilités des beacons et de la géolocalisation de proximité. Il y a de multiples façons d’utiliser les beacons avec un Raspberry Pi, à vous de vous familiariser avec et de profiter de toutes ses possibilités.

http://developer.radiusnetworks.com/2014/04/27/how-to-make-a-raspberry-pi-turn-on-a-lamp-with-an-ibeacon.html
There is 1 comment for this article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


+ six = 15

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>