Il y peu de temps, j’ai pu tester le nouveau capteur Xiaomi Mi Plant, la nouvelle dénomination du Mi Flora. Ce petit capteur que l’on trouve très souvent en promo pour environ 10€ trouvera vite une place dans vos pots de fleur. Ce capteur présente toutefois deux inconvénients. Tout d’abord, il est destiné aux plantes d’intérieures. Ensuite il est nécessaire d’être à portée de la connexion bluetooth pour récupérer les mesures. Impossible donc de surveiller l’arrosage de vos plantes en vacances. Si vous avez l’intention de concevoir un système d’irrigation ou d’arrosage DIY, le Xiaomi Mi Plant risque vite d’être limité. Je vous propose ici de comparer le Xiaomi Mi Plant à un capteur YL-69 qui est très souvent intégré dans les kits de capteurs pour projets Arduino. On trouve aussi ces sondes sous la référence HL-69, FC-28. On testera également une version améliorée (capacitive soil moisture v1.2) qui dispose d’un revêtement d’epoxy anti-corrosion .
Remarques. Cette étude comparative n’a pas été réalisée dans un laboratoire avec des outils de mesures scientifiques. Elle a pour objectif de donner une idée des performances de quelques produits et ne saurait être représentative de l’ensemble des produits disponibles sur le marché. J’ai procédé à plusieurs tests pour m’assurer de la justesse des mesures. Vous risquez d’obtenir des résultats très différents des miens, n’hésitez pas à partager vos résultats dans les commentaires si tel est le cas.
Sommaire
- 1 Capteurs d’humidité du sol YL-69 et capacitive soil moisture sensor v1.2
- 2 Montage expérimental utilisé
- 3 Flow Node-RED du système d’acquisition de données
- 4 Déroulement des essais
- 5 Calibration des sondes YL-69 (fonctionne avec HL-69 et FC-28)
- 6 Essai des sondes calibrées avec la fonction map
- 7 Calibration par regression linéaire
- 8 Code Arduino du projet
- 9 Conclusions
Capteurs d’humidité du sol YL-69 et capacitive soil moisture sensor v1.2
On trouve deux principaux types de capteurs de mesure d’humidité du sol. Les capteurs économiques vendus moins de 1 euros fabriqués directement sur une plaque de bakélite. Ces capteurs vieillissent assez mal et se corrodent très rapidement dans le sol . Ils portent différentes dénominations (YL-69, HL-69, FC-28) mais je n’ai pas trouvé de différences techniques claires.
En général, je commande deux capteurs chez des fabricants différents sur AliExpress lorsque je prépare des tutoriels ou des projets. Le délai moyen de livraison étant de 2 à 3 semaines, si un capteur est défectueux, je suis obligé de décaler d’autant la réalisation du projet. Vous vous en doutez, je passe souvent commande sur AliExpress. Par expérience, c’est assez rare, mais ça peut arriver. Donc j’en ai profité pour tester 2 sondes, histoire de voir s’il y a une différence entre deux fabricants.
Pour palier au défaut de corrosion des sondes YL-69, on trouve une version améliorée avec un revêtement anti-corrosion d’epoxy (à vérifier). Ce capteur que l’on trouve sous le nom de capacitive soil moisture v1.2 est un clone des projets de DFRobot, Abra (qui utilise un revêtement de nickel) ou Catnip sur Tindie. Cette sonde d’humidité coûte un peu plus cher (environ 2,50€). Voyons ce que ça donne au niveau de la rapidité et de la qualité des mesures.
Comme base de comparaison, nous allons utiliser le Xiaomi Mi Plant (environ 10,50€) testé en détail dans cet article. Les objectifs sont les suivants :
- Comparer la vitesse de réponse des capteurs lorsque le taux d’humidité change brutalement. Simulation d’un arrosage (ou d’un orage)
- Essayer de calibrer le signal analogique pour estimer le taux d’humidité
- Vérifier la stabilité des mesures
Montage expérimental utilisé
Je suis parti du précédent projet d’acquisition de données via le port série depuis Node-RED. C’est un projet simple … mais très puissant pour débuter sur Arduino et Node-RED.
Les trois sondes sont reliées aux broches analogiques A3 à A5 d’un Arduino Uno.
L’Arduino Uno est connecté au port USB d’un Raspberry Pi sur lequel est installé Node-RED. On pourrait aussi l’installer sur un PC Windows ou un MAC. Le code Arduino identique à celui du précédent tutoriel renvoi les mesures sous la forme d’un objet JSON. raw signifie que c’est la valeur brute mesurée à l’aide du convertisseur Analogique – numérique. C’est une valeur codée sur 10 bits (1024 niveaux) :
{ "YL69A_raw":valeur, "YL69B_raw": valeur, "v1_2_raw":valeur }
Le Xiaomi Mi Plant est connecté au Raspberry Pi via la connexion Bluetooth du Raspberry Pi 3. J’ai utilisé le script MiFlora-MQTT-Deamon développé par Thomas Dietrich. Il est disponible sur GitHub ici. Vous trouverez plus de détail sur l’installation et la configuration du script en lisant ce tutoriel. Le script mime l’application Mi Home et intercepte les trames Bluetooth qui contiennent les mesures renvoyées par le Mi Plant. Les données sont ensuite re-publiées vers le Broker MQTT (Mosquitto dans le cas présent).
Voici le schéma d’ensemble du montage d’essai
Flow Node-RED du système d’acquisition de données
Node-RED permet avec quelques blocs (nodes) de créer un système d’acquisition de données. J’ai opté pour cette solution de développement pour varier un peu les plaisirs.
Le node Serial permet de se connecter au port série de l’Arduino pour récupérer les mesures des deux sondes. Le node MQTT permet de se connecter au broker qui recevra les mesures en provenance du Mi Plant.
Avant d’importer le code du flow ci-dessous, commercez par installer le plugin dashboard depuis le gestionnaire de palette pour éviter toute erreur.
Il vous restera ensuite à modifier le topic MQTT sur lequel sont envoyés les mesures du Mi Plant ainsi que le port USB sur lequel est connecté l’Arduino Uno.
[{"id":"53bfd90d.562a58","type":"mqtt in","z":"3639e7d1.f1c3e8","name":"Mi Plant","topic":"miflora/miplant2018","qos":"1","broker":"12f512eb.9c8b5d","x":100,"y":100,"wires":[["52c040c7.1694b"]]},{"id":"52c040c7.1694b","type":"json","z":"3639e7d1.f1c3e8","name":"","property":"payload","action":"","pretty":false,"x":250,"y":100,"wires":[["3cc11661.f653ca"]]},{"id":"3cc11661.f653ca","type":"switch","z":"3639e7d1.f1c3e8","name":"","property":"payload.moisture","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":370,"y":100,"wires":[["324e0642.4a29ca","f2a4306f.30a42","6d40fd38.6d08f4"]]},{"id":"bc796f1f.f46ab","type":"file","z":"3639e7d1.f1c3e8","name":"","filename":"/home/pi/miflora.csv","appendNewline":true,"createDir":false,"overwriteFile":"false","x":820,"y":120,"wires":[]},{"id":"324e0642.4a29ca","type":"function","z":"3639e7d1.f1c3e8","name":"Format Mi Flora Data","func":"\nvar date = new Date().toLocaleDateString();\nvar time = new Date().toLocaleTimeString();\n//var dtstmp = new Intl.DateTimeFormat('fr-FR').format(date);\n\n//dtstmp = new Date(day,month,year,hour,minute,seconde).toString();\nvar output = date + \";\" + time + \";\" + msg.payload.moisture + \";\" + msg.payload.conductivity + \";\" + msg.payload.light + \";\" + msg.payload.temperature;\nmsg.payload = output;\nreturn msg;","outputs":1,"noerr":0,"x":580,"y":120,"wires":[["c6d1cfd6.f9029","bc796f1f.f46ab"]]},{"id":"c6d1cfd6.f9029","type":"debug","z":"3639e7d1.f1c3e8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":790,"y":60,"wires":[]},{"id":"f2a4306f.30a42","type":"debug","z":"3639e7d1.f1c3e8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":60,"wires":[]},{"id":"9435a9fc.ab96d8","type":"serial in","z":"3639e7d1.f1c3e8","name":"Arduino Uno","serial":"c237b06b.eb7ca","x":110,"y":280,"wires":[["4c310d82.46f3d4","1f6f19ed.d8ead6"]]},{"id":"1f6f19ed.d8ead6","type":"json","z":"3639e7d1.f1c3e8","name":"","property":"payload","action":"","pretty":false,"x":310,"y":400,"wires":[["2499ca17.61eff6","df59b710.dc7648","6ee454f.ffd6bac","b292e47a.faf158","a3fe94cf.a124f8"]]},{"id":"2499ca17.61eff6","type":"function","z":"3639e7d1.f1c3e8","name":"Format Mi Arduino Data","func":"\nvar date = new Date().toLocaleDateString();\nvar time = new Date().toLocaleTimeString();\n\nvar output = date + \";\" + time + \";\" + msg.payload.v1_2_raw + \";\" + msg.payload.YL69a_raw + \";\" + msg.payload.YL69b_raw;\nmsg.payload = output;\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":400,"wires":[["62e4634a.85417c"]]},{"id":"62e4634a.85417c","type":"file","z":"3639e7d1.f1c3e8","name":"","filename":"/home/pi/moisture_sensors.csv","appendNewline":true,"createDir":false,"overwriteFile":"false","x":850,"y":400,"wires":[]},{"id":"df59b710.dc7648","type":"function","z":"3639e7d1.f1c3e8","name":"Extract v1.2 data","func":"msg.topic = \"v1.2\";\nmsg.payload = msg.payload.v1_2_percent;\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":460,"wires":[["44cbb0fe.6f088"]]},{"id":"6ee454f.ffd6bac","type":"function","z":"3639e7d1.f1c3e8","name":"Extract YL-69A data","func":"msg.topic = \"YL-69A\";\nmsg.payload = msg.payload.YL69a_percent;\nreturn msg;","outputs":1,"noerr":0,"x":520,"y":500,"wires":[["44cbb0fe.6f088"]]},{"id":"6d40fd38.6d08f4","type":"function","z":"3639e7d1.f1c3e8","name":"Format chart data","func":"msg.topic = \"Xiaomi Mi Plant (%)\";\nmsg.payload = msg.payload.moisture;\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":160,"wires":[["71ec4374.1d3cdc","44cbb0fe.6f088"]]},{"id":"b292e47a.faf158","type":"debug","z":"3639e7d1.f1c3e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":510,"y":340,"wires":[]},{"id":"71ec4374.1d3cdc","type":"function","z":"3639e7d1.f1c3e8","name":"Format Mi Plant value","func":"msg.payload = {\n \"CurrentRelativeHumidity\":msg.payload\n}\nreturn msg;","outputs":1,"noerr":0,"x":820,"y":180,"wires":[[]]},{"id":"4c310d82.46f3d4","type":"debug","z":"3639e7d1.f1c3e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":290,"y":280,"wires":[]},{"id":"a3fe94cf.a124f8","type":"function","z":"3639e7d1.f1c3e8","name":"Extract YL-69B data","func":"msg.topic = \"YL-69B\";\nmsg.payload = msg.payload.YL69b_percent;\nreturn msg;","outputs":1,"noerr":0,"x":520,"y":540,"wires":[["44cbb0fe.6f088"]]},{"id":"8fd97b0d.b73338","type":"ui_button","z":"3639e7d1.f1c3e8","name":"Init Graph","group":"bb260e6b.77d62","order":0,"width":0,"height":0,"passthru":false,"label":"Init Graph","color":"","bgcolor":"","icon":"","payload":"[]","payloadType":"json","topic":"","x":520,"y":260,"wires":[["44cbb0fe.6f088"]]},{"id":"44cbb0fe.6f088","type":"ui_chart","z":"3639e7d1.f1c3e8","name":"","group":"bb260e6b.77d62","order":0,"width":"12","height":"9","label":"YL69 (x2) + v1.2 (anti-corrosion)","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"25","ymax":"75","removeOlder":"2","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":840,"y":320,"wires":[[],[]]},{"id":"12f512eb.9c8b5d","type":"mqtt-broker","z":"","name":"MQTT Local","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"c237b06b.eb7ca","type":"serial-port","z":"","serialport":"/dev/ttyUSB0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","newline":"\\n","bin":"false","out":"char","addchar":false},{"id":"bb260e6b.77d62","type":"ui_group","z":"3639e7d1.f1c3e8","name":"DIY soil moisture sensors comparison - projetsdiy.fr - diyprojects.io","tab":"7c4acfe2.8a94","disp":true,"width":"12","collapse":false},{"id":"7c4acfe2.8a94","type":"ui_tab","z":"","name":"Home","icon":"dashboard"}]
Une fois importé , le flow Node-RED ressemble à ça
Déroulement des essais
Je suis parti avec un arrosage assez élevé de 61%. Comme vous pouvez le voir sur ce graphique, les quatre sondes sont stables.
Signaux initiaux
J’ai ensuite complété l’arrosage (c’était déjà trop, mais c’est pour la bonne cause) jusqu’à atteindre 77% d’humidité. Vous pouvez voir le comportement des capteurs. Les courbes de réponse des sondes YL-69 est inversé par rapport à la mesure du Mi Plant mais c’est parfaitement normal. On récupère le signal pour les sondes DIY alors qu’on récupère directement le taux d’humidité du Mi Plant.
Arrosage jusqu’à 76% d’humidité puis attente de stabilisation des sondes YL-68 et v1.2
En dilatant l’échelle, on peut mieux voir la réponse des capteurs. Les deux capteurs YL-69 présentent une réponse différente. Le signal renvoyé par YL-69B fait un pic puis le signal se stabilise après environ 10 minutes. Le YL-69A a un comportement un peu plus singulier. Le signal descend dans une cuvette puis remonte pour enfin se stabiliser. Il faudra attendre environ 30 minutes pour obtenir un signal correct. Dans les deux cas, c’est un temps de réponse acceptable pour suivre à intervalle régulier le taux d’humidité du sol. Par contre inutile de vouloir utiliser cette mesure pour piloter une pompe d’arrosage, on va vite avoir des surprises :-). Le v1.2 quand à lui, se stabilise très rapidement. Il réagit aussi vite que le capteur du Mi Plant 2018.
Arrosage jusqu’à 76% d’humidité puis attente de stabilisation des sondes YL-68 et v1.2
Maintenant, voici ce qui se passe lorsqu’on insère les capteurs dans un sol plus sec (13% au début du graphique puis à 22% d’humidité). Le Mi Plant réagit toujours très vite. Ici, le script python interroge le capteur toutes les 5 secondes. On voit qu’il ne faut que quelques secondes au Mi Plant pour renvoyer une mesure stable. C’est la même chose pour le capteur v1.2. Lorsque le taux d’humidité baisse, les capteurs YL-69 semblent mieux se comporter. Le YL-69B s’est stabilisé en moins de 5 minutes. Par contre, le signal du YL-69A est très bruité.
Réponse des capteurs lorsqu’on passe de 13% d’humidité à 22%
Le bruit persiste même après 20 minutes de mesure.
Signal fortement bruité pour la sonde YL-69B (même après 20 minutes de mesure) lorsque le taux d’humidité baisse.
Calibration des sondes YL-69 (fonctionne avec HL-69 et FC-28)
Dans un projet Arduino, on peut simplement fixer des seuils en fonction du niveau du signal analogique codé sur 10 bits mais c’est un peu moins sympa pour un affichage. On va donc faire une petite conversion d’échelle entre 0 et 100% d’humidité. On va donc calibrer le taux d’humidité à l’aide du Mi Plant. Pour cela il suffit de faire 2 mesures dans des conditions extrêmes (sec, trop humide) pour connaitre la correspondance entre le signal du capteur et le taux d’humidité correspondant.
Mi Plant 2018
(taux d’humidité en %) |
YL-69A | YL-69B | v1.2 | |
Trop sec |
13 |
779 |
750 |
486 |
Correct |
30 |
385 |
323 |
320 |
Trop humide |
68 |
277 |
280 |
288 |
La calibration n’a rien d’obligatoire. Vous pourriez très bien fixer des seuils pour un signal donné et déclencher les événements correspondant dans le code Arduino. Alerte, alarme, déclencher la pompe d’arrosage ou du système d’irrigation… Voici les seuils que j’ai relevé sur les 3 sondes et l’équivalent en pourcentage d’humidité sur un graphique.
Comme vous pouvez le voir sur le graphique, l’évolution n’est pas franchement linéaire. Normalement le signal évolue linéairement (d’après ce qu’on peut lire sur les tutoriels qui trainent depuis des années sur internet). Le problème vient peut être du manque d’homogénéité de mes échantillons de terre. J’ai placé les capteurs le plus près les uns des autres. C’est un point à creuser si quelqu’uns veut prendre le temps de vérifier mes résultats. Quoi qu’il en soit, on va essayer de faire une première conversion linéaire à l’aide de la fonction map disponible en C++ de l’IDE Arduino. Elle prend cette forme
map(variable, signal_max, signal_min, percentage_min, pourcentage_max)
Ce qui donne pour la sonde v1.2 par exemple
map(v_1_2_percent,486,303,13,76);
Essai des sondes calibrées avec la fonction map
Après calibration, voici ce que j’ai réussi à obtenir dans un sol à 13% d’humidité. Les courbes se superposent assez bien. On a une petite différence de 1 ou 2% entre les sondes, ce qui est correct pour du fait maison 🙂
Par contre les chose se gâtent dès que le taux d’humidité augmente. A 30% (d’après le Mi Plant), les autres sondes grimpent jusqu’à 50%. Aïe, ça ne marche pas vraiment 🙁
La calibration ne fonctionne pas au delà.
Calibration par regression linéaire
L’autre solution consiste à tracer une graphique sur un tableur pour en récupérer la droite de regression linéaire. Si vous n’avez pas de tableur, vous pouvez installer LibreOffice ou utiliser GraphPad qui propose quelques outils gratuitement sur internet.
Voici la courbe obtenue pour la sonde YL-69A sur GraphPad
et sur un tableur plus classique.
Droite de regression linéaire permettant de relier le signal brut au taux d’humidité du sol
Comme vous pouvez le constater, le coefficient de correlation (R) est assez médiocre. Il est d’environ 62%, ce qui laisse présager des écarts importants pour certaines mesures. Lors de la calibration de vos sondes, il faudra donc essayer de faire des mesures dans une zone avec un taux d’humidité homogène.
Voici les équations des droites qui permettent de convertir le signal analogique en % d’humidité :
- YL-69A : -0.0858 * signal_yl69a + 75.682
- YL-69B : -0.0917 * signal_yl69b + 81.045
- v1.2 : -0.2179 * signal_v1_2 + 116.3
Voici ce que ça donne en estimant le taux d’humidité à l’aide une regression linéaire. J’ai déplacé les sondes après 20 minutes de mesure pour les rapprocher au maximum en espérant que le taux d’humidité soit homogène dans cette zone.
La calibration fonctionne parfaitement bien pour la sonde v1.2. La différence avec le Xiaomi Mi Plant n’est que de quelques pourcents. Idem pour la sonde YL-69A. Le signal est toutefois très bruité. Pour atténuer le phénomène, on pourrait par exemple filtrer le signal en calculant une valeur moyenne sur 10 mesures. Pour le YL-69B, ce n’est pas mieux, le taux d’humidité estimé est très éloigné des autres sondes. En fonction du fabricant (surtout pour les prix les plus bas), vous risquez donc d’avoir des surprises.
Taux d’humidité du sol estimé par regression linéaire
Code Arduino du projet
Voici le code source que j’ai utilisé pour réaliser ce comparatif. Plusieurs variables sont disponibles au début du code :
- wait, temps d’attente entre deux mesures
- scale_min et scale_max : extrémités de la plage de calibration
- regression : si True alors le taux d’humidité est estimé à partir de la droite de regression linéaire
/* * Comparaison des sondes YL-69 / HL-69 / FC- 28 avec le Xiaomi Mi Plant 2018 * Calibration des sondes avec la fonction map ou régression linéaire * Export des mesures sur le port série au format JSON * * projetsdiy.fr * =========================================================================== * Comparison of YL-69 / HL-69 / FC-28 probes with the Xiaomi Mi Plant 2018 * Calibration of probes with the map function or linear regression * Export measurements on serial port in JSON format * diyprojects.io */ #define wait 60000 // durée d'attente entre les mesures - waiting time #define scale_min 13 #define scale_max 68 #define regression true // active le calcul par regression linéaire - activate linear regression void setup() { Serial.begin(115200); } void loop() { int v1_2 = analogRead(A3); //v1.2 int yl69a = analogRead(A4); //YL-69A int yl69b = analogRead(A5); //YL-69B Serial.print("{\"v1_2_raw\":"); Serial.print(v1_2); Serial.print(",\"v1_2_percent\":"); if ( regression ) { Serial.print(-0.2179*v1_2 + 116.3); // Linéaire - linear regression } else { Serial.print(map(v1_2,486,273,scale_min,scale_max)); } Serial.print(",\"YL69a_raw\":"); Serial.print(yl69a); Serial.print(",\"YL69a_percent\":"); if ( regression ) { Serial.print(-0.0858*yl69a + 75.682); } else { Serial.print(map(yl69a,779,277,scale_min,scale_max)); } Serial.print(",\"YL69b_raw\":"); Serial.print(yl69b); Serial.print(",\"YL69b_percent\":"); if ( regression ) { Serial.print(-0.0917*yl69b + 81.045); } else { Serial.print(map(yl69b,750,280,scale_min,scale_max)); } Serial.println("}"); delay(wait); }
Conclusions
Après calibration, on peut considérer que la sondes v1.2 avec un revêtement anti-corrosion permet d’obtenir une mesure équivalente à celle du Xiaomi Mi Plant. Reste à savoir si chaque sonde doit être calibrée individuellement comme cela semble être le cas pour les sondes YL-69. Il est probable que les sondes produites par un même fabricant donneront un signal équivalent. Je n’ai testé qu’un seul capteur avec un revêtement anti-corrosion (v1.2) similaire à celui de DFRobot. Le revêtement anti-corrosion semble équivalent à celui du Xiaomi Mi Plant. La durée de vie de la sonde devrait en être grandement améliorée et surtout elle devrait être stable dans le temps. Le temps de réponse est acceptable, disons qu’en cas de changement brutal du taux d’humidité, il faut environ 1 minute pour obtenir un signal stable.
Certaines sondes YL-69 (et équivalentes HL-69 et FC-28) de première génération permettent d’obtenir une mesure correcte. Il faudra accepter d’attendre au moins 30 minutes entre deux mesures, surtout en cas de changement brutal du taux d’humidité. C’est le cas lorsqu’on arrose ou qu’il fait un orage par exemple. Il faudra réserver ce type de sonde à de l’apprentissage ou pour faire de la surveillance lente et sans trop de précision. La précision des sondes semble varier fortement d’un fabricant à l’autre.
Pour conclure, je vous recommande de dépenser 1 ou 2 euros supplémentaires dans votre projet et d’opter pour les sondes de nouvelle génération, surtout si vous voulez piloter un système d’arrosage ou d’irrigation. Ce serait vraiment dommage de noyer vos plantes ou votre jardin lorsque vous partez en vacances 😉
- Flask + Bootstrap. Interface HTML pour projets Python sans effort
- Raspberry Pi. Piloter un moteur pas à pas Nema 17 avec la librairie RpiMotorLib Python pour A4988
- Ouvrir une page HTML au démarrage de Raspberry Pi OS avec Chromium Browser en plein écran (mode kiosk)
- Stocker des données sur une carte micro SD. Code Arduino compatible ESP32, ESP8266
- 4 solutions pour ajouter des E/S à un projet Arduino, ESP8266, ESP32, ESP8266, Raspberry Pi. ADS1115, MCP23017, PCF8574, PCA9685
- Nouveautés, projets, tutoriels domotique et objets connectés du 2 octobre 2020
Avez-vous aimé cet article ?