![M. Vert :mrgreen:](./images/smilies/icon_mrgreen.gif)
Piloter des rampes LEDs depuis une appli Web avec un Raspberry Pi
Après 1 an de service, les Arduinos (programme ACKduino) qui pilotaient mes premières rampes DIY Maxspect Razor ne me satisfaisaient pas : problème de reset de l'horloge, pas connecté sur le web, debug impossible, upgrade lourdingue avec codeBlocks …
J'avais bien l'idée de passer sur Raspberry Pi mais le problème c'était le PWM (natif en Arduino) qui n'existe pas sur le Raspberry Pi …
Un GRAND merci à Sébastien M. (projet ACKduino) qui m'a fait découvrir les cartes PWM de AB Electronics
Présentation de l'appli
![Image](http://i65.tinypic.com/2llymmq.png)
![Image](http://i67.tinypic.com/b7ig5k.png)
(Oui je sais, c'est pas super joli, mais je suis admin sys pas web designer …)
Cette appli permet de piloter de 1 à n rampe(s) avec des LEDs dimmables à 2 canaux (Blue/White) avec :
* une gestion de n « Time Period » comme sur les Maxspect Razor ie de telle heure à telle heure, xx % de Blue et yy % de white
* afficher en temps réel la T° de chaque rampe
* piloter 1 relais par rampe pour la refroidir via un(des) ventilateur(s) suivant une T° de consigne
* forcer une atténuation de xx % à partir d'un seuil de T° si au check suivant la T° est toujours supérieur au seuil
* sauvegarder les paramètres dans un fichier
* tester le relais ventilo sur 1 clic
* tester chaque canal sur 1 clic (slider)
Ce qu'il reste à faire (help welcome) c'est :
* externaliser les adresses des sondes de T° (actuellement en dur dans le programme)
* faire une IHM pour définir les Time Periods à la cliquette (actuellement en JSON dans le fichier config)
* ajouter une alerte par mail sur la perte d'une sonde (vécu) (en cours)
PS : la semaine dernière, une sonde m'a lachée, comme mes 8 sondes sont en série, le raspberry ne voyait plus du tout de sonde et bêtement dans le programme j'avais collé un 0°C si pas de sonde, du coup les rampes n'étaient plus refroidies et heureusement que j'avais prévu des fusibles thermiques qui coupent l'alim à 65°C sinon j’aurais perdu tous mes Pads …
La plaisanterie a bien durée 2 ou 3 jours le temps que je m'en rende compte (le matin et le soir le % est trop faible pour que les fusibles thermiques se déclenchent). du coup, j'ai fait une mise à jour pour forcer la T° à « consigne atténuation -1 » si une sonde n'est pas détectée, du coup le(s) ventilo(s) tourne(nt) en marche forcée et je bosse actuellement sur une alerte mail en cas de dysfonctionnement.
Le cablage
![Image](http://i66.tinypic.com/s0vsbp.png)
Rien de bien compliqué :
* les sondes en série reliés au GPIO4 avec 1 seule résistance de 4.7K ohms entre la borne data et le +
* la carte relais alimentée en 5V externe (ça devrait aussi marcher avec le raspberry mais j'ai préféré séparer), le - est relié au raspberry, les 8 plots des relais aux GPIO 11 à 18.
Les relais me servent à shunter l'alim de 3 ventilos 12V (en parallèle) alimentés en 9V (donc 0 bruit).
* la carte PWM est pluguée directement sur le raspberry ou via une nappe 40 pin.
Sur les 16 ports de la carte PWM ont relie est les 16 PWM des dimmers et le - de chaque dimmer.
La config du Raspberry Pi
Autant mettre les choses au clair tout de suite, si vous êtes adepte de la cliquette sous Windows & OS X vous allez un peu souffrir, parce qu'il va falloir mettre les mains dans le cambouis
![Rire :lol:](./images/smilies/icon_lol.gif)
Je passe l'installation de base du Raspberry, personnellement je suis parti d'une Raspbian mais ça doit pouvoir fonctionner sous d'autres distrib.
Il faut penser à activer le bus i2c
Le plus difficile c'est de réussir à faire lire les datas des sondes de température au Raspberry …
La dessus j'ai pas mal galéré alors je vous donne ma « config qui marche », c'est très inspiré de l'article suivant.
Note : vous n'avez pas forcément besoin d'avoir une sonde connectée pour le moment pour configurer le Raspberry mais ça aide.
* allez dans le dossier « /sys/bus/w1/devices »
Code : Tout sélectionner
pi@raspberrypi ~ $ cd /sys/bus/w1/devices
Code : Tout sélectionner
pi@raspberrypi /sys/bus/w1/devices $ ls
Détection des sondes de T°
Pour que ça marche chez moi sur mes 3 Raspberry Pi (version 2 et 3) et ainsi que sur le Raspberry Pi d'un internaute que j'ai dépanné ce matin il m'a suffit de :
* Editer le fichier « /boot/config.txt », ajouter la ligne :
Code : Tout sélectionner
dtoverlay=w1-gpio
* Editer le fichier « /etc/modules » et comparez avec le mien :
Code : Tout sélectionner
w1-therm
w1-gpio pullup=1
snd-bcm2835
spi-bcm2708
i2c-bcm2708
i2c-dev
rtc-ds1307
Au redémarrage, vous devriez avoir dans le dossier « /sys/bus/w1/devices » au moins « w1_bus_master1 »
Installation des programmes
Il vous faut git, nodejs et mon repository, si cela vous parle pas du tout, contentez vous de lancez les commandes suivantes :
Code : Tout sélectionner
pi@raspberrypi ~ $ sudo apt-get install git
pi@raspberrypi ~ $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
pi@raspberrypi ~ $ sudo apt-get install nodejs
pi@raspberrypi ~ $ git clone https://github.com/ylemarie/maxspect-diy.git
pi@raspberrypi ~ $ cd ~/maxspect-diy
pi@raspberrypi ~/maxspect-diy $ git clone https://github.com/abelectronicsuk/ABElectronics_NodeJS_Libraries.git
Note : Même si vous n'avez pas branché les sondes, les cartes relais, la carte PWM, vous pouvez faire tourner « à vide » le programme.
Code : Tout sélectionner
pi@raspberrypi ~ $ cd ~/maxspect-diy
pi@raspberrypi ~ $ sudo node app.js
Code : Tout sélectionner
cd /home/pi/maxspect-diy
node app.js
Le serveur web tourne par défaut sur le port 8989, il vous suffit de lancer dans un navigateur http://rapsberry_ip:8989 pour voir quelques chose qui ressemble à ceci :
![Image](http://i65.tinypic.com/2llymmq.png)
Pour connaître l'adresse IP de votre Raspberry Pi, lancez « ifconfig » :
![Image](http://i64.tinypic.com/2chn67m.png)
Ici l'adresse IP locale du Raspberry Pi est 192.168.1.77, donc sur votre réseau local tapez http://192.168.1.77:8989.
Si vous voulez utiliser l'appli depuis votre mobile, il faut ouvrir le port 8989 de votre box et rediriger le trafic vers l'adresse IP locale de votre Raspberry Pi. Vous accéderez ensuite à l'appli via http://adresse_box:8989, si vous avez une freebox cette adresse IP est fixe, pour les autres je ne sais pas, mais il est toujours possible de passer par des services du type DynDNS pour contourner le problème.
Configuration
* cliquez en haut à gauche sur l'engrenage, vous accédez au menu de config. Un clic sur la disquette permet de sauvegarder les données.
* les paramètres dans l'ordre :
- température de consigne des ventilos
- température de consigne de l'atténuation
- % d'atténuation si au prochain cycle la T° de consigne d'atténuation est toujours trop haute
- période de cycle en secondes (check des T°, de l'heure pour changer les %)
* si vous cliquez sur "others" vous tomberez sur quelque chose de pas terminé, pas testé, alors attention ... vous verrez :
- nombre de Time Periods : a votre place j'y toucherait pas, je ne sais plus s'il y a du code derrière ni ce qu'il peut bien faire
![Choqué :shock:](./images/smilies/icon_eek.gif)
- nombre de rampes : idem pas trop toucher
- port de l'appli web: ca c'est ok, vous pouvez le modifer
- le on & le off : ma carte relais fonctionne à l'envers de la logique, donc j'ai inversé le on & le off
- debug : activer le mode debug en console
- log : activer le mode log dans un fichier, je pense que j'irai piocher dans ce fichier pour détecter les dysfonctionnement et déclancher les alertes mails
Dans tous les cas, il est possible (et même obligé pour les time Period) de tout définir dans le fichier "parameters.json".
Si le fichier est illisible (plus de sauts de ligne) vous pouvez le remettre en forme en ligne.
Si vous ne connaissez pas le JSON, évitez de trop jouer avec les crochets, les virgules, contentez-vous de modifier mes valeurs ...
Premier démarrage: trouver les adresses des sondes
Lorsque vous aurez branché vos sondes de température, il va faloir patcher mon code pour y mettre les adresses de vos sondes.
Lancez le programme une première fois et repérer le code de debug au début, je liste les adresses de toutes les sondes
Code : Tout sélectionner
T° Sensors Harware Adr
Code : Tout sélectionner
rampeSensors[7] = '28-031564e750ff'; //rampe 8
rampeSensors[4] = '28-031564bed0ff'; //rampe 5
rampeSensors[1] = '28-0315a477f2ff'; //rampe 2
rampeSensors[6] = '28-0115a51285ff'; //rampe 7
rampeSensors[3] = '28-0115a44ef5ff'; //rampe 4
rampeSensors[2] = '28-0315a4d8b3ff'; //rampe 3
rampeSensors[5] = '28-021564d12bff'; //rampe 6
rampeSensors[0] = '28-0000043adf77'; //rampe 1
Une fois que vous avez l'ordre, vous modifiez les indices dans la déclaration des adresses lignes 105 : rampeSensors[xx]
Versions
J'ai déposé sur github tous les sources du projet, je maintient 2 branches :
- master pour mes 8 rampes du 1600L du salon
- batterie pour mes 3 bacs de ma batterie
Cette dernière version permet de gérer des Time Period spécifique pour chaque rampe (la version master c'est toutes les rampes idem).
Si des développeurs NodeJS passe par ici, mon code va surement les faire hurler, vous êtes les bienvenus pour corriger, optimiser tout ça. Mon objectif c'était que ça marche, que ce soit écrit dans les règles de l'art je m'en
![Yeux tournants :roll:](./images/smilies/icon_rolleyes.gif)
Voilà, si j'ai oublié quelque chose, MP ou postez ici.
Yann