DomoPi : programmation de l'Arduino

Ajouté le : 25 décembre 2013

Maintenant que nous avons notre carte électronique (voir ici) et donc toute la partie harware nécessaire, nous allons pouvoir passer à la partie software. Celle-ci se décomposera en 2 partie. La première concernera la programmation de l'Arduino et la seconde la programmation côté Raspberry Pi.

Le programme de l'Arduino que nous allons voir fonctionne avec n'importe quelle carte Arduino à laquelle vous aurez relié sur la broche 3, la sortie d'un récepteur RF, et sur la broche 11, un émetteur RF.

Programmation de l'Arduino

La liaison série que nous avons établie entre notre Raspberry et notre Arduino va nous permettre de programmer celui-ci. Pour cela il vous faut tout d'abord télécharger la version modifié du programmateur avrdude qui permet de faire un reset de l'Arduino via le GPIO du Pi. Vous trouverez plus d'info ici

$ wget https://raw.github.com/wyolum/alamode/master/bundles/alamode-setup.tar.gz
$ tar -xvzf alamode-setup.tar.gz
$ cd alamode-setup
$ sudo ./setup
$ sudo reboot

Ces commandes vont désactiver les logs qui circulent sur le port série du Pi afin de pouvoir l'utiliser pour programmer l'Arduino, installer un nouveau type de programmateur (alamode), et redémarrez pour être pris en compte.

Vous pouvez télécharger les sources ici ou directement télécharger le code compilé par la commande :

$ wget http://www.domocreation.fr/projets/DomoPi/DomoPi.cpp.hex

Puis programmer votre Arduino par la commande :

$ avrdude -v -p m328p -b 57600 -c alamode -P /dev/ttyS0 -D -U flash:w:DomoPi.cpp.hex

Bizarrement la commande avrdude ne fonctionne jamais la première fois... relancez donc une deuxième fois. Vous devez voir une séquence d'écriture puis de vérification, et enfin la led doit se mettre à clignoter.

L'arduino maintenant programmé, on va vérifier que celui-ci fonctionne. Pour cela on va se connecter dessus en utilisant le port série :

$ sudo apt-get install minicom
$ minicom -b 38400 -o -D /dev/ttyS0

Et si tout fonctionne correctement vous devriez voir apparaître ce genre de lignes :

Exemple de communication

Dans cet exemple vous pouvez voir que l'interface recevait une sonde sur le canal 1 avec un indicateur de batterie faible. Puis la même sonde après remplacement des piles (notez le changement d'ID). Et enfin un signal homeeasy. Nous verrons plus tard le détail du protocole mais en attendant il se résume ainsi :

  • pour une sonde Oregon Version 1 : OREGONV1 ID CHANNEL TEMPERATURE [BATTERIE]
  • pour une commande Chacon : HE ID GROUP UNIT COMMAND

Voilà, vous disposez maintenant d'une petite box de domotique qu'on va pouvoir faire évoluer petit à petit :)

Passons maintenant à l'écriture d'un driver xPL pour notre projet, c'est ici.

6 commentaires (Ajouter)

Fabien

8 avril 2015 à 11:24
bonjour Super tuto , une question me viens a l'esprit , au lieu d'utiliser un arduino pro comme tu l'as fait , es ce possible d’utiliser seulement un atmega (la puce de l'arduino uno par ex) comme ca on beneficie de l'interface de prog de l'arduino et ca prend encore moins de place que l'arduino pro ?

Baden

8 janvier 2015 à 14:39
Bonjour, Sais-tu comment interfacer cela avec Domoticz ?

Franck

20 mai 2014 à 16:45
@ankoine: bonjour, le projet est un peu en pause suite à mon déménagement et les nombreux travaux à réaliser. Tu n'es pas obligé de passer par minicom. N'importe quel script pour lire le port série fonctionne. J'ai fait un script xpl qui doit faire l'objet de la 3ème partie de ce projet. Je peux t'envoyer les sources en attendant que je trouve le temps d'écrire la suite de l'article. Bonne continuation

ankoine

19 mai 2014 à 19:20
Bonjour, Merci pour ce tuto, le tout fonctionne très bien! Je voulais savoir si tu avais avancer dessus? Une question, pour traiter automatiquement et enregistrer les valeurs sommes nous obligés de passer par minicom ou un script peut le faire? Par avance merci

matthieu

20 février 2014 à 14:39
pareil, je veux bien le code arduino en .cpp ou .ino tuto super intéressant, ça ouvre plein de perspectives !
Ajouter votre commentaire

Tous les champs sont obligatoires