Ce mois-ci a eu lieu chez InTech une nouvelle édition de nos « Soirée Dév ». C’est l’occasion pour nous de nous retrouver le temps d’une soirée dans les locaux d’InTech pour hacker tous ensemble dans la joie et la bonne humeur !
L’édition de ce mois ci était orientée sur les objets connectés, le but étant de faire une introduction à ce vaste sujet, depuis le montage électronique jusqu’au développement pour cette plate-forme.
Le projet
Le temps imparti était relativement restreint (une soirée, ça passe vite, surtout en bonne compagnie !), le projet retenu était la réalisation d’un capteur de température connecté, qui allait nous permettre de faire des relevés de température et de publier ces données sur Internet, dans le but de construire une visualisation de ces informations.
Au niveau électronique, nous nous sommes basé sur un microcontrolleur ESP8266, et un capteur de température très couramment rencontré dans les montages électronique, le 18B20. Pour la collecte des informations, nous souhaitions utiliser la plateforme ouverte Thingspeak pour les API qu’elle propose et pour l’interface web sateur nous permettant très vite de consulter les données remontées.
L’ESP8266
Dernière ce nom obscure se cache un microcontrolleur très apprécié actuellement des hobbyistes. Il est en effet très bon marché (moins de 3$) et possède tout ce dont nous avions besoin pour notre projet :
- 2 ports GPIO (sur la version que nous avions sélectionnée), dans notre cas utilisés pour s’interfacer avec le capteur de température
- Une antenne WIFI lui permettant de se connecter au réseau local pour la remontée d’informations
- Une alimentation en 3.3v, ce qui permet par la suite de rendre notre projet autonome via une alimentation par batteries ou piles
- Différents SDKs Open Source disponibles, permettant de développer simplement sur ce microcontrolleur.
Dans sa version de base, l’ESP8266 est fourni avec un firmware simpliste avec lequel il est possible de communiquer via des « commandes AT »… (Souvenirs…! Ce sont ces mêmes instructions qui permettaient de se connecter aux vieux modem, et qui permettaient notamment au PC de lancer la composition d’un numéro de téléphone…).
Pour notre cas d’utilisation, nous avions besoin d’un firmware un peu plus complet, qui allait nous permettre notamment de stocker et d’exécuter du code sur le microcontrolleur, pour se connecter au wifi, lancer à une période définie la récupération de valeurs sur le capteur et l’envoi sur la plateforme Thingspeak.
Le succès de l’ESP est tel que différents firmwares alternatifs ont été développés par la communauté. Nous avons donc flashé nos microcontrolleurs avec le firmware NodeMCU, qui apporte un certain nombre de facilités et d’API permettant à notre code de s’interfacer avec le reste du monde (support de TCP/IP, librairies pour communiquer avec le capteur, …).
Le montage
Nous avons donc réalisé notre montage très simple, de la façon suivante :

Le module USB (FTDI) nous permet de communiquer via la communication série du microcontrolleur et le port USB de nos machines. Il permet également d’apporter une alimentation 3.3v à l’ESP. C’est via cette connexion série que nous pourrons uploader le code source sur le microcontrolleur, et débugger le programme.

Le capteur de température est quant à lui raccordé à un des deux ports GPIO de l’ESP (en l’occurence le GPIO 1).
Le code
Passons maintenant à la partie programmation. Le firmware NodeMCU supporte le langage de script Lua. La partie software de notre objet est donc un ensemble de scripts Lua, qui sont exécutés automatiquement au démarrage du microcontrolleur et dans lesquels nous avons mis en place :
- La connexion au point d’accès WIFI
- L’exécution d’une tâche planifiée, qui à intervalle régulier va :
- Récupérer la valeur actuelle de la température via le port GPIO du microcontrolleur
- Envoyer une requête REST sur la plateforme Thingspeak pour publier la valeur lue sur le composant
Lua est un langage de script très simple à appréhender, et NodeMCU fournit des API permettant d’intégrer rapidement les fonctionnalités disponibles sur le microcontrolleur.
Pour démonter la simplicité d’utilisation offerte par NodeMCU, voici un exemple de code permettant d’envoyer la valeur vers l’interface REST de Thingspeak.
[code lang= »lua »]
— Communication avec le capteur
t = require(« ds18b20 »)
function sendData(temp)
conn=net.createConnection(net.TCP, 0)
— Adresse IP de api.thingspeak.com : 144.212.80.11
— Il faut également renseigner l’API KEY récupérée sur Thingspeak
conn:connect(80,’144.212.80.11′)
conn:send(« GET /update?key=THINGSPEAK_KEY&field1= »..temp.. » HTTP/1.1\r\n »)
conn:send(« Host: api.thingspeak.com\r\n »)
conn:send(« Accept: */*\r\n »)
conn:send(« User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n »)
conn:send(« \r\n »)
conn:on(« sent »,function(conn)
conn:close()
end)
end
— Le capteur est sur le GPIO 2, mappé sur l’ID 4 dans NodeMCU
— (voir https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en#new_gpio_map)
gpio2 = 4
t.setup(gpio2)
— Exécution de la fonction toutes les 5 secondes
tmr.alarm(0,5000, 1, function()
— Lecture de la valeur
temperature=t.read()
print(« Temperature: « ..temperature.. »‘C »)
— Envoi vers ThingSpeak
sendData(temperature)
end)
[/code]
Le résultat
Notre module, même s’il n’est pas finalisé, est fonctionnel est publie donc régulièrement les relevés de températures sur la plateforme Thingspeak !
Exemple de suivi des relevés sur l’interface Web de Thingspeak :
Ce sujet, très simple d’un point de vue de la réalisation, nous a permis d’appréhender différentes problématiques courantes dans la conception d’objet connecté : contraintes électroniques, contraintes en terme de développement logiciel lié au micro-controlleur, contraintes de consommation d’énergie, d’accessibilité au réseau, … C’était aussi et surtout l’occasion de passer une soirée à bricoler ensemble, et pour certains un premier pas dans le monde de l’électronique !



