Tout sur le deep sleep des ESP8266: ESP01, ESP01 et NodeMCU ESP12e

Dans cet article nous allons étudier le mode sommeil profond (Deep Sleep) des ESP8266. Nous chercherons à comprendre comment l'activer et comment en sortir pour pouvoir par la suite fabriquer nos propres objets connectés.

Introduction


Certain d'entre vous vont me demander "mais à quoi ça va servir de comprendre le DeepSleep d'un microcontrôleur?". Et à ceux là, tel Confucius, je répondrai:
La connaissance est la clé du pouvoir, de la sagesse.
Bon d'accord et si j'arrête de me prendre pour Confucius, je vais simplement rappeler que l'esprit de ce blog, comme au potager, c'est de planter de petites graines pour en récolter les fruits.

Apprendre à mettre un microcontrôleur (dans notre cas ce sera un ESP8266), en mode sommeil pour ensuite le réveiller par un événement, c'est la petite graine qui nous permettra ensuite de réaliser plein de projets DIY en domotique.

Par exemple: 
  • Créer un détecteur d'ouverture de portes, de fenêtre, de boite aux lettres ... 
  • Créer un détecteur de présence, de mouvement ...
  • Créer une alarme qui va réagir à un dépassement de seuil de température, de lumière, d'humidité ...
La seule limite sera celle de notre imagination. Et évidement, l’intérêt de faire passer notre cher microcontrôleur (ou μC pour les intimes) en mode sommeil, sera d'en réduire la consommation électrique. Nous pourrons alors envisager des montages autonomes, fonctionnant sur accu et/ou de petits panneaux solaires.

A nous les chemins de l'autonomie et de la liberté ... 🗽









Théorie du sommeil profond


Derrière ce titre et cette photo légèrement accrocheurs, se cache un vrai concept: celui de la mise en sommeil d'un microcontrôleur. C'est à dire, demander à l'équipement de se placer dans un état d'activité minimale, en ne laissant actif que le minimum de fonctions vitales.

Le but est bien sur de consommer le moins d'énergie possible dans l'attente d'un événement spécifique pour reprendre une activité normale. Dans ce chapitre nous allons étudier avec précision les différentes manières de rentrer dans ce mode de sommeil ainsi que les différentes manières et les événements qui vont permettre d'en sortir. Et nous prendrons également un peu de temps pour regarder quelles consommations électriques nous pourrons espérer.


Dans cet article, les mesures, les exemples, les programmes, les données techniques ont été réalisés pour les μC ESP8266 et en particulier les modules ESP01s et NodeMCU ESP12e. Ce sont, selon moi, ce qu'il y a de mieux pour se fabriquer facilement des objets connectés DIY (à la date de la rédaction de cet article). Toutefois, tous ces concepts restent assez génériques et si votre cœur penche pour un autre type de μC (tel que l'Arduino ou le Wemos D1), vous devriez pouvoir adapter facilement.


Définitions du sommeil d'un ESP8266

En quoi ça consiste ?

La mise en sommeil d'un μC consiste à désactiver le maximum de ses fonctions pour le faire entrer dans un mode ou la consommation d'énergie sera réduite. En réalité, les ESP8266 disposent de plusieurs modes de mise en sommeil. Et chacun des ces modes désactive plus ou moins de fonction, donc optimise plus ou moins la consommation électrique.

Le tableau ci-dessous nous indique quels sont les 3 modes de mise en sommeil de l'ESP8266 et pour chacun les fonctions désactivées ainsi que la consommation électrique résultante.

Consommation des modes de sommeil de l'ESP8266. Extrait du document ESP8266 - Low Power Solution

Il ne faut pas confondre le module ESP8266 et les modules ESP01s, ESP12e. Ces derniers sont des PCB* qui intègrent un module ESP8266 avec d'autres composants: une puce UART pour la liaison série, un convertisseur de tension, une LED, ...
Il sera donc impossible, à moins d'aller déconnecter physiquement des composants sur ces cartes, d’obtenir des consommations électriques aussi faibles que celles indiquées dans ce tableau.

Le tableau montre également quelles sont les fonctions qui restent actives lorsque le microcontrôleur passe en sommeil. Dans le cas du deep sleep, il ne reste que le RTC (Real-Time Clock) qui est une horloge interne capable de réveiller le microcontrôleur après un temps donné.
*Un PCB est une plaque sur laquelle sont soudés des composants électroniques. C'est en général sur cette plaque qu'est rassemblée toute l'électronique d'un appareil. On parlera aussi de carte électronique. 

