Per tenir oberta a totes les classes
🆘 Xuleta
Quan alguna cosa no funciona: primer busca el símptoma a la taula. Si no hi és, segueix l'arbre de diagnosi pas a pas.
- Errors en compilar o pujar
- Errors quan ja funciona
- Arbre de diagnosi
- Pins del WROVER
- Pins de l'S3
- Del WROVER a l'S3
Si veus… en compilar o pujar
| Si veus… | Probablement… | Prova… |
|---|---|---|
No surt cap port /dev/cu.… | El cable només és de càrrega, o falta el driver | Un altre cable USB, de dades. Al WROVER, el driver CH340 |
| No surt cap port, i el driver CH340 ja està instal·lat (macOS Sequoia o posterior) | El driver està instal·lat però no activat | *Configuració del Sistema › General › Ítems d'inici i extensions*: activa'l. El port es diu /dev/cu.wchusbserial… (M0·1) |
Failed to connect · Timed out waiting for packet header | La placa no ha entrat en mode de càrrega | Mantén premut BOOT, prem i deixa anar EN, i deixa anar BOOT quan comenci a pujar |
| Al Mac, la pujada falla a mig camí (WROVER) | Velocitat de pujada massa alta per al CH340 | *Eines › Upload Speed* a 115200 |
Sketch too big · text section exceeds available space | El programa no cap a la partició per defecte (passa amb la càmera i el Bluetooth) | *Eines › Partition Scheme* › Huge APP (M6·4) |
port is busy · Resource busy | El monitor sèrie encara té el port obert | Tanca el monitor (Ctrl+C) i torna a pujar |
expected ';' before … | Falta un ; | Mira la línia anterior a la que diu l'error |
'xxx' was not declared in this scope | Un nom mal escrit, o falta un #include o una llibreria | Revisa majúscules i minúscules. Si és d'una llibreria, comprova que està instal·lada |
'ledcSetup' was not declared (o ledcAttachPin) | Codi d'un tutorial antic (paquet ESP32 2.x) | Fes servir ledcAttach(pin, freq, bits) i ledcWrite(pin, duty) (M3·1) |
| Molts errors seguits | Normalment només n'hi ha un de debò | Arregla el primer i torna a compilar |
Si veus… quan ja funciona
| Si veus… | Probablement… | Prova… |
|---|---|---|
| Monitor sèrie buit (S3) | Falta CDCOnBoot=cdc, o el cable és al port que no toca | Revisa la configuració de la placa de la M5·1. Prova l'altre port USB-C |
Caràcters estranys ⸮⸮⸮ | El monitor i el programa van a velocitats diferents | Tots dos a 115200 |
| Es reinicia en bucle (S3), amb errors de PSRAM | Tipus de PSRAM mal triat | PSRAM=opi a la configuració de la placa (M5·1) |
Brownout detector was triggered | Li falta corrent (sobretot quan el WiFi transmet) | Un altre cable, o un port USB o una font de 500 mA o més, sense hub. No alimentis motors des de la placa |
Guru Meditation Error | El programa ha fet alguna cosa prohibida (memòria, divisió per zero…) | Copia el missatge sencer i mira'l amb ajuda |
| L'escàner I2C no troba res | Cablejat, alimentació o pins | SDA i SCL no estan creuats? GND connectat? 3,3 V? Els pins del Wire.begin() són els bons? Les soldadures? |
El sensor dona nan o valors absurds | La lectura ha fallat, o el llegeixes massa sovint | Revisa el cablejat i l'adreça. El DHT11 només admet 1 lectura per segon (el DHT22, 1 cada 2 s). Comprova sempre isnan() |
| L'OLED no mostra res, però l'escàner la troba (0x3C) | Falta enviar el dibuix a la pantalla | Crida display.display() després de dibuixar |
Un if es compleix sempre | Has escrit = (assignar) en lloc de == (comparar) | if (estat == HIGH) |
| El polsador funciona al revés | Amb INPUT_PULLUP, premut = LOW | És normal: compara amb LOW (M2·1) |
| Una entrada canvia sola | Pin flotant (a l'aire) | INPUT_PULLUP, o una resistència de pull-up o pull-down |
analogRead() sempre 0 o 4095 | Pin equivocat o cable fluix | És un pin de l'ADC1? Mesura la tensió amb el multímetre (M2·2) |
analogRead() deixa de funcionar amb WiFi | És un pin de l'ADC2 | Canvia'l a un de l'ADC1 (taula de pins) |
| El LED no s'encén | Al revés, sense GND o pin equivocat | Pota llarga al pin. Comprova pinMode() i el número de pin (M1·1) |
| Un pin no fa res, o la placa no arrenca amb el muntatge | Pin reservat o d'arrencada | Mira la taula de pins i canvia de pin |
| No connecta al WiFi | Xarxa de 5 GHz, contrasenya o distància | Xarxa de 2,4 GHz. Revisa secrets.h. Mira la força del senyal, l'RSSI (M6·1) |
Camera init failed (WROVER) | Hi ha alguna cosa connectada als pins de la càmera, o falta la PSRAM | Desconnecta-ho tot de la placa i comprova que la PSRAM està activada (M6·4) |
| Es penja i no fa res més | Un while o un delay() espera per sempre | Busca bucles sense límit de temps |
Arbre de diagnosi
Quan un muntatge no funciona i la taula no ho resol, descarta per ordre, del més simple al més complicat. No passis al pas següent fins que l'anterior estigui comprovat.
- Alimentació. La placa té el LED encès? El mòdul rep 3,3 V? (multímetre)Si no: cable, port USB, pins 3V3 i GND.
- GND comú. Tots els GND estan units?Si no: uneix-los.
- Cablejat. Coincideix amb l'esquema, cable a cable? Prova la continuïtat amb el multímetre.Si no: refés el cable o la soldadura.
- El mòdul sol. Funciona amb un programa d'exemple mínim, sense res més connectat?Si no: mòdul espatllat, adreça o pin equivocats.
- El programa. Posa un
Serial.println()a cada pas per veure on es para.
Eines: el multímetre (tensions i continuïtat), el monitor sèrie, un LED de prova i l'escàner I2C.
Pins del Freenove WROVER mòduls M0–M4 i la càmera (M6·4)
| Pins | Per què | |
|---|---|---|
| ⚡ Alimentació | 3V3 · 5V · GND | 3V3: per als sensors. 5V: els 5 V de l'USB, per a un servo o un mòdul de 5 V, però mai cap a un GPIO. GND: el comú de tot |
| ✅ Segurs | 4, 13, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 | Per a LEDs, polsadors i sensors. Amb la càmera posada (M6·4) només en queden lliures el 13, el 32 i el 33 |
| 🔵 Només d'entrada | 34, 35, 36, 39 | No poden encendre res i no tenen pull-up interna (cal una resistència externa) |
| 📈 ADC1 | 32–39 | Per a sensors analògics, també amb WiFi |
| 📉 ADC2 | 0, 2, 4, 12–15, 25–27 | No funcionen amb el WiFi encès |
| 🟡 Amb compte | 0, 2, 5, 12, 14, 15 | Decideixen com arrenca la placa (pins d'arrencada). El 12 a 1 en arrencar impedeix l'arrencada. El 2 té el LED blau |
| ⛔ No tocar | 6–11 | Són de la memòria flash |
| ⛔ No tocar | 16, 17 | Al WROVER els fa servir la PSRAM |
| ⛔ No tocar | 1, 3 | Són el cable USB (TX i RX del monitor sèrie) |
| 📷 Càmera | 4, 5, 18, 19, 21, 22, 23, 25, 26, 27, 34, 35, 36, 39 | Només si fas servir la càmera (M6·4): llavors estan ocupats. Font: tutorial de Freenove, «Notes for GPIO» |
Pins de l'ESP32-S3 DevKitC-1 N16R8 del M5 en endavant
| Pins | Per què | |
|---|---|---|
| ✅ Segurs | 1, 2, 4–18, 21, 39–42, 47 | Per a tot. 8 (SDA) i 9 (SCL) són els de l'I2C per defecte |
| 📈 ADC1 | 1–10 | Per a sensors analògics, també amb WiFi |
| 📉 ADC2 | 11–20 | Millor evitar-los per a lectures analògiques amb WiFi |
| 👆 Tàctils | 1–14 | El valor puja quan toques |
| 🌈 LED RGB de la placa | 48 (o 38) | Depèn de la versió: comprova-ho amb un Blink abans de fer-lo servir |
| 🟡 Amb compte | 0, 3, 45, 46 | Decideixen com arrenca la placa (pins d'arrencada). El 0 és el botó BOOT |
| ⛔ No tocar | 19, 20 | Són l'USB natiu |
| ⛔ No tocar | 43, 44 | Són el port USB-UART (monitor sèrie) |
| ⛔ No tocar | 35, 36, 37 | Els fa servir la PSRAM octal (i del 26 al 32, la flash: no surten a la placa) |
Del WROVER a l'S3
| WROVER (ESP32 clàssic) | ESP32-S3 | |
|---|---|---|
| Processador | 2 nuclis Xtensa LX6, 240 MHz | 2 nuclis Xtensa LX7 (més nous), 240 MHz |
| Memòria | 4 MB flash + 8 MB PSRAM | 16 MB flash + 8 MB PSRAM octal |
| USB | Un port, amb xip CH340 | Dos ports: USB natiu + USB-UART |
| Monitor sèrie | Funciona sense res especial | Cal CDCOnBoot=cdc amb el port natiu |
| I2C per defecte | SDA 21, SCL 22 | SDA 8, SCL 9 (escriu-los sempre a Wire.begin()) |
| Pins d'arrencada | 0, 2, 5, 12, 15 | 0, 3, 45, 46 |
| Pins només d'entrada | 34–39 | Cap |
| ADC1 | 32–39 | 1–10 |
| Sortida analògica real (DAC) | Sí (25 i 26) | No |
| Canals PWM | 16 | 8 |
| Tàctil | El valor baixa quan toques | El valor puja quan toques |
| Bluetooth | Clàssic + BLE 4.2 | Només BLE 5 |
| LED de la placa | Blau, GPIO 2 | RGB adreçable, GPIO 48 o 38 |
Si alguna dada no quadra amb el que veus a la teva placa, mana la placa. Apunta-ho i corregim la xuleta.