Guides · 17 min de lecture

Code Arduino avec l'IA (ChatGPT) : prompt, tests et erreurs

Écrire du code Arduino avec l'IA comme ChatGPT : modèle de prompt, vérifications, fonctions inventées, mauvaises broches, blocage par delay() et secteur 230 V.

Écrire du code Arduino avec l'IA, c'est décrire ton projet à un assistant conversationnel comme ChatGPT, Gemini, Claude ou Copilot et lui demander un code qui fonctionne sur un Arduino, un ESP32 ou un Raspberry Pi Pico. Bien utilisée, l'IA transforme des heures de travail en minutes : au lieu d'une page blanche, tu obtiens un brouillon prêt à compiler. Mais l'IA ne voit pas ton circuit, ne sait pas quelle carte est posée sur ton bureau et peut affirmer quelque chose de faux avec un aplomb total. Elle peut inventer une fonction de bibliothèque qui n'existe pas, choisir la mauvaise broche ou écrire des boucles avec delay() qui bloquent tout. La vraie compétence n'est donc pas de demander du code, mais de bien demander et de vérifier ce que tu reçois.

Dans ce guide, tu verras comment un assistant IA produit du code Arduino et pourquoi il se trompe, comment écrire un bon prompt qui précise la carte, les broches, les bibliothèques et le comportement attendu, et quelles étapes suivre pour vérifier le code avant de le téléverser. Nous passerons en revue les trois erreurs les plus fréquentes avec de vrais messages du compilateur et du code corrigé. Ensuite, nous verrons comment coller correctement une erreur de compilation pour la faire corriger, pourquoi il ne faut pas faire confiance à l'IA quand on travaille sur le secteur 230 V et comment utiliser ces outils sans arrêter d'apprendre.

Carte Arduino Uno R3
L'IA peut écrire du code, mais elle ne voit ni ta carte, ni ton câblage, ni les modules que tu utilises ; c'est à toi de lui donner ces informations dans le prompt.

Comment l'IA écrit-elle du code Arduino et pourquoi se trompe-t-elle ?

Les grands modèles de langage (LLM) comme ChatGPT n'écrivent pas du code en l'exécutant comme un compilateur : ils prédisent la suite la plus probable à partir des millions d'exemples vus pendant leur entraînement. Pour les sujets très présents sur internet (faire clignoter une LED, lire un DHT11, faire tourner un servo), cette méthode marche très bien. Mais les connaissances du modèle sont figées à une certaine date ; il peut donc ignorer des fonctions qui ont changé dans les nouvelles versions d'une bibliothèque. Il peut confondre les fonctions de deux bibliothèques différentes portant le même nom. Surtout, au lieu de dire « je ne sais pas », il peut inventer une réponse qui paraît plausible : c'est ce qu'on appelle une hallucination. Comme le modèle ne voit pas ton circuit, il déduit les numéros de broches, les niveaux de tension et la version des modules soit de ce que tu as écrit, soit de ses propres suppositions.

TâcheL'IA est-elle douée ?Pourquoi ?
Code d'exemple simple (LED, bouton, lecture de capteur)Très douéeIl existe des milliers d'exemples similaires en ligne
Expliquer un code existant ligne par ligneTrès douéeLire et expliquer du code ne demande pas de deviner
Trouver la cause d'une erreur de compilationDouéeLes messages d'erreur suivent des schémas que les modèles reconnaissent
Code pour la dernière version d'une bibliothèqueFaibleSes connaissances sont figées à une date ; elle peut ignorer les nouvelles fonctions
Choisir des broches adaptées à ton circuitFaibleElle ne voit ni ta carte ni ton câblage, elle suppose
Gestion du temps et plusieurs tâches à la foisMoyenneLa plupart des exemples utilisent delay(), d'où du code bloquant
Secteur 230 V, batteries et circuits à fort courantPeu fiableUne erreur se paie en brûlures, incendie ou électrocution ; le modèle ne peut pas en porter la responsabilité

Comment écrire un bon prompt ?

Le code que te donne l'IA ne peut pas être meilleur que les informations que tu lui fournis. Avec une demande d'une ligne comme « écris un code Arduino qui mesure la température », le modèle choisit lui-même la carte, le capteur, la broche et la bibliothèque. Si ses choix ne correspondent pas à ton matériel, le code ne compile pas, ou compile et ne marche pas. Rédige un bon prompt comme si tu expliquais le projet au téléphone à un ami qui en entend parler pour la première fois : cite un par un la carte, les composants, les branchements, les bibliothèques, le comportement attendu et les contraintes. Le tableau résume ce que doit contenir un prompt pour Arduino :

