ESP32-S3-CAM N16R8 : la carte caméra que l’ESP32-CAM aurait dû être

L’ESP32-CAM classique d’AI-Thinker a mis la caméra Wi‑Fi à la portée de presque tout le monde, et elle a au passage appris la patience à toute une génération de bidouilleurs. Elle n’a pas de port USB : chaque téléversement exige un adaptateur USB–UART externe et un cavalier sur GPIO0. Sur ses 16 broches, seules quelques-unes sont libres, et la LED du flash clignote chaque fois que le programme écrit sur la carte mémoire.

La carte de cet article reprend la même idée, mais enfin aboutie. Elle embarque un ESP32-S3 avec 16 Mo de Flash et 8 Mo de PSRAM, une caméra OV5640 de 5 Mpx, un emplacement microSD, deux connecteurs USB‑C et les 36 GPIO du module, tous sortis sur les rangées de broches. Un seul piège : quand la caméra et la carte mémoire fonctionnent, il ne reste que six broches vraiment libres. La suite de l’article dresse un plan détaillé de la carte : ce qui est relié à quoi, quel connecteur sert à quoi, quelles broches vous pouvez occuper et comment régler l’Arduino IDE pour que la caméra ne tourne pas au casse-tête.

Brochage de l'ESP32-S3 WROOM CAM. Rangée de gauche, de haut en bas : 3V3, EN, GPIO4, 5, 6, 7, 15, 16, 17, 18, 8, 3, 46, 9, 10, 11, 12, 13, 14, 5V. Rangée de droite : GPIO43 (TX), 44 (RX), 1, 2, 42, 41, 40, 39, 38, 37, 36, 35, 0, 45, 48, 47, 21, 20, 19, GND. Des pastilles de couleur signalent la caméra, la microSD, la PSRAM, l'USB, l'UART, le JTAG, l'ADC et les entrées tactiles.
L’ESP32-S3 WROOM CAM : les deux rangées et la fonction de chaque broche. Cliquez pour la version en taille réelle.

De quelle carte il est question exactement

Les boutiques vendent cette carte sous différents noms : ESP32-S3-CAM, ESP32-S3 WROOM CAM, ESP32-S3 CAM Development Board. Sur la carte elle-même, l’inscription est plus modeste, ESP32-S3 WROOM, et le blindage métallique du module porte ESP32-S3-N16R8. Ce marquage est justement sa caractéristique principale : N16 signifie 16 Mo de Flash, et R8, 8 Mo de PSRAM. Le module lui-même est un ESP32-S3-WROOM-1 avec antenne sur circuit imprimé.

Le routage reprend celui de la carte Freenove ESP32-S3-WROOM CAM : même emplacement pour la caméra, mêmes broches, deux boutons et deux USB‑C. Freenove livre sa carte avec une caméra OV2640 de 2 Mpx, alors que l’exemplaire de cet article porte une OV5640 de 5 Mpx, comme l’indique l’inscription sur sa nappe. Plusieurs usines fabriquent ces cartes, et d’un lot à l’autre, le module caméra et le pont USB–UART peuvent changer. Avant de chercher un pilote ou l’exemple de quelqu’un d’autre, mieux vaut regarder le marquage de votre propre exemplaire.

Caractéristiques techniques

