Christophe Nowicki

January 31, 2010

Gestion de la lumière d’ambiance avec le protocole DMX sous Debian GNU/Linux

La technologie des lumières à LEDs offre la possibilité de placer une source de lumière n’importe où (aquarium, meubles, faux plafonds, derrière un écran, etc…).

Par contre, les LEDs disposent de plus de fonctionnalités que les ampoules classiques.
En effet, en plus d’un bouton d’allumage, vous avez la possibilité de changer la couleur de la lumière, la faire varier dans le temps, modifier son intensité, jouer une séquence, etc…

Avec un nombre de possiblités plus grand, les interfaces de contrôle classique (X10, PLCBUS, etc…) ne suffisent pas.

Il est donc nécessaire de placer un peu plus d’intelligence dans le réseau d’illumination à l’aide du protocole DMX.

Ce protocole est utilisé dans le monde des concerts, des plateaux de télévision et des spectacles.
Néanmoins, il est tout à fait possible de le détourner pour un usage domotique.

Dans ce billet, je vais décrire l’utilisation d’un contrôleur LED RGB DMX et de l’interface OpenDMX de chez ENTTEC, à l’aide du projet OLA sous Debian GNU/Linux.

Principe de fonctionnement

Voici le schèma du montage:
dmx_led_overview

  • le PC communique à l’aide du port USB avec un contrôleur DMX ;
  • les contrôleurs LEDs mis en série convertissent les ordres en instructions RGB ;

Et voici ce que cela donne :

OpenDMX RGB LED

Matériel

Voici le matériel nécessaire pour un bandeau à LED, le tout fonctionne biensûr sous Debian GNU/Linux est FOSS Friendly ;-)

Produit Prix
OPEN DMX USB Hardware Interface $52.00 – $60.00
RGB LED DMX Controller 2 $48.00 – $76.80
RJ45 Connetor to XLR Female Connector $11.20 – $14.25
RJ45 to XLR Male DMX Cable Adapter 3ft $10.99 – $14.00
DMX/XLR converter connector $10.50 – $12.00
LED Controller Power Supply, USA/EU $23.10 – $36.96
DMX 512 Terminator, 3 Pole Male Connector $7.94
Mini Bandeau Rigide RGB 12 Led 20cm 150° 12v DC 6 € – 12,95 €
Raccord intermédiaire pour Bandeau lumineux à Led Longueur 5cm 1.5 €

Pour le cablage, entre le bandeau lumineux et le contrôleur à LED, Il faut couper une extrémité du cable de raccord et la dénuder pour brancher sur le bornier à quatre vis de sortie RGB.

Installation du matériel

Une fois que vous avez branché l’OpenDMX au PC, vous devez voir un convertisseur USB-Serial (UART) à l’aide de lsusb :

$ lsusb
Bus 002 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Pour faire fonctionner l’OpenDMX, vous avez besoin du module noyau dmx-usb et d’un environnement de compilation pour les modules. (paquet linux-headers*, etc…).

# cd /usr/src
# git-clone http://www.erwinrol.com/git/dmx_usb_module/
# cd dmx_usb_module
# make
# cp ./dmx_usb.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
# depmod -a

Comme, l’OpenDMX est un convertiseur USB-Serial, le noyau par défaut le présente comme une interface /dev/ttyUSB.
Il est donc nécessaire de blacklister les modules usbserial dans le fichier /etc/modprobe.d/blacklist, en ajoutant les lignes suivantes :

blacklist usbserial
blacklist usb-serial
blacklist ftdi_sio

Ensuite, ajouter le module dmx_usb dans le fichier /etc/modules et rebooter la machine.
Au reboot, vous devez avoir une interface /dev/dmx0, qu’il faut rendre accessible pour tous les utilisateurs :

# ls -l /dev/dmx0
crw-rw---- 1 root root 180, 192 2010-01-30 00:37 /dev/dmx0
# chmod a+rw /dev/dmx0

Installation du logiciel pour la gestion de la lumière : Open Lighting Architecture (OLA)

Comme, il n’y a pas de paquets Debian disponibles pour ce programme, je vais décrire une procédure d’installation à partir des sources :

Dépendances

Vous allez avoir besoin des dépendances suivantes pour la compilation :

# apt-get install build-essential uuid-dev libcppunit-dev libgcrypt-dev

Compilation de Protocol Buffers de Google

Vous avez besoin de protobuf, pour la gestion de l’échange de données :

# cd /usr/src
# wget http://protobuf.googlecode.com/files/protobuf-2.3.0.tar.bz2
# tar xjf protobuf-2.3.0.tar.bz2
# cd protobuf-2.3.0
# ./configure ; make ; make install

Compilation de google-ctemplate

Vous avez besoin du système ctemplate :

# cd /usr/src
# wget http://google-ctemplate.googlecode.com/files/ctemplate-0.96.tar.gz
# tar xzf ctemplate-0.96.tar.gz
# cd ctemplate-0.96
# ./configure; make ; make install

Compilation de microhttpd (optionnel)

Vous avez besoin de la libmicrohttpd version > à 0.4 (non disponible dans Debian) pour l’interface web de gestion :

# cd /usr/src
# wget ftp://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.4.5.tar.gz
# tar xzf libmicrohttpd-0.4.5.tar.gz
# cd libmicrohttpd-0.4.5
# ./configure; make ; make install

Compilation de OLA

Le projet OLA se découpe en deux parties : un serveur et des clients, dont voici la procédure de compilation.
Pour le serveur :

# cd /usr/src
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz
# tar xzf ola-0.6.0.tar.gz
# cd ola-0.6.0
# ./configure; make ; make install

Pour le client en C++ :

# cd /usr/src
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz
# tar xzf ola-0.6.0.tar.gz
# cd ola-examples-0.6.0
# ./configure; make ; make install

Lancement d’OLAd

Vous pouvez lancer olad, avec un utilisateur qui disspose des droits de lecture / écriture du /dev/dmx0 :

$ olad -l 3
...

Vous pouvez ensuite vérifier si l’OpenDMX a bien été détecté par le serveur à l’aide du client ola_dev_info :

$ ola_dev_info
...
Device 3: OpenDmx USB Device
port 0, OUT Open Dmx at /dev/dmx0
...

Et si vouz avez compilé libmicrohttpd, vous devez pouvoir accèder à l’interface web du daemon, sur le port 9090 :

DMX OLA web console

Test et validation du bon fonctionnement

Avant de pouvoir manipuler les LEDs, il est nécessaire d’attribuer ununivers au contrôleur OpenDMX à l’aide de la commande ola_patch :