Que mettre dans le prompt ?Pourquoi c'est importantExemple
Nom exact de la carteBroches, tension et commandes diffèrent entre Uno, ESP32 et PicoArduino Uno R3 (ATmega328P)
Version de l'IDE et du noyauSur l'ESP32, les fonctions ont changé entre les noyaux 2.x et 3.xArduino IDE 2.3, noyau esp32 3.x
Référence des composantsDHT11 et DHT22, ou SG90 et MG996R, ne sont pas identiquesDHT22, écran LCD 16x2 I2C (PCF8574, adresse 0x27)
Branchement des brochesLe modèle suit ton câblage au lieu d'inventer des brochesDATA du DHT22 → D2, bouton entre D3 et GND
Nom et auteur de la bibliothèqueDes bibliothèques homonymes utilisent des fonctions différentesAdafruit DHT sensor library, LiquidCrystal I2C de Frank de Brabander
Comportement attendu, chiffré« Biper quand il fait chaud » est flou, « au-dessus de 30 °C » est mesurableMesurer toutes les 2 secondes, biper 3 fois au-dessus de 30 °C
ContraintesCoupe court aux mauvaises habitudes du modèlePas de delay(), utiliser millis()
Format de sortieTu obtiens le code et les infos d'installation ensembleUn seul fichier .ino, commentaires en français, liste des bibliothèques nécessaires

Par exemple, ce prompt donne de bien meilleurs résultats qu'une demande d'une ligne : « J'utilise un Arduino Uno R3 et l'Arduino IDE 2.3. La broche DATA du DHT22 est sur D2, un buzzer actif sur D8, et un écran LCD 16x2 I2C (PCF8574, adresse 0x27) a SDA sur A4 et SCL sur A5. Les bibliothèques Adafruit DHT sensor library et LiquidCrystal I2C de Frank de Brabander sont installées. Toutes les 2 secondes, affiche la température et l'humidité sur le LCD et, si la température dépasse 30 °C, fais biper le buzzer par petites salves. Utilise millis() au lieu de delay() et commente les lignes en français. Au début, liste les bibliothèques à installer et, à la fin, les hypothèses que tu as faites. » Avec ce prompt, il ne reste presque rien à deviner pour le modèle.

Avant de demander le code, ajoute : « Te manque-t-il des informations pour écrire ce projet ? Pose-moi d'abord des questions. » Un bon modèle te demandera la tension d'alimentation, si le capteur est nu ou monté sur un module, ou l'adresse du LCD. Ne mets jamais ton mot de passe Wi-Fi, une clé d'API ou le jeton d'un bot dans un prompt ; utilise plutôt des espaces réservés comme « TON_MOT_DE_PASSE » et saisis toi-même les vraies valeurs dans le code à la toute fin.

Les étapes pour vérifier le code généré par l'IA

Aussi propre que paraisse le code, passe-le au crible d'une liste de contrôle avant de le téléverser. La plupart de ces étapes prennent quelques minutes et coûtent bien moins cher qu'un module grillé à cause d'une broche mal branchée :

  1. Compile d'abord : Clique sur Vérifier (le bouton en forme de coche) sans brancher la carte. En cas d'erreur, fais-la corriger avec la méthode plus bas ; pour comprendre les messages, lis les erreurs de compilation Arduino.
  2. Vérifie les bibliothèques une par une : Cherche chaque ligne #include dans le gestionnaire de bibliothèques et installe celle dont le nom, l'auteur et les exemples correspondent au code. Si tu ne sais pas comment faire, le guide ajouter une bibliothèque Arduino t'explique tout pas à pas.
  3. Compare les broches : Compare chaque numéro de broche du code avec ton câblage et le brochage de la carte. Pour les broches PWM et celles à éviter, utilise l'outil Pinout.
  4. Calcule les valeurs électriques : Vérifie la résistance proposée avec le calculateur de résistance pour LED. Si un capteur à sortie 5 V doit aller sur un ESP32 ou un Pico en 3,3 V, place un pont diviseur de tension entre les deux.
  5. Teste en simulation : Lance le code dans Wokwi ou Tinkercad avant de brancher le vrai matériel ; tu repères les erreurs de logique sans risquer le moindre composant.
  6. Teste morceau par morceau : Ne téléverse pas tout le projet d'un coup. Essaie d'abord un petit croquis qui lit seulement le capteur et l'affiche dans le moniteur série, puis ajoute l'écran et, en dernier, le buzzer ou le relais.
  7. Surveille le moniteur série : Ajoute des Serial.println() aux endroits clés pour voir si les variables prennent les valeurs attendues, et vérifie que la vitesse en bauds correspond au Serial.begin() du code. Plus de détails dans le moniteur série Arduino.
  8. Fais-toi expliquer le code : Pour chaque ligne que tu ne comprends pas, demande « que fait cette ligne et que se passe-t-il si je la supprime ? ». Ne téléverse jamais un code que tu ne sais pas expliquer.

Erreur fréquente n° 1 : des fonctions de bibliothèque qui n'existent pas

