{"id":10874,"date":"2026-04-30T17:04:25","date_gmt":"2026-04-30T15:04:25","guid":{"rendered":"https:\/\/hub.imt-atlantique.fr\/fablab\/?post_type=tutoriel&#038;p=10874"},"modified":"2026-09-22T17:23:23","modified_gmt":"2026-09-22T15:23:23","slug":"atelier-data-logger-pim","status":"publish","type":"tutoriel","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/tutoriel\/atelier-data-logger-pim\/","title":{"rendered":"Atelier Data-logger PIM"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em><strong>Atelier con\u00e7u par Jonathan Flye-Sainte-Marie, enseignant-chercheur \u00e0 l&rsquo;UBO (IUEM) avec la contribution de Maud Tournery, charg\u00e9e d&rsquo;enseignement fablab \u00e0 IMT Atlantique licence CC-BY-SA<\/strong><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019objectif de cet atelier est de vous faire d\u00e9couvrir les bases de l\u2019\u00e9lectronique num\u00e9rique dans l\u2019optique de fabriquer un petit prototype de data logger de temp\u00e9rature. Pour cela vous allez d\u2019abord apprendre \u00e0 programmer un micro-contr\u00f4leur, vous verrez ensuite les grands types de capteurs disponibles (capteurs analogiques et num\u00e9riques) puis vous monterez et programmerez le fameux data-logger, qui permettra d\u2019enregistrer la temp\u00e9rature (avec un pas de temps choisi) de fa\u00e7on autonome, les donn\u00e9es horodat\u00e9es seront enregistr\u00e9es sur une carte SD. Inutile de vous dire que ce type d\u2019outils est tr\u00e8s utile en sciences de l\u2019environnement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le cours est structur\u00e9 en 6 chapitres, en fin de chapitre vous trouverez g\u00e9n\u00e9ralement des petits d\u00e9fis que vous pouvez r\u00e9aliser si vous en avez pris de l\u2019avance par rapport aux autres groupes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chapitre 1. Programmation de la carte<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 1 : Installer l&rsquo;IDE Arduino<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le logiciel Arduino IDE (Intergrated Development Software) vous permettra de programmer et de communiquer avec la carte (ici la carte Firebeetle), c\u2019est un peu le Rstudio pour les microcontrolleurs.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>T\u00e9l\u00e9charger le logiciel Arduino IDE <a href=\"https:\/\/www.arduino.cc\/en\/software\"><strong>ici<\/strong><\/a><\/li>\n\n\n\n<li>Suivez les instructions disponibles <a href=\"https:\/\/docs.arduino.cc\/software\/ide-v2\/tutorials\/getting-started\/ide-v2-downloading-and-installing\"><strong>ici <\/strong><\/a>pour l&rsquo;installer sur votre ordinateur.<\/li>\n\n\n\n<li>Une fois install\u00e9, vous pouvez lancez le logiciel<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 2 : Installer la biblioth\u00e8que pour la carte Firebeetle<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;IDE Arduino permet de programmer diff\u00e9rents microcontr\u00f4leurs. Ici, nous allons utiliser une carte Firebeetle qui n&rsquo;est pas une carte Arduino, elle est bas\u00e9e sur un microcontr\u00f4leur de type ESP32 (une \u201cfamille\u201d de micro-controlleurs tr\u00e9s r\u00e9pendus, peu chers et puissants qui int\u00e8grent des fonctionalit\u00e9s WIFI et Bluetooth), il faut donc installer une librairie pour permettre \u00e0 l&rsquo;IDE Arduino de le programmer. Pour cela vous pouvez suivre le tuto suivant :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dans le menu File &gt; Preferences<\/li>\n\n\n\n<li>En bas de la page, ajoutez :<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/dl.espressif.com\/dl\/package_esp32_index.json\">https:\/\/dl.espressif.com\/dl\/package_esp32_index.json <\/a>dans \u00ab\u00a0Additionnal board manager URLs\u00a0\u00bb<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Validez en cliquant sur OK<\/li>\n\n\n\n<li>Allez dans le menu Tools&gt;Board&gt;Boards manager et recherchez ESP32<\/li>\n\n\n\n<li>Installer la librarie \u201cESP32 by Espressif systems\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM1.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM1-272x300.png\" alt=\"\" class=\"wp-image-9891\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 3 : T\u00e9l\u00e9charger votre premier code<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Connectez le c\u00e2ble USB \u00e0 votre ordinateur et \u00e0 la carte.<\/li>\n\n\n\n<li>Vous devez maintenant indiquer \u00e0 l&rsquo;IDE Arduino que vous voulez programmer une carte Firebeetle, allez dans le menu Tools&gt;Board&gt;esp32 et s\u00e9lectionnez la carte \u201cFireBeetle-ESP32\u201d.<\/li>\n\n\n\n<li>S\u00e9lectionnez le port de communication dans Outils&gt;Port (cela doit ressemble \u00e0 quelque chose comme \u201cCOM\u201d suivi par un num\u00e9ro sous Windows).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Bravo ! Votre carte est pr\u00eate \u00e0 \u00eatre programm\u00e9e.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 4 : \u00c9crivez votre premier code et t\u00e9l\u00e9chargez-le sur le tableau.<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le panneau principal du logiciel, vous pouvez \u00e9diter un programme.&nbsp; Nous allons r\u00e9aliser un programme tr\u00e8s simple.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Copiez le code suivant dans la fen\u00eatre de l&rsquo;\u00e9diteur.<\/li>\n\n\n\n<li><\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"EnlighterJSRAW\">void setup() {\n   Serial.begin(115200) ; \/\/ Ouvrir la communication s\u00e9rie\n}\nvoid loop() {\n   Serial.println(&quot;Vive le PIM !&quot;) ; \/\/ imprime quelque chose sur le port s\u00e9rie\n   delay(1000) ; \/\/ attendre 1000 ms\n}<\/pre><\/div>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Sauvegarder le code (ne pas mettre d&rsquo;espace dans le nom du fichier)<\/li>\n\n\n\n<li>V\u00e9rifiez le code en cliquant sur cette ic\u00f4ne type the box. <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/icone1PIM.png\"><\/a><\/li>\n\n\n\n<li>Si vous n&rsquo;obtenez pas d&rsquo;erreur, vous pouvez t\u00e9l\u00e9verser le code en cliquant sur l&rsquo;ic\u00f4ne avec une fl\u00e8che. Cette op\u00e9ration va en fait programmer votre microcontr\u00f4leur qui pourra ex\u00e9cuter le programme (m\u00eame s\u2019il n\u2019est plus connect\u00e9 avec votre ordinateur).<\/li>\n\n\n\n<li>Lors de ce t\u00e9l\u00e9versement du texte doit d\u00e9filer dans la fen\u00eatre a fond noir en bas (Output), tant qu\u2019il n\u2019y a pas de message d\u2019erreur tout va bien&nbsp;!<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 5 : Voir le r\u00e9sultat<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous n&rsquo;obtenez pas d&rsquo;erreur, c&rsquo;est parfait&nbsp;! Mais maintenant vous voulez peut \u00eatre voir le r\u00e9sultat de votre programme. Pour cela :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Allez dans le menu Tools&gt;Serial Monitor<\/li>\n\n\n\n<li>En cas d&rsquo;erreur, v\u00e9rifiez la configuration du port (testez un autre COMXX) et ouvrez \u00e0 nouveau le moniteur s\u00e9rie.<\/li>\n\n\n\n<li>Vous devriez voir \u00ab\u00a0Vive le PIM&nbsp;!\u00a0\u00bb s\u2019afficher toutes les secondes dans le moniteur s\u00e9rie.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Bravo, vous \u00eates maintenant pr\u00eat pour la suite !<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\">Chapitre 2. Premier pas en \u00e9lectronique num\u00e9rique : faire clignoter une LED<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les microcontr\u00f4leurs permettent d\u2019utiliser certains de leurs pins (broches) en tant que \u00ab\u00a0sorties\u00a0\u00bb. C\u2019est-\u00e0-dire que de fa\u00e7on logicielle (en programmant le microcontr\u00f4leur), nous allons pouvons d\u00e9finir si le pin est dans un \u00e9tat :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00ab\u00a0HIGH\u00a0\u00bb, ce qui signifie que le pin d\u00e9livre une tension \u00e9gale \u00e0 la tension de fonctionnement du microcontr\u00f4leur: ici 3,3V.<\/li>\n\n\n\n<li>\u00ab\u00a0LOW\u00a0\u00bb, ce qui signifie que la tension sur le pin concern\u00e9 est de 0V.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonctionnalit\u00e9 est une fonctionnalit\u00e9 de base d&rsquo;un microcontr\u00f4leur, elle permet, de contr\u00f4ler des composants connect\u00e9s au pin en question. Par exemple, d\u2019allumer ou d\u2019\u00e9teindre une LED. Voyons comment nous pouvons r\u00e9aliser cela. La premi\u00e8re chose \u00e0 faire est de jeter un \u0153il au \u00ab\u00a0pinout\u00a0\u00bb du microcontr\u00f4leur, qui est la \u00ab\u00a0<a href=\"https:\/\/moodlemooc.univ-brest.fr\/moodle\/mod\/glossary\/showentry.php?eid=190&amp;displayformat=dictionary\">carte<\/a>\u00a0\u00bb o\u00f9 l&rsquo;on peut trouver toutes les fonctionnalit\u00e9s qui peuvent \u00eatre associ\u00e9es \u00e0 chacun des pin du micro-contr\u00f4leur, voici le \u00ab pinout \u00bb de la carte FireBeetle :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM2.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM2-300x204.png\" alt=\"\" class=\"wp-image-9896\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Toutes les pins indiqu\u00e9s par un \u00ab&nbsp;IO&nbsp;\u00bb sont cens\u00e9es avoir cette fonctionnalit\u00e9, ce qui exclut les pins en rouge (alimentation) et ceux en noir (masse) ainsi que les pins NC (non connect\u00e9s) et RST (r\u00e9initialisation).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les pins marqu\u00e9es d&rsquo;un D sont g\u00e9n\u00e9ralement d\u00e9di\u00e9es \u00e0 cette fonction. Mais certaines de ces broches ont aussi d&rsquo;autres fonctionnalit\u00e9s (par exemple, D0 et D1 ont aussi les fonctionnalit\u00e9s TX et RX, qui est un protocole de communication que nous verrons plus tard). Un bon choix est donc IO25\/D2 qui n&rsquo;a pas d&rsquo;autres fonctionnalit\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que nous avons identifi\u00e9 le pin IO25, connectons-la \u00e0 une LED. Nous devrons ajouter une r\u00e9sistance de 47 Ohm pour prot\u00e9ger la LED (histoire de ne pas la griller).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image3PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image3PIM-246x300.png\" alt=\"\" class=\"wp-image-9897\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il est maintenant temps de souder les connecteurs sur le Firebeetle.&nbsp; Une fois que c&rsquo;est fait, branchez la Firebeetle sur la plaque d\u2019essai. Et c\u00e2blez comme indiqu\u00e9 ci-dessus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Attention \u00e0 la polarit\u00e9 lors du montage de la LED ! La patte courte (-) de la LED du c\u00f4t\u00e9 plat doit \u00eatre connect\u00e9 \u00e0 la broche GND du microcontr\u00f4leur tandis que la patte longue (+) doit \u00eatre connect\u00e9 \u00e0 la broche IO25 (Notez que vous pouvez utiliser votre LED verte au lieu d&rsquo;une LED rouge).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM4.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM4-296x300.png\" alt=\"\" class=\"wp-image-9898\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><em>Bravo, vous avez r\u00e9alis\u00e9 votre premier sch\u00e9ma \u00e9lectrique !<\/em><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, programmons le microcontr\u00f4leur :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ouvrir une nouvelle esquisse dans l&rsquo;IDE Arduino<\/li>\n\n\n\n<li>Lisez le sketch (programme) vide, vous y trouverez deux d\u00e9clarations vides :\n<ul class=\"wp-block-list\">\n<li>setup : Le code contenu dans cette d\u00e9claration ne sera ex\u00e9cut\u00e9 qu&rsquo;une seule fois, lors de la mise sous tension ou de la r\u00e9initialisation du microcontr\u00f4leur. Le code dans le setup est donc utilis\u00e9 pour les initialisation.<\/li>\n\n\n\n<li>loop : L code contenu dans cette d\u00e9claration sera ex\u00e9cut\u00e9 continuellement en boucle.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Dans le setup, nous devons ajouter le code pour d\u00e9finir la broche comme \u00ab&nbsp;OUTPUT&nbsp;\u00bb.<\/li>\n\n\n\n<li>Dans la boucle, nous devrons ajouter un code qui :\n<ul class=\"wp-block-list\">\n<li>mette l&rsquo;IO25 dans l&rsquo;\u00e9tat HIGH : cela alimentera la LED<\/li>\n\n\n\n<li>attendre un certain temps (essayons 500ms)<\/li>\n\n\n\n<li>puis mette l&rsquo;IO25 dans l&rsquo;\u00e9tat LOW : ceci \u00e9teindra la LED<\/li>\n\n\n\n<li>attendre un certain temps (essayons 1000ms)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Le code suivant permet d&rsquo;effectuer ces op\u00e9rations :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"EnlighterJSRAW\">\/\/ D\u00e9finition\nconst int greenled = 25 ; \n\/\/ D\u00e9finir le pin IO25 comme pin LED\n\/\/ la fonction de configuration s&#039;ex\u00e9cute une fois lorsque vous appuyez sur reset ou que vous mettez la carte sous tension\nvoid setup() {\n\/\/ D\u00e9finir la broche pour le greenled en tant que sortie\npinMode(greenled, OUTPUT) ;\n}\n\/\/ la fonction en boucle s&#039;ex\u00e9cute \u00e0 l&#039;infini\nvoid loop() {\ndigitalWrite(greenled, HIGH) ; \/\/ allume la LED (HIGH est le niveau de tension)\ndelay(500) ; \/\/ attendre 500 millisecondes\ndigitalWrite(greenled, LOW) ; \/\/ \u00e9teint la LED en mettant la tension \u00e0 un niveau BAS\ndelay(1000) ; \/\/ attendez une seconde\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, t\u00e9l\u00e9chargez le code (vous savez comment faire) et v\u00e9rifiez que la led clignote.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez modifier les valeurs du d\u00e9lai pour changer la fa\u00e7on dont le voyant clignote.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">D\u00e9fis (\u00e0 faire si vous avez le temps)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>faire clignoter une 2\u00e8me LED, les 2 LEDs s&rsquo;allumant en m\u00eame temps et s\u2019\u00e9teignant en m\u00eame temps<\/li>\n\n\n\n<li>d\u00e9caler le clignotement des 2 LEDs : la LED A s\u2019allume quand la B s\u2019\u00e9teint et inversement<\/li>\n\n\n\n<li>faire clignoter la LED A pendant que la LED B reste allum\u00e9e.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Chapitre 3&nbsp;: Capteurs analogiques basiques<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les microcontr\u00f4leurs permettent de communiquer avec diff\u00e9rents types de capteurs ou d&rsquo;en lire le signal. Nous entendons par capteur tout composant qui peut fournir des informations (\u00e9lectriques ou \u00e9lectroniques) sur son environnement. Nous pouvons classer les capteurs en deux grandes \u00ab\u00a0familles\u00a0\u00bb :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>les capteurs analogiques : ils \u00e9mettent un signal \u00e9lectrique (tension) qui d\u00e9pend d&rsquo;une variable de l&rsquo;environnement<\/li>\n\n\n\n<li>les capteurs num\u00e9riques : plus complexes, ils communiquent num\u00e9riquement (comme le Firebeetle communique \u00e0 l&rsquo;ordinateur) une valeur ou un ensemble de valeurs qui d\u00e9pendent de variables de l&rsquo;environnement.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cet exercice, nous allons d&rsquo;abord nous int\u00e9resser \u00e0 un capteur analogique de des plus basique : un bouton poussoir, qui capte la pr\u00e9sence ou l\u2019absence de pression. Ce type de capteur est (g\u00e9n\u00e9ralement) normalement ouvert (OFF), mais qu\u2019on le presse le contact se fait et il laisse passer le courant (ON).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Objectifs de l&rsquo;exercice<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons r\u00e9aliser un circuit et programmer le Firebeetle permettant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>d\u2019allumer la led lorsqu&rsquo;un une pression est exerc\u00e9e sur le poussoir<\/li>\n\n\n\n<li>\u00e9teindre la LED lorsque lorsque la pression est rel\u00e2ch\u00e9e.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Notez que ceci peut \u00eatre fait sans micro-contr\u00f4leur, en utilisant simplement le poussoir pour contr\u00f4ler la puissance de la LED, mais on est l\u00e0 pour jouer avec le Firebeetle !)<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 1 : contr\u00f4ler l\u2019alimentation de la LED \u00e0 partir du Firebeetle<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nous l&rsquo;avons d\u00e9j\u00e0 fait dans l&rsquo;exercice pr\u00e9c\u00e9dent. Il suffit d&rsquo;utiliser le m\u00eame circuit. Rappelez que nous avons utilis\u00e9 l\u2019IO25 comme sortie pour alimenter la LED.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 2 : circuit pour le bouton poussoir<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Tout d&rsquo;abord, nous devons choisir un pin pour lire l&rsquo;\u00e9tat du capteur. Comme le capteur est un capteur de type ON\/OFF, le pin doit \u00eatre capable de lire soit une valeur 0V (LOW) soit une valeur 3V3 (HIGH). N&rsquo;importe quel pin IO peut faire cela (rappelez-vous que IO signifie Entr\u00e9e\/Sortie). Nous pouvons choisir IO26.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons maintenant connecter le bouton poussoir entre la broche 3V3 et IO26 comme dans l&rsquo;image ci-dessous.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image5PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image5PIM-257x300.png\" alt=\"\" class=\"wp-image-9899\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 3 : Programme<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le programme que nous allons \u00e9crire doit :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Placer le pin IO26 en mode INPUT : nous voulons lire l&rsquo;\u00e9tat de cette broche : qui sera soit HIGH si la tension de la broche est de 3V3 (bouton poussoir press\u00e9), soit LOW si la tension de la broche est de 0V (pas de pression sur le bouton poussoir).<\/li>\n\n\n\n<li>Inclure une boucle qui :\n<ol class=\"wp-block-list\">\n<li>V\u00e9rifier l&rsquo;\u00e9tat de la broche IO26<\/li>\n\n\n\n<li>Allume la LED, en d&rsquo;autres termes, fait passer l&rsquo;\u00e9tat du pin IO25 en HIGH si le pin IO26 est en \u00e9tat HIGH.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Le programme devrait donc \u00eatre :<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"EnlighterJSRAW\">const int reed = 26 ; \/\/ D\u00e9finir la broche IO26 comme broche Reed\n\/\/ la fonction de configuration s&#039;ex\u00e9cute une fois lorsque vous appuyez sur reset ou que vous mettez la carte sous tension\nvoid setup() {\n\t\/\/ D\u00e9finir la broche pour le geenled en tant que sortie\n\tpinMode(greenled, OUTPUT) ;\n\t\/\/ D\u00e9finit la broche de l&#039;anse comme entr\u00e9e, PULLDOWN permet d&#039;amener la broche \u00e0 GND (0V).\n\tpinMode(reed, INPUT_PULLDOWN) ;\n}\n\/\/ la fonction en boucle s&#039;ex\u00e9cute \u00e0 l&#039;infini\nvoid loop() {\n\tif(digitalRead(reed)==HIGH){\n\t\tdigitalWrite(greenled, HIGH) ;\n\t}else{\n\t\tdigitalWrite(greenled, LOW) ;\n\t}\n}<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9tape 4 : T\u00e9l\u00e9verser le code et l&rsquo;essayer<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Vous pouvez maintenant connecter la carte \u00e0 votre ordinateur, s\u00e9lectionner le bon port, d\u00e9bugger le code et le t\u00e9l\u00e9verser.<\/li>\n\n\n\n<li>Essayez de presser le bouton poussoir et voyez si le voyant s&rsquo;allume.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">D\u00e9fis (\u00e0 faire si vous avez le temps)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Afficher l\u2019\u00e9tat du bouton poussoir dans le moniteur s\u00e9rie.<\/li>\n\n\n\n<li>Laisser la LED allum\u00e9e par d\u00e9faut, l\u2019\u00e9teindre quand le bouton poussoir est au niveau HIGH.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Applications possible des ce type de capteurs&nbsp;<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l\u2019avez compris, les capteurs de type ON\/OFF permettent de d\u00e9terminer un \u00e9tat binaire, ils peuvent par exemple \u00eatre appliqu\u00e9s pour&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>d\u00e9terminer si un bac (r\u00e9servoir) est plein ou non avec un capteur \u00e9quip\u00e9e d\u2019un flotteur<\/li>\n\n\n\n<li>d\u00e9terminer un \u00e9tat d\u2019ouverture (porte, vanne)&#8230;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Chapitre 4&nbsp;:&nbsp; Capteurs analogiques typiques<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;exercice pr\u00e9c\u00e9dent, nous avons vu comment traiter le signal d&rsquo;un capteur de type ON\/OFF qui nous permet de capter un signal binaire.&nbsp; Nous allons maintenant nous int\u00e9resser \u00e0 un capteur plus complexe&nbsp;: un capteur qui ne d\u00e9termine pas uniquement un \u00e9tat binaire mais dont la <strong>tension de sortie varie<\/strong>&nbsp; entre 0V et une tension maximale (ici 3V3) <strong>en fonction de la variable que l\u2019on souhaite mesurer<\/strong>. Ce type de capteur est tr\u00e8s courant (c\u2019est probablement le type le plus rependu). Afin de lire un tel capteur \u00e0 partir de notre microcontr\u00f4leur nous voulons maintenant non plus lire un \u00e9tat binaire (HIGH\/LOW) mais <strong>lire une tension sur un des pins. <\/strong>La plupart des micro-contr\u00f4leurs sont capables de faire cela, mais implique l\u2019utilisation de <strong>pins sp\u00e9cifiques <\/strong>du micro-contr\u00f4leur : les \u00ab\u00a0pins analogiques\u00a0\u00bb. Vous devez v\u00e9rifier la carte de pinout pour choisir un pin qui dispose de cette fonctionnalit\u00e9, elles sont g\u00e9n\u00e9ralement nomm\u00e9es A0, A1\u2026 Vous pouvez voir que les pins IO15, IO35, IO34, IO39, et IO 36 sont respectivement les pins A4, A3, A2, A1 et A0 ce qui signifie qu&rsquo;elles sont tous des pins analogiques.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM6.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/imagePIM6-300x204.png\" alt=\"\" class=\"wp-image-9900\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Comment fonctionnent ces broches analogiques ?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si une tension est appliqu\u00e9e sur l&rsquo;une de ces broches, le microcontr\u00f4leur est capable, gr\u00e2ce \u00e0 l&rsquo;un de ses composants appel\u00e9 ADC (Analogic to Digital Converter), de comparer cette tension \u00e0 une tension de r\u00e9f\u00e9rence, et il renverra une valeur proportionnelle au rapport entre les tensions. Il existe plusieurs r\u00e9solutions de convertisseurs analogiques-num\u00e9riques ; dans les microcontr\u00f4leurs courants, les ADC fonctionnent g\u00e9n\u00e9ralement sur 10 ou 12 bits. Cela peut para\u00eetre compliqu\u00e9, mais pas de panique, ce qu&rsquo;il faut retenir c&rsquo;est que :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un ADC 10bits : peut sortir des valeurs entre 0 et 1023 (2^10 &#8211; 1, car 0 est aussi une valeur).<\/li>\n\n\n\n<li>Un ADC 12bits : peut sortir des valeurs entre 0 et 4095 (2^12 &#8211; 1, car 0 est aussi une valeur).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, notre FireBeetle dispose d\u2019ADC 12bits, et la tension de r\u00e9f\u00e9rence est de 3.3V. Supposons que nous appliquions une tension de 1,15V sur une broche analogique. L&rsquo;ADC retournera une valeur \u00e9gale \u00e0 1.15\/3.3 = 0.35 fois la valeur maximale de l&rsquo;ADC (4095), donc la valeur retourn\u00e9e par l&rsquo;ADC sera 0.35 x 4095 = 1433.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Autre exemple, si nous appliquons une tension de 3V, alors l&rsquo;ADC renverra (3\/3.3)x4095 = 3723, si la tension est de 0.3V alors l&rsquo;ADC renverra 372, etc\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On notera que :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; si la tension est de 0V, la valeur renvoy\u00e9e par l&rsquo;ADC sera 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; si la tension est sup\u00e9rieure \u00e0 3,3V, la valeur sera 4095 (l&rsquo;ADC n&rsquo;est pas en mesure de renvoyer une valeur sup\u00e9rieure \u00e0 4095).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notons \u00e9galement que :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la tension de r\u00e9f\u00e9rence est de 3,3 V et que nous travaillons avec un ADC \u00e0 12 bits, la r\u00e9solution de la lecture sera de 3,3\/4096=0,0008 V, ce qui donne 0,8 mV (ce qui est d\u00e9j\u00e0 une r\u00e9solution tr\u00e8s \u00e9lev\u00e9e).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Entra\u00eenons-nous !<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Une fa\u00e7on de construire un capteur analogique simple est d&rsquo;utiliser un potentiom\u00e8tre, qui n\u2019est rien de plus qu\u2019une r\u00e9sistance variable, et qui ressemble \u00e0 ceci :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image7PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image7PIM-300x261.png\" alt=\"\" class=\"wp-image-9902\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Les potentiom\u00e8tres sont largement utilis\u00e9s en \u00e9lectronique, par exemple pour contr\u00f4ler le volume d&rsquo;une radio. Le sch\u00e9ma ci-dessus illustre son fonctionnement. Lorsque l&rsquo;on tourne l\u2019axe, le curseur se d\u00e9place le long de l&rsquo;\u00e9l\u00e9ment r\u00e9sistif et la r\u00e9sistance entre B (point central) et C et entre B et A varie (notez que la r\u00e9sistance entre A et C ne d\u00e9pend pas de la position de l&rsquo;axe).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons maintenant que le potentiom\u00e8tre soit mont\u00e9 selon le sch\u00e9ma suivant :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image8PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image8PIM-300x269.png\" alt=\"\" class=\"wp-image-9903\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il agira comme un diviseur de tension (<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Diviseur_de_tension\">voir ce lien pour des explications<\/a>). Ainsi si B est tr\u00e8s proche de A, la tension entre B et GND sera proche de 3V3, et si B est proche de C, la tension entre B et GND sera proche de 0V, en position interm\u00e9diaire la tension entre B et GND d\u00e9pendra de la position de B entre A et C. <strong>Ainsi la lecture de la tension entre B et GND renseigne sur la position de l&rsquo;axe<\/strong>. Nous avons ici un capteur de position analogique, c\u2019est une utilisation possible des potentiom\u00e8tres (capteur d\u2019angle de barre sur les pilote automatiques, capteur d\u2019ouverture d\u2019un robinet\u2026).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Objectifs de l&rsquo;exercice<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objectif de cet exercice est d&rsquo;utiliser le potentiom\u00e8tre comme capteur analogique et de dessiner un graphique qui trace une valeur en fonction de la position de l&rsquo;axe du potentiom\u00e8tre.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 1 : Le montage \u00e9lectronique<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">sur le Firebeetle nous utiliserons le pin IO34 comme pin analogique du microcontr\u00f4leur. Connectez le point central du potentiom\u00e8tre (B, fil jaune) \u00e0 IO34, une extr\u00e9mit\u00e9 \u00e0 3V3 (fil rouge) et l&rsquo;autre au GND (fil noir).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">remarque : le potentiom\u00e8tre utilis\u00e9 a une connectique un peu sp\u00e9cifique, appel\u00e9e Grove. Il suffit d&rsquo;utiliser des fils \u00e9lectriques m\u00e2le\/m\u00e2le entre le connecteur et l&rsquo;esp32.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image9PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image9PIM-245x300.png\" alt=\"\" class=\"wp-image-9904\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 2 : Le code<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que la connexion est faite, nous allons programmer le Firebeetle, le programme devra avoir les caract\u00e9ristiques suivantes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Lecture du pin analogique<\/li>\n\n\n\n<li>Envoyer la valeur \u00e0 l&rsquo;ordinateur (nous avons fait quelque chose de similaire lors du premier chapitre)<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"EnlighterJSRAW\">void setup() \n{\nSerial.begin(115200) ; \/\/ Ouverture de la communication s\u00e9rie\npinMode(34, INPUT) ;\n}\nvoid loop() \n{\nint val = analogRead(34) ; \/\/ Lecture de la valeur du pot\nSerial.println(val) ; \/\/ Envoi de la valeur sur le port s\u00e9rie\ndelay(250) ; \/\/ attendre 500 ms\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 3 : Visualisation du r\u00e9sultat<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;IDE Arduino, allez dans Tools&gt;Serial Monitor, tournez l&rsquo;axe du potentiom\u00e8tre et vous devriez voir la valeur changer. V\u00e9rifiez le port si n\u00e9cessaire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allez maintenant dans Tools&gt;Serial plotter, une courbe dessinant les valeurs donn\u00e9es par le Firebeetle sera dessin\u00e9e, vous pouvez maintenant tourner l&rsquo;axe du pot et voir graphiquement le r\u00e9sultat.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">D\u00e9fis (\u00e0 faire si vous avez le temps)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allumer la LED d\u00e8s qu\u2019on mesure une tension \u2265 1,5 V sur la broche B du potentiom\u00e8tre<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusions<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Au cours de cet exercice, vous avez compris et mis en \u0153uvre les bases des capteurs analogiques. Mais vous avez aussi r\u00e9alis\u00e9 un <em><strong>capteur num\u00e9rique<\/strong><\/em> : le potentiom\u00e8tre + les microcontr\u00f4leurs constituent un syst\u00e8me qui permet de renvoyer num\u00e9riquement une valeur qui d\u00e9pend d&rsquo;une variable de l&rsquo;environnement (ici la position de l\u2019axe). Cette valeur peut \u00eatre affich\u00e9e et trac\u00e9e sur un ordinateur. Bravo ! Gardez \u00e0 l&rsquo;esprit qu&rsquo;un capteur num\u00e9rique fonctionne de cette mani\u00e8re, il s&rsquo;agit g\u00e9n\u00e9ralement d&rsquo;un composant comprenant un capteur analogique + un (petit) microcontr\u00f4leur. Le prochain exercice portera sur les capteurs num\u00e9riques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chapitre 5&nbsp;: Capteurs num\u00e9riques<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comme nous l&rsquo;avons vu dans l&rsquo;exercice pr\u00e9c\u00e9dent, un capteur num\u00e9rique est un capteur qui permet de transf\u00e9rer num\u00e9riquement des informations sur l&rsquo;environnement \u00e0 un autre composant \/ microcontr\u00f4leur \/ ordinateur. De tels capteurs (ou composants) sont tr\u00e8s couramment utilis\u00e9s.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Protocoles de communication num\u00e9rique communs :<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Trois principaux protocoles de communication sont couramment utilis\u00e9s : UART, I2C et SPI. L\u2019id\u00e9e ici n\u2019est pas d\u2019entrer dans le d\u00e9tails de ces chacun de ces protocoles, mais il est utile de les conna\u00eetre un minimum pour pouvoir les utiliser.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Le protocole UART<\/strong><\/h5>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/fr.wikipedia.org\/wiki\/UART\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il s&rsquo;agit d\u2019un protocole de communication assez ancien. Bien qu\u2019encore tr\u00e8s utilis\u00e9 il pr\u00e9sente certaines limites qu\u2019il convient de cona\u00eetre. Vous avez d\u00e9j\u00e0 manipul\u00e9 ce protocole car c\u2019est celui-ci qui est utilis\u00e9 par notre microcontr\u00f4leur communiquer avec l&rsquo;ordinateur&nbsp;: c\u2019est ce protocole qui se cache sous la commande Serial.print() que nous avons d\u00e9j\u00e0 utilis\u00e9e (techniquement il est virtualis\u00e9e via l&rsquo;USB pour communiquer avec le PC).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce protocole n\u00e9cessite, <em>a minima,<\/em> trois c\u00e2bles : GND, TX (transmission), RX (r\u00e9ception). Supposons deux objets (ITEM1, un FireBeetle par exemple ; ITEM2, un GPS par exemple) utilisent ce protocole pour communiquer, ils seront c\u00e2bl\u00e9s selon le sch\u00e9ma suivant :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image10PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image10PIM-300x158.png\" alt=\"\" class=\"wp-image-9905\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Notez que les lignes TX (bouche) et RX (oreille) doivent \u00eatre crois\u00e9es : l&rsquo;ITEM1 parlera \u00e0 travers son TX et l&rsquo;ITEM2 \u00e9coutera \u00e0 travers son RX et inversement. <strong>Vous comprenez maintenant que le fait de c\u00e2bler les TX des deux objets ensemble et les RX ensemble ne fonctionnera pas <\/strong>(la bouche de l\u2019ITEM1 parlera \u00e0 la bouche de l\u2019ITEM 2, et l\u2019oreille de l\u2019ITEM1 sera en face de l\u2019oreille de l\u2019ITEM2, pas facile de communiquer de cette fa\u00e7on l\u00e0!)<strong>. Il s&rsquo;agit d&rsquo;une erreur tr\u00e8s courante !<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La vitesse de communication de ce protocole (d\u00e9bit en bauds) doit \u00eatre configur\u00e9e, rappelez-vous que nous avons utilis\u00e9 la commande : Serial.begin(115200) ; ce qui signifie que nous d\u00e9marrons une communication s\u00e9rie (UART) avec un d\u00e9bit en bauds de 115200 (bits\/s). Les baudrates couramment utilis\u00e9s sont 4800, 9600 et 115200bits\/s .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Une limitation importante de ce protocole est que sur une ligne de communication, seuls deux \u00e9l\u00e9ments peuvent communiquer ensemble<\/strong>. Si vous voulez que l&rsquo;\u00e9l\u00e9ment 1 (c&rsquo;est-\u00e0-dire le firebeetle) communique avec un troisi\u00e8me \u00e9l\u00e9ment, vous aurez besoin d&rsquo;une autre paire de fils TX et RX.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En oc\u00e9anographie, un grand nombre d&rsquo;instruments utilisent un tel protocole, par exemple les GPS : la plupart des GPS utilisent le protocole UART. Un certain nombre de capteurs oc\u00e9anographiques (les fluorim\u00e8tres par exemple) utilisent le protocole RS232, qui est identique \u00e0 l&rsquo;UART mais dont la tension est typiquement comprise entre -12V et 12V alors que les micro-contr\u00f4leurs UART utilisent des tensions comprises entre 0V et 3V3 ou 5V. Les capteurs RS232 peuvent facilement \u00eatre interfac\u00e9s avec un micro-contr\u00f4leur en utilisant un composant sp\u00e9cifique (max232 ou \u00e9quivalent).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Le protocole I2C<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Il s&rsquo;agit d&rsquo;un protocole plus r\u00e9cent qui est d\u00e9sormais tr\u00e8s couramment utilis\u00e9 pour interfacer un microcontr\u00f4leur avec d&rsquo;autres composants, g\u00e9n\u00e9ralement des capteurs. Dans ce protocole, un \u00ab\u00a0ma\u00eetre\u00a0\u00bb \u00e9change des informations avec un ou plusieurs \u00ab\u00a0esclaves\u00a0\u00bb. La communication se fait toujours \u00e0 l&rsquo;initiative du ma\u00eetre. Une caract\u00e9ristique tr\u00e8s int\u00e9ressante de ce protocole est que plusieurs composants peuvent communiquer sur une seule ligne (bus). Cela est rendu possible par le fait que le ma\u00eetre contr\u00f4le la communication des autres composants. Pour ce faire, chaque composant poss\u00e8de une adresse sp\u00e9cifique (qui doit \u00eatre configur\u00e9e dans le code). Nous n&rsquo;entrerons pas dans les d\u00e9tails du fonctionnement de ce protocole. Le protocole I2C est typiquement c\u00e2bl\u00e9 de la fa\u00e7on suivante :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image11PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image11PIM-300x169.png\" alt=\"\" class=\"wp-image-9906\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il a besoin de deux fils SDA (Serial Data line) et SCL (Serial Clock line) en plus du GND. Mais notez que plusieurs capteurs sont connect\u00e9s \u00e0 la m\u00eame ligne. Notez \u00e9galement que les deux lignes doivent \u00eatre connect\u00e9es \u00e0 Vdd (le 5V ou 3.3V du micro-contr\u00f4leur) par l&rsquo;interm\u00e9diaire de r\u00e9sistances dite de pull-up. Si vous ne les connectez pas, la communication ne fonctionnera pas. Les r\u00e9sistances pull-up sont g\u00e9n\u00e9ralement de 1KOhm (marron, noir, rouge).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour en savoir plus sur le protocole I2C, consultez ce <a href=\"https:\/\/fr.wikipedia.org\/wiki\/I2C\">site<\/a>. <\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Le protocole SPI<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Le protocole SPI fonctionne de la m\u00eame mani\u00e8re que le protocole I2C, c&rsquo;est-\u00e0-dire que plusieurs p\u00e9riph\u00e9riques (capteurs, m\u00e9moires) peuvent communiquer avec un ma\u00eetre (c&rsquo;est-\u00e0-dire un micro-contr\u00f4leur) sur un seul bus. Le c\u00e2blage est un peu plus complexe, il n\u00e9cessite 3 c\u00e2bles (un de plus pour chaque p\u00e9riph\u00e9rique) :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image12PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image12PIM-300x238.png\" alt=\"\" class=\"wp-image-9907\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez en savoir plus sur ce protocole \u00e0 cette <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Serial_Peripheral_Interface\">adresse<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce protocole est moins courant pour la communication avec les capteurs que le protocole I2C, mais c<strong>&lsquo;est le protocole de communication typique qui utilise les cartes SD<\/strong>.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Autres protocoles<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe d\u2019autre protocoles de communication qui sont moins couramment utilis\u00e9s mais que vous pourrez \u00eatre amen\u00e9s \u00e0 utiliser, un exemple est le protocole OneWire, qui est un protocole qui comme son nom l\u2019indique n\u2019a besoin que d\u2019un c\u00e2ble (en plus du GND) et sur lequel on peut mettre plusieurs capteurs<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><em>En pratique, comment utiliser ces capteurs avec un micro-contr\u00f4leur ?<\/em><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re chose \u00e0 faire est de c\u00e2bler correctement le capteur \u00e0 votre micro-contr\u00f4leur. Pour cela, vous devez consulter le pinout de votre micro-contr\u00f4leur : vous connaissez d\u00e9j\u00e0 celui du Firebeetle :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image13PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image13PIM-300x204.png\" alt=\"\" class=\"wp-image-9908\"\/><\/a><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ports UART<\/strong> : les broches IO0 et IO1 sont respectivement d\u00e9sign\u00e9es par TXD et RXD. Il s&rsquo;agit des broches s\u00e9rie mat\u00e9rielles (UART) de la carte. Cela peut \u00eatre un probl\u00e8me car il n&rsquo;y a qu&rsquo;un seul port et on a g\u00e9n\u00e9ralement besoin d&rsquo;un port par capteur qui utilise ce protocole. En fait, presque toutes les broches num\u00e9riques (d\u00e9sign\u00e9es par D dans la <a href=\"https:\/\/moodlemooc.univ-brest.fr\/moodle\/mod\/glossary\/showentry.php?eid=190&amp;displayformat=dictionary\">carte de <\/a>brochage) peuvent \u00eatre utilis\u00e9es comme port UART en utilisant la librairie \u00ab\u00a0softwareserial\u00a0\u00bb.<\/li>\n\n\n\n<li><strong>Ports I2C<\/strong> : Les pins IO21 et IO22 sont les pins SDA et SCL respectivement, vous devez les relier par des r\u00e9sistances de pullups (environ 1Kohm) au 3V3 du micro-contr\u00f4leur.<\/li>\n\n\n\n<li><strong>Ports SPI<\/strong> : Les pins IO18, IO19 et IO23 sont respectivement les pins SCK (ou SCLK), MISO et MOSI. En outre, toute autre broche num\u00e9rique doit \u00eatre utilis\u00e9e comme \u00ab\u00a0chipselect\u00a0\u00bb (commun\u00e9ment SS ou CS).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous devez ensuite programmer votre microcontr\u00f4leur pour qu&rsquo;il communique avec les capteurs. Si vous avez jet\u00e9 un coup d&rsquo;\u0153il aux pages du wiki, vous pensez probablement que vous en \u00eates incapables car c&rsquo;est trop complexe ! N&rsquo;ayez pas peur, Arduino et autres microcontr\u00f4leurs consorts sont sp\u00e9cialement con\u00e7us pour ce type d&rsquo;application et ils disposent de moyens simples pour programmer les communications avec les capteurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La communication par UART est native dans Arduino et co, elle se fait en utilisant les commandes de la \u00ab\u00a0famille\u00a0\u00bb Serial.blabla(blabla) ; vous avez d\u00e9j\u00e0 utilis\u00e9 ce protocole de communication pour communiquer avec l&rsquo;ordinateur !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La communication par I2C utilise la biblioth\u00e8que \u00ab\u00a0Wire\u00a0\u00bb, de plus la plupart des capteurs ont aussi une biblioth\u00e8que sp\u00e9cifique avec des commandes simples pour communiquer avec les capteurs. C&rsquo;est le cas de celui que nous utiliserons dans le prochain exercice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La communication avec le SPI utilise la biblioth\u00e8que SPI, et la communication avec la carte SD (utile pour un datalogger) se fait par l&rsquo;interm\u00e9diaire d&rsquo;une biblioth\u00e8que nomm\u00e9e \u00ab\u00a0SD\u00a0\u00bb.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusions<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ce chapitre \u00e9tait tr\u00e8s th\u00e9orique, mais il vous a permis de d\u00e9couvrir les diff\u00e9rents protocoles de communication avec des capteurs (ou autre composants) num\u00e9riques. A premi\u00e8re vue cela peut para\u00eetre complexe, mais vous avez pu constater que&nbsp;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>&#8211; le pinout de la carte permet de d\u00e9terminer comment connecter ses capteurs<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>&#8211; qu\u2019il existe des librairies qui permettent de qui permettent d\u2019exploiter ces protocoles de fa\u00e7on simple<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le chapitre suivant nous vous proposons de mettre en pratique ces protocoles en construisant un petit data-logger de temp\u00e9rature.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chapitre 6&nbsp;: fabrication d\u2019un data-logger de temp\u00e9rature<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Objectifs<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Fabriquer un syst\u00e8me autonome capable de&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lire la temp\u00e9rature<\/li>\n\n\n\n<li>Lire une horloge<\/li>\n\n\n\n<li>Enregistrer les donn\u00e9es sur une carte SD<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous vous doutez bien, qu\u2019en oc\u00e9anographie, comme dans le recherche en g\u00e9n\u00e9ral la capacit\u00e9 \u00e0 enregistrer de fa\u00e7on autonome des mesures environnementales a de tr\u00e8s nombreuses applications.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 1&nbsp;: Lecture du capteur de temp\u00e9rature<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons travailler avec capteur num\u00e9rique de temp\u00e9rature tr\u00e8s courant, le 18B20, qui communique avec le protocole OneWire (\u00e9voqu\u00e9 rapidement dans le chapitre pr\u00e9c\u00e9dent). Lorsque l\u2019on d\u00e9couvre un nouveau composant, il est toujours utile d\u2019aller consulter sa feuille technique (\u00ab&nbsp;datasheet&nbsp;\u00bb), on y trouve pas mal d\u2019information tr\u00e8s utiles concernant les sp\u00e9cification techniques du capteur&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Caract\u00e9ristiques<\/td><td>Valeur<\/td><\/tr><tr><td>Tension d\u2019alimentation<\/td><td>3V \u00e0 5,5V<\/td><\/tr><tr><td>Gamme de temp\u00e9rature<\/td><td>-55\u00baC \u00e0 125\u00baC<\/td><\/tr><tr><td>Erreur (-10\u00baC a 85\u00baC)<\/td><td>\u00b10,5\u00baC<\/td><\/tr><tr><td>Erreur (-55\u00baC a 125\u00baC)<\/td><td>\u00b12\u00baC<\/td><\/tr><tr><td>R\u00e9solution programmable<\/td><td>9-bit, 10-bit, 11-bit o 12-bit (default)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On y trouve \u00e9galement la configuration des connections&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image14PIM.png\"><\/a><\/td><td><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image15PIM.png\"><\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Fonction des \u201cpins\u201d&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VDD: positif de l\u2019alimentation.<\/li>\n\n\n\n<li>GND: N\u00e9gatif de l\u2019alimentaion.<\/li>\n\n\n\n<li>DQ (data)&nbsp;: pin permettant le communication gr\u00e2ce au protocole 1-Wire. (ce protocole permet de connecter plusieurs capteurs sur le m\u00eame ligne).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">&nbsp;Le c\u00e2blage \u00e0 r\u00e9aliser est le suivant (le composant noir correspond \u00e0 la sonde de temp\u00e9rature)<strong><\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image16PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image16PIM-261x300.png\" alt=\"\" class=\"wp-image-9911\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Pin capteur<\/td><td>Pin ESP32<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><tr><td>VCC \/Vpp<\/td><td>3V3<\/td><\/tr><tr><td>DQ\/data<\/td><td>IO2 \/ D9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il ne faut pas oublier d\u2019ajouter d\u2019ajouter une r\u00e9sistance de pullup de 4,7K entre data et&nbsp; VCC.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Installer les librairies<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l\u2019IDE Arduino&nbsp;: Tools&gt; Manage librairies<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OneWire.h<\/li>\n\n\n\n<li>DallasTemperature.h<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Programmation<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Charger le programme 3_temp_sensor.ino (disponible sur <a href=\"https:\/\/app.notion.com\/p\/cedriccoursonopensourceoceanography\/Atelier-data-logger-3809bac957f380e491d6e1a57123ebb2\">Notion<\/a>) :<\/li>\n\n\n\n<li>Le t\u00e9l\u00e9verser sur le firebeetle<\/li>\n\n\n\n<li>V\u00e9rifier les sorties sur le port s\u00e9rie<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">D\u00e9fi (a faire si vous en avez le temps)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Allumer une LED lorsque la temp\u00e9rature d\u00e9passe 20\u00b0C (si vous allumiez un groupe froid votre montage se comporterai comme un thermostat)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 2&nbsp;: Lire l\u2019horloge<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cela nous allons utiliser un petit module RTC (Real Time Clock) qui communique avec le protocole I2C (tr\u00e8s courant!). Il existe de nombreux modules RTC, celui que nous allons utiliser est bas\u00e9 sur le chip DS3231. Il pr\u00e9sente&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un faible d\u00e9rive<\/li>\n\n\n\n<li>un slot pour une pile (pour qu\u2019il ne perde pas l\u2019heure lorsque la carte n\u2019est pas aliment\u00e9e<\/li>\n\n\n\n<li>une librairie qui permet de communiquer facilement<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Le c\u00e2blage \u00e0 r\u00e9aliser est le suivant<\/h5>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image17PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image17PIM-300x281.png\" alt=\"\" class=\"wp-image-9912\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Attention<\/strong> il existe plusieurs modules diff\u00e9rents dont les pinout peuvent changer, il faut donc se r\u00e9f\u00e9rer au tableau ci-dessous&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Pin RTC<\/td><td>Pin ESP32<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><tr><td>VCC \/Vin<\/td><td>3V3<\/td><\/tr><tr><td>SCL<\/td><td>SCL\/IO22<\/td><\/tr><tr><td>SDA<\/td><td>SDA\/IO21<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Librairies<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DS3231.h<\/li>\n\n\n\n<li>Wire.h<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Test et r\u00e9glage de l\u2019horloge<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Charger le programme Test_and_Def_heure.ino (disponible sur <a href=\"https:\/\/app.notion.com\/p\/cedriccoursonopensourceoceanography\/Atelier-data-logger-3809bac957f380e491d6e1a57123ebb2\">Notion<\/a>)<\/li>\n\n\n\n<li>Modifier les valeurs dans le code pour le ajuster \u00e0 dans 1 minute<\/li>\n\n\n\n<li>Programmer le Firebeetle<\/li>\n\n\n\n<li>V\u00e9rifier le bon r\u00e9glage de l\u2019heure<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Agr\u00e9gation de la temp\u00e9rature et de l\u2019heure<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Charger le programme 4_temp_RTC.ino (disponible sur <a href=\"https:\/\/app.notion.com\/p\/cedriccoursonopensourceoceanography\/Atelier-data-logger-3809bac957f380e491d6e1a57123ebb2\">Notion<\/a>)<\/li>\n\n\n\n<li>Programmer le firebeetle<\/li>\n\n\n\n<li>V\u00e9rifier les sorties sur le port s\u00e9rie<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Etape 3&nbsp;: Sauvegarder les donn\u00e9es sur une carte SD<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons maintenant ajouter une carte microSD et son support (slot) pour y enregister les donn\u00e9es. Pour cela nous allons utiliser une module tr\u00e8s courant (il en existe de nombreux), qui communique avec le protocole SPI (que nous avons vu dans le chapitre pr\u00e9c\u00e9dent) qui est le standard pour la manipulation de cartes SD.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Le montage \u00e0 r\u00e9aliser est le suivant<\/h5>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image18PIM.png\"><img decoding=\"async\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2025\/06\/image18PIM-300x275.png\" alt=\"\" class=\"wp-image-9913\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe de nombreux modules diff\u00e9rents, et le pinout est susceptible de varier d\u2019un mod\u00e8le a un autre. Il faudra donc adapter le c\u00e2blage en fonction du module et se r\u00e9f\u00e9rer au tableau suivant :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Pin MicroSD<\/td><td>Pin ESP32<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><tr><td>VCC \/Vin<\/td><td>3V3<\/td><\/tr><tr><td>DO\/MISO<\/td><td>IO19\/MISO<\/td><\/tr><tr><td>DI\/MOSI<\/td><td>IO23\/MOSI<\/td><\/tr><tr><td>SCK\/CLK<\/td><td>IO18\/SCK<\/td><\/tr><tr><td>CS<\/td><td>IO5\/D8<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Librairie n\u00e9cessaires&nbsp;<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SD.h<\/li>\n\n\n\n<li>FS.h<\/li>\n\n\n\n<li>SPI.h<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Pr\u00e9parer la carte microSD<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>V\u00e9rifier le que la carte est bien format\u00e9e en FAT32<\/li>\n\n\n\n<li>On \u00e9vitera les cartes de trop forte capacit\u00e9 (SDXC)<\/li>\n\n\n\n<li>On efface tous les fichiers de la carte<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Programmation de la carte SD<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Charger le programme 5_Temp_RTC_log.ino<\/li>\n\n\n\n<li>Programmer le firebeetle<\/li>\n\n\n\n<li>V\u00e9rifier les sorties sur le port s\u00e9rie<\/li>\n\n\n\n<li>Arr\u00eater le module et v\u00e9rifier que des donn\u00e9es ont bien \u00e9t\u00e9 enregistr\u00e9es dans la carte SD, dans un fichier nomm\u00e9 \u00ab&nbsp;data.txt\u201d<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><em>Bravo&nbsp;! Vous venez de r\u00e9aliser un dataloger auquel il ne suffit qu\u2019une batterie (et un bo\u00eetier) pour \u00eatre autonome&nbsp;!<\/em><\/h5>\n","protected":false},"featured_media":0,"parent":0,"template":"","meta":{"_acf_changed":false},"class_list":["post-10874","tutoriel","type-tutoriel","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tutoriel\/10874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tutoriel"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/tutoriel"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=10874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}