ÉlémentCaractéristiqueCe que cela change en pratique
ModuleESP32-S3-WROOM-1-N16R8, antenne sur circuit impriméUn module Espressif tout fait de 18 × 25,5 × 3,1 mm ; ses 36 GPIO sont tous sortis sur les rangées de broches
Processeur2 cœurs Xtensa LX7, jusqu’à 240 MHz, FPUDe quoi gérer à la fois un flux JPEG, le Wi‑Fi et la logique de l’application ; des instructions dédiées accélèrent les réseaux de neurones et le traitement du signal
Mémoire du SoC512 Ko de SRAM, 384 Ko de ROMTrop peu de mémoire interne pour les images de la caméra : leur place est dans la PSRAM
Flash16 Mo, Quad SPIAssez pour une grosse application, l’OTA et un système de fichiers
PSRAM8 Mo, Octal SPI (OPI)Tampons d’image de la caméra ; l’Arduino IDE demande le mode OPI PSRAM
Wi‑Fi2,4 GHz, 802.11 b/g/n, jusqu’à 150 Mbit/sFlux vidéo MJPEG, envoi de photos, mises à jour sans fil
BluetoothBluetooth 5 (LE), mesh, débits jusqu’à 2 Mbit/s et mode Long RangeBLE seulement : l’ESP32-S3 n’a pas de Bluetooth classique, donc ni SPP ni A2DP
CaméraOV5640, 5 Mpx (2592 × 1944), bus DVP 8 bits, configuration par SCCBLe capteur compresse lui-même l’image en JPEG ; le bus occupe 14 GPIO
Connecteur de la caméraFPC, 24 contactsModule caméra interchangeable : les modules du même standard conviennent
Carte mémoiremicroSD, SDMMC en mode 1 bitPhotos et time-lapses sont enregistrés directement à bord ; l’emplacement occupe GPIO38–40
USBDeux USB‑C : un pont USB–UART sur UART0 et l’USB natif de l’ESP32-S3 lui-mêmeTéléversement et logs par le connecteur de droite, périphériques USB et débogage par celui de gauche
GPIO36 broches sur deux rangées de 20 contactsSix sont libres sans réserve, quelques autres sous conditions
LED et boutonsLED ON, TX, RX, IO2 (GPIO2) et RGB WS2812 (GPIO48) ; boutons EN et BOOT (GPIO0)Des LED à faire clignoter et des boutons à presser, sans aucun composant externe
Alimentation5 V par USB‑C ou par la broche 5V ; 3,3 V sur la broche 3V3, fournis par le régulateur de la carteLe module demande une source d’au moins 0,5 A
Niveaux logiques3,3 V ; les GPIO ne tolèrent pas le 5 VUn signal 5 V ne se branche qu’à travers une adaptation de niveau
Température de fonctionnement−40…+65 °C (modules avec Octal PSRAM)Moins que les 85 °C des modules sans PSRAM ; dans un boîtier fermé, cela compte
Environnements de développementArduino IDE, PlatformIO, ESP-IDF ; MicroPython, avec un firmware qui intègre le pilote de caméraArduino est plus pratique pour démarrer vite, ESP-IDF pour un projet sérieux

Un peu d’arithmétique. Une image de 5 Mpx au format RGB565 occupe 2592 × 1944 × 2 = 10 077 696 octets, soit environ 9,6 Mio. C’est plus que la totalité des 8 Mo de PSRAM : la définition maximale n’est donc accessible qu’en JPEG, que le capteur compresse lui-même. Une image UXGA de 1600 × 1200 dans le même RGB565 pèse environ 3,7 Mio et tient déjà en mémoire. En pratique, on laisse presque toujours la caméra en JPEG : il faut moins de mémoire, et l’image passe plus facilement par Wi‑Fi.

Deux USB‑C : quel connecteur sert à quoi

Sur la face avant, les connecteurs ne sont pas marqués : les inscriptions USB-UART et USB-OTG se trouvent au dos. D’où le piège classique du miroir : une fois la carte retournée face vers le haut, l’inscription de gauche se retrouve sous le connecteur de droite. Vue du côté de la caméra, antenne en haut, la carte se présente ainsi :

ConnecteurCe qu’il y a derrièreÀ utiliser pour
Gauche, USB-OTGL’USB natif de l’ESP32-S3 lui-même : GPIO19 pour D−, GPIO20 pour D+. USB-Serial-JTAG intégré ou USB OTGLe débogage sans adaptateur externe, vos propres périphériques USB : clavier, souris, MIDI, stockage, webcam
Droite, USB-UARTPont USB–UART relié à UART0 : GPIO43 pour TX, GPIO44 pour RXLe téléversement et le Serial Monitor, la voie la plus prévisible

C’est le réglage USB CDC On Boot de l’Arduino IDE qui décide vers quel port part la sortie Serial. Sur Disabled, Serial correspond à UART0, et les messages sortent par le connecteur de droite. Sur Enabled, Serial passe sur l’USB natif, c’est-à-dire sur le connecteur de gauche. Si le moniteur série reste muet, vérifiez en premier ce réglage et le connecteur dans lequel est branché le câble. Par défaut, les messages du bootloader en ROM sortent sur les deux ports.