L'erreur la plus sournoise de l'IA consiste à écrire des fonctions qui n'existent pas mais dont le nom paraît très crédible. Par exemple, la bibliothèque Servo standard propose attach(), write(), writeMicroseconds(), read() et detach(), mais aucune fonction setSpeed() pour régler la vitesse ; le modèle peut l'inventer si tu demandes un servo qui tourne lentement. Parfois la fonction existe bel et bien, mais sur une autre carte : Serial.printf() fonctionne sur l'ESP32 mais ne compile pas sur un Arduino Uno. Et parfois la fonction appartient à une ancienne version : ledcSetup() et ledcAttachPin() ont été supprimées dans la version 3.x du noyau Arduino pour ESP32, sortie en 2024, pourtant la plupart des modèles écrivent encore du code avec. Il existe aussi des bibliothèques différentes qui utilisent le même fichier d'en-tête : dans l'une, appelée LiquidCrystal_I2C.h, l'écran se démarre avec lcd.init(), dans une autre du même nom avec lcd.begin(). Si tu vois l'avertissement « Multiple libraries were found » dans la sortie du compilateur, soupçonne cette confusion.

Ce que l'IA a écritMessage du compilateur ou symptômeVraie solution
Serial.printf("%d", x) sur un Uno'class HardwareSerial' has no member named 'printf'; did you mean 'print'?Afficher morceau par morceau avec Serial.print() ou préparer le texte avec snprintf()
sprintf(buf, "%.1f", t) sur un UnoCompile mais affiche ? à la place du nombreSur AVR, la famille printf ne gère pas les nombres à virgule ; utilise dtostrf(t, 4, 1, buf)
servo.setSpeed(10)'class Servo' has no member named 'setSpeed'Modifier l'angle par petits pas dans une boucle
ledcSetup(0, 5000, 8) avec le noyau ESP32 3.x'ledcSetup' was not declared in this scopeUtiliser ledcAttach(broche, fréquence, résolution) et ledcWrite(broche, valeur)
Seule la bibliothèque DHT est installéefatal error: Adafruit_Sensor.h: No such file or directoryInstaller aussi la bibliothèque Adafruit Unified Sensor
lcd.begin() qui ne correspond pas à la bibliothèque installéeno matching function for call to 'LiquidCrystal_I2C::begin()'Ouvrir l'exemple de la bibliothèque installée et utiliser sa commande de démarrage (comme lcd.init())
analogReadResolution(12) sur un Uno'analogReadResolution' was not declared in this scopeLe CAN de l'Uno est sur 10 bits ; supprime la ligne, les valeurs vont de 0 à 1023

Le piège des anciennes fonctions sur l'ESP32 : ledcAttach au lieu de ledcSetup

Quand tu demandes un code ESP32 qui règle la luminosité d'une LED ou la vitesse d'un moteur, l'IA écrira très probablement le trio ledcSetup(canal, fréquence, résolution), ledcAttachPin(broche, canal) et ledcWrite(canal, valeur). Ce code fonctionne avec la version 2.x du noyau. Dans la version 3.x, en revanche, les canaux sont attribués automatiquement : ledcAttach(broche, fréquence, résolution) configure la broche en une seule fois, et ledcWrite(broche, valeur) prend désormais un numéro de broche au lieu d'un canal. Tu peux voir la version installée à côté du paquet esp32 dans le gestionnaire de cartes. Le code ci-dessous vérifie la version à la compilation et fonctionne donc avec les deux noyaux :

C++ (Arduino IDE)
1// ESP32 PWM: çekirdek 2.x ve 3.x ile uyumlu LED soldurma / LED fade for both core 2.x and 3.x
2#include <esp_arduino_version.h>   // ESP_ARDUINO_VERSION_MAJOR için / for ESP_ARDUINO_VERSION_MAJOR
3
4const int LED_PIN = 2;             // çoğu DevKit'te dahili LED / onboard LED on most DevKits
5const uint32_t FREKANS = 5000;     // PWM frekansı, Hz / PWM frequency, Hz
6const uint8_t COZUNURLUK = 8;      // 8 bit: 0-255 / 8-bit: 0-255
7
8#if ESP_ARDUINO_VERSION_MAJOR >= 3
9// Çekirdek 3.x: kanal otomatik seçilir, fonksiyonlar pin alır / Core 3.x: channel is automatic, functions take the pin
10void pwmBaslat() { ledcAttach(LED_PIN, FREKANS, COZUNURLUK); }
11void pwmYaz(uint32_t deger) { ledcWrite(LED_PIN, deger); }
12#else
13// Çekirdek 2.x: önce kanal kurulur, sonra pine bağlanır / Core 2.x: set up a channel, then attach the pin
14const uint8_t KANAL = 0;
15void pwmBaslat() { ledcSetup(KANAL, FREKANS, COZUNURLUK); ledcAttachPin(LED_PIN, KANAL); }
16void pwmYaz(uint32_t deger) { ledcWrite(KANAL, deger); }
17#endif
18
19void setup() {
20  Serial.begin(115200);
21  Serial.print("ESP32 Arduino cekirdegi / core: ");
22  Serial.println(ESP_ARDUINO_VERSION_MAJOR);
23  pwmBaslat();
24}
25
26void loop() {
27  // Tek iş yaptığı için burada delay() sorun değil / delay() is fine here: only one task
28  for (int d = 0; d <= 255; d++) { pwmYaz(d); delay(4); }   // yavaşça yan / fade in
29  for (int d = 255; d >= 0; d--) { pwmYaz(d); delay(4); }   // yavaşça sön / fade out
30}

