Salut,
Je vous avais parlé il y a quelques temps du Raspberry pi qui pouvait être utile en guise d’ordinateur dans son atelier (et ce d’autant plus depuis la sortie des Raspberry pi 2 et 3 qui sont suffisamment puissants pour naviguer confortablement en utilisant un navigateur moderne. Le logiciel Kodi, un mediacenter libre, permet en outre d’accéder à un nombre incalculable de radios à travers le monde, qu’elles soient hertziennes ou sur le Web : de quoi vous accompagner pendant vos longues heures à travailler sur votre guitare).
Bref, l’intérêt est qu’on peut y ajouter par exemple une sonde DHT22 qui permet de contrôler l’hygrométrie de la pièce. Le raspberry consomme peu d’énergie et se passe de ventilation (donc pas de problème de poussière).
Récemment, j’ai découvert une alternative plus légère – et moins chère – pour le contrôle de l’hygrométrie mais qui ne peut pas servir d’ordinateur par contre.
Il existe une petite puce qui peut entre autres se connecter à votre réseau Wifi et envoyer les données de votre sonde que vous pourrez suivre sous forme de courbe dans un graph. En ce qui me concerne, j’ai branché une petite borne wifi dans l’atelier qui est alimentée en réseau par un boîtier CPL (réseau au travers des prises de courant 220 classiques). Avec cette petite puce, vous pourrez pourquoi pas envoyer une alerte lorsque l’humidité ambiante dépasse un certain seuil ou que la température et trop basse…
Présentation
Cette puce se nomme ESP8266 et elle a été intégrée sur une interface permettant de l’utiliser et de la programmer plus facilement grâce notamment à un firmware opensource : cette interface se nomme nodeMCU
Schéma
Voici le schéma très simple que je vous propose de réaliser :
Matériel nécessaire
Vous aurez donc besoin de :
- Une sonde AM2302 (il s’agit d’une sonde DHT22 avec une résistance intégrée ce qui permet de la relier directement)
- Une module node MCU que l’on peut trouver pour 5$ chez aliexpress
- Une « Half-size breadboard » pour faire les branchements sera suffisante, disponible chez Adafruit.
- Un peu de fil
- Facultatif deux LEDs classiques qui permettront de contrôler que la sonde est bien fonctionnelle d’un coup d’oeil.
Tout le matériel nécessaire peut être commandé chez Adafruit et Aliexpress (pour le nodeMCU).
Nous pouvons commencer à programmer tout ça.
Installation du pilote
La première chose à faire est d’avoir un pilote qui reconnait le nodeMCU lorsqu’on le branche en USB. Le driver qui va bien peut être trouvé ici : https://www.silabs.com/. Il se peut que le module soit reconnu automatiquement, auquel cas il n’y a rien à faire. Sinon :
sous windows
Pour windows, la procédure d’installation est assez simple puisque le pilote est fourni avec un « installer » (lire installeur).
Sous LINUX
Pour ceux d’entre-vous qui utilisent linux, il faudra compiler le pilote, avec debian, par exemple (4.2.0-1-amd64 correspond à la version de mon noyau, à adapter donc) :
make -f Makefile make install cp cp210x.ko /lib/modules/4.2.0-1-amd64/kernel/drivers/usb/serial/ insmod /lib/modules/4.2.0-1-amd64/kernel/drivers/usb/serial/usbserial.ko insmod cp210x.ko rmmod cp210x modprobe cp210x
Faites dmesg |tail afin de vérifier que le nodeMCU est bien reconnu lorsque vous le connectez à l’ordinateur.
Téléchargement d’un firmware adapté
Il faut ensuite flasher le nodeMCU avec un firmware embarquant le module DHT.
Le site de nodeMCU permet de demander un firmware avec les modules que l’on veut : http://nodemcu-build.com/index.php (n’oubliez pas de cocher le module DHT)
Un peu plus tard, vous devriez recevoir le firmware par mail.
Flashage du module
Vérifiez que vous avez accès à votre module avec un programme comme putty ou screen sous linux (dans ce cas, sous debian : apt-get install screen).
Votre module doit fonctionner avec les paramètres par défaut du programme en 9600 bauds. Choisissez par contre le bon port série. COMX sous Windows, /dev/ttyUSB0 sous linux.
Branchez votre module, lancez putty sous windows ou screen sous linux (screen /dev/ttyUSB0 9600), appuyez sur le petit bouton reset du module. Screen ou putty devraient au moins pouvoir se connecter en 9600 sans retourner d’erreur (fenêtre noire). En appuyant sur reset, vous devriez voir du texte apparaître, dans mon cas, ça affichait un peu n’importe quoi, ce n’est qu’une fois après avoir flashé le module que j’ai pu afficher les caractères qu’il me renvoyait correctement.
Sous linux (debian) :
Un programme python est utilisé pour flasher votre module avec le firmware que vous avez reçu.
apt-get install python python-serial git mkdir -p ~/Documents/nodeMCU cd ~/Documents/nodeMCU git clone https://github.com/themadinventor/esptool.git cd esptool python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware
Sous Windows :
NodeMCU propose sur son site un outil facile à installer et à utiliser pour flasher le module :
https://github.com/nodemcu/nodemcu-flasher/
Choisissez 32 ou x64 en fonction de la version de votre système d’exploitation.
Inscription sur thingspeak
Inscrivez vous sur thingspeak et créez votre chaîne (channel) :
dans la partie API Keys, notez la clé perettant d’écrire dans votre chaîne.
le programme – init.LUA
Le programme que je vous propose (voir ci-dessous) permet d’une part de créer un petit serveur WEB sur le nodeMCU qui permet à travers une simple page Web d’interroger la sonde de température et d’humidité ; et d’autre part, d’envoyer à intervalle régulier les données sur le site thingspeak.com. Avant d’utiliser le programme, créez votre channel sur le site pour pouvoir y envoyer les données.
Il est écrit en langage lua, un langage très simple et de très haut niveau. Voici quelques ressources intéressantes :
https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-nodemcu-lua
http://nodemcu.readthedocs.org/en/dev/
Le programme que je vous propose est un peu redondant, mais c’est pour montrer quelques unes des possibilités que ce module offre.
Voici le programme, enregistrez le sous le nom init.lua avant de l’envoyer au module. N’oubliez pas de modifier la clé thingspeak (key =) et les paramètres de votre WIFI, et éventuellement, l’adresse IP du serveur fournissant l’API de thingspeak.com (ici 184.106.153.149) que vous pouvez obtenir ici : lien vers l’IP statique de l’API
Les leds sont branchées sur les GPIO 6 et 7, la sonde sur le GPIO 4. Changez ces valeurs si vos branchements ne correspondent pas.
wifi.setmode(wifi.STATION) wifi.sta.config{ssid="NOM DE VORE WIFI",pwd="MA_CLE_WIFI"} led1 = 6 led2 = 7 DHT22 = 4 key = "VOTRE CLE THINGSPEAK" gpio.mode(led1, gpio.OUTPUT) gpio.mode(led2, gpio.OUTPUT) gpio.write(led1, gpio.LOW); gpio.write(led2, gpio.LOW); srv=net.createServer(net.TCP,30) if srv then srv:listen(80,function(conn) conn:on("receive", function(conn,request) gpio.write(led1, gpio.LOW); gpio.write(led2, gpio.LOW); local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end buf = buf.."<h1> ESP8266 Sonde de temperature connectee</h1>"; buf = buf.."<p>Afficher les valeurs de temperature et d'humidite : <a href=\"\"><button>Actualiser</button></a></p>" local i=0 status = 2 while status ~= dht.OK and i < 30 do tmr.delay(100000) status,temp,humi,temp_decimial,humi_decimial = dht.read(DHT22) if( status == dht.OK ) then buf = buf.."<p>DHT Temperature:"..temp..";".."<br />Humidite : "..humi.."</p>" print("DHT Temperature : "..temp..";".."Humidite : "..humi) gpio.write(led2, gpio.HIGH) end i=i+1 end if(i==30)then gpio.write(led1, gpio.HIGH); end conn:send(buf); conn:on("sent",function(conn) conn:close() end) end) end) end function sendData() gpio.write(led1, gpio.LOW); gpio.write(led2, gpio.LOW); print("Envoi des donnees vers thingspeak.com") conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) print(payload) end) local i=0 status = 2 tmr.delay(1000000) while status ~= dht.OK and i < 30 do status,temp,humi,temp_decimial,humi_decimial = dht.read(DHT22) if( status == dht.OK ) then gpio.write(led2, gpio.HIGH) end i=i+1 end if(i==30)then gpio.write(led1, gpio.HIGH); else update_request = "GET /update?key="..key.."&field1="..temp.."&field2="..humi.."HTTP/1.1\r\n".."Host: api.thingspeak.com\r\n".."Accept: */*\r\n\r\n" conn:on("connection", function(c) conn:send(update_request) end) conn:connect(80,"184.106.153.149") end conn:on("sent",function(conn) print("Closing connection") conn:close() end) conn:on("disconnection", function(conn) print("Deconnecte...") end) end
sendData()
-- affiche l'adresse IP du module sur le reseau local print(wifi.sta.getip())
-- send data every X ms to thing speak tmr.alarm(2, 60000, 1, function() sendData() end )
Copie du programme sur le module
Sous linux :
cd ~/Documents/nodeMCU
git clone https://github.com/4refr0nt/luatool.git
Sous windows :
Installez python 2.7.
installez git et cloner le dépôt suivant :
https://github.com/4refr0nt/luatool.git
Ou alors, rendez vous à la page suivante : https://github.com/4refr0nt/luatool et cliquez sur download zip pour obtenir le programme.
Luatool : pour quoi faire ?
Luatool permet d’envoyer votre programme sur le module nodeMCU, et notamment le fichier init.lua qui est exécuté automatiquement au démarrage de ce dernier.
Envoi du programme :
Branchez votre module avec la prise USB.
Voici la commande linux permettant d’envoyer votre programme sur le module (il faut parfois la lancer deux fois avant que ça fonctionne) :
python luatool.py --port /dev/ttyUSB0 --src init.lua --dest init.lua --restart
Connectez vous avec screen par exemple :
screen /dev/ttyUSB0 9600
Appuyez sur le bouton reset, et vérifiez à l’écran que tout à l’air de bien fonctionner et recueillir son adresse IP qui est affichée par le programme avec la ligneprint(wifi.sta.getip()). Si vous ne voyez que des caractères étranges, essayez d’autres valeurs de vitesse de connexion que 9600 avec putty ou screen (115200, 74880)
A partir de là, le module peut fonctionner de manière autonome et être branché simplement avec un chargeur de téléphone portable.
Une fois l’adresse ip récupérée, il suffit de se rendre à son adresse dans un navigateur Internet depuis un téléhphone, une tablette, un ordinateur connecté sur le réseau WIFI pour pouvoir interroger la sonde :
http://192.168.0.10 par exemple.
Vous devriez aussi voir les données arriver sur votre chaîne thingspeak en temps réel à intervale régulier (toutes les 60 secondes).
Une redirection du port 80 sur votre routeur vers l’adresse IP locale de votre puce doit vous permettre facilement d’interroger votre sonde depuis n’importe où.
Libre à vous de modifier le programme pour envoyer un mail en cas d’humidité trop haute ou que sais-je encore !
Laisser un commentaire