Le connecteur de gauche a aussi un atout moins évident. Le contrôleur USB-Serial-JTAG intégré à l’ESP32-S3 permet de déboguer un programme avec des points d’arrêt, sans adaptateur externe et sans la moindre broche supplémentaire. C’est particulièrement précieux ici, car sur cette carte, les broches standard du JTAG externe (GPIO39–42) sont en partie prises par la carte mémoire.

Les rangées : le détail de chaque broche

Orientation retenue dans les tableaux : face composants vers vous, antenne en haut, connecteurs USB en bas. Les numéros sérigraphiés portent des repères : les broches soulignées sont prises par la caméra, un tilde marque celles de la microSD, un astérisque celles de la PSRAM. La légende est imprimée au dos.

Rangée de gauche, de haut en bas

BrocheRôle sur la carteUtilisable ?
3V33,3 V du régulateur de la cartePas un GPIO
ENReset, bouton EN ; actif à l’état basNon
GPIO4Caméra : SIOD, données SCCBSeulement sans caméra
GPIO5Caméra : SIOC, horloge SCCBSeulement sans caméra
GPIO6Caméra : VSYNCSeulement sans caméra
GPIO7Caméra : HREFSeulement sans caméra
GPIO15Caméra : XCLKSeulement sans caméra
GPIO16Caméra : D7 (Y9)Seulement sans caméra
GPIO17Caméra : D6 (Y8)Seulement sans caméra
GPIO18Caméra : D5 (Y7)Seulement sans caméra
GPIO8Caméra : D2 (Y4)Seulement sans caméra
GPIO3Broche de strapping ; ADC1, Touch3Avec précaution
GPIO46Strapping du mode de démarrageAvec précaution
GPIO9Caméra : D1 (Y3)Seulement sans caméra
GPIO10Caméra : D3 (Y5)Seulement sans caméra
GPIO11Caméra : D0 (Y2)Seulement sans caméra
GPIO12Caméra : D4 (Y6)Seulement sans caméra
GPIO13Caméra : PCLKSeulement sans caméra
GPIO14Libre ; ADC2, Touch14Oui
5VRail 5 VPas un GPIO

Rangée de droite, de haut en bas

BrocheRôle sur la carteUtilisable ?
TX (GPIO43)UART0 TX, vers le pont USB–UARTSeulement sans le connecteur de droite
RX (GPIO44)UART0 RX, depuis le pont USB–UARTSeulement sans le connecteur de droite
GPIO1Libre ; ADC1, Touch1Oui, la meilleure entrée analogique
GPIO2LED IO2 ; ADC1, Touch2Attention à la LED
GPIO42Libre ; MTMS du JTAG externeOui
GPIO41Libre ; MTDI du JTAG externeOui
GPIO40microSD : D0 ; MTDO du JTAG externeSeulement sans microSD
GPIO39microSD : CLK ; MTCK du JTAG externeSeulement sans microSD
GPIO38microSD : CMDSeulement sans microSD
GPIO37Octal PSRAM dans le moduleJamais
GPIO36Octal PSRAM dans le moduleJamais
GPIO35Octal PSRAM dans le moduleJamais
GPIO0Bouton BOOT, broche de strappingAvec précaution
GPIO45Strapping : tension d’alimentation de la mémoireMieux vaut ne pas y toucher
GPIO48LED RGB compatible WS2812Attention à la LED
GPIO47LibreOui
GPIO21LibreOui
GPIO20USB natif : D+ (connecteur de gauche)Seulement sans USB natif
GPIO19USB natif : D− (connecteur de gauche)Seulement sans USB natif
GNDMassePas un GPIO

Les broches 35–37 sont bien sorties sur la rangée, mais il ne faut pas s’en servir : dans les modules avec Octal PSRAM, elles sont reliées en interne à la mémoire, et tout signal externe sur ces broches perturbe son fonctionnement.

36 GPIO : combien sont vraiment à vous ?

Si l’on met tout bout à bout, le bilan a de quoi refroidir :

Occupé parGPIORègle
Caméra4–13, 15–18Pris tant que la caméra est active
microSD38–40Pris tant que la carte est montée
Octal PSRAM35–37À ne jamais utiliser
USB natif19, 20Libres seulement si le connecteur de gauche ne sert pas
UART0 et pont USB–UART43, 44Libres seulement si le connecteur de droite ne sert pas
LED de la carte2, 48Utilisables si la LED ne gêne pas
Broches de strapping0, 3, 45, 46Seulement si leurs niveaux au reset sont maîtrisés
Rien1, 14, 21, 41, 42, 47Premier choix pour votre propre montage