La leçon ne concerne pas que l'ESP32 : si tu indiques la version du noyau et des bibliothèques dans ton prompt, le modèle a une chance de choisir les bonnes fonctions. S'il utilise encore d'anciennes fonctions malgré tout, ouvre un des exemples officiels de la bibliothèque dans Fichier > Exemples et colle-le dans le prompt avec « réécris-le avec les fonctions de cet exemple ». Les exemples officiels correspondent toujours à la version installée. Pour comprendre le fonctionnement du PWM, jette un œil à Qu'est-ce que le PWM ?

Erreur fréquente n° 2 : la mauvaise broche

Même si le code compile et se téléverse, une mauvaise broche donne un circuit qui ne fait rien sans prévenir, ou un module grillé. Le compilateur ne peut pas le détecter, car pour lui un numéro de broche n'est qu'un nombre. Voici, carte par carte, les erreurs de broches les plus fréquentes de l'IA :

CarteErreur fréquente de l'IAQue se passe-t-il ?La bonne solution
Arduino UnoUne broche sans PWM pour analogWrite() (ex. D7)La LED ne varie pas : sous 128 elle s'éteint, à partir de 128 elle s'allume à fondBroches PWM : 3, 5, 6, 9, 10, 11
Arduino UnoBrancher un module sur D0 ou D1Le téléversement peut échouer et le moniteur série peut afficher des caractères bizarresD0 et D1 sont la liaison série USB ; commence à D2
Arduino NanoUtiliser A6 et A7 comme broches numériquesdigitalRead() et digitalWrite() ne fonctionnent pasA6 et A7 sont uniquement des entrées analogiques
ESP32Utiliser les GPIO 6 à 11La carte plante ou redémarre en boucleCes broches sont reliées à la mémoire flash ; choisis des broches sûres comme GPIO 4, 5, 16–19, 21–23
ESP32Utiliser les GPIO 34 à 39 en sortieLa LED reste éteinte ; un bouton donne des lectures instables sans pull-upCes broches sont uniquement des entrées, sans résistance de pull-up interne
ESP32Lire une valeur analogique sur une broche ADC2 avec le Wi-Fi actifanalogRead() échoue ou renvoie des valeurs absurdesBranche les capteurs analogiques sur les broches ADC1 (GPIO 32–39)
Raspberry Pi Pico WPin(25) pour la LED intégréeLa LED reste éteinteSur le Pico W, la LED est reliée à la puce sans fil ; utilise Pin("LED")
L'IA oublie souvent les niveaux de tension. Les broches de l'ESP32 et du Raspberry Pi Pico fonctionnent en 3,3 V et ne tolèrent pas le 5 V ; brancher directement un capteur à sortie 5 V peut endommager la broche définitivement. Sur un Arduino Uno, ne tire pas plus de 20 mA en continu sur une broche (40 mA en maximum absolu). Les moteurs, les bobines de relais ou les longs rubans de LED ne se branchent jamais directement sur une broche : on intercale un transistor ou un driver. Pour le brochage de ta carte, consulte le brochage de l'Arduino Uno.

Erreur fréquente n° 3 : le blocage par delay()

Comme la plupart des exemples Arduino sur internet sont écrits avec delay(), l'IA utilise aussi delay() par défaut. Pendant que delay(1000) s'exécute, le processeur ne fait rien d'autre pendant une seconde entière : il ne lit pas les boutons, ne surveille pas les capteurs et ne met pas l'écran à jour. Dans un code qui ne fait qu'une chose, ce n'est pas grave. Mais si tu demandes deux choses à la fois, comme « fais clignoter une LED et fais biper le buzzer quand on appuie sur le bouton », tu obtiens souvent un code comme celui-ci :

C++ (Arduino IDE)
1// Yapay zekanın sık ürettiği, kilitlenen kod / Blocking code that AI often produces
2const int BUTON_PIN = 2;    // buton: D2 ile GND arası / button between D2 and GND
3const int LED_PIN = 13;     // dahili LED / onboard LED
4const int BUZZER_PIN = 8;   // aktif buzzer / active buzzer
5
6void setup() {
7  pinMode(BUTON_PIN, INPUT_PULLUP);
8  pinMode(LED_PIN, OUTPUT);
9  pinMode(BUZZER_PIN, OUTPUT);
10}
11
12void loop() {
13  digitalWrite(LED_PIN, HIGH);
14  delay(1000);                          // 1 sn boyunca buton okunmaz / button is not read for 1 s
15  digitalWrite(LED_PIN, LOW);
16  delay(1000);                          // 1 sn daha kör bekleme / another blind second
17
18  if (digitalRead(BUTON_PIN) == LOW) {  // yalnızca tam bu anda basılıysa / only if pressed right now
19    digitalWrite(BUZZER_PIN, HIGH);
20    delay(200);
21    digitalWrite(BUZZER_PIN, LOW);
22  }
23}