$ ola_patch -d 3 -p 0 -u 0

Ensuite vous pouvez lancer dans deux terminaux les commandes ola_dmxmonitor et ola_dmxconsole.
La première permet de suivre le statut des diffèrents composants et la seconde permet de les controler à l’aide d’un interface graphique en curses.

L’identifiant du contrôleur LED RGB sur le réseau DMX, est fonction de la valeur prise par le petit switch qui se situe sur celui-ci.
Et se découpe de la manière suivante :

  • Rouge = valeur du switch ;
  • Vert = valeur du switch + 1 ;
  • Bleu = valeur du switch + 2.

Vous pouvez faire varier les trois valeurs pour obtenir les diffèrentes couleurs possibles.

Allez plus loin avec l’Open Lighting Architecture (OLA)

OLA supporte de nombreux contrôleurs USB et Ethernet.
Il dispose d’une API Client C++ et Python, ce qui rend son intégration possible et facile dans d’autres projets et offre de nombreuses possiblités.

La diffusion d’informations à l’aide de la lumière d’ambiance et ses possiblités

L’idée de pouvoir contrôler l’intensité et la couleur d’un bandeau à LED qui se situe dans n’importe quel endroit de la maison, offre des possiblités interessantes en matière de diffusion d’informations.

En effet, la lumière permet de diffuser l’information de manière non intrusive.
Voici quelques exemples des possibilités offertes :

  • comme la lampe DAL de Violet, se connecter à l’Internet pour exploiter des ressources ;
  • Pour ceux qui disposent de l’option Tempo d’EDF, il est possible de diffuser la couleur du jour ;
  • Modifier l’Intensité lumineuse en fonction de nombreux paramètres : tempèrature, l’ensoleillement, nombre de personnes présentes dans la pièces, activation d’une alarme, réveil du bébé, etc…

Ce sont quelques exemples des possiblités offertes. Pour le reste vous pouvez faire marcher votre imagination pour créer des nouvelles manières d’inter-agir avec les machines et cette Intelligence ambiante.

Réferences

Voici mes réferences :

Conclusion

Le protocole DMX est ancien et souffre de nombreux défaults, mais il présente encore de nombreux avantages tels que :

Il faut noter qu’il existe une alternative plus récente au protocole DMX : Digital Addressable Lighting Interface (DALI).

Il est aussi possible de remplacer le contôleur OpenDMX par une carte Arduino, comme décrit ici.

Filed under: Debian, Home automation — Tags:, , , , , — cscm @ 11:39

December 19, 2009

Présentation du standard Zigbee

ZigBee_Network_Design

Je reviens des mercredis de la RFID organisé par filrfid, le sujet de la présentation était le protocole ZigBee.

Lors de la présentation faite par Véranith Ly de la société oRFIDée, j’ai appris beaucoup de choses sur ce protocole.

J’aimerai donc vous en faire profiter et parler des domaines qui m’intéressent à savoir la domotique, la robotique et la topologie des réseaux maillés.

Description rapide du standard

ZigBee, est un standard de communication sans-fils comme le Wifi ou le Bluetooth.
Les principaux avantages du standard sont :

  • Autonomie de l’émetteur, il est possible de le faire fonctionner durant plusieurs années à l’aide d’une batterie ;
  • La possibilité de mettre en place une topologie de réseaux maillés ;
  • 65535 nœuds sont addressable sur le réseau ;
  • le standard définie : les méthodes de communication sur le réseau, mais aussi les fonctionnement des applications ;
  • l’ensemble des produits sont certifiés par l’Alliance ZigBee et soutenus par de nombreuses entreprises industriels ;

Ce qui est intéressant, c’est que le standard définit un ensemble de caractéristiques pour un équipement.
Regroupé sous forme de famille :

Domaines d’application du protocole

Les domaines d’applications du protocole sont les suivants :

La promesse du standard

Les équipements qui respectent le standard et sont certifiés par l’Alliance ZigBee sont théoriquement interchangeable et peuvent communiquer ensemble.

Cela signifie, qu’il est possible d’allumer à l’aide d’une télécommande de marque A, une douille d’ampoule de marque B et un lecteur de DVD de marque C.

Cela parait trivial dit comme cela, mais dans l’état actuel de développement de la domotique, cela releve du miracle

Même, s’il existe des protocoles propriétaires pour faire cela, il est nécessaire de vendre son âme à un constructeur (Vendor lock-in garantie sur facture ;-) ) ou bien mettre en place des protocoles de Middleware comme xPL et une belle galaxie de protocoles hétérogènes. (cf. le schéma de ma petite installation perso ;-) ).

La gestion des binding

La couche applicatif du standard ZigBee, inclut une possibilité très intéressante pour la domotique : le binding.

L’idée est de relier deux équipements du réseau de manière automatique et transparente pour l’utilisateur.

L’un des meilleur exemple pour comprendre est celui d’une ampoule et un d’un interrupteur.

Lorsque l’utilisateur active physiquement le binding, à l’aide d’un bouton par exemple.

Les deux devices se mettent en relation avec le coordinateur du réseau, qui détermine si oui ou non les profils applicatifs sont compatibles et de les lier.

Ce qui permet aux équipements d’être liés automatiquement et il n’est pas nécessaire de configurer les adresses des équipements, etc…

L’état actuel de la certification

Pour l’instant, il y a peu d’équipements qui sont certifiés par l’Alliance :

Mais on trouve pas mal de vendeurs d’autres produits que ne sont pas forcement entièrement certifiés mais qui respectent la partie communication du standard.

Problématique du sans-fils

Comme toutes technologies sans-fils, elle présente quelques problématiques particulières :

La source d’énergie

Bien que le module ZigBee nécessite très peu d’énergie pour fonctionner (20mA pour émettre une trame sur le réseau), se pose la question de la source d’énergie.

Lorsque celle-ci est fournie par une pile cela pose de problématique de :

  • fiabilité / qualité de la source d’énergie ;
  • la nécessité de remplacer régulièrement la source d’énergie ;
  • la nécessité de mettre en place un dispositif pour notifier l’utilisateur du statut de la pile.

La sécurité

La sécurité du standard ZigBee repose tout d’abord, sur la sécurité du protocole de communication IEEE 802.15.4. Pour mieux comprendre les méthodes de sécurisation mises en place par le protocole, vous pouvez lire cet article de vulgarisation : Security in 802.15.4 and ZigBee networks ; ou bien cet excellent papier Security Considerations for IEEE 802.15.4 Networks. Mais dans ce domaine, rien de nouveau, ce sont toujours les mêmes principes qui s’appliquent, à savoir :

  • Plus la puce dispose de puissance et plus le niveau de chiffrement est fort (au maximum AES128 pour ZigBee) ;
  • La qualité des composants et du générateur de nombre aléatoire ( merci de ne pas utiliser le PID du programme ;-) ) ;
  • La qualité de l’implémentation du code de chiffrement.