Au total, avec la caméra et la carte mémoire en service, six broches sont libres sans réserve : GPIO1, 14, 21, 41, 42 et 47. Pour un capteur I²C, deux boutons et un relais, c’est suffisant ; pour une périphérie foisonnante, ça ne suffit plus. On peut encore regagner deux broches en renonçant à l’une des voies USB : si la carte ne passe que par le connecteur de droite, GPIO19 et GPIO20 se libèrent. Si elle ne passe que par celui de gauche, vous pouvez tenter GPIO43 et GPIO44, sans oublier qu’ils restent reliés au pont USB–UART.

Côté entrées analogiques, c’est plus subtil. Sur l’ESP32-S3, l’ADC1 correspond à GPIO1–10 et l’ADC2 à GPIO11–20. La caméra prend presque toutes les broches de l’ADC1 : avec la caméra en marche, la seule entrée analogique propre est donc GPIO1. GPIO2 et GPIO3 appartiennent aussi à l’ADC1, mais le premier porte une LED et le second est une broche de strapping. GPIO14 dépend de l’ADC2, or l’ADC2 partage ses ressources avec le Wi‑Fi : tant que la radio travaille, la lecture peut être retardée ou échouer. Pour les capteurs d’un projet avec Wi‑Fi, choisissez l’ADC1. Les entrées tactiles Touch1–Touch14 se trouvent sur GPIO1–14, mais parmi elles, seuls GPIO1 et GPIO14 sont libres sans réserve.

Et voici quatre règles sur les broches de strapping qui peuvent vous sauver une soirée :

  1. GPIO0 est le bouton BOOT. S’il est à l’état bas au reset, la puce entre en mode de téléchargement au lieu de lancer le programme. Un montage externe ne doit pas tirer GPIO0 à la masse pendant le démarrage.
  2. GPIO46 est tiré à la masse par défaut et choisit le mode de démarrage conjointement avec GPIO0. La combinaison « niveau bas sur GPIO0, haut sur GPIO46 » au reset est interdite.
  3. GPIO45 fixe la tension d’alimentation de la mémoire : un niveau bas au reset donne 3,3 V, un niveau haut 1,8 V. La Flash et la PSRAM de ce module sont prévues pour 3,3 V, donc un niveau haut sur GPIO45 pendant le reset est interdit. Par défaut, la broche est tirée à la masse, et c’est ainsi qu’il faut la laisser.
  4. GPIO3 choisit la source des signaux JTAG, mais seulement si le bit eFuse correspondant a été brûlé ; sur un module aux réglages d’usine, son niveau est ignoré. Espressif le range malgré tout parmi les broches de strapping : mieux vaut donc ne pas y brancher le premier bouton venu.

La caméra : l’OV5640 et le bon brochage

La caméra est reliée par un bus parallèle DVP : huit lignes de données, trois lignes de synchronisation, l’horloge XCLK et deux lignes SCCB pour configurer le capteur, soit 14 GPIO en tout. Les broches PWDN et RESET ne sont pas câblées sur la carte : dans la configuration, on leur attribue -1.

Le piège principal, c’est le brochage d’une autre carte. Les exemples les plus répandus sur internet sont écrits pour l’ESP32-CAM d’AI-Thinker, et sur un ESP32-S3, ses numéros de GPIO désignent entre autres les broches 26–32, que le S3 réserve à sa mémoire interne, et les numéros 22–25, qui n’existent tout simplement pas sur le S3. En revanche, le câblage de cette carte correspond trait pour trait à celui de l’ESP32-S3-EYE d’Espressif, pour laquelle Arduino a déjà tout prévu.

Dans l’exemple CameraWebServer (File → Examples → ESP32 → Camera), le modèle se choisit dans le fichier board_config.h. Par défaut, c’est CAMERA_MODEL_ESP_EYE qui y est activé : il s’agit d’une autre carte, basée sur l’ESP32 d’origine. Commentez sa ligne et décommentez CAMERA_MODEL_ESP32S3_EYE. Dans camera_pins.h, les broches de ce modèle se présentent ainsi, exactement comme sur notre carte :