Ce code compile sans erreur, mais la plupart du temps il ne se passe rien quand tu appuies sur le bouton. Environ 2 secondes de chaque tour de loop() se passent dans les deux appels à delay(), et le bouton n'est lu que pendant quelques microsecondes entre les deux. Un appui bref rate presque toujours ce moment ; pour que le buzzer sonne à coup sûr, tu dois maintenir le bouton plus de 2 secondes. La solution n'est pas d'attendre mais de regarder l'horloge : millis() renvoie le nombre de millisecondes écoulées depuis le démarrage, chaque tâche vérifie si son moment est venu et loop() tourne des milliers de fois par seconde :

C++ (Arduino IDE)
1// millis() ile kilitlenmeyen sürüm / Non-blocking version with millis()
2const int BUTON_PIN = 2;    // buton: D2 ile GND arası / button between D2 and GND
3const int LED_PIN = 13;     // dahili LED / onboard LED
4const int BUZZER_PIN = 8;   // aktif buzzer / active buzzer
5
6const unsigned long LED_ARALIK = 1000;  // LED değişim aralığı, ms / LED toggle interval, ms
7const unsigned long BIP_SURE = 200;     // bip süresi, ms / beep length, ms
8const unsigned long SICRAMA = 30;       // debounce süresi, ms / debounce time, ms
9
10unsigned long ledZaman = 0;     // LED'in son değiştiği an / last LED toggle
11unsigned long bipZaman = 0;     // bipin başladığı an / beep start
12unsigned long butonZaman = 0;   // butonun son değiştiği an / last button change
13bool ledDurum = false;
14bool bipCaliyor = false;
15int oncekiButon = HIGH;         // önceki buton seviyesi / previous button level
16
17void setup() {
18  pinMode(BUTON_PIN, INPUT_PULLUP);
19  pinMode(LED_PIN, OUTPUT);
20  pinMode(BUZZER_PIN, OUTPUT);
21}
22
23void loop() {
24  unsigned long simdi = millis();
25
26  // 1) LED: zamanı geldiyse durum değiştir / toggle the LED when its time has come
27  if (simdi - ledZaman >= LED_ARALIK) {
28    ledZaman = simdi;
29    ledDurum = !ledDurum;
30    digitalWrite(LED_PIN, ledDurum ? HIGH : LOW);
31  }
32
33  // 2) Buton: yalnızca basıldığı anı yakala / catch only the moment of the press
34  int buton = digitalRead(BUTON_PIN);
35  if (buton != oncekiButon && simdi - butonZaman >= SICRAMA) {
36    butonZaman = simdi;
37    oncekiButon = buton;
38    if (buton == LOW && !bipCaliyor) {  // HIGH -> LOW: yeni basış / new press
39      bipCaliyor = true;
40      bipZaman = simdi;
41      digitalWrite(BUZZER_PIN, HIGH);
42    }
43  }
44
45  // 3) Buzzer: süre dolunca sustur / silence it when the time is up
46  if (bipCaliyor && simdi - bipZaman >= BIP_SURE) {
47    bipCaliyor = false;
48    digitalWrite(BUZZER_PIN, LOW);
49  }
50}

Dans cette version, la LED, le bouton et le buzzer fonctionnent sans s'attendre les uns les autres. Une soustraction de la forme simdi - ledZaman >= LED_ARALIK donne le bon résultat même quand millis() repasse à zéro, environ tous les 49,7 jours, alors que la comparaison millis() > tempsCible que l'IA écrit parfois échoue à ce débordement. Détecter l'instant où le bouton passe de HIGH à LOW empêche le buzzer de biper en boucle tant que le bouton reste enfoncé, et l'attente de 30 ms filtre les rebonds du contact (anti-rebond). Tout le sujet est traité dans le guide millis() au lieu de delay() sur Arduino, et le branchement du bouton dans brancher un bouton sur Arduino.

Si tu écris dès le départ dans le prompt « n'utilise pas delay(), cadence chaque tâche avec millis() », tu ne rencontreras jamais ce problème. Deux autres schémas de blocage sont à vérifier : sur les cartes à USB natif comme la Leonardo et la Micro, la ligne while (!Serial); fait attendre le programme indéfiniment si la carte n'est pas reliée à un ordinateur. Et un delay() dans une routine d'interruption (ISR) peut figer le programme, car millis() n'avance pas pendant l'interruption.

Coller une erreur de compilation et la faire corriger

