Mòdul M0 · Primers passos · M0·1 · classe 1 de 22 dels mòduls
Hola món amb l'Arduino IDE
Instal·les les eines, fas parpellejar el LED de la placa i la fas parlar pel monitor sèrie.
- Bloqueja 1 h 45
- Freenove WROVER
- Per començar
📅 Afegeix-la a l'agenda
S'obre amb el Calendari del Mac, Google Calendar o Outlook. Dura 1 h 45.
El vídeo
Llegeix la transcripció
Són les tres de la matinada. A l'oficina, l'armari dels servidors s'escalfa… i no hi ha ningú per veure-ho. Al final d'aquest curs, el vigilarà això: un ESP32. Un microcontrolador: un ordinador sencer dins d'un xip.
Però avui comencem pel principi: el hola món de l'electrònica. Fer parpellejar un llum. Ho escrivim a l'Arduino IDE. Tot programa té dues parts. setup s'executa una sola vegada, quan la placa s'engega. I loop es repeteix per sempre: encén el llum, espera un segon, apaga'l, espera. I torna a començar.
Quan prems Pujar, l'ordinador tradueix el codi al llenguatge del xip, i l'hi envia pel cable USB. I el llum parpelleja. Pel monitor sèrie, la placa ens saluda: Hola, sóc l'ESP32! Primera classe, feta. Avui, un llum que parpelleja. Al final del curs, una oficina que es vigila sola.
Abans de seguir: si la placa està engegada 10 segons, quantes vegades s'executa setup()? I el cos de loop(), si cada volta dura 2 segons?
Mostra la resposta
setup(), una sola vegada, en engegar-se. loop(), unes 5 vegades (10 s ÷ 2 s), i continuaria per sempre.
Prepara
Tingues-ho a sobre la taula abans de començar. Ve tot del kit de Freenove.
A cada classe, el material que ja has fet servir abans portarà la marca ja el tens · M0·1.
Escalfament
És la primera classe i no hi ha res a repassar. Aquestes quatre preguntes només escalfen: pensa la resposta abans de mirar-la. A partir de la M0·2, aquí hi haurà el repàs de la classe anterior, sense apunts.
-
L'ESP32 i el teu ordinador tenen tots dos un processador i memòria. Quina diferència important creus que hi ha?
L'ESP32 no té un sistema operatiu com macOS: quan s'engega, executa el teu programa i prou. Gasta molt poc i té pins per connectar-hi sensors, llums i botons.
-
Si un programa diu «encén el LED, espera 1 s, apaga'l, espera 1 s» i es repeteix, quantes vegades parpellejarà en un minut?
30 vegades. Cada volta dura 2 segons (1 encès + 1 apagat), i 60 ÷ 2 = 30.
-
Per què creus que per programar la placa no serveix qualsevol cable USB?
Alguns cables només porten corrent, per carregar. Per pujar el programa, l'ordinador ha d'enviar dades a la placa, i necessita els fils de dades.
-
Analògic o digital? Un termòmetre de mercuri, l'interruptor de la llum, el volum d'una ràdio i un polsador.
El termòmetre i el volum són analògics: poden prendre qualsevol valor. L'interruptor i el polsador són digitals: només tenen dos estats, encès o apagat. A la teoria veuràs per què això importa.
Teoria
Zeros i uns
Un senyal analògic pot prendre qualsevol valor: la temperatura, el volum d'una ràdio. Un de digital només en té dos, 0 i 1. A l'ESP32, un 1 vol dir 3,3 V i un 0 vol dir 0 V.
Un bit és un sol 0 o 1. Un byte són 8 bits, i permet 256 combinacions. Tot el que fa un microcontrolador, al final, és llegir i escriure zeros i uns, molt de pressa.
Què és un microcontrolador
Un microcontrolador és un ordinador petit dins d'un sol xip: processador, memòria i entrades i sortides. No té pantalla ni teclat, i fa una sola feina, la que li programes, sempre que estigui endollat.
La seva feina és llegir, decidir i actuar, milers de vegades per segon. Al Monitor Oficina, les entrades seran els sensors de temperatura i el detector de llum, i les sortides, un LED, un brunzidor, una pantalla i els missatges de Telegram.
L'ESP32 és un microcontrolador d'Espressif amb WiFi i Bluetooth. Per això el triem: més endavant haurà d'enviar avisos per internet.
La família ESP32
«ESP32» és el nom d'una família de xips. En aquest curs en fem servir dos: el clàssic per aprendre i l'S3 per al projecte.
| Xip | Nuclis | Ràdio | Per a què |
|---|---|---|---|
| ESP32 (clàssic) | 2 | WiFi + Bluetooth | El de la placa WROVER: mòduls M0–M4 |
| ESP32-S2 | 1 | WiFi | Sense Bluetooth |
| ESP32-S3 | 2 | WiFi + Bluetooth LE 5 | El de l'oficina: del mòdul M5 en endavant |
| ESP32-C3 | 1 | WiFi + Bluetooth LE 5 | Petit i barat |
| ESP32-C6 | 1 | WiFi 6 + Bluetooth LE + Zigbee/Thread | Domòtica |
| ESP32-H2 | 1 | Bluetooth LE + Zigbee/Thread | Sense WiFi |
La placa per dins
La placa del kit, la Freenove WROVER, porta l'ESP32 (sota la tapa metàl·lica, amb l'antena), un connector USB, un xip CH340 que tradueix entre l'USB i l'ESP32, un regulador que converteix els 5 V de l'USB en 3,3 V, un LED i dos botons:
- EN reinicia la placa: el programa torna a començar.
- BOOT connecta el GPIO 0 a terra. Si en arrencar el GPIO 0 és a 0, la placa espera un programa nou; si és a 1, executa el que ja té. Per això, si la pujada falla, mantenir BOOT la posa en mode de càrrega.
On viu cada cosa
La flash és la biblioteca: hi queda el programa encara que desendollis la placa. La SRAM és l'escriptori: molt ràpida, però s'esborra quan s'apaga. La PSRAM és una taula auxiliar més gran, a fora del xip. A més, hi ha una ROM de fàbrica que no s'esborra mai (per això sempre es pot tornar a programar la placa) i una petita memòria que sobreviu quan l'ESP32 dorm.
Com arriba el programa a la placa
- 1Escrius el codi a l'Arduino IDE
- 2Compila: el tradueix al llenguatge del xip (un fitxer binari)
- 3Puja: l'envia pel cable USB
- 4La placa es reinicia i l'executa
El programa queda desat a la placa: si la desendolles i la tornes a endollar, torna a començar sol, sense l'ordinador.
setup() i loop()
Tot programa d'Arduino té aquestes dues parts. setup() s'executa una vegada, quan la placa s'engega: és preparar la motxilla. loop() es repeteix per sempre: és la rutina de cada dia, la feina de la placa.
🧮 Càlcul ràpid
Amb paper i llapis. Pensa la resposta abans de mirar-la.
-
El LED està 500 ms encès i 500 ms apagat. Quantes pampallugues fa per segon?
1 per segon (1 Hz): cada cicle complet dura 500 + 500 = 1.000 ms = 1 s.
-
I a l'inrevés: per fer 5 pampallugues per segon, quin
delay()hi has de posar?100 ms encès i 100 ms apagat: cada pampallugues dura 200 ms, i 5 × 200 ms = 1 s.
C++ d'avui
- Una funció
- Un bloc de codi amb nom. Les instruccions van entre
{i}.void setup() { // el que hi ha aquí s'executa una vegada } - El punt i coma
- Cada instrucció acaba amb
;. Si te'n deixes un, el programa no compila. - Comentaris
- Tot el que va després de
//és per a les persones: la placa no ho llegeix. delay(ms)- Espera. Els temps són en mil·lisegons:
delay(1000)és un segon. Serial.println("…")- Escriu un text al monitor sèrie i salta de línia.
Instal·la i connecta
-
https://espressif.github.io/arduino-esp32/package_esp32_index.json
No hi és? Mira «No apareix cap port nou» a l'apartat de problemes.
Què farem servir de la placa
| Element | Pin | Cable | Nota |
|---|---|---|---|
| LED de la placa | GPIO 2 | Cap: ja és a la placa | sortida |
| Botó EN | — | — | Reinicia la placa: el programa torna a començar |
| Botó BOOT | GPIO 0 | — | Només si la pujada falla (vegeu els problemes) |
Codi
Obre File → New Sketch, esborra el que hi ha i escriu-ho tu (millor que copiar-ho: així t'hi fixes). Desa'l com a hola-mon.
// M0·1 · Hola món
// Fa parpellejar el LED de la placa i saluda pel monitor sèrie.
void setup() {
pinMode(2, OUTPUT); // el pin 2 (el LED) serà una sortida
Serial.begin(115200); // obre el monitor sèrie a 115200 baud
}
void loop() {
digitalWrite(2, HIGH); // encén el LED
Serial.println("Hola, sóc l'ESP32");
delay(1000); // espera 1 segon
digitalWrite(2, LOW); // apaga el LED
delay(1000); // espera 1 segon
}
Hola, sóc l'ESP32 Hola, sóc l'ESP32 Hola, sóc l'ESP32
Una línia cada 2 segons. Si prems EN, abans pot sortir text del sistema (ets Jun 8 2016…, rst:0x1…): és normal.
Com funciona, línia a línia
- Línies 1–2
- Comentaris: expliquen què fa el programa.
- Línia 5
pinMode(2, OUTPUT)diu que pel pin 2 hi farem sortir corrent. El LED de la placa hi està connectat.- Línia 6
Serial.begin(115200)engega la comunicació amb l'ordinador. El 115200 és la velocitat: el monitor sèrie ha d'estar a la mateixa.- Línia 10
digitalWrite(2, HIGH)posa el pin a 3,3 V: el LED s'encén.- Línia 11
- Escriu la salutació. Va dins de
loop()perquè la vegis encara que obris el monitor tard. - Línies 12–14
- Espera, apaga (
LOW= 0 V) i torna a esperar. Després,loop()torna a començar.
Has acabat quan…
Si no funciona…
No apareix cap port nou a Tools → Port
Mira: el LED vermell de la placa, encès? Si no, prova un altre port USB de l'ordinador.
Solució: canvia de cable (el més habitual). Si encara no surt, cal el driver CH340, el xip USB de la placa: segueix el PDF de resolució de problemes de Freenove, instal·la'l i reinicia l'ordinador.
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
Què passa: la placa no ha entrat en mode de pujada.
Solució: torna a prémer Upload i, quan a baix surti Connecting…, mantén premut el botó BOOT fins que comenci a escriure percentatges.
El monitor sèrie mostra caràcters estranys (⸮⸮⸮)
Solució: la velocitat no coincideix. Tria 115200 baud a baix a la dreta del monitor sèrie.
Could not open /dev/cu.usbserial-…, the port is busy or doesn't exist
Solució: una altra finestra fa servir el port. Tanca el monitor sèrie (o l'altra finestra de l'Arduino IDE) i torna a pujar.
expected ';' before '}' token
Què passa: falta un ; al final d'una instrucció. L'error assenyala la línia següent a la que el necessita.
Cap d'aquests? Mira la 🆘 xuleta: hi ha més errors i un arbre per trobar on falla.
Repte
Fes que el LED faci SOS en Morse (3 curtes, 3 llargues, 3 curtes) i que el monitor sèrie escrigui «SOS» cada vegada.
Fes-lo tu sol, sense ajuda. Encallar-se una estona és part de l'exercici: és quan s'aprèn. Uns 10 minuts.
Pista 1
En Morse, un punt dura 1 unitat i una ratlla en dura 3. Prova amb una unitat de 200 ms.
Pista 2
Entre senyals de la mateixa lletra, el LED està apagat 1 unitat. Entre lletres, 3. Abans de tornar a començar, 7.
Pista 3
No cal res nou: només digitalWrite, delay i Serial.println. Pots copiar el bloc «encén, espera, apaga, espera» nou vegades i canviar-ne els temps.
Solució
Una manera de fer-ho, creant dues funcions pròpies, punt() i ratlla(), com setup() i loop(). Si has copiat el bloc nou vegades, també està bé.
void punt() {
digitalWrite(2, HIGH);
delay(200);
digitalWrite(2, LOW);
delay(200);
}
void ratlla() {
digitalWrite(2, HIGH);
delay(600);
digitalWrite(2, LOW);
delay(200);
}
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("SOS");
punt(); punt(); punt();
delay(400); // entre lletres: 3 unitats (ja n'hem esperat 1)
ratlla(); ratlla(); ratlla();
delay(400);
punt(); punt(); punt();
delay(1200); // abans de repetir: 7 unitats
}
Tancament
Idea clau
Escriu la teva frase per veure la del curs
El programa fasetup()una sola vegada i després repeteixloop()per sempre.
Si la teva diu el mateix amb altres paraules, ho has entès.
- L'ESP32 és un microcontrolador: un ordinador petit que executa un sol programa.
- Un programa d'Arduino té dues funcions:
setup()s'executa una vegada iloop()es repeteix per sempre. - Pujar vol dir compilar el codi a binari i enviar-lo a la placa per un cable USB de dades.
digitalWrite(2, HIGH)iLOWencenen i apaguen el LED, idelay()espera en mil·lisegons.Serial.println()escriu al monitor sèrie, que ha d'estar a la mateixa velocitat (115200).