#define PWDN_GPIO_NUM  -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM  15
#define SIOD_GPIO_NUM  4
#define SIOC_GPIO_NUM  5

#define Y2_GPIO_NUM 11
#define Y3_GPIO_NUM 9
#define Y4_GPIO_NUM 8
#define Y5_GPIO_NUM 10
#define Y6_GPIO_NUM 12
#define Y7_GPIO_NUM 18
#define Y8_GPIO_NUM 17
#define Y9_GPIO_NUM 16

#define VSYNC_GPIO_NUM 6
#define HREF_GPIO_NUM  7
#define PCLK_GPIO_NUM  13

Pour ce modèle, l’exemple retourne lui-même l’image verticalement en appelant set_vflip. Si l’image apparaît à l’envers, il suffit de basculer V-Flip dans l’interface web ; c’est aussi là qu’on augmente la définition, car le flux démarre en QVGA. En revanche, l’exemple s’accommode sans rien dire d’une PSRAM absente : si psramFound() a renvoyé false, la taille d’image est limitée à SVGA et le tampon passe dans la mémoire interne. La caméra fonctionne quand même, mais très loin de son plein potentiel.

Si le flux reste noir

L’OV5640 pose un souci connu sur cette carte. Des possesseurs de ces cartes ont signalé que l’exemple initialise la caméra sans erreur et qu’une OV2640 fonctionne sur la même carte, mais que l’OV5640 renvoie une image noire. À en croire leurs retours, ce qui aide, c’est de changer la fréquence de l’horloge XCLK : 24 MHz ou 12 MHz au lieu des 20 MHz standard. Dans setup(), une seule ligne change, xclk_freq_hz ; les autres champs montrent avec quoi on l’associe d’ordinaire :

camera_config_t config;
// ... pins as in camera_pins.h ...
config.xclk_freq_hz = 24000000;   // 20 MHz gave black frames on some OV5640 boards; 12 MHz is the other reported fix
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size   = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_location  = CAMERA_FB_IN_PSRAM;
config.fb_count     = 2;
config.grab_mode    = CAMERA_GRAB_LATEST;

Si cela ne suffit pas, vérifiez que la nappe est enfoncée à fond dans le connecteur, que son verrou est bien fermé et que la carte ne surchauffe pas : dans ces mêmes discussions, on conseille de ne pas la laisser, caméra en marche, dans un boîtier fermé sans ventilation. La définition maximale du capteur (FRAMESIZE_5MP, 2592 × 1944) n’est accessible qu’en JPEG.

Réglages de l’Arduino IDE

La carte n’a pas besoin d’un paquet dédié : le profil standard ESP32S3 Dev Module d’arduino-esp32 convient. L’essentiel est de bien déclarer la mémoire, car c’est de cela que dépend la détection de la PSRAM par le programme.

ParamètreValeurPourquoi
BoardESP32S3 Dev ModuleProfil générique pour l’ESP32-S3
Flash Size16MB (128Mb)Taille réelle de la Flash du module N16R8
Flash ModeQIO 80MHzIci, la Flash est reliée en Quad SPI ; le mode OPI 80MHz est destiné aux modules avec Octal Flash
PSRAMOPI PSRAMLa PSRAM est reliée en Octal SPI ; avec QSPI PSRAM ou Disabled, le programme ne la trouvera pas
Partition Scheme16M Flash (3MB APP/9.9MB FATFS)CameraWebServer exige au moins 3 Mo pour l’application, le reste va aux fichiers
USB CDC On BootDisabled pour passer par le connecteur de droite, Enabled pour celui de gaucheDétermine le port vers lequel part Serial
USB ModeHardware CDC and JTAGUSB-Serial-JTAG intégré ; le mode USB-OTG (TinyUSB) sert à créer vos propres périphériques USB
Upload ModeUART0 / Hardware CDCTéléversement par l’un ou l’autre des deux connecteurs

Si le téléversement ne passe plus, par exemple parce que le programme a reconfiguré l’USB natif ou s’est enfermé dans une boucle de redémarrages, on fait passer la carte en bootloader à la main : maintenir BOOT, appuyer brièvement sur EN, relâcher BOOT et relancer le téléversement. Pour le connecteur de droite, l’ordinateur peut avoir besoin d’un pilote pour le pont USB–UART. Sur la carte Freenove d’origine, c’est un CH343, mais les clones embarquent parfois d’autres puces : fiez-vous donc à ce qu’affiche le gestionnaire de périphériques. Les systèmes récents reconnaissent le connecteur de gauche comme un port série sans pilote supplémentaire.