L'IA est vraiment douée pour expliquer les erreurs de compilation, à condition de lui donner l'erreur complète et le contexte. Écrire seulement « le code ne marche pas » oblige le modèle à deviner. Suis cet ordre :

  1. Quand une erreur de compilation apparaît dans l'Arduino IDE 2, clique sur Copier les messages d'erreur dans la notification en bas à droite, ou sélectionne et copie tout le texte de la console de sortie. La mention exit status 1 de la dernière ligne ne sert à rien seule ; la vraie cause se trouve plus haut, dans la ligne contenant error:.
  2. Ton prompt doit contenir, dans cet ordre : la carte et la version du noyau, le code complet, le message d'erreur complet, ainsi que le nom et la version des bibliothèques installées.
  3. Avant de demander la correction, écris « Explique d'abord la cause de l'erreur, puis montre seulement les lignes à modifier ». Ainsi, le modèle ne réécrit pas tout le croquis en ajoutant de nouvelles erreurs, et tu apprends ce qui change et pourquoi.
  4. Applique la modification proposée et recompile. Si une nouvelle erreur apparaît, colle de nouveau la première ligne error: ; corrige une seule erreur à la fois.
  5. Si la même erreur persiste après deux ou trois allers-retours, sors de la boucle et compile l'exemple officiel de la bibliothèque. Si l'exemple ne compile pas non plus, le problème ne vient pas du code mais de l'installation : mauvaise carte sélectionnée, bibliothèque manquante ou deux bibliothèques homonymes en conflit.

Si l'erreur survient au téléversement et non à la compilation (par exemple « avrdude: stk500_recv(): programmer is not responding » ou, sur l'ESP32, « Failed to connect to ESP32 »), modifier le code ne sert à rien ; il faut vérifier le port, le câble, le pilote et la carte sélectionnée. Le guide Arduino : le téléversement échoue t'accompagne pas à pas dans ces cas. Quand tu interroges l'IA sur une erreur de téléversement, donne aussi le message complet et ton système d'exploitation.

Faire écrire du code Raspberry Pi Pico et MicroPython par l'IA

Les mêmes règles s'appliquent au code MicroPython, mais ici l'IA peut en plus mélanger les plateformes. Le code écrit pour les ordinateurs Raspberry Pi avec RPi.GPIO ou gpiozero ne tourne pas sur le Pico ; sur le Pico, on utilise le module machine de MicroPython. Les modules board et digitalio de CircuitPython n'existent pas non plus dans MicroPython. Indique donc clairement dans ton prompt « Raspberry Pi Pico W, MicroPython, Thonny ». Le code ci-dessous fonctionne sur le Pico comme sur le Pico W et cadence le temps avec ticks_ms() au lieu d'attendre :

MicroPython
1# Pico ve Pico W: bekletmeden LED + buton / Pico and Pico W: LED + button without blocking
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT)             # Pico W'da Pin(25) çalışmaz / Pin(25) does not work on Pico W
6buton = Pin(14, Pin.IN, Pin.PULL_UP)  # buton: GP14 ile GND arası / button between GP14 and GND
7
8ARALIK = 500                          # LED değişim aralığı, ms / LED toggle interval, ms
9SICRAMA = 30                          # debounce süresi, ms / debounce time, ms
10son = time.ticks_ms()                 # LED'in son değiştiği an / last LED toggle
11degisim = time.ticks_ms()             # butonun son değiştiği an / last button change
12onceki = 1                            # önceki buton seviyesi / previous button level
13sayac = 0
14
15while True:
16    simdi = time.ticks_ms()
17    if time.ticks_diff(simdi, son) >= ARALIK:      # taşmada da doğru / correct even on overflow
18        son = simdi
19        led.toggle()
20    deger = buton.value()
21    if deger != onceki and time.ticks_diff(simdi, degisim) >= SICRAMA:
22        degisim = simdi
23        onceki = deger
24        if deger == 0:                # basıldığı an / moment of the press
25            sayac += 1
26            print("Basma / press:", sayac)

Quand tu lances le code dans Thonny, la LED intégrée clignote toutes les demi-secondes et chaque appui sur le bouton affiche un nombre croissant dans la fenêtre Shell. time.ticks_diff() donne le bon écart même quand le compteur de temps déborde, alors que la simple soustraction time.ticks_ms() - son, que l'IA écrit souvent, peut donner un résultat faux dans un code qui tourne longtemps. Si tu débutes avec le Pico, commence par Qu'est-ce que le Raspberry Pi Pico ?

Sur le secteur 230 V, ne fais pas confiance à l'IA

L'IA écrit en quelques secondes le code d'un relais qui commande une lampe, une prise ou un radiateur en 230 V, et décrit le câblage avec une assurance totale. Mais la tension du secteur peut tuer ; un mauvais branchement ou un fil mal serré provoque électrocution et incendie. Le modèle ne peut pas mesurer le câblage qu'il décrit, ne voit pas ton circuit et ne peut pas assumer la responsabilité du résultat. Ne réalise aucun branchement sur le secteur en te fiant uniquement aux instructions d'une IA ; si tu as moins de 18 ans, fais toujours ce travail avec un adulte ou une personne qui s'y connaît en électricité.

