N’ayant pas de programmateur sur mes radiateurs électriques dans mon appartement, j’ai décidé avant l’hiver de concevoir un petit programme permettant de régler la température de manière optimale.
Je me suis donc basé sur un Arduino, des capteurs de températeurs DS18B20, le tout relié à un mon mini-pc gérant la commande des radiateurs via Z-Wave. Pour récupérer la température dans ma chambre, j’ai profité des fils de téléphone inutilisés qui passaient déjà dans les murs.
Tout à très bien marché, le soucis c’est que je n’ai jamais pris le temps de finaliser correctement la partie « filaire » de l’installation, et je me suis donc retrouvé avec un arduino posé sur le sol de mon salon connecté à tous pleins de fils.
Voulant passer à quelque chose d’un peu plus intégré, j’ai donc commencé à regarder comment il serait possible de récupérer la température, de préférence sans-fil, pour pouvoir disposer les capteurs où bon me semble. Afin de limiter le coût, j’ai cherché à réutiliser des capteurs existants de stations météo. Cela permet aussi d’avoir des capteurs bien fini, étanche, avec le logement pour les piles, etc…
Il fallait donc trouver un système, de préférence à base d’Arduino, permettant de recevoir facilement les données sans-fil des sondes existantes. Après un peu de recherche, je suis tombé là dessus : http://gcrnet.net/node/32. D’après cet article, il est apparemment possible de récupérer la température des sondes La Crosse Technology TX29 à l’aide d’un clone d’Arduino, nommé JeeNode, possédant un émetteur/récepteur adéquat. La sonde TX29 est vendu 12,90€ chez Leroy Merlin et me permet pour le même prix d’avoir l’hygrométrie (selon le modèle) et un écran LCD :). Le JeeNode quant à lui est commandable sur le site du constructeur pour 18,50€ (auquel il faut rajouter un adaptateur USB à 13,50€ pour pouvoir le programmer). Voilà qui était dans mes prix !
J’ai donc passé commande du JeeNode et de son adaptateur et voici ce que j’ai reçu :
Effectivement, le JeeNode est en kit. 30 minutes et quelques coups de fer à souder plus tard, voici le résultat (note au passage, investissez dans un bon fer à souder, j’ai eu peur à plusieurs reprises d’avoir tout cramé) :
Puis viens le moment suspens, on branche tout ça au PC et… ça marche 🙂 On charge le programme disponible sur le site permettant de décoder les trames des sondes de température et on voit s’afficher les températures relevées par les sondes 🙂
Nous recevons le relevé de température toutes les 4 secondes. Chaque sonde dispose d’un identifiant généré aléatoirement lors de l’insertion des piles. Cet identifiant est affiché quelques secondes sur l’écran LCD de la sonde lors de la mise en route.
Comme je ne suis pas fan du mix Arduino/C du programme disponible sur le site gcrnet, j’ai repris le travail effectué et j’ai ré-implémenté tout ça dans un fichier .ino classique. Il est disponible ici : tx29_jeenode. J’y ai aussi ajouté la librairie RF12 modifiée.
Maintenant que tout fonctionne, il va falloir adapter le code pour la prochaine étape : la communication en I2C avec un routeur TP LINK TL-WR703N !
Merci pour cet article qui m’a donné l’impulsion de me mettre à utiliser mes jeenodes acheté il y a plus de 2 ans.
Soudure des jeenodes faite il y a un an, je viens à l’instant de faire clignoter une LED…
J’ai acheté le TX29, demain je me lance dans le décodage des trames.
Merci beaucoup.
Pour mon information perso que faites vous des données collectés ?
Stockage en bdd ? rrd tools ? restitution sous forme de graph ?
De rien, si j’ai pu motiver quelqu’un, c’est déjà ça 🙂
Pour le stockage des infos, pour l’instant je ne sais pas encore, j’utilisai Munin pour me faire des graphs avec un plugin maison. Le but final étant de se passer de Munin pour intégrer ça directement dans l’interface, il faudra que je me penche dessus. Je ferais de toute façon un article là dessus le moment venu 🙂
Et voila, je décode les trames de mon TX29, génial.
Encore une fois merci
Bonjour,
j’ai une question quand au code.
Dans la fonction loop, a priori je ne rentre jamais dans le if (Serial.available() > 0), du coup on n’ecrit jamais sur le port série (sauf si on active le debug auquel cas l’ecriture sur le port série se fait dans la fonction ReadITPlusValue)
Est ce normal ?
Par avance merci
Hello,
C’est tout à fait normal, il suffit d’envoyer qq chose sur le port série (n’importe quel caractère fera l’affaire) pour que le Serial.available() soit > 0 et que tout s’affiche.
J’utilise ça parce que j’ai un petit programme qui tourne sur l’ordi connecté au JeeNode qui vient interroger toutes les x minutes le JeeNode pour qu’il lui donne les températures 🙂
OK, merci, cela permet donc côté programme collectant les données de garder le controle de l’interval entre 2 mesure…
Merci
bonjour, bravo pour le code thermosmart qui fonctionne trés bien sur un arduino UNO avec un shield RF FSK (adaptative design.
J’aimerai modifier le SS du bus SPI pour le mettre sur la broche 9 car ma carte à un cavalier pour le faire et cela me permettrai de mettre un shield Ethernet en plus.
J’ai essayé de modifier le RF12.cpp mais cela ne fonctionne pas. Voici les modifications que j’ai apporté. Je redémarre bien l’IDE arduino aprés chaque modification de RF12.cpp. Les modifications sont en commentaires.
// ATmega168, ATmega328, etc.
#define RFM_IRQ 2
#define SS_DDR DDRB
#define SS_PORT PORTB
//#define SS_BIT 1 // for PORTB: 2 = d.10, 1 = d.9, 0 = d.8
#define SS_BIT 2 // for PORTB: 2 = d.10, 1 = d.9, 0 = d.8
// modification pour SS sur pin9 sur pin 10 d’origine
#define SPI_SS 10 // PB2, pin 16
//#define SPI_SS 9 // PB1, pin 15
#define SPI_MOSI 11 // PB3, pin 17
#define SPI_MISO 12 // PB4, pin 18
#define SPI_SCK 13 // PB5, pin 19
Merci d’éclairer ma lanterne.
Bonjour Hervé,
Désolé de ne répondre que maintenant mais je viens de m’apercevoir d’un soucis de configuration sur mon serveur qui ne m’envoyais pas les mails de notifications.
Concernant le changement de pin j’avoue pour le coup botter en touche, je n’ai fait des tests qu’avec le JeeNode qui a lui ses pins de connectés en dur. J’espère que tu trouvera ce qui faut pour changer ça (peut-être déjà trouvé 😉 )