Description des modes de sommeil

  • No sleep: Contrairement à ce que l'on pourrait croire, ne signifie pas "sans culotte" mais désigne le mode de fonctionnement conservant toutes les fonctions actives. Je parle ici de ce mode de fonctionnement car contrairement à ce qu'on pourrait croire (encore!) ce mode de fonctionnement n'est pas celui par défaut
  • Deep Sleep : C'est le mode qui génère le plus d'économies, mais au prix de laisser toutes les fonctions en attente. La seule partie de la carte qui fonctionne dans ce mode est l’horloge temps réel, pour pouvoir redémarrer une fois le temps de repos écoulé.
  • Modem-Sleep : ce mode permet de désactiver la connexion WiFi établie avec un point d'accès (routeur), lorsqu'il n'est pas nécessaire de l'utiliser et de la réactiver si nécessaire. Il s'agit du mode de fonctionnement par défaut. L'ESP va automatiquement éteindre le wifi entre ce que l'on appel les intervalles DTIM (sans rentrer dans les détails c'est un intervalle d'attente entre les échanges défini par le routeur). 
  • Light-Sleep : ce mode d'économie permet de maintenir la connexion WiFi comme Modem-Sleep, mais réduit la consommation d'énergie en éteignant également l'horloge système. 

Dans notre cas, puisque nous souhaitons optimiser à son maximum la consommation électrique, nous allons nous intéresser
uniquement au mode Deep Sleep.



Comment on entre en sommeil

La manière la plus simple est de fermer la lumière et les yeux!

Sinon plus sérieusement il y a à ma connaissance trois méthodes pour placer l'ESP dans un mode de fonctionnement durant lequel la consommation d'énergie va être réduite de manière drastique: 

  1. Utiliser une fonction logiciel telle qu'ESP.deepSleep() en C/C++ avec l'IDE Arduino. 
  2. Utiliser la broche CH_PD (qui signifie CHIP Power Down ou également appelée parfois CH_EN comme CHIP Enable). 
  3. Utiliser la broche RST (bloque le fonctionnement du microcontrôleur mais la consommation reste élevée => donc méthode non recommandée).
Chacune de ces méthode vont être détaillées. 

Sortir du sommeil