Bref, vous vous doutez bien que les modules ZigBee qui seront vendus au grand publique ne seront pas d’un niveau de sécurité militaire et n’embarqueront sûrement pas pas un compteur Geiger comme source d’entropie ;-)

D’autant plus que le standard n’impose pas forcement un niveau de chiffrement fort à tous les profils applicatifs.

Robotique

Pour la robotique, il n’existe pas de profil dans le standard, mais la plupart des amateurs dans le domaine ont déjà compris les nombreux intérêts de ZigBee et on voit de plus en plus d’interfaces apparaître (Bioloid, WowWee, etc… )

Logiciels libres

Du coté des logiciels libres, nous avons :

  • Un projet mort : ZigBuzz ;
  • Le projet IEEE802.15.4/ZigBee Stack for Linux, dont l’objectif est l’intégration de la pile ZigBee dans le noyau Linux, commiter dans la version 2.6.30-rc7 ;
  • Le projet FreakZ, dont l’objectif est l’implémentation du pile ZigBee libre pour l’embarque ;

Malheureusement, il y a une incompatibilité entre la licence des spécifications du standard ZigBee et la licence GPL. en effet celle-ci ne prend pas en compte un usage non commercial.

Pour plus de détails sur ce point : Zigbee, Linux, and the GPL.

Néanmoins, le code du protocole IEEE 802.15.4 est déjà le noyau et bénéficie d’un niveau de protection ;-)

Matériel

Le matériel ZigBee disponible se découpe en plusieurs familles de la plus simple à la plus complexe :

Émetteur-récepteur

Les principaux constructeurs d’émetteur-récepteur sont Texas instruments et Freescale.

Puce

Les puces prennent en charge la norme IEEE 802.15.4, elles sont produites par : Ember, Jennic, Texas instruments et Freescale.

Modules

Les modules prennent en charge le standard ZigBee et sont produites par : Digi, One-RF, Telegesis, Meshnetrics, Radiocrafts

Produit fini

  • Tritech : dongles USB et routeurs Ethernet/Zigbee ;
  • Digi : passerelles RS232/485, USB, Ethernet, GPIO, routeurs autonomes
  • Telegesis : dongles USB et CF, routeurs autonomes et Ethernet
  • Alektrona : gateway ethernet / zigbee;
  • Libelium : capteurs et routeurs multi-protocoles Wifi, Bluetooth, GPRS et GPS ;
  • Des shields pour la carte Arduino et ses dérivées.

Offre packagée

Pour les produits packagés, il existe les solutions suivantes :

  • Control4 : gamme de produits domotiques ;
  • AlerteMe : système de suivi de la consommation électrique et alarme.

Déploiements importants de ces technologies

Il y a pas mal de déploiements de ces technologies aux USA dans le cadre des réseau de distribution d’électricité « intelligent » en Californie et au Texas principalement.

En Europe, le ville de Gothenburg en Suède a déployé un réseau de 90 000 compteurs intelligents.

En France, le déploiement est encore à l’état de recherche avec le projet SensLab, le projet de localisation fait par Orfidée pour la Marine Nationale.

Et d’autres projets couverts par des accords de non divulgation ;-)

Références

Voici quelques références pour approfondir le sujet :

Conclusion

Voilà, ceci est une petite présentation standard ZigBee, que j’ai voulu la plus succincte possible. Le sujet étant très vaste et passionnant. J’ai forcement fait des erreurs et oublié des références. Merci de m’en faire part par mail ou via les commentaires.

Filed under: Home automation, Network, Robotics, Work — Tags: — cscm @ 14:00

December 8, 2009

Capteur de dioxyde de carbone pour réseau 1-wire

Après la lecture de plusieurs livres de Jean-Marc Jancovici (merci Nicolas ;-) ),
je me suis intéressé à la concentration de dioxyde de carbone dans l’air.
En effet, cette concentration afflue directement sur le climat de la planète.
Je me suis donc mis à la recherche d’un capteur de CO2 abordable pour ma station météo.

La recherche du capteur

co2 sensor Mes critères pour le capteur de dioxyde de carbone de ma station météo étaient les suivants :

  • communicant avec le pc à l’aide d’un protocole standard ;
  • fonctionnant sous Debian GNU/Linux ;
  • petit budget, moins de 150 euros.

Après plusieurs jours recherche, je me suis retrouvé le bec dans l’eau.

En effet, ce genre de capteur est visiblement réservé aux équipements scientifiques et la plupart des devis que j’ai réussi à obtenir sont bien au dessus de mon budget.
Mais dernièrement, j’ai trouvé un revendeur de matériel 1-wire en Suède : m.nu.
Celui-ci propose un capteur de CO2 abordable : CO2-meter.
Ce capteur est basé sur le capteur K30 de chez SenseAir et un DS2450.
Ce capteur peut être utilisé en intérieur ou bien à l’extérieur.
Par contre dans le cas d’une utilisation extérieur, il faut le protéger des précipitations.

Matériel

Pour faire fonctionner le capteur vous avez besoin des composants suivants :

Produit Prix
CO2-meter 139,93€
5V Power injectors 19,96€
Alimentation 5V 14,95€

Exploitation du capteur

Avec OWFS

Une fois le capteur branché sur le réseau 1-wire, il est vu par owfs :