Si ton projet doit fonctionner sur le secteur, teste-le d'abord en basse tension : une LED à la place de la lampe, un ruban LED 12 V à la place de la prise. Si le système doit vraiment commuter du 230 V, certaines règles ne se discutent pas. Débranche le circuit avant de travailler dessus. Le relais doit couper la phase (L), pas le neutre. Ne dépasse pas le courant et la tension imprimés sur le module relais (10 A 250 VAC sur la plupart des modules) et place la partie haute tension dans un boîtier fermé et isolant. Les modules relais bon marché laissent souvent trop peu d'écart entre les parties basse et haute tension ; dans la mesure du possible, choisis une prise connectée ou un boîtier relais tout fait et certifié. Tu trouveras le branchement d'un module relais en détail dans Qu'est-ce qu'un module relais ?

Utiliser l'IA sans arrêter d'apprendre

Si l'IA écrit tous tes croquis à ta place, tu ne sauras pas quoi faire le premier jour où le code ne marchera pas. Si ton but est d'apprendre l'électronique et la programmation, utilise-la non pas comme une machine à code, mais comme un professeur patient :

  • Écris d'abord toi-même : Essaie le code par toi-même, puis demande à l'IA de le relire avec « montre-moi les erreurs mais ne me donne pas le code corrigé ».
  • Demande des indices, pas des réponses : Quand tu bloques, dis « donne-moi seulement un indice pour l'étape suivante ».
  • Fais-toi expliquer ligne par ligne : Après l'explication, essaie de raconter la même logique avec tes propres mots ; ce que tu n'arrives pas à expliquer, tu ne l'as pas encore appris.
  • Tape au lieu de copier : Taper le code à la main au lieu de le coller t'apprend la syntaxe et les noms de fonctions bien plus vite.
  • Prédis, puis teste : Avant de changer une valeur, prédis ce qui va se passer (par exemple si LED_ARALIK passe à 200), puis téléverse et vérifie.
  • Teste-toi : Demande à l'IA de te poser cinq questions sur ce que tu viens d'apprendre ; pour revoir les bases, utilise les bases de la programmation Arduino.
  • Respecte les règles : Pour les devoirs, les projets scolaires et les concours scientifiques, respecte les règles sur l'usage de l'IA et indique clairement si tu t'en es servi.

Premiers projets à essayer avec l'IA

  • Afficheur de température : Affiche les mesures d'un DHT11 sur un écran LCD I2C ; précise dans le prompt l'adresse du LCD et l'auteur de la bibliothèque.
  • Radar de recul : Mesure la distance avec un HC-SR04 et fais biper le buzzer plus vite à mesure qu'un obstacle approche ; demande une gestion du temps avec millis().
  • Veilleuse : Allume une LED quand il fait sombre grâce à une LDR ; relève d'abord le seuil dans le moniteur série et donne-le en chiffres dans le prompt.
  • LED pilotée en Wi-Fi : Allume et éteins une LED depuis une page ouverte sur ton téléphone avec un ESP32 ; précise la version du noyau dans le prompt.
  • Ta propre idée : Choisis un projet dans la liste d'idées de projets Arduino et décris-le à l'IA avec le modèle de prompt de ce guide.

L'IA peut être l'aide la plus rapide à ta disposition pendant que tu apprends Arduino, à condition de lui donner les bonnes informations, de compiler ce qu'elle te renvoie, de vérifier les broches, de tester morceau par morceau et de ne jamais téléverser une ligne que tu ne comprends pas. Si tu cherches des exemples fiables pour comparer le code écrit par l'IA, l'application BlueGrays propose des projets avec LED, bouton, DHT11, PWM sur ESP32 et Pico, avec des schémas de câblage pas à pas et du code testé.

Questions fréquentes

L'IA peut-elle écrire du code Arduino ?

Oui. Des assistants comme ChatGPT, Gemini, Claude et Copilot peuvent produire du code fonctionnel pour la plupart des projets simples sur Arduino, ESP32 et Raspberry Pi Pico. Avant de le téléverser, tu dois toutefois le compiler et vérifier toi-même les broches, les bibliothèques et les niveaux de tension ; l'IA ne voit pas ton circuit et peut se tromper.

Quelle est la meilleure IA pour coder sur Arduino ?

Il n'y a pas de réponse unique ; les grands modèles actuels donnent des résultats proches pour du code Arduino simple. La différence vient surtout du prompt plutôt que du modèle : un prompt qui précise clairement la carte, les branchements, les bibliothèques et le comportement attendu donne un meilleur code, quel que soit l'assistant.

Pourquoi le code Arduino de ChatGPT ne fonctionne-t-il pas ?

Les causes les plus fréquentes sont des fonctions qui n'existent pas ou qui appartiennent à une autre carte, un code écrit pour une autre version de bibliothèque, de mauvaises broches et des delay() qui bloquent tout. Compile d'abord le code ; en cas d'erreur, colle le message complet avec la carte et les versions. S'il compile mais ne fonctionne pas, affiche des valeurs intermédiaires dans le moniteur série pour localiser le problème.