microSD, LED et boutons

L’emplacement microSD est relié en SDMMC en mode 1 bit : CMD sur GPIO38, CLK sur GPIO39, D0 sur GPIO40. C’est plus lent que le mode 4 bits, mais cela économise trois broches. Deux des trois lignes coïncident avec les broches standard du JTAG externe (MTCK et MTDO) : la carte mémoire et un débogueur externe se gênent donc mutuellement, et avec une carte en place, mieux vaut déboguer par le connecteur USB de gauche.

La carte compte cinq LED. ON signale l’alimentation, TX et RX clignotent lors des échanges via le pont USB–UART, IO2 est une LED utilisateur sur GPIO2, et 48 est une LED RGB adressable compatible WS2812, sur GPIO48. Dans le profil ESP32S3 Dev Module, les macros LED_BUILTIN et RGB_BUILTIN pointent précisément sur cette dernière : le Blink standard allumera donc la LED RGB en blanc. La couleur se règle avec la fonction rgbLedWrite(), l’ancienne neopixelWrite() étant déclarée obsolète.

Le bouton EN redémarre le module, et BOOT, relié à GPIO0, sert à passer la carte en bootloader à la main. Une fois le programme lancé, BOOT se lit comme un bouton ordinaire. Un autotest rapide de la carte consiste à monter la microSD et à annoncer le résultat par une couleur :

#include "SD_MMC.h"

void setup() {
  Serial.begin(115200);

  // One-bit SDMMC: CLK, CMD, D0
  SD_MMC.setPins(39, 38, 40);

  if (SD_MMC.begin("/sdcard", true)) {
    Serial.printf("microSD: %llu MB\n", SD_MMC.cardSize() / (1024 * 1024));
    rgbLedWrite(RGB_BUILTIN, 0, 32, 0);   // green: card mounted
  } else {
    Serial.println("microSD: mount failed");
    rgbLedWrite(RGB_BUILTIN, 32, 0, 0);   // red: no card
  }
}

void loop() {}

Alimentation et échauffement

La carte s’alimente par l’un ou l’autre des USB‑C ou par la broche 5V. La broche 3V3 est la sortie du régulateur de la carte : elle peut alimenter des capteurs 3,3 V peu gourmands. Les GPIO ne fonctionnent qu’en 3,3 V : un signal de 5 V sur une entrée peut endommager le module, dont la tension d’alimentation maximale absolue est de 3,6 V.

La caméra, la transmission Wi‑Fi et l’écriture sur la carte mémoire provoquent des pics de courant. La fiche technique du module exige une alimentation capable de fournir au moins 0,5 A, et un port USB trop faible ou un câble long et fin ont vite fait de ne pas suivre. Les symptômes sont reconnaissables : la carte redémarre au lancement du flux, et un message du détecteur de sous-tension, le brownout, apparaît dans les logs. Le remède : un câble court de bonne qualité et un vrai bloc d’alimentation 5 V.

Seconde limite, moins évidente : la température. Les modules avec Octal PSRAM, N16R8 compris, sont prévus pour une température ambiante jusqu’à 65 °C, contre 85 °C pour les variantes sans PSRAM. Espressif précise qu’en activant la correction d’erreurs de la PSRAM (ECC), on remonte la limite à 85 °C, au prix de 1/16 de la capacité mémoire. La caméra et la radio chauffent la carte en permanence : dans un boîtier fermé en plein soleil, cette marge fond donc vite, et mieux vaut prévoir des trous d’aération dès le départ.

Que construire avec cette carte : trois scénarios parlants

1. Une caméra pour l’imprimante 3D

Suivre une impression à distance, et en profiter pour monter un time-lapse : c’est le scénario le plus naturel pour une telle carte. Le projet Prusa-Firmware-ESP32-Cam, un firmware qui relie une caméra au service Prusa Connect, consacre une description à part à la carte Freenove ESP32-S3-WROOM. Les modules testés y sont des OV2640 : la compatibilité avec l’OV5640 sera donc à vérifier par vous-même, mais la disposition de la carte est la même.