Il y a 3 manières pour l'ESP de sortir du mode sommeil:
  1. En coupant puis remettant l'alimentation électrique. Brutal mais efficace! 
  2. En envoyant un pulse (d'une durée minimum de 10 ms) à GND sur RST. La sortie du sommeil se faisant au front remontant.
  3. En repassant CH_PD (ou RST) à l'état HIGH si le deep sleep était réalisé en plaçant l'une de ces broches à LOW. 
Le pulse peut être généré de deux manières:
  1. Automatiquement par l'horloge RTC qui génère ce pulse sur la broche GPIO16 via une interruption. Pour que cela fonctionne nous voyons donc que la broche GPIO16 doit être raccordée à RST. Ce qui va nous poser un "petit" problème sur ESP01/ESP01s car le GPIO16 du microcontrôleur n'est pas soudé et raccordé à une broche sur le PCB et donc pas accessible par l'utilisateur. 
  2. Manuellement (comme avec l'appuie sur un bouton) ou par un signal provenant d'un équipement externe. 
Dans tous les cas, à la sortie du sommeil, le microcontrôleur redémarre sa phase de setup.

Etude de cas concrets



Dans ce chapitre nous allons voir quelques cas concrets illustrant les notions théoriques que nous avons abordées ci-dessus. Le domaine des microcontrôleur et de la mise en sommeil est tellement vaste qu'il est impossible d'être exhaustif. Je me limiterai donc à réaliser des montages avec les deux modèles d'ESP dont je dispose: l'ESP01s et le NodeMCU ESP12e. Pour chacun d'eux nous allons regarder comment appliquer les différentes méthodes de mise en veille et les méthodes pour en sortir. 



Cas du NodeMCU ESP12e

NodeMCU ESP12e Lolin V3

Comme son nom l'indique ce NodeMCU est un circuit électronique fabriqué autour d'un ESP12e. Ses avantages sont nombreux. 

Il embarque sur son socle d'autres circuits et composants qui faciliteront grandement la vie des utilisateurs les plus débutants. Par exemple on disposera d'un régulateur de tension qui permettra de l'alimenter sans trop de craintes de griller quoi que ce soit car acceptant des tensions allant de 3V jusqu'au delà de 12V (certains affichent même jusqu'à 20V mais je n'ai pas essayé. Si vous le faites n'hésitez pas à me faire un retours). Il embarque aussi une connectique micro USB pour faciliter l'alimentation et la programmation depuis un ordinateur (muni du bon driver, comme le CH340G, pour les communication série). Et la plaque sur laquelle sont soudés tous ces composants offre un accès facile à toutes les broches du circuit imprimé ESP8266. On aura donc accès à une broche analogique, 13 broches numériques et plusieurs broches pour l'alimentation électrique. On trouvera encore d'autres fonctionnalités intéressantes comme la présence de diodes, de boutons pour activer le mode flash, pour faire un reset ou encore des résistances de pullup/pulldown incluses derrière certaines broches. Et le tout pour moins de 10€! Beaucoup moins même parfois. Par exemple ICI vous pouvez en trouver par lots de 3 et en livraison rapide pour 5€. Ou alors ICI encore moins cher mais en provenance de Chine avec les délais de livraison (beaucoup) plus longs. Et si vous découvrez seulement ce composant je vous invite à lire l'article sur l'essentiel du NodeMCU

Mais toutes cette débauche de composants et de fonctionnalités à forcément un coût. Et les deux inconvénients majeurs auquel nous allons être confrontés est sa taille (environ 6 cm de long sur 3 de large) et aussi sa consommation électrique. Car forcément, tous ces composants ajoutés autour de l'ESP12e vont eux aussi consommer un peu d'énergie. Nous allons donc voir dans quelle mesure, en activant le deepsleep, le NodeMCU sera utilisable sur accu.

Mise en sommeil et réveil logiciel

La mise en sommeil logiciel se fait en utilisant la fonction deepSleep Cette dernière s'utilise de deux manières différentes:
  1. ESP.deepSleep( µS );
  2. ESP.deepSleep( µS, Mode_wifi );
Nous allons regarder de plus près comment utiliser ces fonctions. Mais pour que le réveil fonctionne, il faudra absolument que la broche GPIO16 (D0 sur un NodeMCU) soit connectée à RST. En effet, à la fin de la période de sommeil, l'horloge interne va générer une impulsion sur cette broche. Cette impulsion, si elle est reçue par la broche RST correspondra à un signal de reset. Le microcontrôleur va alors redémarrer en exécutant la fonction setup. 
Si GPIO16 ne peut être raccordée à RST, ce qui est le cas sur les ESP01/ESP01s, alors la sortie de sommeil ne pourra pas se faire de manière logicielle.

Sur NodeMCU ESP-12e il faut raccorder D0 (GPIO16) sur RST


Attention: Si la broche GPIO16 n'est pas raccordée à RST et que la fin de veille survient, l'ESP ne reprendra pas son setup et se trouvera dans un état bloqué. Toutefois certaines fonctions internes auront été réveillées et la consommation électrique sera plus importante qu'en mode sommeil.

ESP.deepSleep( µS ):
L'argument µS est le nombre de micro secondes souhaité avant le réveil. Il s'agit d'un entier codé sur 32 bits => donc 2^32 = 4 294 967 296 µs = Environ 4294s = environ 71 minutes

Cette mise en sommeil ne pourra excéder 71 minutes (sauf si  µS = 0)

Si µS = 0 alors la mise en sommeil durera jusqu'à ce qu'un signal externe vienne réveiller le microcontrôleur. Il ne pourra pas y avoir de réveil automatique par l'envoi d'un signal de la part de l'horloge RTC. 

Voici quelques exemples de lignes de code pour utiliser cette fonction:

//Passe en mode sommeil jusqu'au prochain reset ou reboot de l'ESP. 
ESP.deepSleep( 0 ); 

//Passe en mode deepsleep 5 secondes
ESP.deepSleep( 5e6 );

//Passe en mode deepsleep 8 secondes (multiplie les secondes par 1 000 000)
ESP.deepSleep( 8 * 1000000 );


ESP.deepSleep( µS, Mode_wifi ):
Comme précédemment, l'argument µS est la durée du sommeil. S'il est égal à 0, le microcontrôleur se met en veille infinie jusqu'à ce qu'un événement extérieur le réveil.

L'argument "Mode_wifi" permet de placer le modem wifi dans un état spécifié au moment du réveil.

Les valeurs que peut prendre cet argument sont: 

  • RF_DEFAULT: est le mode par défaut.Dans ce mode, le modem WiFi est activé normalement. C'est-à-dire que nous pouvons nous connecter au réseau WiFi. Ce mode consomme jusqu'à 170 mA pendant environ 1 seconde.
  • RF_NO_CAL (pour NO CAL ibration) est un mode qui consomme moins d’énergie. Le modem WiFi est activé mais aucun étalonnage du signal radio n’est effectué. En théorie uniquement parce que, selon les mesures effectuées, la consommation semble identique.
  • RF_DISABLED: Si vous n'avez pas besoin de la connexion WiFi, vous pouvez laisser le modem WiFi en veille. Attention, si ce mode est activé, il devient impossible de se connecter au réseau WiFi. C'est l'équivalent du mode veille modem décrit ci-dessus.

Voici quelques exemples de lignes de code pour utiliser cette fonction:

//Passe en mode sommeil jusqu'au prochain reset ou reboot de l'ESP. 
ESP.deepSleep( 0, RF_DEFAULT ); 

//Passe en mode deepsleep 5 secondes
ESP.deepSleep( 5e6 , RF_NO_CAL);

//Passe en mode deepsleep 8 secondes (multiplie les secondes par 1 000 000)
//Au reveil on ne pourra plus activer le wifi.
ESP.deepSleep( 8 * 1000000, RF_DISABLED );

Mise en sommeil et réveil matériel

Dans ce paragraphe nous allons voir comment placer l'ESP dans un mode d'économie d'énergie, et comment l'en faire sortir, à partir d'événements provenant des composants et non plus programmés par le logiciel. Nous distinguerons la mise en sommeil et le réveil car chacun aura ses spécificités. 


Le réveil géré par le matériel:


La manière la plus simple et surement la plus évidente à laquelle on pense pour sortir le microcontrôleur du mode veille dans lequel il a été placé, est de couper puis rétablir l'alimentation électrique. Cette méthode fonctionne forcément mais a forcément un impact sur la durée de vie des composants car ces derniers vont subir des variations plus brusques et non contrôlées de leur alimentation.  Ce mode réveil est donc à réserver pour des montages qui sortent de veille peut de fois par jour. Un détecteur d'ouverture par exemple. Inversement, il sera à éviter pour des montages destinés à sortir de veille toutes les minutes. Pour couper et rétablir l'alimentation électrique, il faudra coupler l'accu avec un interrupteur ou un relais piloté.

Une méthode plus "propre" est d'utiliser la broche RST. Le NodeMCU comme toutes les cartes à base de microcontrôleur ESP8266 peut sortir du sommeil en recevant une impulsion à GND sur la broche RST. Pour un fonctionnement correct, RST doit être raccordé à VCC ou éventuellement laissée flottante. Lorsque cette broche passe à GND durant au minimum 10 ms et repasse sur VCC ensuite, un reset à lieu au moment du signal montant. Ce reset sort le microcontrôleur du sommeil et ce dernier ré exécute son setup. Le montage ci-dessous est un exemple qui montre comment câbler un le NodeMCU pour que l'appuie sur le bouton génère un RESET matériel

Montage pour envoyer une impulsion à GND sur RST

La résistance de rappel, ici connectée en "pull-up" permet à la broche RST d'être maintenue en étant haut (HIGH) lorsque l'interrupteur est ouvert. Ce qui correspond à l'état nécessaire en mode de fonctionnement standard. 
Lorsque l'on appuie sur le bouton, RST va être mis en contact avec GND et le microcontrôleur va donc être "resété". Pour la résistance, en général on en place une de 10 kΩ. 

Ce signal permet la sortie d'une mise en sommeil logicielle, par exemple suite à un appel à "deepSleep( 0 )". Il permet également de sortir d'une veille logicielle avant son terme. Par exemple si une impulsion vers GND est envoyée sur RST au bout de 10 secondes, l'ESP sortira du sommeil et rejoura son setup même si de manière logiciel on avait programmé une veille de 20 secondes.

Par contre il ne permet pas la sortie d'une mise en sommeil qui est maintenue de manière matériel. 

L'ESP étant raccordé à GND et la broche RST étant connectée à VCC via la résistance de pull-up, nous allons constater un courant de fuite (qui sera différent si le microcontrôleur est éveillé ou en sommeil). Toutefois ce courant de fuite sera très faible. Je l'ai mesuré en mode sommeil autours de 0,05 mA en sommeil  et 0,12 mA en fonctionnement. Pour ces mesures je n'ai pas utilisé la résistance de pull-up. La présence de cette dernière va encore diminuer la perte de courant.


Mise en sommeil matériel: 

La mise en sommeil matériel est un peu particulière car il s'agit de placer le microcontrôleur dans un état spécifique de très basse consommation d'énergie, tant que la broche CH_PD (qui signifie CHIP Power Down ou également appelée parfois CH_EN comme CHIP Enable) sera maintenue à GND.

Pour la petite histoire, à l'origine, l'ESP8266 (sous la forme du module ESP01) était utilisé comme puce wifi par d'autres microcontrôleurs. Son rôle était de s'activer uniquement pour transmettre un message et le reste du temps de se faire oublier en consommant le moins possible. La broche CH_PD permettait à cet autre microcontrôleur de placer l'ESP dans un mode très basse consommation et de l'activer rapidement en repasser la broche à HIGH au moment de transmettre un message en wifi. 

Ainsi, lorsque la broche CH_PD passe à l'état LOW, le microcontrôleur passe instantanément en mode basse consommation. D'après mes mesures la consommation est exactement la même qu'avec la mise en mode veille par la fonction deepSleep. 
Si CH_PD passe à LOW alors que l'ESP est déjà en mode sommeil, ce dernier n'en ressortira pas à la fin du délais programmé. Par contre il en sortira immédiatement après que CH_PD soit repassé à HIGH (ou alors laissée flottante car une résistance de pull-up interne au NodeMCU maintient cette dernière à HIGH). 

L'ESP étant raccordé à VCC et la broche CH_PD étant connectée à GND, nous allons constater un courant de fuite. J'ai mesuré ce courant autours de 0,4 mA. Ce qui se révèle assez significatif et il faudra certainement optimiser en plaçant une résistance en série avec cette broche. 








Cas de l'ESP-01 ou ESP-01s

Différents modules ESP01

L'ESP01 est un petit module à base de microcontrôleur ESP8266 sur lequel seulement 8 broches ont été soudés pour en fournir l'accès à l'utilisateur. Au delà du nombre restreint de broches utilisables, ce module embarque beaucoup moins de composants que le NodeMCU ESP12e. Par exemple oubliez le régulateur de courant en entrée sur la broche VCC et oubliez également la connectique directe en USB. Mais ce nombre de fonctionnalités réduites sont également ses atouts car cela permet de diminuer la taille et la consommation du module. 

A l'origine ce module a été pensé pour fournir une connexion wifi à un Arduino. Mais ses capacités  ont vite permis de montrer qu'il peut être utilisé comme microcontrôleur de manière autonome sans Arduino. 

Les premiers ESP-01 étaient livrés avec 0,5MB de mémoire flash. On les reconnait par leur PCB bleus. Désormais ces modèles sont obsolètes et ne devraient plus être commercialisés. L'ESP01 aini que sa dernière version, la 01s, sont livrés avec 1MB de mémoire flash. Si vous souhaitez vous en procurer, je vous recommande de choisir l'ESP01s comme ICI

Mise en sommeil et réveil logiciel

Sur l'ESP01 ou l'ESP01s, la broche GPIO16 du microcontrôleur ESP8266 n'a pas été câblée de manière à ce qu'elle soit accessible à l'utilisateur. De ce fait, il est impossible d'utiliser le réveil logiciel car ce dernier ne fonctionne que si nous pouvons connecter entre eux GPIO16 et RST. Toutefois, en faisant des recherches sur internet, vous trouverez des sites qui montrent qu'il est possible d'aller soit même souder un petit fil sur le GPIO16 de l'ESP qui se trouve juste dans le coin en bas à gauche. En ce qui me concerne et après avoir regardé de longues minutes à la loupe le composant, je préfère conclure que c'est quelque chose d'illusoire sans une très grande maîtrise de la soudure et surtout sans équipements spécifiques.

Sur ESP-01 il faut souder un fil de GPIO16 sur RST

N'ayant pas réalisé moi même l'opération et considérant que c'est impossible que j'y arrive, je conclurais simplement en disant que le réveil logiciel est impossible pour un ESP01.

Par contre, il est tout à fait possible de mettre veille l'ESP de manière logicielle. Il faudra réaliser une action matérielle pour l'en sortir (nous allons voir comment ci-dessous). La mise en veille logicielle fonctionne exactement de la même manière que nous l'avons vu avec le NodeMCU. Elle se réalise avec l'appel à la fonction "deepSleep". Toutefois, il faudra veiller à ce que l'argument de temps soit toujours à 0. S'il n'était pas à zéro, à la fin de la durée spécifiée, le timer se chargerait de réveiller l'ESP. GPIO16 n'étant pas connecté à RST, le pulse de reset ne serait pas reçu et le réveil n'aurait pas lieu. Toutefois certaines fonctions internes auraient été réveillées. Nous nous retrouverions alors avec un microcontrôleur dans un état gelé mais avec un niveau de consommation électrique plus important qu'en mode sommeil.

Voici un exemple de ligne de code pour utiliser cette fonction:


//Passe en mode sommeil jusqu'au prochain reset ou reboot de l'ESP. 
ESP.deepSleep( 0 ); 


Le réveil se faisant au travers d'un reset matériel, les modes RF_NO_CAL et RF_DISABLED ne pourront plus être pris en compte.

Mise en sommeil et réveil matériel


Sommeil et réveil avec la broche CH_PD:
De la même manière que ce que nous avons vu sur le NodeMCU, l'ESP01 peut être mis en sommeil en maintenant la broche CH_PD sur un niveau bas (ie connectée à GND).
Lorsque la broche repasse à un niveau haut (VCC) l'ESP reboot et la fonction setup est reprise depuis le début.

Le schéma ci-dessous montre comment connecter l'ESP de manière à ce que le bouton appuyé, il soit en veille et relaché en fonctionnement standard.



Réveil avec la broche RST:
A l'identique de ce que nous avons vu avec le NodeMCU, la réception d'un pulse à GND sur la broche RST va provoquer le reset de l'ESP. Ce dernier pourra donc de cette manière se réveiller d'un état de sommeil généré de manière logicielle. 










Consommation électrique et conclusions


On trouve beaucoup de tableaux sur le net qui indiquent la consommation de l'ESP en mode veille. Par exemple le tableau ci-dessous:


Avec:
  • RTC (Real-Time Clock).
  • DTIM (Delivery Traffic Indication Message).
Mais en général ces tableaux indiquent la consommation électrique du module ESP8266 seul, sans l'ensemble des composants qui se trouvent sur les plaques ESP01 ou NodeMCU. Pour rendre vraiment réalisable vos montages sur accu avec une durée de vie de ces derniers suffisante, il faudra partir sur ces modules. J'en ai repéré et commandé quelques un qui feront l'objet d'un futur article. Plutot que de prendre des ESP12e, je me suis orienté sur les ESP12f qui semblent similaires mais en améliorant certaines fonctions. Comme la portée du signal Wifi par exemple. 

Sur eBay j'ai commandé CECI. Ou sur Amazon vous trouverez ça: 

Pour revenir aux ESP01 et NodeMCU j'ai réalisé quelques mesures de consommation électrique durant mes tests. Voici ce que j'obtiens avec une alimentation sur la broche VCC:
  • NodeMCU ESP12e: 
    • 80 mA en fonctionnement standard (avec des pics allant jusqu'a 150mA lors de la connexion au wifi d'une durée allant de 2 secondes à 8 secondes). 
    • 0,2 mA en mode deep sleep. 
  • ESP01 ou ESP01s:
    • 76 mA en fonctionnement standard (avec des pics allant jusqu'a 150mA lors de la connexion au wifi d'une durée allant de 2 secondes à 8 secondes). 
    • 0,15 mA en mode deep sleep. 
Pour faire mes tests j'ai réalisé un petit programme qui permet de mettre le microcontroleur en veille après avoir simulé un traitement en allumant une LED. Vous trouverez ce programme ICI.





Soutenez la blogoculture ...

Le plus simplement du monde, si vous avez un achat à faire sur Amazon, accédez au site à partir de ce lien (que vous pouvez ajouter dans vos favoris)https://amzn.to/2nbe4sm



Merci

Commentaires