{"title":"Critiques de salon","description":"\u003cp\u003eUn logiciel à 1 $, comment ne pas adorer !\u003c\/p\u003e","products":[{"product_id":"maker-o-matic-3000","title":"Maker-O-Matic 3000","description":"\u003cp\u003eLe générateur aléatoire créatif ultime pour les projets d'électronique\u003c\/p\u003e\n\u003cp\u003eMaker‑o‑matic est un outil Windows qui combine aléatoirement des composants et des suggestions pour générer des plans de projet prêts à l'emploi pour les makers, les artistes et les enseignants, avec des \u003cstrong\u003efiches PDF\u003c\/strong\u003e et des \u003cstrong\u003eliens d'achat\u003c\/strong\u003e.\u003c\/p\u003e\n\u003cp\u003e\u003ciframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/byPnBiiqz9o?si=g_bKARi2dnAPCba6\" height=\"315\" width=\"560\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eJ'adore les composants électroniques\u003c\/strong\u003e et la création de projets originaux, mais il m'arrive parfois d'utiliser les mêmes pièces ou de bloquer sur une idée. J'ai donc décidé de créer ce programme.\u003c\/p\u003e\n\u003cp\u003eJ'ai d'abord conçu une version en Java, en programmant manuellement et en ajoutant de petites fonctionnalités ici et là. Puis, j'ai décidé que cet outil pouvait être bien meilleur et j'ai planifié l'application de mes rêves. Ensuite, j'ai recréé le projet avec de l'aide au code, en utilisant une combinaison de fichiers HTML, CSS, JavaScript et JSON.\u003c\/p\u003e\n\u003cp\u003eUne fois le projet refait, je me suis dit que d'autres makers, enseignants et créatifs pourraient utiliser ce type d'application ! J'espère que vous verrez vous aussi l'utilité de ce petit Maker-O-Matic 3000 amusant (je réalise que le nom est un peu loufoque !) et que vous l'apprécierez autant que moi.\u003c\/p\u003e\n\u003ch2\u003ePlongée au cœur des fonctionnalités\u003c\/h2\u003e\n\u003ch3\u003e🎨 Sélecteur de thème\u003c\/h3\u003e\n\u003cp\u003eCliquez sur le bouton pour faire défiler les styles visuels :\u003c\/p\u003e\n\u003cul\u003e\n\n\u003cli\u003eTerminal Rétro : Ambiance écran cathodique classique vert\u003c\/li\u003e\n\n\u003cli\u003eCyberpunk : Énergie néon rose et cyan\u003c\/li\u003e\n\n\u003cli\u003eTinkertailor : Look épuré et blanc\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003cp\u003eVotre choix de thème est mémorisé !\u003c\/p\u003e\n\u003ch3\u003e💾 Enregistrer et charger des projets\u003c\/h3\u003e\n\u003cul\u003e\n\n\u003cli\u003eEnregistrer : Nommez votre projet, ajoutez des notes, cliquez sur enregistrer\u003c\/li\u003e\n\n\u003cli\u003eCharger : Parcourez tous les projets enregistrés, cliquez pour restaurer\u003c\/li\u003e\n\n\u003cli\u003eCas d'utilisation : Sauvegardez vos favoris, comparez les variantes\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003ch3\u003e📄 Export PDF\u003c\/h3\u003e\n\u003cp\u003eLe PDF exporté comprend :\u003c\/p\u003e\n\u003cul\u003e\n\n\u003cli\u003e✅ Titre et date du projet\u003c\/li\u003e\n\n\u003cli\u003e✅ Liste des composants avec cases à cocher\u003c\/li\u003e\n\n\u003cli\u003e✅ Suggestions créatives (avec zone de notes !)\u003c\/li\u003e\n\n\u003cli\u003e✅ Liste de contrôle des essentiels\u003c\/li\u003e\n\n\u003cli\u003e✅ Vos notes de projet\u003c\/li\u003e\n\n\u003cli\u003e✅ Grille de conception de circuit (papier millimétré !)\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003cp\u003eParfait pour les fiches d'atelier, les devoirs des étudiants, la documentation et les listes de contrôle de montage.\u003c\/p\u003e\n\u003ch3\u003e⚙️ Gestionnaire de composants\u003c\/h3\u003e\n\u003cul\u003e\n\n\u003cli\u003eAjoutez, modifiez ou supprimez vos propres composants\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003ePour les enseignants :\u003c\/strong\u003e\u003cbr\u003eVos élèves vous surprendront. Les projets bizarres seront leurs préférés. Les combinaisons « impossibles » sont celles qui enseignent le plus. Laissez-les lutter (de manière productive), célébrez leurs réussites et documentez leurs échecs. Vous n'enseignez pas seulement l'électronique, vous enseignez la confiance créative.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003ePour les makers :\u003c\/strong\u003e\u003cbr\u003eFaites confiance au hasard. Cette combinaison de composants « stupide » ? Construisez-la quand même. Cette suggestion que vous détestez ? Cela pourrait être votre meilleure création. Les contraintes sont des cadeaux. Embrassez le chaos, documentez le parcours et partagez ce que vous faites. Le monde a besoin de plus de projets bizarres, merveilleux et créatifs.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003ePour tout le monde :\u003c\/strong\u003e\u003cbr\u003eCommencez dès aujourd'hui. Générez un projet. Esquissez une idée. Commandez un composant. Faites un pas. Le plus dur, c'est de commencer. Le plus amusant, c'est de découvrir ce que vous pouvez créer lorsque vous oubliez la « perfection » pour embrasser le « possible ».\u003c\/p\u003e\n\u003ch2\u003eValeur ajoutée – Manuel détaillé\u003c\/h2\u003e\n\u003ch3\u003e🌟 Contenu bonus inclus\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExemples de projets inclus :\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\n\u003cli\u003eLa bouteille à émotions (rythme cardiaque + LED)\u003c\/li\u003e\n\n\u003cli\u003eLe réseau de plantes bavardes (moniteur de jardin IoT)\u003c\/li\u003e\n\n\u003cli\u003eLe bouton d'accessibilité (technologie d'assistance)\u003c\/li\u003e\n\n\u003cli\u003eLe compagnon de posture (santé connectée)\u003c\/li\u003e\n\n\u003cli\u003eLa boîte à musique chaotique (instrument d'extérieur)\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003cp\u003eChacun avec : coût des matériaux, temps de montage, niveau de compétence, défis surmontés et leçons apprises !\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eLes défis incluent :\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\n\u003cli\u003eHackathon de 48 heures\u003c\/li\u003e\n\n\u003cli\u003eDéfi budget de 10 $\u003c\/li\u003e\n\n\u003cli\u003eRelais de composants (défi d'équipe)\u003c\/li\u003e\n\n\u003cli\u003eBoîte mystère (activité de classe)\u003c\/li\u003e\n\n\u003cli\u003eDéfis thématiques mensuels\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003ch3\u003eSections\u003c\/h3\u003e\n\u003cul\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003ePour les enseignants\u003c\/strong\u003e — Plans de cours, grilles d'évaluation, stratégies\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003ePour les artistes\u003c\/strong\u003e — Pratiques créatives, constitution d'un portfolio\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eDéfis\u003c\/strong\u003e — Plus de 10 activités prêtes à l'emploi\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eTrucs et astuces\u003c\/strong\u003e — Stratégies de pro\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eDépannage\u003c\/strong\u003e — Solutions aux blocages créatifs courants\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eExemples de projets\u003c\/strong\u003e — 5 réalisations détaillées\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eFiches de travail\u003c\/strong\u003e — Modèles de planification imprimables\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\u003cp\u003eDes idées de fonctionnalités ou d'améliorations ? Envoyez-les — sans promesse qu'elles seront implémentées, mais ce serait formidable d'améliorer cela en tant que communauté.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNotes :\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\n\u003cli\u003eCeci est la version 1 — il peut y avoir des erreurs ou des points à améliorer. Envoyez-les-moi et je verrai ce que je peux faire !\u003c\/li\u003e\n\n\u003cli\u003eLa boîte est uniquement une image — ce \u003cstrong\u003elogiciel est un téléchargement numérique.\u003c\/strong\u003e\n\n\u003c\/li\u003e\n\n\u003cli\u003eUn manuel d'accompagnement est fourni sous forme de fichier PDF. Il comprend des activités, des idées et des modèles à utiliser avec votre classe ou votre atelier.\u003c\/li\u003e\n\n\n\u003c\/ul\u003e","brand":"Tinker Tailor","offers":[{"title":"Acheter le logiciel","offer_id":50463230492905,"sku":"MAKER-O-MATIC-3000","price":1.0,"currency_code":"CAD","in_stock":true},{"title":"Du café pour moi et du logiciel pour vous !","offer_id":50463230525673,"sku":"MAKER-O-MATIC-3000-COFFEE","price":5.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0790\/8006\/3209\/files\/Create_an_old-school.png?v=1771360068"},{"product_id":"library-program-for-ws2812b-neopixels","title":"Bibliothèque et programme pour Glow : WS2812b [NeoPixels]","description":"\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch1 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e✨ CMozGlow\u003c\/h1\u003e\n\n\u003ca id=\"user-content--cmozglow\" class=\"anchor\" aria-label=\"Permalink: ✨ CMozGlow\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-cmozglow\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLa bibliothèque WS2812B conviviale pour le CMoz ESP32-S3 Mini\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— conçue pour les vêtements connectés (wearables) et la mode technologique par\u003cspan\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/tinkertailor.ca\/\" rel=\"nofollow\"\u003eTinkerTailor.ca\u003c\/a\u003e\u003cspan\u003e \u003c\/span\u003eet la chaîne CMozMaker.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cspan\u003e--\u0026gt; Vous voulez que le code soit écrit pour vous et vous souhaitez modifier les effets ? \u003c\/span\u003e\u003ca href=\"https:\/\/cmoz.github.io\/CMozESP32Board\/\" rel=\"nofollow\"\u003eGénérateur de code interactif\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003eVotre CMoz ESP32-S3 Mini dispose déjà d'une LED adressable intégrée (sur le\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eGPIO 3\u003c\/strong\u003e). Cette bibliothèque permet à cette dernière — et à toute bande LED que vous ajouteriez — de briller magnifiquement avec environ cinq lignes de code, et elle\u003cspan\u003e \u003c\/span\u003e\u003cem\u003evous parle en français clair lorsqu'un problème survient\u003c\/em\u003e.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003ePourquoi CMozGlow plutôt que les bibliothèques habituelles ?\u003c\/h2\u003e\n\n\u003ca id=\"user-content-why-cmozglow-instead-of-the-usual-libraries\" class=\"anchor\" aria-label=\"Permalink: Pourquoi CMozGlow plutôt que les bibliothèques habituelles ?\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#why-cmozglow-instead-of-the-usual-libraries\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003ctable\u003e\n\n\u003cthead\u003e\n\n\u003ctr\u003e\n\n\u003cth\u003e\u003c\/th\u003e\n\n\u003cth\u003eCMozGlow\u003c\/th\u003e\n\n\u003cth\u003eBibliothèques LED classiques\u003c\/th\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/thead\u003e\n\n\u003ctbody\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eMessages d'erreur en français clair\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eerrorText()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003evous indique exactement quoi corriger\u003c\/td\u003e\n\n\u003ctd\u003e❌ échec silencieux ou plantage\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eGestion intelligente de la batterie\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅ définissez une limite en mA, l'intensité baisse automatiquement\u003c\/td\u003e\n\n\u003ctd\u003e⚠️\u003cspan\u003e \u003c\/span\u003ecachée ou absente\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003ePixel d'état en direct\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅ pixel intégré : vert = tout va bien, rouge = erreur\u003c\/td\u003e\n\n\u003ctd\u003e❌\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eEffets non bloquants intégrés\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eupdate()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003edans\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003e— pas de\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003edelay()\u003c\/code\u003e\n\u003c\/td\u003e\n\n\u003ctd\u003e⚠️\u003cspan\u003e \u003c\/span\u003eles exemples sont souvent bloquants\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eMoteur matériel asynchrone\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eshow()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003erevient en ~100 µs même sur de longues bandes\u003c\/td\u003e\n\n\u003ctd\u003e⚠️\u003cspan\u003e \u003c\/span\u003ebloque ~30 µs × nombre de LED\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eMode AutoPilot double cœur\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅ une ligne permet d'allouer les LED à leur propre cœur CPU\u003c\/td\u003e\n\n\u003ctd\u003e❌\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eEffets pour la mode technologique\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅ Sequin, Catwalk, Loom, Silk, Aurora, Morse…\u003c\/td\u003e\n\n\u003ctd\u003e❌ principalement des arcs-en-ciel\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003cstrong\u003eCouleurs corrigées par gamma\u003c\/strong\u003e\u003c\/td\u003e\n\n\u003ctd\u003e✅ activé par défaut — les couleurs correspondent à vos réglages\u003c\/td\u003e\n\n\u003ctd\u003e⚠️\u003cspan\u003e \u003c\/span\u003edésactivé par défaut\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\n\n\n\u003c\/table\u003e\n\n\u003cp dir=\"auto\"\u003eComme les effets ne sont jamais bloquants, vos boutons, capteurs et code Bluetooth continuent de fonctionner pendant l'animation des lumières — essentiel pour les vêtements interactifs.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🚀 Démarrage rapide (5 minutes)\u003c\/h2\u003e\n\n\u003ca id=\"user-content--quick-start-5-minutes\" class=\"anchor\" aria-label=\"Permalink: 🚀 Démarrage rapide (5 minutes)\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-quick-start-5-minutes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch3 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e1. Installer la bibliothèque\u003c\/h3\u003e\n\n\u003ca id=\"user-content-1-install-the-library\" class=\"anchor\" aria-label=\"Permalink: 1. Installer la bibliothèque\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#1-install-the-library\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003ePlatformIO\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— ajoutez le dossier de la bibliothèque au répertoire\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003elib\/\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003ede votre projet, ou une fois publié :\u003c\/p\u003e\n\n\n\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e; platformio.ini\u003c\/span\u003e\n\u003cspan class=\"pl-en\"\u003e[env:cmoz_s3_mini]\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003eplatform\u003c\/span\u003e  = espressif32\n\u003cspan class=\"pl-k\"\u003eboard\u003c\/span\u003e     = esp32-s3-devkitc-1\n\u003cspan class=\"pl-k\"\u003eframework\u003c\/span\u003e = arduino\n\u003cspan class=\"pl-k\"\u003elib_deps\u003c\/span\u003e  = cmoz\/CMozGlow @ ^1.2.2\u003cbr\u003e\u003cbr\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0790\/8006\/3209\/files\/Screenshot_2026-07-22_162116.png?v=1784815115\" alt=\"\"\u003e\u003cbr\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eArduino IDE\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e—\u003cspan\u003e \u003c\/span\u003e\u003cem\u003eCroquis → Inclure une bibliothèque → Ajouter la bibliothèque .ZIP…\u003c\/em\u003e\u003cspan\u003e \u003c\/span\u003eet choisissez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eCMozGlow.zip\u003c\/code\u003e. Puis, dans\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eOutils\u003c\/strong\u003e :\u003c\/p\u003e\n\n\u003cul dir=\"auto\"\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eBoard :\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eESP32S3 Dev Module\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eUSB CDC On Boot :\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eEnabled (Activé) ← ne sautez pas cette étape ! C'est ce qui permet au\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eSerial\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003e(et aux messages d'erreur conviviaux de CMozGlow) d'atteindre le Moniteur Série via le port USB.\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0790\/8006\/3209\/files\/Screenshot_2026-07-23_104827.png?v=1784815079\" alt=\"\"\u003e\u003c\/p\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch3 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e2. Téléverser votre premier croquis\u003c\/h3\u003e\n\n\u003ca id=\"user-content-2-upload-your-first-sketch\" class=\"anchor\" aria-label=\"Permalink: 2. Téléverser votre premier croquis\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#2-upload-your-first-sketch\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eOuvrez\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eFichier → Exemples → CMozGlow → CMozGlow_Basics\u003c\/strong\u003e, ou collez ceci :\u003c\/p\u003e\n\n\n\u003cpre\u003e#\u003cspan class=\"pl-k\"\u003einclude\u003c\/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c\/span\u003eCMozGlow.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c\/span\u003e\u003c\/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\/\/ ══════════ MODIFIEZ CECI ══════════\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003euint8_t\u003c\/span\u003e  \u003cspan class=\"pl-c1\"\u003eEFFECT\u003c\/span\u003e   = \u003cspan class=\"pl-c1\"\u003e8\u003c\/span\u003e;    \u003cspan class=\"pl-c\"\u003e\/\/ 0-9, tableau ci-dessous\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003euint16_t\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003eNUM_LEDS\u003c\/span\u003e = \u003cspan class=\"pl-c1\"\u003e1\u003c\/span\u003e;    \u003cspan class=\"pl-c\"\u003e\/\/ intégré uniquement = 1\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003euint8_t\u003c\/span\u003e  \u003cspan class=\"pl-c1\"\u003eSPEED\u003c\/span\u003e    = \u003cspan class=\"pl-c1\"\u003e5\u003c\/span\u003e;    \u003cspan class=\"pl-c\"\u003e\/\/ 1 doux … 10 festif\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003euint32_t\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003eCOLOR\u003c\/span\u003e    = CMozGlow::Color(\u003cspan class=\"pl-c1\"\u003e255\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e42\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e120\u003c\/span\u003e);\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-c1\"\u003euint8_t\u003c\/span\u003e  \u003cspan class=\"pl-c1\"\u003eLED_PIN\u003c\/span\u003e  = \u003cspan class=\"pl-c1\"\u003e3\u003c\/span\u003e;    \u003cspan class=\"pl-c\"\u003e\/\/ GPIO 3 = pixel intégré ; changez pour d'autres cartes\u003c\/span\u003e\n\u003cspan class=\"pl-c\"\u003e\/\/ ══════════════════════════════════\u003c\/span\u003e\n\nCMozGlow \u003cspan class=\"pl-en\"\u003eglow\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003eNUM_LEDS\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003eLED_PIN\u003c\/span\u003e);\n\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetup\u003c\/span\u003e() {\n  Serial.\u003cspan class=\"pl-c1\"\u003ebegin\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e115200\u003c\/span\u003e);\n  \u003cspan class=\"pl-k\"\u003eif\u003c\/span\u003e (!glow.\u003cspan class=\"pl-c1\"\u003ebegin\u003c\/span\u003e()) {\n    Serial.\u003cspan class=\"pl-c1\"\u003eprintln\u003c\/span\u003e(glow.\u003cspan class=\"pl-c1\"\u003eerrorText\u003c\/span\u003e());   \u003cspan class=\"pl-c\"\u003e\/\/ il vous dit quoi corriger !\u003c\/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c\/span\u003e (\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e) \u003cspan class=\"pl-c1\"\u003edelay\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e1000\u003c\/span\u003e);\n  }\n  glow.\u003cspan class=\"pl-c1\"\u003esetPowerBudgetmA\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e450\u003c\/span\u003e);           \u003cspan class=\"pl-c\"\u003e\/\/ sûr sur USB ou petite LiPo\u003c\/span\u003e\n  glow.\u003cspan class=\"pl-c1\"\u003esetEffect\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003eEFFECT\u003c\/span\u003e);\n  glow.\u003cspan class=\"pl-c1\"\u003esetEffectColor\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003eCOLOR\u003c\/span\u003e);\n  glow.\u003cspan class=\"pl-c1\"\u003esetEffectSpeed\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003eSPEED\u003c\/span\u003e);\n}\n\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eloop\u003c\/span\u003e() {\n  glow.\u003cspan class=\"pl-c1\"\u003eupdate\u003c\/span\u003e();                        \u003cspan class=\"pl-c\"\u003e\/\/ c'est tout !\u003c\/span\u003e\n}\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eTéléversez. Le pixel intégré devrait commencer à danser comme une aurore.\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eChangez le numéro de l'\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eEFFECT\u003c\/code\u003e, téléversez à nouveau, répétez.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eCette unique constante suffit pour découvrir toutes les options.\u003c\/p\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch3 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e3. Ajouter une bande LED\u003c\/h3\u003e\n\n\u003ca id=\"user-content-3-add-a-strip\" class=\"anchor\" aria-label=\"Permalink: 3. Ajouter une bande LED\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#3-add-a-strip\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eConnectez le\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eDIN\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003ede votre bande WS2812B au\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eGPIO 3\u003c\/strong\u003e, GND au GND, et 5V à une alimentation appropriée. Le pixel intégré devient le\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003epixel 0\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eet votre bande commence à partir du\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003epixel 1\u003c\/strong\u003e.\u003c\/p\u003e\n\n\u003cblockquote\u003e\n\n\u003cp dir=\"auto\"\u003e🧵\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eRègle d'or :\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eNUM_LEDS = 1 + longueur de votre bande\u003c\/code\u003e. Une bande de 12 LED signifie\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eNUM_LEDS = 13\u003c\/code\u003e.\u003c\/p\u003e\n\n\n\u003c\/blockquote\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch3 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e4. Utiliser une broche différente — ou une autre carte\u003c\/h3\u003e\n\n\u003ca id=\"user-content-4-using-a-different-pin--or-a-different-board\" class=\"anchor\" aria-label=\"Permalink: 4. Utiliser une broche différente — ou une autre carte\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#4-using-a-different-pin--or-a-different-board\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eLe GPIO 3 est seulement la broche par\u003cspan\u003e \u003c\/span\u003e\u003cem\u003edéfaut\u003c\/em\u003e, car c'est là que se trouve le pixel intégré de la carte CMoz. N'importe quelle broche de sortie valide fonctionne — passez-la comme second argument :\u003c\/p\u003e\n\n\n\u003cpre\u003eCMozGlow \u003cspan class=\"pl-en\"\u003eglow\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003eNUM_LEDS\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e6\u003c\/span\u003e);     \u003cspan class=\"pl-c\"\u003e\/\/ 20 LED sur GPIO 6\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eChaque exemple dispose d'une constante\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eLED_PIN\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003een haut pour exactement cela. Et CMozGlow n'est pas limité à CMoz — il fonctionne sur n'importe quelle carte de la famille ESP32 :\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eESP32-S3, ESP32-S2, ESP32-C3 et l'ESP32 classique\u003c\/strong\u003e. Il connaît le brochage réel de chaque puce et vous indiquera en français clair si vous choisissez une broche qui ne peut pas piloter de LED :\u003c\/p\u003e\n\n\u003ctable\u003e\n\n\u003cthead\u003e\n\n\u003ctr\u003e\n\n\u003cth\u003epuce\u003c\/th\u003e\n\n\u003cth\u003ebroches fonctionnelles\u003c\/th\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/thead\u003e\n\n\u003ctbody\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003eESP32-S3\u003c\/td\u003e\n\n\u003ctd\u003e0–21, 33–48\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003eESP32-S2\u003c\/td\u003e\n\n\u003ctd\u003e0–21, 33–46\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003eESP32-C3\u003c\/td\u003e\n\n\u003ctd\u003e0–10, 18–21\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003eESP32 classique\u003c\/td\u003e\n\n\u003ctd\u003e0–5, 12–19, 21–23, 25–27, 32, 33\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\n\n\n\u003c\/table\u003e\n\n\u003cp dir=\"auto\"\u003eSur une carte\u003cspan\u003e \u003c\/span\u003e\u003cem\u003esans\u003c\/em\u003e\u003cspan\u003e \u003c\/span\u003epixel intégré,\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eNUM_LEDS\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eest simplement la longueur de votre bande — la règle d'or ci-dessus ne s'applique qu'aux cartes comme la CMoz qui en possèdent une intégrée.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🎭 Les effets\u003c\/h2\u003e\n\n\u003ca id=\"user-content--the-effects\" class=\"anchor\" aria-label=\"Permalink: 🎭 Les effets\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-the-effects\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003ctable\u003e\n\n\u003cthead\u003e\n\n\u003ctr\u003e\n\n\u003cth\u003e#\u003c\/th\u003e\n\n\u003cth\u003eNom\u003c\/th\u003e\n\n\u003cth\u003eConstante\u003c\/th\u003e\n\n\u003cth\u003eDescription\u003c\/th\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/thead\u003e\n\n\u003ctbody\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e0\u003c\/td\u003e\n\n\u003ctd\u003eSolid\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_SOLID\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ecouleur fixe\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e1\u003c\/td\u003e\n\n\u003ctd\u003eSequin\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_SEQUIN\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003eéclats aléatoires, comme des paillettes sous les projecteurs\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e2\u003c\/td\u003e\n\n\u003ctd\u003eCatwalk\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_CATWALK\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003eun balayage audacieux avec traînée fondu\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e3\u003c\/td\u003e\n\n\u003ctd\u003eLoom\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_LOOM\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003edeux \"fils\" colorés qui s'entrecroisent\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e4\u003c\/td\u003e\n\n\u003ctd\u003eHeartbeat\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_HEARTBEAT\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ebattement double réaliste (lub-dub)\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e5\u003c\/td\u003e\n\n\u003ctd\u003eFirefly\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_FIREFLY\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003elumières douces qui respirent à des endroits aléatoires\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e6\u003c\/td\u003e\n\n\u003ctd\u003eSilk\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_SILK\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ereflets lents, comme la lumière sur du tissu\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e7\u003c\/td\u003e\n\n\u003ctd\u003eEmber\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_EMBER\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003elueur chaleureuse de feu de camp\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e8\u003c\/td\u003e\n\n\u003ctd\u003eAurora\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_AURORA\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003eaurores boréales 🇨🇦\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e9\u003c\/td\u003e\n\n\u003ctd\u003eMorse\u003c\/td\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_FX_MORSE\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003efait clignoter un message en code Morse\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\n\n\n\u003c\/table\u003e\n\n\u003cp dir=\"auto\"\u003eTous les effets respectent\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003esetEffectColor()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003e(sauf Ember et Aurora, qui utilisent leurs propres palettes) et\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003esetEffectSpeed(1–10)\u003c\/code\u003e.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eAstuce Morse :\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003edéfinissez votre message en premier —\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.setMorseMessage(\"MEET AT 9\");\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003e— lettres, chiffres et espaces, jusqu'à 63 caractères. Fantastique pour les badges et les défis de décodage en classe.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🔋 Gestion de la puissance (à lire si c'est un vêtement connecté !)\u003c\/h2\u003e\n\n\u003ca id=\"user-content--power-budgeting-please-read-if-its-a-wearable\" class=\"anchor\" aria-label=\"Permalink: 🔋 Gestion de la puissance (à lire si c'est un vêtement connecté !)\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-power-budgeting-please-read-if-its-a-wearable\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eChaque WS2812B peut consommer jusqu'à\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003e60 mA en blanc total\u003c\/strong\u003e. Treize pixels en blanc total représentent près de 0,8 A — plus que ce qu'un port USB ou une petite batterie LiPo peut fournir.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003eCMozGlow vous protège :\u003c\/p\u003e\n\n\n\u003cpre\u003eglow.setPowerBudgetmA(\u003cspan class=\"pl-c1\"\u003e450\u003c\/span\u003e);   \u003cspan class=\"pl-c\"\u003e\/\/ ne jamais dépasser ~450 mA\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eAvant chaque image, la bibliothèque estime la consommation de courant et, si vous dépassez le budget, elle réduit silencieusement l'intensité. Vous pouvez vérifier ce qui s'est passé :\u003c\/p\u003e\n\n\n\u003cpre\u003eSerial.println(glow.estimatedCurrentmA()); \u003cspan class=\"pl-c\"\u003e\/\/ consommation approx. de la dernière image\u003c\/span\u003e\nSerial.println(glow.powerLimited());       \u003cspan class=\"pl-c\"\u003e\/\/ 1 si la réduction auto. a eu lieu\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eBudgets suggérés :\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eport USB ≈ 450 mA\u003c\/strong\u003e,\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003epetite LiPo (400 mAh) ≈ 250 mA\u003c\/strong\u003e,\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003ealimentation dédiée 5 V\/2 A ≈ 1500 mA\u003c\/strong\u003e. L'estimation est une approximation (~20 mA par canal de couleur à pleine puissance + ~1 mA par puce au repos) — gardez toujours une marge.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e✈️\u003cspan\u003e \u003c\/span\u003eAutoPilot — les LED obtiennent leur propre cœur CPU (avancé)\u003c\/h2\u003e\n\n\u003ca id=\"user-content-️-autopilot--the-leds-get-their-own-cpu-core-advanced\" class=\"anchor\" aria-label=\"Permalink: ✈️ AutoPilot — les LED obtiennent leur propre cœur CPU (avancé)\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#%EF%B8%8F-autopilot--the-leds-get-their-own-cpu-core-advanced\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eL'ESP32-S3 possède deux cœurs de processeur, et le\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003ede votre croquis s'exécute sur le cœur 1. AutoPilot lance une petite tâche d'arrière-plan sur le\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003ecœur 0\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003equi anime les LED en continu :\u003c\/p\u003e\n\n\n\u003cpre\u003eglow.setEffect(\u003cspan class=\"pl-c1\"\u003eCMOZ_FX_AURORA\u003c\/span\u003e);\nglow.autoUpdate(\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e);      \u003cspan class=\"pl-c\"\u003e\/\/ ✈️ décollage — plus besoin de update()\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eC'est tout. Votre\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eest maintenant libre à 100 % pour vos capteurs, Bluetooth, tactile et servos — l'animation s'exécute littéralement sur une partie différente du silicium. Chaque appel CMozGlow reste sûr à utiliser en cours de vol (\u003ccode\u003esetEffect()\u003c\/code\u003e,\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003esetPixel()\u003c\/code\u003e,\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003esetBrightness()\u003c\/code\u003e, couleurs, vitesse — tout), car toute la bibliothèque est protégée par un mutex récursif. Désactivez-le à tout moment avec\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.autoUpdate(false)\u003c\/code\u003e;\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eautoRunning()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003evous informe de l'état actuel.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003eBon à savoir :\u003c\/p\u003e\n\n\u003cul dir=\"auto\"\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eQuand l'utiliser\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— projets interactifs où le\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eeffectue un vrai travail : échantillonnage tactile capacitif, BLE, code audio-réactif, asservissement de servos. Pour un simple croquis \"lumières seulement\", le\u003ccode\u003eupdate()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eclassique dans le\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003esuffit amplement.\u003c\/li\u003e\n\u003cli\u003e\n\n\u003cstrong\u003eLes appels manuels \u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eshow()\u003c\/code\u003e\/\u003ccode\u003eupdate()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003esont sans risque mais inutiles en cours d'exécution\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— AutoPilot effectue déjà le rendu selon le programme, et le minuteur d'image empêche tout double affichage.\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eLe cœur 0 est également le cœur Wi-Fi\/BLE.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eLa tâche de rendu est légère (priorité 1, en veille entre les images), ils cohabitent donc sans problème, mais si vous générez un trafic Wi-Fi intense \u003cem\u003eet\u003c\/em\u003e utilisez plus de 500 LED, vérifiez vos temps de traitement.\u003c\/li\u003e\n\n\u003cli\u003e\n\n\u003cstrong\u003eL'arrêt est propre.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eautoUpdate(false)\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eet\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eend()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eattendent que la tâche confirme son arrêt et que le matériel termine l'image en cours avant toute manipulation de mémoire. Aucune tâche suspendue, aucune erreur d'accès à la mémoire libérée (use-after-free) — jamais.\u003c\/li\u003e\n\n\n\u003c\/ul\u003e\n\n\u003cp dir=\"auto\"\u003eEssayez\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eFichier → Exemples → CMozGlow → CMozGlow_AutoPilot\u003c\/strong\u003e : il compte les tours de\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003epar seconde afin que vous puissiez\u003cspan\u003e \u003c\/span\u003e\u003cem\u003econstater\u003c\/em\u003e\u003cspan\u003e \u003c\/span\u003eà quel point votre programme est déchargé.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🚑 Gestion des erreurs\u003c\/h2\u003e\n\n\u003ca id=\"user-content--error-handling\" class=\"anchor\" aria-label=\"Permalink: 🚑 Gestion des erreurs\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-error-handling\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eChaque appel susceptible d'échouer renvoie\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003efalse\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eet enregistre une raison :\u003c\/p\u003e\n\n\n\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eif\u003c\/span\u003e (!glow.setPixel(\u003cspan class=\"pl-c1\"\u003e999\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e255\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c\/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c\/span\u003e)) {\n  Serial.\u003cspan class=\"pl-c1\"\u003eprintln\u003c\/span\u003e(glow.\u003cspan class=\"pl-c1\"\u003eerrorText\u003c\/span\u003e());\n  \u003cspan class=\"pl-c\"\u003e\/\/ \"l'index du pixel dépasse la fin du ruban — les index vont de 0 à numPixels()-1\"\u003c\/span\u003e\n}\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003cp dir=\"auto\"\u003eUtilisez le pixel embarqué comme voyant d'état en direct — idéal pour déboguer un costume sur lequel vous ne pouvez pas brancher de moniteur série :\u003c\/p\u003e\n\n\n\u003cpre\u003eglow.statusPixel(\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e);   \u003cspan class=\"pl-c\"\u003e\/\/ pixel 0 : vert pâle = tout va bien, rouge = une erreur est survenue\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003ctable\u003e\n\n\u003cthead\u003e\n\n\u003ctr\u003e\n\n\u003cth\u003eCode\u003c\/th\u003e\n\n\u003cth\u003eSignification\u003c\/th\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/thead\u003e\n\n\u003ctbody\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_OK\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003etout est normal\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_NOT_BEGUN\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003e\n\n\u003ccode\u003ebegin()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003en'a pas été appelé ou a échoué\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_BAD_PIN\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ecette broche GPIO ne peut pas piloter de LED (utilisez 0–21 ou 33–48)\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_BAD_COUNT\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ele nombre de LED doit être compris entre 1 et 2000\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_ALLOC\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003emémoire insuffisante (ruban trop long)\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_RMT\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003eéchec du démarrage du périphérique LED\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_INDEX\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003el'index du pixel dépasse la fin du ruban\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_BAD_EFFECT\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ele numéro d'effet n'existe pas (valides : 0–9)\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_BAD_ARG\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003eargument hors limites\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\n\u003ctd\u003e\u003ccode\u003eCMOZ_ERR_TASK\u003c\/code\u003e\u003c\/td\u003e\n\n\u003ctd\u003ela tâche d'arrière-plan d'AutoPilot n'a pas pu démarrer ou s'arrêter\u003c\/td\u003e\n\n\n\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\n\n\n\u003c\/table\u003e\n\n\u003cp dir=\"auto\"\u003eUtilisez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.lastError()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003epour le code,\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.errorText()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003epour la description, et\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.clearError()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003epour réinitialiser.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e📖 API complète\u003c\/h2\u003e\n\n\u003ca id=\"user-content--full-api\" class=\"anchor\" aria-label=\"Permalink: 📖 API complète\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-full-api\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\n\u003cpre\u003eCMozGlow \u003cspan class=\"pl-en\"\u003eglow\u003c\/span\u003e(numLeds);            \u003cspan class=\"pl-c\"\u003e\/\/ GPIO 3 par défaut\u003c\/span\u003e\nCMozGlow \u003cspan class=\"pl-en\"\u003eglow\u003c\/span\u003e(numLeds, pin);       \u003cspan class=\"pl-c\"\u003e\/\/ ou toute broche de sortie ESP32-S3 valide\u003c\/span\u003e\n\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003ebegin\u003c\/span\u003e();                      \u003cspan class=\"pl-c\"\u003e\/\/ appeler une fois dans setup() ; false = vérifier errorText()\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eend\u003c\/span\u003e();\n\n\u003cspan class=\"pl-c\"\u003e\/\/ pixels\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetPixel\u003c\/span\u003e(i, r, g, b);         \u003cspan class=\"pl-c\"\u003e\/\/ 0-255 chacun\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetPixel\u003c\/span\u003e(i, color);           \u003cspan class=\"pl-c\"\u003e\/\/ format 0xRRGGBB\u003c\/span\u003e\n\u003cspan class=\"pl-c1\"\u003euint32_t\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003egetPixel\u003c\/span\u003e(i);\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003efill\u003c\/span\u003e(color);\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eclear\u003c\/span\u003e();\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eshow\u003c\/span\u003e();                       \u003cspan class=\"pl-c\"\u003e\/\/ transmettre l'image au matériel ; retourne en ~µs\u003c\/span\u003e\n\u003cspan class=\"pl-c1\"\u003euint16_t\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003enumPixels\u003c\/span\u003e();\n\n\u003cspan class=\"pl-c\"\u003e\/\/ aspect\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetBrightness\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c\/span\u003e-\u003cspan class=\"pl-c1\"\u003e255\u003c\/span\u003e);         \u003cspan class=\"pl-c\"\u003e\/\/ variateur principal non destructif\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetGamma\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e\/\u003cspan class=\"pl-c1\"\u003efalse\u003c\/span\u003e);         \u003cspan class=\"pl-c\"\u003e\/\/ correction gamma, activée par défaut\u003c\/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\/\/ sécurité portable\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetPowerBudgetmA\u003c\/span\u003e(\u003cspan class=\"pl-smi\"\u003emA\u003c\/span\u003e);         \u003cspan class=\"pl-c\"\u003e\/\/ 0 = illimité\u003c\/span\u003e\n\u003cspan class=\"pl-c1\"\u003euint16_t\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eestimatedCurrentmA\u003c\/span\u003e();\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003epowerLimited\u003c\/span\u003e();\n\n\u003cspan class=\"pl-c\"\u003e\/\/ effets (non bloquants)\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetEffect\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c\/span\u003e-\u003cspan class=\"pl-c1\"\u003e9\u003c\/span\u003e);               \u003cspan class=\"pl-c\"\u003e\/\/ ou constantes CMOZ_FX_…\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetEffectColor\u003c\/span\u003e(color);\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetEffectSpeed\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e1\u003c\/span\u003e-\u003cspan class=\"pl-c1\"\u003e10\u003c\/span\u003e);\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003esetMorseMessage\u003c\/span\u003e(\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c\/span\u003eTEXT 123\u003cspan class=\"pl-pds\"\u003e\"\u003c\/span\u003e\u003c\/span\u003e);\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eupdate\u003c\/span\u003e();                     \u003cspan class=\"pl-c\"\u003e\/\/ à appeler dans chaque loop() ; true lors du rendu\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003estatic\u003c\/span\u003e \u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-k\"\u003echar\u003c\/span\u003e* \u003cspan class=\"pl-en\"\u003eeffectName\u003c\/span\u003e(id);\n\n\u003cspan class=\"pl-c\"\u003e\/\/ AutoPilot (avancé)\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eautoUpdate\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e\/\u003cspan class=\"pl-c1\"\u003efalse\u003c\/span\u003e);       \u003cspan class=\"pl-c\"\u003e\/\/ attribuer aux LED leur propre cœur CPU \/ arrêter\u003c\/span\u003e\n\u003cspan class=\"pl-k\"\u003ebool\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eautoRunning\u003c\/span\u003e();\n\n\u003cspan class=\"pl-c\"\u003e\/\/ erreurs\u003c\/span\u003e\nCMozError \u003cspan class=\"pl-en\"\u003elastError\u003c\/span\u003e();\n\u003cspan class=\"pl-k\"\u003econst\u003c\/span\u003e \u003cspan class=\"pl-k\"\u003echar\u003c\/span\u003e* \u003cspan class=\"pl-en\"\u003eerrorText\u003c\/span\u003e();\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003eclearError\u003c\/span\u003e();\n\u003cspan class=\"pl-k\"\u003evoid\u003c\/span\u003e \u003cspan class=\"pl-en\"\u003estatusPixel\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003etrue\u003c\/span\u003e\/\u003cspan class=\"pl-c1\"\u003efalse\u003c\/span\u003e);      \u003cspan class=\"pl-c\"\u003e\/\/ pixel embarqué comme témoin d'état\u003c\/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\/\/ outils couleur\u003c\/span\u003e\n\u003cspan class=\"pl-en\"\u003eCMozGlow::Color\u003c\/span\u003e(r, g, b);          \u003cspan class=\"pl-c\"\u003e\/\/ créer une couleur\u003c\/span\u003e\n\u003cspan class=\"pl-en\"\u003eCMozGlow::Wheel\u003c\/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c\/span\u003e-\u003cspan class=\"pl-c1\"\u003e255\u003c\/span\u003e);            \u003cspan class=\"pl-c\"\u003e\/\/ parcourir l'arc-en-ciel\u003c\/span\u003e\u003c\/pre\u003e\n\n\u003cdiv class=\"zeroclipboard-container\"\u003e\u003csvg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🔧 Dépannage\u003c\/h2\u003e\n\n\u003ca id=\"user-content--troubleshooting\" class=\"anchor\" aria-label=\"Permalink: 🔧 Dépannage\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-troubleshooting\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eRien ne s'allume.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eConsultez d'abord le message de\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eerrorText()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003edans le\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eSerial\u003c\/code\u003e. Ensuite :\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eLED_PIN\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003ecorrespond-il bien à la broche utilisée par le DIN de votre ruban ? Le ruban et la carte partagent-ils une masse (GND) commune ?\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eNUM_LEDS\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eest-il au moins égal à 1 ?\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eSeul le pixel embarqué fonctionne.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eNUM_LEDS\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eest probablement resté à 1 — n'oubliez pas d'ajouter la longueur de votre ruban. Vérifiez également que la flèche sur le ruban pointe bien \u003cem\u003eà l'opposé\u003c\/em\u003e de la carte (les données circulent dans une seule direction).\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLes couleurs semblent ternes.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eC'est probablement le budget énergétique qui fait son travail — vérifiez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003epowerLimited()\u003c\/code\u003e. N'augmentez ce budget que si votre source d'alimentation peut le supporter.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLes couleurs semblent \"fausses\" par rapport à une autre bibliothèque.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eCMozGlow effectue une correction gamma par défaut pour que les mélanges de couleurs paraissent naturels. Pour des valeurs brutes, appelez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eglow.setGamma(false);\u003c\/code\u003e.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLe premier pixel scintille avec un long ruban.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eLes longs câblages bénéficient d'une résistance de 300–500 Ω sur la ligne de données et d'un condensateur de 500–1000 µF aux bornes de l'alimentation — disponibles sur TinkerTailor.ca. 😉\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLa compilation et l'exécution fonctionnent, mais le moniteur série n'affiche rien.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eDans Outils, assurez-vous que\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eBoard = ESP32S3 Dev Module\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eet\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eUSB CDC On Boot = Enabled\u003c\/strong\u003e, puis téléversez à nouveau. Sans le CDC activé, le S3 envoie les données série vers un port UART auquel vous n'êtes pas connecté.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eErreur ctags \"cannot open temporary file\" avant la compilation (Windows).\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eCela ne vient pas de votre programme — il s'agit de fichiers obsolètes dans le dossier temporaire de Windows. Fermez l'IDE, appuyez sur Win + R, tapez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003e%TEMP%\u003c\/code\u003e, supprimez le contenu et réessayez.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eLa compilation réussit mais\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ebegin()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003erenvoie false.\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eAffichez\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eerrorText()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003e— il précisera le problème exact (broche incorrecte, trop de LED, mémoire insuffisante ou périphérique RMT utilisé par une autre bibliothèque).\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eVous utilisez du fil conducteur ?\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eGardez la ligne de données courte et cousez une ligne de masse le long de celle-ci. Les données des WS2812B sont sensibles au timing ; avec moins de 30 cm de fil, cela fonctionne généralement bien à une luminosité adaptée aux vêtements.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\n\n\u003ch2 class=\"heading-element\" dir=\"auto\" tabindex=\"-1\"\u003e🧠 Fonctionnement (pour les curieux)\u003c\/h2\u003e\n\n\u003ca id=\"user-content--how-it-works-for-curious-minds\" class=\"anchor\" aria-label=\"Permalink: 🧠 Fonctionnement (pour les curieux)\" href=\"https:\/\/github.com\/cmoz\/CMozESP32Board\/blob\/main\/CMozGlow\/README.md#-how-it-works-for-curious-minds\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/a\u003e\n\n\u003c\/div\u003e\n\n\u003cp dir=\"auto\"\u003eCMozGlow pilote les LED avec le\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003epériphérique RMT\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003ede l'ESP32-S3 — un composant matériel qui génère seul la forme d'onde complexe de 800 kHz des WS2812B — et il le fait\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003ede manière asynchrone\u003c\/strong\u003e :\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eshow()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003econstruit l'image (via une table de correspondance octet→forme d'onde précalculée), la transmet au matériel et rend la main immédiatement pendant que les LED sont en cours de rafraîchissement. L'intervalle obligatoire de \"verrouillage\" ≥280 µs est encodé à la fin de chaque transfert matériel, donc il n'y a\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eaucune attente active (busy-waiting) dans la bibliothèque\u003c\/strong\u003e. Le prochain\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eshow()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003evérifie simplement que l'image précédente a bien quitté le fil — ce qui est largement le cas à n'importe quel taux de rafraîchissement normal.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003eRésultat pratique : sur un ruban de 200 LED, un envoi bloquant traditionnel fige votre programme pendant ~6 ms \u003cem\u003epar image\u003c\/em\u003e ; CMozGlow gère le transfert en environ 100 µs. Ajoutez AutoPilot, et le coût pour votre\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003eloop()\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eest nul.\u003c\/p\u003e\n\n\u003cp dir=\"auto\"\u003eCela fonctionne automatiquement sur les noyaux arduino-esp32 2.x et 3.x, et est thread-safe.\u003c\/p\u003e\n\n\u003chr\u003e\n\n\u003cp dir=\"auto\"\u003eFabriqué avec 💛 au Canada · Sous licence MIT · Tutoriels sur la chaîne YouTube\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eCMozMaker\u003c\/strong\u003e · Pièces \u0026amp; tissus conducteurs sur\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003eTinkerTailor.ca\u003c\/strong\u003e\u003c\/p\u003e\n\n\n\u003c\/div\u003e","brand":"Tinker Tailor","offers":[{"title":"Default Title","offer_id":51526997803241,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0790\/8006\/3209\/files\/Screenshot2026-07-19113552.png?v=1784471764"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0790\/8006\/3209\/collections\/an-old-school-software-style-box-with-peanut-gallery-on-it-and-a-price-sticker-of-1.png?v=1770922497","url":"https:\/\/www.tinkertailor.ca\/fr\/collections\/peanut-gallery.oembed","provider":"Tinker Tailor","version":"1.0","type":"link"}