2. Un enregistreur time-lapse avec sa propre microSD

L’emplacement microSD fait de la carte un enregistreur autonome : se réveiller sur timer, prendre une photo JPEG, l’écrire sur la carte mémoire et se rendormir. C’est ainsi qu’on filme la croissance des plantes, le chantier sous ses fenêtres ou un long processus à l’atelier. La carte n’est toutefois pas optimisée pour fonctionner sur batterie : la LED ON reste allumée en permanence, et la broche PWDN de la caméra n’est pas câblée, si bien qu’on ne peut pas couper matériellement l’alimentation du capteur ; seule reste la veille logicielle via SCCB. Le courant en sommeil sera nettement plus élevé que celui d’un module nu : pour un time-lapse alimenté sur secteur, c’est sans importance ; sur batterie, c’est déterminant.

3. Une webcam USB et la vision sur l’appareil lui-même

L’USB natif permet à l’ESP32-S3 de se présenter à l’ordinateur comme une webcam. L’esp-iot-solution d’Espressif contient l’exemple usb_webcam : la carte devient un périphérique UVC et envoie du MJPEG, et la liste des modes de l’exemple comprend du 1280 × 720 à 15 images par seconde. Par défaut, il se compile pour l’ESP32-S3-EYE, c’est-à-dire pour le même brochage que cette carte. Autre piste : traiter l’image directement sur l’appareil. Le framework ESP-WHO d’Espressif cible l’ESP32-S3 et sait par exemple détecter des visages sans le moindre recours au cloud.

Forces et faiblesses

Points fortsPoints faibles
Deux USB‑C : téléversement sans adaptateur et USB natifLes connecteurs ne sont marqués qu’au dos, on les confond facilement
16 Mo de Flash et 8 Mo d’Octal PSRAMLes modules avec Octal PSRAM ne sont prévus que jusqu’à 65 °C
Caméra interchangeable de 5 MpxAvec l’OV5640, l’image reste parfois noire, et il faut chercher la bonne fréquence XCLK
Emplacement microSD directement sur la carteLa microSD occupe trois broches et entre en conflit avec le JTAG externe
Les 36 GPIO du module sur les rangées, les broches prises signalées par la sérigraphieSeules six broches sont libres sans réserve
Brochage identique à celui de l’ESP32-S3-EYE, les exemples tout faits conviennent avec une retouche minimeNon optimisée pour les appareils sur batterie : broche PWDN non câblée, LED d’alimentation toujours allumée
LED utilisateur et LED RGB sur la carteLes lots diffèrent par la caméra et le pont USB–UART

Conclusion

L’ESP32-S3-CAM N16R8, c’est une ESP32-CAM guérie de presque toutes ses maladies de jeunesse : un vrai USB, beaucoup de mémoire, une caméra interchangeable de 5 Mpx et un marquage honnête des broches occupées, directement sur la carte. Pour une caméra d’atelier, un time-lapse, la surveillance d’une imprimante 3D ou des expériences de vision artificielle, c’est une base très pratique.

Ce confort a un prix : tout est très serré. La caméra et la carte mémoire mangent presque toutes les broches, la PSRAM doit être activée correctement, et l’OV5640 peut obliger à chercher la bonne fréquence d’horloge. Avant le premier téléversement, mieux vaut passer en revue une courte liste :

  1. Profil ESP32S3 Dev Module : Flash 16 Mo, QIO 80MHz, PSRAM réglée sur OPI PSRAM.
  2. Brochage : CAMERA_MODEL_ESP32S3_EYE, et non celui d’AI-Thinker.
  3. Tampons d’image dans la PSRAM, format JPEG.
  4. microSD : SDMMC en mode 1 bit sur GPIO38, 39 et 40.
  5. Câble branché dans le connecteur qui correspond au réglage USB CDC On Boot.
  6. Nouvelles connexions : d’abord parmi GPIO1, 14, 21, 41, 42 et 47.
  7. GPIO0, 3, 45 et 46 : aucun circuit externe qui modifie leur niveau au reset.

Tout ce qui précède, réuni dans un seul fichier : une référence sur les broches et les limites matérielles de la carte. Gardez-la à côté de votre sketch, ou confiez-la à un agent de programmation pour qu’il n’invente pas de brochage.