--- title: "Module 1 — Découverte du microcontrôleur ESP32-S3" --- ## Objectifs du module - Comprendre ce qu'est un microcontrôleur et en quoi il diffère d'un ordinateur classique. - Connaître l'architecture interne de l'ESP32-S3 (cœurs, mémoire, périphériques). - Identifier les différences clés avec un Arduino Uno/Nano classique. - Repérer les broches spéciales à éviter (strapping pins) et lire un brochage (pinout). ## 1. Qu'est-ce qu'un microcontrôleur ? Un microcontrôleur est un circuit intégré unique regroupant un processeur, de la mémoire vive (RAM), de la mémoire de programme (Flash) et des périphériques d'entrée/sortie (GPIO, ADC, timers, bus de communication). Contrairement à un ordinateur, il n'exécute généralement qu'un seul programme en boucle, sans système d'exploitation complexe, ce qui garantit un comportement déterministe et une consommation réduite. L'ESP32-S3 va plus loin qu'un microcontrôleur classique (type ATmega328 de l'Arduino Uno) en intégrant nativement du Wi-Fi et du Bluetooth Low Energy, ce qui en fait un choix privilégié pour les projets connectés (IoT). ## 2. Architecture interne de l'ESP32-S3 ![Architecture simplifiée de l'ESP32-S3 et de son module](../schemas/svg/m01-architecture.svg){#fig-m01-architecture} ### 2.1 Cœurs de calcul - Double cœur Xtensa LX7 cadencé jusqu'à 240 MHz. - Un cœur peut être dédié à des tâches critiques (ex : communication réseau) pendant que l'autre exécute la logique applicative — via FreeRTOS, présent nativement sous le framework Arduino. ### 2.2 Mémoire - SRAM interne : environ 512 Ko, partagée entre données et instructions. - Mémoire Flash externe (souvent 8 ou 16 Mo selon la carte) : stocke le programme (sketch) et éventuellement un système de fichiers (SPIFFS/LittleFS). - PSRAM (RAM externe, optionnelle selon le modèle de carte) : utile pour le traitement d'images ou de gros buffers. ### 2.3 Connectivité intégrée - Wi-Fi 802.11 b/g/n (2,4 GHz). - Bluetooth 5 LE (Low Energy uniquement — pas de Bluetooth Classic/SPP sur le S3, contrairement à l'ESP32 original). ### 2.4 Interface USB native L'ESP32-S3 dispose d'un contrôleur USB OTG natif, permettant la programmation et la communication série directement via USB, sans puce USB-série intermédiaire (selon la carte). Il peut aussi émuler un périphérique USB (clavier, souris, disque) — nous y reviendrons dans un module avancé. ## 3. ESP32-S3 vs Arduino Uno : les différences essentielles | Caractéristique | Arduino Uno (ATmega328) | ESP32-S3 | |-------------------|---------------------------|-------------------------------------| | Cœurs / fréquence | 1 cœur, 16 MHz | 2 cœurs, jusqu'à 240 MHz | | Tension logique | 5 V | 3,3 V | | RAM | 2 Ko | \~512 Ko | | Flash programme | 32 Ko | 8-16 Mo (typique) | | Wi-Fi / Bluetooth | Non (externe requis) | Intégrés (Wi-Fi + BLE) | | Broches ADC | 10 bits, 5 entrées | 12 bits, jusqu'à 20 entrées | | PWM | Limité (Timer matériel) | LEDC — jusqu'à 8 canaux configurables | ![Arduino Uno et ESP32-S3 : ordres de grandeur (échelle logarithmique)](../schemas/svg/m01-uno-vs-s3.svg){#fig-m01-uno-vs-s3} ::: {.callout-warning title="Point de vigilance : tension 3,3 V"} Toutes les broches GPIO de l'ESP32-S3 fonctionnent en logique 3,3 V et ne tolèrent pas 5 V en entrée. Un signal 5 V (capteur, module tiers) doit être abaissé via un diviseur de tension ou un convertisseur de niveau logique avant d'être connecté à une broche. ::: ![Abaisser un signal 5 V à 3,3 V avec un diviseur de tension](../schemas/svg/m01-diviseur-tension.svg){#fig-m01-diviseur-tension width=65%} ## 4. Lire le brochage (pinout) de la carte Avant de câbler quoi que ce soit, il est indispensable de repérer sur votre carte : - Les broches d'alimentation : 5V (VIN/USB), 3V3, GND. - Les broches GPIO numérotées (GPIO0 à GPIO21 selon les cartes, tous ne sont pas exposés). - Les broches ADC (généralement GPIO1 à GPIO10 sur l'unité ADC1). - La broche pilotant la LED NeoPixel intégrée (souvent GPIO48, à vérifier sur la sérigraphie ou le schéma de votre carte spécifique). ### Broches à éviter (strapping pins) Certaines broches ont un rôle spécial au démarrage (sélection du mode de boot) et peuvent perturber le fonctionnement de la carte si elles sont utilisées comme sorties classiques ou reliées à des composants qui tirent le niveau logique au démarrage : - GPIO0 : bouton BOOT — à éviter comme sortie générale. - GPIO3, GPIO45, GPIO46 : broches de strapping — à utiliser avec prudence, éviter en sortie forte au démarrage. - GPIO19/GPIO20 : utilisées par l'USB natif sur de nombreuses cartes S3 — à éviter si vous utilisez la connexion USB. ::: {.callout-tip title="Bonne pratique"} Gardez toujours sous la main le schéma (pinout diagram) exact de votre référence de carte. Deux cartes vendues comme « ESP32-S3 DevKit » par des fabricants différents peuvent avoir un brochage légèrement différent. ::: ## 5. Exercice pratique : inventaire de votre carte Sans câblage, à l'aide de la documentation de votre carte : - Dessinez ou annotez un schéma de votre carte en identifiant : alimentation, GND, GPIO utilisables, broches à éviter, broche de la LED NeoPixel. - Écrivez un programme qui affiche dans le moniteur série, au démarrage, la fréquence CPU (`getCpuFrequencyMhz()`), la taille de la mémoire Flash (`ESP.getFlashChipSize()`) et la mémoire heap libre (`ESP.getFreeHeap()`). ```cpp void setup() { Serial.begin(115200); delay(1000); Serial.printf("Frequence CPU : %d MHz\n", getCpuFrequencyMhz()); Serial.printf("Taille Flash : %d octets\n", ESP.getFlashChipSize()); Serial.printf("Heap libre : %d octets\n", ESP.getFreeHeap()); } void loop() { } ``` ## Checklist de fin de module - [ ] Je sais expliquer la différence entre RAM et Flash sur ce microcontrôleur. - [ ] Je connais les broches à éviter (strapping pins) sur ma carte. - [ ] J'ai identifié la broche pilotant la LED NeoPixel intégrée. - [ ] J'ai exécuté le programme d'inventaire et compris les valeurs affichées.