ESP8266 : des microcontrôleurs avec Wifi intégré pour 2€, l’avalanche des objets connectés dans Constellation : dossier complet dans le magazine Programmez!
Arrivé à l’été 2014, l’ESP8266 est un microcontrôleur produit par la société chinoise Espressif intégrant un module Wifi. Avec un prix avoisinant les 2€, il a très vite séduit les foules qui se sont empressées de créer une communauté dans laquelle on retrouve maintenant beaucoup de documentation, de bouts de codes, plusieurs firmwares, projets en tout genre et des forums très riches d’enseignement.
Initialement cette puce était un « simple » module Wifi permettant à un microcontrôleur équipé d’une liaison série, tel un Arduino, de disposer d’une connectivité Wifi pour un prix dérisoire. Mais depuis Octobre 2014, Espressif a publié un kit de développement (SDK) permettant de reprogrammer la puce supprimant ainsi la nécessité d’un microcontrôleur séparé ! On peut donc maintenant développer sur ce microcontrôleur autonome en C++ natif, en Arduino, en Lua, etc…
Grâce au SDK Constellation, ce microcontrôleur de la taille d’une pièce de 2€ peut échanger avec tous les systèmes connectés de votre Constellation comme avec un thermostat Nest, une alarme Paradox, de la domotique Z-Wave, des ordinateurs Linux ou Windows, etc… Et le tout en quelques lignes de code seulement !
Update Juillet 2016 : ce dossier est désormais disponible en ligne sur mon site à l’adresse : https://sebastien.warin.fr/2016/07/12/4138-decouverte-des-esp8266-le-microcontroleur-connecte-par-wifi-pour-2-au-potentiel-phenomenal-avec-constellation/
Dossier complet dans le magazine Programmez! 190
Pour découvrir en détail tout le potentiel de ces microcontrôleurs, vous trouverez un dossier complet sur les ESP8266 à partir du 31 octobre chez votre libraire préféré le numéro 190 du magazine Programmez! :
Au sommaire :
- Présentation des caractéristiques de l’ESP8266 et ses différents modèles
- Découverte du firmware AT permettant d’ajouter du Wifi à tous vos projets existants au moyen d’une liaison série
- Découverte des SDK natifs : ESP IoT SDK et ESP IoT RTOS SDK
- Découverte du firmware NodeMCU pour développer en Lua
- Découverte du firmware Arduino pour exploiter vos ESP dans un environnement simple et familier
- Présentation du SDK Constellation pour Arduino/ESP8266
Bref à tour d’horizon complet du monde des ESP8266 !
Des projets ESP8266 dans toute la maison avec Constellation
Une fois les présentations faites, vous trouverez un 2ème article présentant quelques projets basés sur des ESP8266 connectés dans votre Constellation.
Vous y découvrez par exemple, comment en une dizaine de ligne de code, faire parler votre alarme Paradox avec un ESP pour piloter une matrice de LED indiquant en temps réel l’état de vos zones :
Comment, grâce au SDK Constellation pour JavaScript, piloter en temps réel un anneau de LED depuis une page Web en 5 lignes de code Javascript :
Ou encore, toujours en 5 lignes de code, comment lier la consommation de votre CPU à votre anneau de LED grâce à Constellation :
Une fois le fonctionnement de la plateforme Constellation et de son SDK pour ESP/Arduino compris, vous saurez comment des systèmes connectés sur Constellation peuvent très facilement échanger des messages et des données (les fameux StateObjects).
Il devient ainsi facile de créer tout type d’objets connectés en accédant à toutes les données et fonctionnalités des autres systèmes connectés de votre Constellation.
Vos ESP8266 pourront par exemple exploiter l’état de vos systèmes comme l’état d’une zone d’alarme, de votre CPU, de vos capteurs de T° Z-wave, NetAtmo & autre, de votre TV, du volume de l’ampli ou encore de votre dernière pesée sur votre balance connectée.
De même, elles pourront à leur tour publier des données permettant ainsi de créer des capteurs low-cost que vous pourrez exploiter dans vos pages Web, programmes .NET ou Python, etc.. Ou encore échanger des messages avec les autres. Ainsi un ESP peut contrôler votre thermostat Nest ou NetAtmo, piloter les luminaires Z-Wave, contrôler le volume de l’ampli, ouvrir votre porte de garage, etc… Sans aucune difficulté technique !
Et pour finir, un ESP peut également “écouter” des messages pour être à son tour piloter par les autres systèmes de votre Constellation.
Un capteur de luminosité connecté pour 7€
Par exemple, pour mieux piloter mon éclairage intérieur il me fallait connaitre la luminosité dans la pièce de vie.
Pour faire simple et peu cher, j’ai utilisé une prise 220V dans laquelle j’ai placé :
- Un transformateur 220V AC vers 3,3V DC (1,8€ sur eBay)
- Un ESP8266 (environ 2-3€ toujours sur eBay)
- Un capteur de luminosité TSL2561 (2€ sur eBay)
Soit moins de 7€ pour créer son capteur de luminosité connecté en Wifi !
Côté code, il me suffit d’utiliser une librairie comme celle d’Adafruit pour lire les données du capteur TSL et calculer le nombre de lux courant :
1 2 3 4 5 | uint32_t lum = tsl.getFullLuminosity(); uint16_t ir, full; ir = lum >> 16; full = lum & 0xFFFF; uint32_t lux = tsl.calculateLux(full, ir); |
Il ne reste plus qu’à publier ces informations dans un StateObject :
1 2 3 4 5 6 | // Push on Constellation JsonObject& stateObjectLux = jsonBuffer.createObject(); stateObjectLux["Lux"] = lux; stateObjectLux["Broadband"] = full; stateObjectLux["IR"] = ir; constellation.pushStateObject("Lux", &stateObjectLux, "LightSensor.Lux") |
Maintenant pour visualiser en temps réel mon capteur, je peux créer une simple page HTML et utiliser AngularJS et son module Constellation pour afficher les données de votre capteur en temps réel.
Pour cela il suffit de s’abonner au StateObject, celui produit par le package “LightSensor” de la sentinelle “ESPSalon” grâce à la ligne suivante :
1 | constellation.requestSubscribeStateObjects("ESPSalon", "LightSensor", "*", "*"); |
Puis dans votre code HTML, on peut ajouter trois gauges liées aux propriétés du StateObject produit par l’ESP :
1 2 3 | <td><just-gage id="Lux" value="ESPSalon.Lux" min=0 max=40000 title="Lux Intérieur"></just-gage></td> <td><just-gage id="Broadband" value="ESPSalon.Broadband" min=0 max=65535 title="Broadband Intérieur"></just-gage></td> <td><just-gage id="IR" value="ESPSalon.IR" min=0 max=65535 title="IR Intérieur"></just-gage></td> |
Et voilà comment, en quelque lignes d’HTML et JS, créer un Dashboard temps réel de votre capteur ESP.
Ce StateObject est également traqué par le package “GrayLog” que je vous ai déjà présenté dans cet article. Ainsi dès que l’ESP publie une nouvelle mesure dans la Constellation, celle-ci est enregistrée dans ElasticSearch, permettant ensuite de faire de l’analyse depuis Kibana par exemple.
Ici l’évolution des 3 propriétés de notre StateObject sur les 7 derniers jours :
Au-delà du Dashboard temps réel et de l’analytique, j’ai conçu ce capteur pour piloter de manière plus efficace mon éclairage intérieur et les volets.
Comme mon moteur de règle, le “cerveau” de la maison est écrit en C#, il suffit d’ajouter l’attribut StateObjectLink sur une propriété .NET pour créer le lien avec le StateObject “Lux” publié par notre ESP :
1 2 | [StateObjectLink("ESPSalon", "LightSensor", "Lux")] public StateObjectNotifier IndoorLuxSensor { get; set; } |
1 2 3 4 | this.IndoorLuxSensor.ValueChanged += (s, e) => { Console.WriteLine("Nouvelle valeur de Lux : {0}", e.NewState.DynamicValue.Lux); }; |
Ainsi, dès qu’une nouvelle mesure est publiée par l’ESP, un évènement se déclenche dans mon code .NET. En fonction de la nouvelle valeur du StateObject (contenant le nombre de Lux dans mon salon), et d’un tas d’autre information, mon “cerveau” de la maison, allume ou éteins automatiquement les lumières ou encore ouvre ou ferme les volets compte tenu de la luminosité.
Bref, avec un simple ESP8266 que vous trouverez sur eBay pour 2/3 euros et avec la plateforme Constellation, les possibilités sont immenses ! La seule limite sera votre imagination
Pour finir, l’article dans le magazine Programmez! présente également une passerelle infrarouge connectée dans Constellation. Ainsi, n’importe quel système ou page Web connectés dans Constellation peut envoyer et recevoir des signaux infrarouges. De quoi piloter votre maison avec la télécommande de votre TV
Créez votre carte de programmation home-made pour exploiter facilement les ESP-01
Comme vous le découvrirez dans le dossier du magazine Programmez!, j’affectionne tout particulièrement le module “ESP-01” produit par AI-Thinker.
L’ESP-01 mesure 1,4cm sur 2,4cm avec une antenne intégrée et 8 pins sur un pas standard de 2,54mm :
- deux pour l’alimentation en 3,3V (Vcc et Gnd)
- deux pour la connexion série (Tx et Rx)
- un « RST » (reset) pour réinitialiser la puce en le connectant à la masse
- le « CH_PD » (chip power-down) qui doit être alimenté en 3,3V pour activer le Wifi
- deux GPIO pour vos I/O (GPIO0 et GPIO2)
A noter que les pins Rx et Tx peuvent être utilisés comme GPIO (respectivement GPIO1 et GPIO3).
Le GPIO0 a un double rôle : il sert également à entrer dans le « Flash mode ». Pour cela, il faut le connecter à la masse.
Ainsi l’ESP8266 ne démarrera pas son programme mais entrera dans le « UART download mode », c’est-à-dire qu’il écrira tout ce qu’il reçoit sur la liaison série dans sa mémoire. De ce fait, pour programmer la puce, il faut redémarrer l’ESP en « Flash mode » afin de pouvoir écrire un nouveau firmware.
C’est pourquoi, pour faciliter les opérations, je vous recommande de vous fabriquer une plaque de « programmation » afin de vous éviter de vous perdre dans les câbles à chaque manipulation/programmation de l’ESP.
Il s’agit de faire une carte avec un réceptacle dans lequel on pourra déposer nos ESP-01.
Cette carte disposera de :
- 4x PINs pour y connecter l’interface FTDI/USB facilement (Vcc/Gnd/Rx/Rx)
- 1x connecteur DC et 3x PINs (Vin, 3,3V et Gnd) pour alimentation + un régulateur LM1117 pour pouvoir utiliser une source d’alimentation externe de 5 à 15V
- 2x PINs pour les GPIO 0 et 2
- 1x bouton poussoir pour faire un reset de l’ESP sans avoir à débrancher le Vcc
- 1x autre bouton poussoir pour entrer dans le “Flash mode” afin de charger le nouveau firmware de votre ESP
Pour résumer, le schéma de notre carte de programmation :
Pour la réalisation, découpez une plaque époxy et placez-y les différents composants :
Il ne reste plus qu’à connecter le tout en suivant le schéma ci-dessus :
Et voilà, il ne me reste plus qu’à connecter une alimentation (dans mon cas 5V) et mon interface FTDI (Gnd/Rx/Tx) connecté en USB sur mon PC puis de déposer un ESP-01 :
Le Switch n°1 me permet d’alimenter l’ESP (On/Off) et le Switch n°2 me permet d’activer ou non le Wifi (CH_PD). Le bouton poussoir du milieu me permet de faire un reset de l’ESP quant au 2ème bouton poussoir, il me permet, d’entrer dans “Flash mode” (il suffit d’appuyer sur ce bouton et de faire un reset).
Ainsi il est devient très facile de jongler avec plusieurs ESP et développer avec.
Vous savez maintenant ce qu’il vous reste à faire : courir chez votre libraire acheter le dernier numéro de Programmez! et si ce n’est pas déjà fait, commander des ESP8266 sur Internet
Update Juillet 2016 : ce dossier est désormais disponible en ligne sur mon site à l’adresse : https://sebastien.warin.fr/2016/07/12/4138-decouverte-des-esp8266-le-microcontroleur-connecte-par-wifi-pour-2-au-potentiel-phenomenal-avec-constellation/
Chris
Très intéressant !
Je me demande si une utilisation peut être faite avec des automates SIEMENS, Schneider ou Rocwell! Plus en milieu industriel…
Chris
Hydro
J’étais en train de regarder du côté de mysensor pour me faire des capteurs météo pour trois fois rien. Du coup je peux aussi passer par ce système ?
On peut utiliser les mêms capteur d’ailleurs ? Comme celui-là :
https://www.sparkfun.com/products/9403
Benicourt
Merci pour cet article, ça donne vraiment envie de tester l’ESP8266 et de faire soi-même quelques objets connectés.
Seb
J’ai trouvé un article parlant de capteurs DIY basé sur des nrf24l01 :
http://www.domotique-info.fr/2015/09/installation-domotique-de-thibault-g/
Sebastien
Oui les nRF24L01 sont des modules d’émission/reception en RF sur la même fréquence que le Wifi (2,4Ghz) mais ne sont pas connectés en Wifi. J’avais utilisé ce type de transmission pour mon projet S-Energy ne connaissant pas encore les ESP : https://sebastien.warin.fr/2015/03/24/2478-senergy-la-solution-de-monitoring-des-ressources-energetiques-de-la-maison-geek-is-in-da-house-2015/
Mais bon comme les ESP combinent à la fois un UC programmable en Arduino avec une connectivité Wifi intégrée + stack TCP/IP, et que l’ESP est au même prix d’un nRF24, je ne vois plus l’intérêt d’utiliser les nRF24 maintenant 😉
marc
bonjour,
pourrait-on avoir la référence du transfo 220 ac => 3,3 dc pour l’est ?
merci,
Sebastien
Bonjour Marc,
Le vendeur sur eBay ne le vend plus mais il s’agit d’un modèle similaire à celui la : http://www.ebay.fr/itm/AC-DC-Isolation-Power-Supply-Module-Input-AC90-240V-220V-to-3-3V-500mA-Output-/221555637130?
Sinon rechercher « 220v to 3.3v » sur eBay, il y a en a plein 🙂
Hydro
Salut. As tu une idée de la durée de vie d’un tel module sur batterie ?
Thibaud
Bonjour, très intéressant !
Sais-tu s’il est possible de faire émettre un BSSID à ce module ? Un peu comme s’il était un point d’accès et non client ?
David
Bonjour, j’ai acheté le magazine et je suis tombé sur votre site. Le sujet qui m’a particulièrement intéressé était sur les modules ESP8266 et la plateforme Constellation. Je ne trouve pas grand chose sur cette plateforme. Un peu déçu, je ne dois pas chercher là où il faudrait.
Hydro
Bonsoir.
As tu la référence pour le boitier de la sonde luminosité ? Je n’arrive pas à trouver d’équivalent.
Sebastien
Hello,
@ Thibaud : oui le SSID et le BSSID sont changeables en mode AP.
@ David : la plateforme est actuellement en beta fermée, je t’ajoute à la mailing list pour les infos prochaines
@ Hydro : pour la conso, tout dépend de ce qui est fait ! En « deep sleep », à peine 78uA. En utilisation normale entre 60 et 220mA avec Wifi activé (après la conso dépend de l’usage du CPU, de la distance de la borne Wifi, de l’encodage ou non, etc..). Mon capteur de lux consomme environ 70mA. Donc avec une petite batterie 1 cellule de 3,7v pour une capacité de 3000mA tu tiendrais 42 heures ce qui n’est pas étonnant si connecté en permanence en Wifi.
Pour les projets IoT sur batterie, je te conseille de faire du « deep sleep », c’est à dire plonger l’ESP en veille et le réveiller soit avec une interruption manuelle ou soit par un timer. Par exemple pour un capteur simple (T°, Lux ou autre), on pourrait faire une mesure toutes les X min, par exemple disons toutes les 10 minutes (comme un NetAtmo). Si la connexion Wifi + capture + envoi prend 15 secondes, tu aurais pour une heure : 6fois x 15s = 90 secondes de fonctionnement à environ 150mA (l’établissement de la connexion Wifi pompe) + 3510 secondes de veille (à 78uA). Si je résume, ça fait environ une conso moyenne de 4mA/h, soit avec la même batterie 750 heures d’autonomie (= 1 mois).
Sinon pour les boîtiers sur prises 220, il faut regarder la catégorie « Boitiers de connecteur » : http://www.conrad.fr/ce/fr/overview/0203034/Boitiers-de-connecteur
Hydro
Merci pour toutes ces précisions 🙂 C’est surtout pour faire un module téléinfo vu que j’ai pas de prise à côté de mon tableau.
Une idée du temps pour l’email à propos de constellation ?
Trackback: Contrôlez votre maison avec la télécommande de la TV
Hydro
Que penses-tu des pack comme ça pour commencer :
http://fr.aliexpress.com/item/WIFI-Test-Kit-ESP8266-WIFI-module-CH340-Power-Breadboard/32248656189.html?ws_ab_test=searchweb201556_3_21_79_78_77_92_91_22_80,searchweb201644_5,searchweb201560_9
J’aimerais commencer à test tout ça avant de me mettre à la soudure et acheté ce qu’il faut pour. Avec ce pack je pourrais faire la même chose que ta propre plaque de test ?
Sebastien
Non , ce kit ne contient qu’une breadboard & des cables, un ESP8266, une clé USB/FTDI et un module de puissance (le YuRobot) pour fournir à la fois du 5V et 3.3V.
Rien de spécifique pour l’ESP !
Dans mon article, la plaque de programmation que je vous propose est spécialement designé pour l’ESP-01 pour faciliter le prototypage & programmation. Il suffit de déposer un ESP8266 dans son socle, la carte incluant un régulateur 3,3V, les headers pour connecter l’interface FTDI et GPIO ainsi que des boutons-poussoirs pour le reset et entrer dans le « Flash Mode ».
Apres tu pourras faire la même chose avec ce kit, mais ça sera à toi de jongler avec les connexions. L’avantage de ma plaque est justement que tout est « prêt à l’emploi », vachement plus productif !
Herve
Lorsque l on reçoit un esp il est pourvu d un firmware ou faut il le flasher? J en ai 2 (un 01 et un 07) et impossible de faire quoi que se soit avec. La commande AT répond ‘ok’ mais les autres répondent toutes ‘error’? Une piste?
Thierry
Bonjour
merci pour ces tutos qui sont super bien fait
Ce que je voudrais faire c’est de pouvoir remplacer mes connections pour ouverture de porte de garage et pour activer mon alarme (actuellement en 433mhz) de type http://www.cdiscount.com/maison/bricolage-outillage/2x-telecommande-universelle-433-mhz-garage-alarme/f-11704391002-auc2009964789905.html?idOffre=70664972#mpos=1|mp (donc sécurité tres limitée)
par des esp8266 communicant en wifi sécurisé.
Je n’ai pas trouvé de télécommande (en wifi sécurisé) qui puisse communiquer avec les esp8266. Est ce que ça existe ou faut’il les construire à partir d’esp8266?
Merci d’avance.
Olivier
Bonjour,
Je m’interresse à ce microcontrôleur pour transformer une imprimante multi fonction USB en imprimante multifonction « Wifi ». je désirerais la connecter à mon réseau pour la rendre accessible à tous les ordi, mais je n’ai pas trouvé de projet similaire .
Est ce que les Rx et Tx peuvent être utilisés pour les info du câble USB?
Pensez vous possible de le faire?
J’ai des bases électronique ancienne mais pas totalement perdues…;-)))
Trackback: Découverte des ESP8266 : le microcontrôleur connecté par Wifi pour 2€ au potentiel phénoménal avec Constellation - Sebastien.warin.fr
chevalier pierre
bonjour
je viens de lire votre tuto, très interressant
j’utilise esp8266-01 pour faire des relevés de température avec un ds18b20
où peut on se procurer le socle pour l’esp, en règle générale comment se procurer l’ensemble des modules du tuto
cordialement
pierre