Comment demander à l'IA de corriger une erreur de compilation Arduino ?

Donne dans un seul message le nom de la carte, les versions du noyau et des bibliothèques, le code complet et le message d'erreur complet de la console. Si tu ajoutes « explique d'abord la cause, puis montre seulement les lignes à modifier », tu obtiens la bonne correction et tu comprends pourquoi l'erreur s'est produite.

Peut-on faire confiance à l'IA pour câbler un relais sur le 230 V ?

Non, pas seule. Le code est généralement correct, mais le danger se trouve dans le câblage ; l'IA ne voit pas ton circuit et ne peut pas garantir que ses instructions sont justes. Ne câble la partie secteur qu'avec une personne compétente, prise débranchée, avec un montage qui coupe la phase et se trouve dans un boîtier fermé ; si possible, utilise une prise connectée certifiée.

Utiliser l'IA nuit-il à l'apprentissage d'Arduino ?

Si tu copies du code sans le comprendre, oui ; à la première erreur, tu ne sauras pas quoi faire. Si tu écris d'abord le code toi-même et que tu demandes à l'IA de le relire, de l'expliquer ligne par ligne et de te donner des indices plutôt que des réponses, elle accélère l'apprentissage. La règle est simple : ne téléverse aucune ligne que tu ne sais pas expliquer.

Voir tous les projets
Clignotement d'une LED
#1Débutant

Clignotement d'une LED

Le tout premier bonjour de l'électronique : allumer et éteindre une seule LED. L'Arduino allume et éteint la LED à intervalles très courts, la lumière clignote donc rapidement. Tu vois de la façon la

4.6(188)
1127
Allumer une LED avec un bouton-poussoir (Push)
#9Débutant

Allumer une LED avec un bouton-poussoir (Push)

Comme une sonnette : la lumière reste allumée tant que tu appuies et s'éteint quand tu relâches. L'Arduino surveille le bouton en permanence ; tant qu'il est enfoncé la LED est allumée, et dès que tu

4.8(113)
229
Température et humidité avec DHT11
#55Intermédiaire

Température et humidité avec DHT11

Quelle température fait-il dans ta chambre, et l'air est-il humide ou sec ? Le capteur DHT11 mesure la température et l'humidité, et l'Arduino affiche les valeurs sur un écran LCD à deux lignes, mises

4.7(47)
73
Clignotement LED avec ESP32
#103Débutant

Clignotement LED avec ESP32

Enseigne l'utilisation de base des sorties GPIO avec l'ESP32. Nous obtenons un effet de clignotement en allumant et éteignant une LED à partir de la broche numérique. Version ESP32 du projet blink classique sur Arduino UNO ; les commandes de base de blink dans l'environnement Arduino restent les mêmes, mais le brochage et les niveaux GPIO de 3,3 V de l'ESP32 diffèrent de ceux de l'Arduino UNO.

4.7(37)
99
Clignotement LED Intégrée Raspberry Pi Pico (Pico et Pico W)
#147Débutant

Clignotement LED Intégrée Raspberry Pi Pico (Pico et Pico W)

Le projet d'ouverture de la série Raspberry Pi Pico ! Nous faisons clignoter la LED verte intégrée pour vérifier que la carte fonctionne — une première expérience classique "Hello World". AUCUN composant externe, juste Pico et câble USB. Le code est écrit en MicroPython (le langage officiellement soutenu par la Raspberry Pi Foundation). Apprends la classe machine.Pin, le mode Pin.OUT, les méthodes led.on()/off() et time.sleep() dans Thonny IDE. Suis chaque basc

5.0(1)
10
ESP32 LED Fade avec PWM
#110Débutant

ESP32 LED Fade avec PWM

Modifiez la luminosité de la LED en douceur de 0 à max, de max à 0. Nous contrôlons le PWM avec analogWrite() comme dans Arduino - la même syntaxe avec ESP32 Arduino Core 3.0+ fonctionne sans problème. La définition du pin + pinMode + analogWrite est suffisante.

4.8(36)
54
Raspberry Pi Pico PWM LED Fade (Effet Respiration)
#160Débutant

Raspberry Pi Pico PWM LED Fade (Effet Respiration)

La LED ne clignote plus — elle respire ! Grâce au PWM (modulation de largeur d'impulsion) du Raspberry Pi Pico, la luminosité monte puis descend lentement. Apprends la classe machine.PWM, duty_u16() (luminosité 16 bits 0–65535), la fréquence PWM, les boucles range() et la sortie quasi analogique. Base du mélange de couleurs RGB, du contrôle moteur, des servos et du buzzer.

0.0(0)
4
Utilisation de l'écran LCD avec I2C
#32Débutant
Premium

Utilisation de l'écran LCD avec I2C

Offre un écran à ton Arduino et fais-lui écrire son premier message. L'écran LCD à deux lignes se branche avec seulement quelques fils ; un bonjour s'affiche sur la ligne du haut, puis un deuxième tex

4.8(53)
70