$ tree /mnt/owfs/20.C17E0D000000
/mnt/owfs/20.C17E0D000000
|-- PIO.A
|-- PIO.ALL
|-- PIO.B
|-- PIO.C
|-- PIO.D
|-- address
...
|-- type
|-- volt.A
|-- volt.ALL
|-- volt.B
|-- volt.C
|-- volt.D
|-- volt2.A
|-- volt2.ALL
|-- volt2.B
|-- volt2.C
`-- volt2.D
3 directories, 74 files
$ cat /mnt/owfs/20.C17E0D000000/type
DS2450%

Les informations intéressantes se trouvent dans les fichiers :

  • volt.A : sortie du capteur de CO^2, donne la concentration de CO2 en ppm. Il faut multiplier la valeur par 1000. Ex: 0.772277 * 1000 = 772 ppm ;
  • volt.B : statut du capteur de CO^2, le voltage doit être au alentour de 3.2V ;
  • volt.D : voltage du DS2450S, doit être aux alentours de 5V ;

Avec Munin

Pour faire un graphique de la concentration de dioxyde de carbone, j’utilise munin et un petit plugin fait maison :

$ svn co http://svn.csquad.org/owcarbondioxide
A owcarbondioxide/owcarbondioxide
...
$ chmod a+x owcarbondioxide/owcarbondioxide
# mv owcarbondioxide/owcarbondioxide /usr/share/munin/plugins/
# ln -s /usr/share/munin/plugins/owcarbondioxide /etc/munin/plugins/owcarbondioxide
$ /etc/munin/plugins/owcarbondioxide config
graph_title Carbon dioxide 1-wire sensor
graph_args --base 1000 --lower-limit 0 --upper-limit 5000
graph_vlabel Carbon dioxide in ppm
graph_category sensors
graph_info This graph shows the Carbon dioxide on the one-wire network.
Chambre.label Chambre
$ /etc/munin/plugins/owcarbondioxide get
Chambre.value 786.184

Vous devriez obtenir ce type de graphique :
meuh.csquad.lan-owcarbondioxide-day

Références

Voici quelques références intéressantes sur le sujet :

Filed under: Home automation — Tags:, , , — cscm @ 20:09

November 27, 2009

xPL Perl update script for Pachube

I’ve wrote a small update script for Pachube based on xPL-Perl.
This module is based on Beanz’s Net::Pachube module.
I use this script, for my pachube feed.

Setup

The setup is very simple on Debian GNU/Linux, at first you need the Net::Pachube module :
$ wget http://search.cpan.org/CPAN/authors/id/B/BE/BEANZ/Net-Pachube-0.01.tar.gz
$ tar xzf Net-Pachube-0.01.tar.gz
$ cd Net-Pachube-0.01
$ perl Makefile.PL
$ make
...
# make install

Note: the dh-make-perl method does not work, with this package ;-(

Then you can grab, my xpl-pachube script :

$ svn co http://svn.csquad.org/xpl-pachube/
..
# chmod +x xpl-pachube/xpl-pachube
# mv xpl-pachube/xpl-pachube /usr/local/bin

Run

You can start the xpl-pachube script in verbose this way :

$ xpl-pachube -key 52b37888404598851de -verbose -feed_id 1934 class=sensor device=cc128.01189.0.1

You need to change the -key and -feed_id arguments.

That’s all folks!

Filed under: Home automation, Programming — Tags:, , — cscm @ 23:29

October 27, 2009

Reconnaissance vocale sous GNU/Linux et domotique

L’objectif de cet article est de décrire mon avancement sur le système de reconnaissance vocale dans mon installation domotique. En effet, pour mon usage personnel, j’ai mis au point un chatterbot pour contrôler de manière intuitive l’appartement.
Cette technologie permet de tenir une discutions intuitive avec une maison intelligente pour lui faire exécuter des ordres. (allez Stanley, tu t’es seulement planter de 10 ans ;-) ) :

Moi>Alfred?
Alfred>Oui, monsieur.
Moi>Allume la lumière du salon.
-- run xpl-sender -c x10.basic command=on device=a3
Alfred>C'est fait.

Le nom du bot est un hommage à Alfred Pennyworth. Allons faire un petit tour dans les entrailles de la batcave ;-)

Définition du besoin

L’accumulation des télécommandes sur mon installation domotique, fait chuter mon WAF de manière dramatique.
En effet, pour regarder une chaîne de télévision ou allumer la lumière.
Il est nécessaire d’utiliser deux ou trois télécommandes différentes.
Naviguer dans des interfaces, etc…
Bref, pour des technologies donc l’objectif est d’améliorer la qualité de vie et rendre les taches quotidienne plus facile, j’avais un gros problème ;-)
Après un petite discussion et une mise au point avec ma moitié, j’ai réussi à vendre la solution de contrôle par la voix.
Belle connerie me voilà parti dans un domaine que je ne connais pas ;-)

Première Approche

Je lance une boue à la mer sur le forum “toute la domotique”.

Visiblement, je ne suis pas le seul à chercher ce genre de fonctionnalité. Actuellement, nous avons dans le domaine :

  • l’abominable HomeSeer qui fonctionne très mal en Anglais à l’aide de l’interface de reconnaissance vocale inclue dans Microsoft Windows et la SAPI ;
  • Rien de spécifique à la domotique sous GNU/Linux, mais une belle galaxie de programmes dans le domaine.

Le choix du microphone

Ma petite dame voulais parler librement sans aucune contrainte et il n’étais pas question de l’équiper d’un microphone.
J’ai donc cherché une solution qui permet de capter la parole dans une pièce sans microphone sur la personne.
La solution magique s’appelle la technique du Microphone array.
Le principe est très simple, mettre en commun plusieurs microphones reliés à un DSP qui permet de faire le traitement du signal en fonction de l’orientation physique des microphones.
J’ai donc proposé de mettre en place chez moi le LOUD (non ce n’est pas un radiateur ;-) ).
Bon vous vous doutez bien que lorsque j’ai proposé la solution du LOUD, j’ai faillit passer par la fenêtre ;-)

microphone_array Heureusement, il existe des solutions plus simples telles que le Voice Tracker de chez Acoustic Magic.

Celui-ci permet de capter la parole dans une pièce, retraite le signal et permet d’obtenir sur une prise Jack classique la voix et rien que la voix dans une pièce.
Magique ;-)

Je peux parler le dos tourner au microphone dans une pièce de 20m^2 et l’ordinateur capte ma voix de manière impressionnante ;-)

Le logiciel de reconnaissance vocale

Il y a principalement deux solutions dans le domaine sous GNU/Linux :

  • Le projet CMU Sphinx avec PocketSphinx, Sphinx-[234], etc…
  • Julius, Open-Source Large Vocabulary CSR Engine Julius.

Sur ces deux moteurs de reconnaissance vocale, reposent de nombreux Dialog Manager, qui permettent d’exploiter le moteurs pour faire de la téléphonie, de contrôle vocale, etc…

Ma méthode

Soyons claire, je ne suis pas un expert en reconnaissance vocale et ce domaine est vraiment très difficile d’accès et nécessite la compréhension de nombreuses notions.
J’ai donc adopté la technique EPITECH : c’est à dire faire en sorte que cela fonctionne. ( sans comprendre tout le contexte ;-) )

Un bon informaticien est un informaticien feignant

Pour faire fonctionner Julius, il est nécessaire de lire à haute voix de nombreux mots pour enregistrer les différents phonèmes qui les composent. Afin de créer un Modèle de Markov caché exploitable par le logiciel.
Voici donc comment je m’y suis pris pour éviter cette phase fastidieuse du projet.

Utilisation d’un logiciel de synthèse vocale

1 ère approche une solution assez “laide“, qui consiste à faire lire ces mots par un logiciel de synthèse vocale comme eSpeak. Mais le résultat n’était pas très bon.

Utilisation d’une collection d’enregistrement audio

J’ai par la suite découvert le projet Shtooka, qui est une collection audio libre de mots français.
Tous les termes liés à la domotique ne sont pas disponible dans le projet mais il est très facile d’ajouter ces termes à sa base de données locale.

Conversion texte vers Phonème

Une des étapes de l’apprentissage de Julius est la conversion du texte en Phonèmes, pour résoudre ce problème, j’ai utilisé l’option -X de eSpeak dont voici un exemple de sortie :

$espeak -v fr -q -X "lumière"
Translate 'lumière'
  1     l        [l]

  1     u        [y]

  1     m        [m]

 21     i (A     [j]
  1     i        [i]

 43     è       [E]

  1     r        [r]

 22     e (_     []
  1     e        [@]

 lymj'Er

Un peu de glu

Pour faire fonctionner tout ces éléments ensemble, je me suis fait un script Perl (très sale pour le moment) permettant de réaliser automatiquement toutes ces étapes :

  • analyse des questions posées au robot ;
  • la conversion des mots en phonèmes ;
  • la diction des mots ;
  • la création du modèle accoustique.

Il s’agit de l’automatisation de toutes les étapes de la création d’un modèle acoustique du projet VoxForge.

Les travaux en cours

Mon projet est disponible à cette adresse : Alfred
Il est en cours de développement mais pour l’instant il est possible de donner des ordres simples.

J’utilise RiveScript pour la définition des tâches et de la conversation. Ce langage de chatbot est plus puissant que AIML. Car il permet d’inclure du code Perl assez puissant dans le code de la conversation. Voici un exemple :
$ more lib/Alfred/languages/en/x10.rs
+ switch * on
- do you want me to switch <star> on?
+ yes
% do you want me to switch * on
- <call>xpl_x10_send_on <botstar></botstar></call>

$more lib/Alfred/modules/x10.rs
> object xpl_x10_send_on perl
my ($obj,$method,@args) = @_;
$obj->{'xpl'}->send(
message_type => 'xpl-cmnd', class => 'x10.basic',
body => { command => 'on', device => 'a3' });
< object

Un petit appel à contribution

J'aurais gagné énormément de temps si le projet VoxForge avait reçu plus de contribution de la part des utilisateurs francophones.

En effet, il n'y a pas assez de contribution pour pouvoir faire un modèle accoustique en Français.
Cela permettra de disposer d'un système de reconnaissance vocale libre en Français.
Ce qui intéresse beaucoup de monde à mon avis ;-)
C'est donc un petit appel à contribution aux projets VoxForge et Shtooka.

Références intéressantes

Filed under: Debian, Home automation, Robotics — Tags:, , , , , , — cscm @ 17:32

October 23, 2009

Smart by “accident”

Despite The title, This weblog entry is in French. I’m deeply sorry for beening too lazy ;-)

Je viens de finir la lecture de l’étude suivante :
A Spotlight on Security and Privacy Risks with Future Household Robots: Attacks and Lessons.

Celui-ci parle des risques et de la sécurité liés aux robots ménagers (je crois que c’est pas le bon lien ;-) ).

Pour résumer rapidement l’article, celui-ci a évalué le niveau de sécurité des robots : Rovio, Spykee et RoboSapien V2.
Le résultat est une véritable catastrophe d’un point de vue de la sécurité :

  • des connexions sans fil, pas ou faiblement sécurisées ;
  • non chiffrement des informations d’authentification ;
  • apparition de nouvelles attaques.

Mais ce dont j’aimerais vous parler est l’idée que soulève les auteurs au début du document:

both thoses that we encountered and those that we foresee can be attributed partly to the fact that the home is becoming “accidentally” smart and that there is no dedicated, trained system administrator for the home environment.

Je vais dans ce billet illustré cette idée et me permettre de réfléchir à haute voix.

The incoming smart^Wobject

Ils sont minions, petits ou grands, utiles ou futiles.
ils s’appellent Roomba, Nabaztag ou Freebox.
Ils sont arrivés dans nos maisons progressivement.
Et les meilleurs pointent bientôt leur nez ;-)
Ils mettent en place progressivement le paradigme de l’Internet des objets et de l’Intelligence ambiante.

Early adopters

La cible 1ére de ses technologies sont les Geek, ce sont les seuls capables d’adopter ces technologies, d’accepter les problèmes liés à leur jeune âge et de les exploiter.

Les Geeks ont généralement les compétences nécessaires pour comprendre le fonctionnement de ces nouveaux objets.

Mainstream and Mrs. Michu

Ces objets arrivent progressivement chez Madame Michu et c’est la que cela devient intéressant.

Freebox

Commençons par la Freebox, voulez-vous. Car je trouve que c’est l un des meilleurs exemples d’intelligence accidentelle.

Des millions de foyers français ont reçus avec leur abonnement Internet une machin-box.
Celle-ci est équipée d’une liaison Wi-Fi qui n’est pas sécurisée, que cela soit en WEP ou WPA.
Du coup ces milliers de foyer se retrouvent propulsés dans le rôle d’un administrateur réseau.
Et s’ils n’ont pas les compétences nécessaires et que leur connexion est usurpée, ils se trouveront privé de leur droit d’accès Internet grâce à la loi HADOPI.

Roomba

Le robot aspirateur Roomba, dispose d’une forte puissance et il est capable de faire des dégâts important dans une maison si la pièce n’est pas préparée pour son passage.
Le mien dispose en plus d’une connexion Bluetooth dont je doute sérieusement du niveau de sécurité compte-tenu de la complexité du protocole.
Avec une bonne dose de Fuzzing, je pense qu’il est tout à fait envisageable de prendre le contrôle du robot à distance et de me ruiner le salon ;-)

Nabaztag

Continuons avec le Nabaztag.
J’aime beaucoup les lapins, mais je dois avouer que celui-ci me sort particulièrement par les oreilles compte-tenu des problèmes qu’il pose :

  • La connexion Wifi qui pose les mêmes problèmes que la Freebox ;
  • La centralisation, l’ensemble de l’intelligence du lapin se trouve sur les serveurs de Violet, ce qui signifie que si la société fait faillite, alors les lapins mourront ;
  • Ce dernier point soulève de nombreux problèmes liés à la vie privé ;

The rabbit is sad, he wants to hug you

Je suis un des early adopters des ces technologies ( la domotique, la robotique, etc… ).
Mais je trouve que les utilisateurs et les constructeurs ne font pas assez attention aux implications et aux risques liés à ces technologies.

Est-ce que je ne vais pas un peu fort dans les accusations ?

Je pense qu aujourd’hui les histoires de robots qui volent des clés ou qui saccagent une maison peuvent faire sourire.
Mais imaginez les mêmes scénarios dans 5 à 10 ans et nous rigolerons un peu moins.

Mais quel est le principal problème ?

L’internet des objets va être déployé dans un nouvel environnement : votre maison.
C’est à dire un lieu privé, ou la fuite d’information et/ou les risques encourus peuvent avoir des conséquences très importantes.

We need Free hugs, free as software

Je pense que la seule voix possible pour l’Internet des objets est le logiciel libre.

Les points évoqués dans les exemples précédents peuvent être résolu qu’à l’aide de deux méthodes :

  • la formation des utilisateurs ;
  • et l’utilisation de logiciels libres.

Le 1er point est évident, je vais donc développer le second.
Comme le logiciel libre à largement prouvé sa supériorité en matière de sécurité informatique.
Il est donc le seul à pouvoir prétendre une place dans votre vie privé.
C’est la seule solution pour faire adopter ces évolutions.

Il existe aussi une solution basée sur le logiciel propriétaire et des nombreuses lois semblables à HADOPI permettant de cacher ces lacunes en matière de sécurité, mais je n’ai vraiment pas envie d’essayer ;-)

Filed under: Home automation, Robotics — Tags:, , , , — cscm @ 18:54

xPL Automatic Speech Recognition with Julius

I’ve wrote a very small Perl module for interfacing my home automation Speech Recognition Engine based on Julius with the xPL Network.

The goal of this xpl-perl module, is to broadcast recognised speech.

I’ve described the ASR xPL schema on the project forum : ASR.BASIC Schema proposal

You need a working Julius installation running in monitor mode (listening on the network) and an xpl-perl setup.

Here is an sample command output :
$ julius -input file -C julian.jconf
...
Stat: server-client: socket ready as server
///////////////////////////////
/// Module mode ready
/// waiting client at 10500
///////////////////////////////

In others windows, you must run xpl-asr-julius and xpl-logger.
When you speak or send a wav file to Julius, the reconised text is broadcasted on the network :
### read waveform input
enter filename-> test.wav
Stat: adin_file: input speechfile: test.wav
STAT: 180003 samples (3.75 sec.)
STAT: ### speech analysis (waveform -> MFCC)
STAT: 00 _default: 17 generated, 17 pushed, 6 nodes popped in 1123

xpl-logger output :
10.0.0.242:53922 [xpl-trig/asr.basic: bnz-julius.nux -> * - <s> éteindre lumière chambre </s>]

Installation

The setup is very simple on Debian GNU/Linux. Just fallow thoses instructions :
$ wget http://www.csquad.org/wp-content/contrib/xpl-asr-julius/xPL-ASR-Julius-0.01.tar.gz
$ tar xzf xPL-ASR-Julius-0.01.tar.gz
$ dh-make-perl xPL-ASR-Julius-0.01
$ cd xPL-ASR-Julius-0.01
$ dpkg-buildpackage -b
# dpkg -i ../libxpl-asr-julius-perl*.deb

That’s all !

Filed under: Home automation — Tags:, , , — cscm @ 15:26

October 3, 2009

Modules Plugwise dans un reseau xPL

L’objectif de cet article est d’expliquer l’utilisation des modules Plugwise dans un réseau xPL sous Debian GNU/Linux à l’aide du projet xpl-perl.

Présentation de Plugwise

circle plugwise Les modules plugwise sont des prises électriques qui permettent de :

  • Mesurer la consommation électrique d’un appareil ;
  • Éteindre / Allumer un appareil électrique à distance.

Ces prises communiquent entre elles à l’aide d’un réseau ZigBee de type Mesh.

Les spécifications du produit sont :

  • Voltage: 100-240 V~
  • Fréquence: 50 / 60 Hz
  • Puissance maximale: 3680 Watt
  • Courant maximal: 16 A

Elles sont produites par une société Hollandaise et uniquement disponibles dans leur Webshop. (passer la commande en hollandais n’est pas évident ;-) )

Chaque prise coûte environ 35 euros et le kit de démarrage le moins cher est à 150 euros.

Les prises électriques sont de type F, il vous faut donc un adaptateur pour les appareils nécessitant une prise de terre.

J’utilise ces prises dans mon installation domotique, car elles présentent un avantage par rapport aux solutions classiques basées sur le CPL (x10, PLC-BUS, etc… ).

En effet, il est possible d’utiliser ce type de prise sur un onduleur et comme une bonne partie de mon installation est ondulée c’est la seule solution.

Installation du “stick” usb

Voici la procédure pour installer, le stick usb.
Insérerez le module dans le port usb de la machine, il doit apparaître et être reconnu comme un adaptateur série :

$ lsusb
...
Bus 006 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
...
$ dmesg
...
[431159.173232] usb 6-2: FTDI USB Serial Device converter now attached to ttyUSB0
[431159.179407] usb 6-2: New USB device found, idVendor=0403, idProduct=6001
[431159.179459] usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[431159.180301] usb 6-2: Product: FT232R USB UART
[431159.180301] usb 6-2: Manufacturer: FTDI
[431159.180301] usb 6-2: SerialNumber: A8009iKr
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2009-09-22 13:03 /dev/ttyUSB0

Configuration du module xpl-plugwise

Dépendances

Pour faire fonctionner le module vous avez besoin du module perl Digest::CRC :
# apt-get install libdigest-crc-perl

Installation du module

Le module xPL pour Plugwise se trouve directement sur le serveur du projet xpl-perl :
# cd /usr/src
# wget http://www.xpl-perl.org.uk/download/xPL-Plugwise-0.01.tar.gz
# tar xzf xPL-Plugwise-0.01.tar.gz
# dh-make-perl xPL-Plugwise-0.01
# cd xPL-Plugwise-0.01/
# sed -i 's/\$(MAKE) test/#/' debian/rules
# dpkg-buildpackage -b
# dpkg -i ../libxpl-plugwise-perl_0.01-1_all.deb

Lancement

Pour lancer le module, il faut lui préciser l’emplacement du stick USB à l’aide de la ligne de commande :
# xpl-plugwise --verbose --plugwise-verbose --plugwise-tty /dev/ttyUSB0
Listening on 192.168.42.78:34281
Sending on 192.168.42.255

Utilisation

Pour allumer une prise, il suffit d’envoyer l’ordre suivant :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=on device=3FD8F6
Pour éteindre :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=off device=3FD8F6
Pour obtenir la consommation de l’appareil sur la prise :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=powerinfo device=3FD8F6
Le module répond à l’aide d’un trigger, donc voici la sortie :
$ xpl-logger -body class=plugwise
192.168.42.2:48051 [xpl-cmnd/plugwise.basic: bnz-sender.tux -> * - powerinfo 3FD8F6]
plugwise.basic
{
command=powerinfo
device=3FD8F6
}
192.168.42.2:48051 [xpl-trig/plugwise.basic: bnz-plugwise.milk -> * - powerinfo 3FD8F6]
plugwise.basic
{
command=powerinfo
device=3FD8F6
pulse1sec=0005
pulse8sec=0006
unknown=000000A4
}

L’information se trouve dans les deux variables pulse1sec et pulse8sec.

Conclusion

Pour l’instant, l’utilisation de ces prises sous Debian GNU/Linux se limite aux ordres on/off. Il est encore nécessaire d’utiliser le logiciel fourni par le fabriquant pour la configuration du réseau.

Filed under: Debian, Home automation — Tags:, , — cscm @ 17:23

September 26, 2009

Archivage des messages xPL dans une base de données

Voici la procédure pour archiver les messages de votre réseau xPL dans une base de données MySQL.

L’objectif

Beanz, l’auteur du projet xpl-perl a supprimé la fonctionnalité du projet dans la version 0.08.

Cette fonctionnalité répond à un besoin très spécifique.
Archiver TOUS les messages dans une base de données MySQL demande beaucoup de ressources.
Sur mon petit réseau domotique, j’ai déjà plus de 25 messages par minute.

Ce qui produit une base de données importante avec 100 000 entrées par semaine, soit 500 000 par mois, 6 000 000 par an.

Et la taille de la base de données fait dans les 50 Mo par semaine, soit 250Mo par mois, 3Go par an.

Donc pour stocker ces données vous devez en avoir vraiment besoin. C’est mon cas, car :

  • Je veux conserver la consommation électrique exact de chaque appareil ;
  • Utiliser des optimisations à l’aide d’un réseau de neurones.

Installation

Vous devez disposer d’un réseau xPL fonctionnel et d’une installation de xpl-perl.

Programme

Nous allons récupèrer le code des modules directement dans le svn.


# cd /usr/share/perl5/xPL
# wget http://www.xpl-perl.org.uk/export/892/xpl-perl/branches/r0.08/lib/xPL/SQL.pm
# sed -i -e 's#/etc/xpl-perl/db.config#/etc/xplperl/db.config#' SQL.pm
# cd /usr/bin
# wget http://www.xpl-perl.org.uk/export/892/xpl-perl/branches/r0.08/bin/xpl-sql-logger
# chmod +x xpl-sql-logger
# apt-get install libclass-dbi-loader-perl libdatetime-perl
# cd /etc/xplperl
# cat < db.config
dsn=dbi:mysql:xpl:localhost
user=xpl
password=secret
EOF
#

Base de données

Une fois que vous avez installé le programme, il est nécessaire de configurer la base de données.

Pour cela vous devez créer un utilisateur xpl et une base de données xpl sur votre serveur MySQL.
Ensuite vous créer les tables de la base de données à l’aide des requêtes SQL suivantes :

CREATE TABLE body (
id int NOT NULL auto_increment,
body varchar(1500) default NULL,
PRIMARY KEY (id),
KEY body_idx (body(1000))
);
CREATE TABLE elt (
id int NOT NULL auto_increment,
name varchar(16) default NULL,
value varchar(128) default NULL,
PRIMARY KEY (id),
KEY name_idx (name)
);
CREATE TABLE msg (
id int NOT NULL auto_increment,
time int default NULL,
usec int default NULL,
type char(8) default NULL,
source varchar(34) default NULL,
target varchar(34) default NULL,
class varchar(15) default NULL,
incomplete int default NULL,
body int default NULL,
PRIMARY KEY (id),
KEY class_idx (class),
KEY time_idx (time,usec),
KEY type_idx (type),
KEY body_idx (body)
);
CREATE TABLE msgelt (
id int NOT NULL auto_increment,
msg int NOT NULL,
elt int NOT NULL,
PRIMARY KEY (id),
KEY msg_idx (msg),
KEY elt_idx (elt)
);

Lancement et recette

Vous pouvez ensuite lancer le programme en ligne de commande :
$ xpl-sql-logger
Vous pouvez ensuite vérifier que cela fonctionne dans la base de données :
mysql> SELECT * FROM `msg` ORDER BY id DESC LIMIT 3;
+---------+------------+--------+----------+----------------+--------+--------------+------------+
| id | time | usec | type | source | target | class | incomplete |
+---------+------------+--------+----------+----------------+--------+--------------+------------+
| 7711941 | 1253948224 | 252455 | xpl-trig | bnz-ccost.milk | * | sensor.basic | 0 |
| 7711931 | 1253948224 | 211170 | xpl-trig | bnz-ccost.milk | * | sensor.basic | 0 |
| 7711921 | 1253948224 | 130241 | xpl-trig | bnz-ccost.milk | * | sensor.basic | 0 |
+---------+------------+--------+----------+----------------+--------+--------------+------------+
3 rows in set (0.00 sec)

Lancement automatique

Vous pouvez lancer automatiquement le programme à l’aide de daemontools en plaçant le programme dans le répertoire /etc/services de la manière suivante :

# cd /etc/xplperl/service
# cp -r xpl-hub xpl-sql-logger
# cd xpl-sql-logger
# cat < run
#!/bin/sh
exec 2>&1
exec setuidgid xplperl envdir ./env softlimit -d300000 /usr/bin/xpl-sql-logger
EOF
# cd /etc/service
# ln -s /etc/xplperl/service/xpl-sql-logger/
# ps auxww | grep xpl-sql-logger
root 3306 0.0 0.0 1620 332 ? S Sep22 0:00 supervise xpl-sql-logger
xplperl 23943 1.3 0.6 16944 12952 ? S 08:20 0:37 /usr/bin/perl -w /usr/bin/xpl-sql-logger

Surveillance de l’archivage

monit logo Le système fonctionne très bien. Par contre, j’ai rencontré quelques problèmes au bout d’une ou deux semaines le programme arrête d’archiver les données dans la base, il faut donc le relancer.
La solution la plus simple et de relancer le script à l’aide d’un cron et monit

.
Voici mon crontab :

*/1 * * * * echo "SELECT NOW() - FROM_UNIXTIME(time) FROM msg ORDER BY id DESC LIMIT 1;" | mysql -hlocalhost -uxpl -psecret -s xpl > /tmp/xpl-sql-logger

Voici ma configuration pour monit dans le fichier /etc/monit.d/xpl-sql-logger :

check file xpl-sql-logger with path /tmp/xpl-sql-logger
if match "^[0-9]{1,2}" then stop
stop program = "/usr/bin/killall -r xpl-sql-logger"

Exploitation des données

Pour exploiter les données, je suis en train d’écrire des gadgets pour Portaneo (P.O.S.H) à afin de pouvoir afficher les données sous forme de graphiques ;-)

Filed under: Debian, Home automation — Tags:, , , — cscm @ 11:44

September 6, 2009

Communication à l’aide du protocole ZigBee entre un PC et une carte Arduino

L’objectif de ce montage est de faire communiquer un PC avec une carte Arduino à l’aide du protocole ZigBee
Voici l’architecture de montage :

Cette article décrit la mise en place d’une topologie réseau simple, permettant de communiquer entre un PC et une carte Arduino à l’aide de modules XBee série 1 de chez Digi.

Les composants

Le montage nécessite les composants suivants :

  • un PC, fonctionnant sous Debian GNU/Linux pour ma part ;
  • une carte Arduino ou bien un adaptateur USB relié au PC ;
  • deux modules de communication XBee ;
  • une carte Arduino avec un adaptateur XBee.

A propos du protocole ZigBee

ZigBee est un protocole de haut niveau permettant la communication de petites radios, à consommation réduite, basée sur la norme IEEE 802.15.4 pour les réseaux à dimension personnelle (WPANs).

C’est vraiment un très bon protocole, qui est bien plus simple à mettre en œuvre que le protocole Bluetooth. Je ne sais pas si vous avez déjà vu la stack du protocole. Il y a de quoi avoir peur ;-)

xBee, ZigBee et beeee?

Si vous êtes perdus avec tous ces sigles, c’est normal. Moi aussi ;-) Voici ce que j’ai compris :

  • ZigBee : est le nom du protocole ;
  • XBee : est le nom du produit chez le constructeur Digi ;
  • IEEE 802.15.4 : c’est le nom du standard qui définit le communication dans un WPAN ;

Ok, c’est vraiment pas plus claire ;-) Mais c’est dit.

Liste des composants

Vous avez besoin des composants suivants :

Nom du composant Archeter chez Quantité Prix
Platine d’interface USB pour modules “XBEE” Lextronic 1 (optionnel) 23€ TTC
Module xBee Matlog 1 (optionnel) 20€ TTC
Arduino Duemilanove Libelium 2 24€ TTC
Arduino Xbee ZB 2mW + UFL Antenna Libelium 2 50€ TTC

Partie PC

La connexion entre le module Xbee et un PC peut se faire de deux manières :

  • à l’aide d’un adaptateur USB ;
  • à l’aide d’une carte Arduino et d’un Shield XBee ;

L’objectif pour la partie PC du montage est de communiquer avec le module XBee, à fin de lui envoyer des commandes.
Cette communication se fait à l’aide d un convertisseur USB-Serial, ce rôle est joué par l’adaptateur USB ou bien par la carte Arduino + Shield.

Connexion à l’aide de l’adaptateur USB

L’adaptateur XBee se connect directement sur le port USB du PC :

Un fois branché, le module est visible à l’aide de la commande lsusb :

Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Communication à l’aide d’une carte Arduino + XBee Shield

L’adaptateur XBee se connecte directement sur la carte Arduino :

Il est nécessaire de modifier la configuration par du shield pour mettre la carte en mode USB-Serial.
Pour cela, il faut mettre les deux jumper à droite (éloigner du port USB), comme sur cette photo : Configuration mode USB-serial
Vous pouvez ensuite brancher la carte Arduino et voir le module XBee à l’aide de la commande lsusb :

Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Connexion à l’aide d’un gestionnaire de terminal

Une fois que le module XBee est connecté au PC, il doit être disponible sur /dev/ttyUSB0 :

[31016.280327] ftdi_sio 2-8.3:1.0: FTDI USB Serial Device converter detected
[31016.280354] /build/buildd/linux-2.6.24/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[31016.280449] usb 2-8.3: FTDI USB Serial Device converter now attached to ttyUSB0

Pour communiquer avec le module, il faut utiliser un programme de gestion de terminal ( gtkterm, minicom ou bien l’IDE de la carte Arduino).
Voici la configuration pour gtkterm :

Configuration du module XBee

Une fois que vous etes connecté au module XBee, vous pouvez lui envoyer des commandes à l’aide du gestionnaire de terminal.
Le module dispose de deux mode de fonctionnement : normal et configuration.
Pour passer en mode configuration, il faut saisir +++ (sans CR, retour à la ligne).
Si le module a compris la commande, alors il retourne OK.
Voici un exemple de session :
.

Configuration d’un réseau bidirectionnelle simple

Voici les différentes instructions pour configurer un réseau simple, c’est à dire une communication bidirectionnelle entre deux cartes Arduino ou bien entre un PC et une carte Arduino

Configuration sur la carte reliée au PC


+++OK
ATMY1234
OK
ATDL5678
OK
ATDH0
OK
ATID1111
OK

Configuration du module Arduino


+++OK
ATMY5678
OK
ATDL1234
OK
ATDH0
OK
ATID1111
OK

Les commandes importantes sont :

  • ATMY : adresse source ;
  • ATDL : adresse de destination (bite de poids faible) ;
  • ATDH : adresse de destination (bite de poids fort) ;
  • ATID : identifiant du réseau ;

Utilisation au niveau de la carte Arduino

Il faut inscrire le programme suivant dans la mémoire de la carte :

void setup() {
Serial.begin(9600);
Serial.print("+++");
Serial.print("ATDH0\r");
Serial.print("ATDL1234\r");
Serial.print("ATMY5678\r");
Serial.print("ATID1111\r");
Serial.print("ATCN\r");
}
void loop() {
delay(1000);
Serial.print("42\n");
}

La programmer et changer le sens des deux “jumper” pour faire communiquer le module avec la carte.

Référence

Si vous voulez vous simplifier la vie, il existe une bibliothèque pour la programmation des modules xbee : xbee-arduino.

Filed under: Do it yourself, Home automation, Robotics — Tags:, , — cscm @ 19:43
Next Page »

Powered by WordPress