Aventura sense fil ESP32-C3

Aventura sense fil ESP32-C3

Una guia completa per a IoT

Espressif Systems 12 de juny de 2023

Especificacions

  • Producte: ESP32-C3 Wireless Adventure
  • Fabricant: Espressif Systems
  • Data: 12 de juny de 2023

Instruccions d'ús del producte

Preparació

Abans d'utilitzar l'ESP32-C3 Wireless Adventure, assegureu-vos que ho feu
familiaritzat amb els conceptes i l'arquitectura de IoT. Això ajudarà
enteneu com el dispositiu s'adapta a l'ecosistema IoT més gran
i les seves possibles aplicacions a les cases intel·ligents.

Introducció i pràctica de projectes IoT

En aquesta secció, coneixeràs els projectes típics d'IoT,
inclosos els mòduls bàsics per a dispositius IoT comuns, mòduls bàsics
d'aplicacions client i plataformes comunes d'IoT al núvol. Aquesta voluntat
proporcionar-vos una base per entendre i crear el vostre
projectes propis d'IoT.

Pràctica: Projecte Smart Light

En aquest projecte de pràctica, aprendràs a crear un smart
llum amb l'ESP32-C3 Wireless Adventure. L'estructura del projecte,
funcions, preparació de maquinari i procés de desenvolupament
explicat amb detall.

Estructura del projecte

El projecte consta de diversos components, inclòs el
ESP32-C3 Wireless Adventure, LED, sensors i un núvol
backend.

Funcions del projecte

El projecte de llum intel·ligent permet controlar la brillantor i
color dels LED a distància mitjançant una aplicació mòbil o web
interfície.

Preparació de maquinari

Per preparar el projecte, haureu de reunir el
components de maquinari necessaris, com l'ESP32-C3 Wireless
Placa d'aventura, LED, resistències i font d'alimentació.

Procés de desenvolupament

El procés de desenvolupament implica configurar el desenvolupament
entorn, escrivint codi per controlar els LED, connectar-se al
backend del núvol i provant la funcionalitat de l'intel·ligent
llum.

Introducció a ESP RainMaker

ESP RainMaker és un marc potent per desenvolupar IoT
dispositius. En aquesta secció, aprendràs què és ESP RainMaker i
com es pot implementar en els vostres projectes.

Què és ESP RainMaker?

ESP RainMaker és una plataforma basada en núvol que proporciona un conjunt de
eines i serveis per crear i gestionar dispositius IoT.

La implementació d'ESP RainMaker

En aquesta secció s'expliquen els diferents components que hi intervenen
implementant ESP RainMaker, inclòs el servei de reclamació,
Agent RainMaker, backend del núvol i client RainMaker.

Pràctica: Punts clau per desenvolupar amb ESP RainMaker

En aquesta secció de pràctiques, coneixeràs els punts clau
tenir en compte a l'hora de desenvolupar amb ESP RainMaker. Això inclou el dispositiu
reclamació, sincronització de dades i gestió d'usuaris.

Característiques d'ESP RainMaker

ESP RainMaker ofereix diverses funcions per a la gestió d'usuaris, final
usuaris i administradors. Aquestes característiques permeten un dispositiu fàcil
configuració, control remot i supervisió.

Configuració de l'entorn de desenvolupament

Aquesta secció ofereix un finalview d'ESP-IDF (Espressif IoT
marc de desenvolupament), que és el marc oficial de desenvolupament
per a dispositius basats en ESP32. Explica les diferents versions de
ESP-IDF i com configurar l'entorn de desenvolupament.

Desenvolupament de maquinari i controladors

Disseny de maquinari de productes Smart Light basat en ESP32-C3

Aquesta secció se centra en el disseny de maquinari de llum intel·ligent
productes basats en l'ESP32-C3 Wireless Adventure. Cobreix el
característiques i composició dels productes de llum intel·ligent, així com el
disseny de maquinari del sistema central ESP32-C3.

Característiques i composició dels productes Smart Light

Aquesta subsecció explica les característiques i components que fan
productes de llum intel·ligent. Es parla de les diferents funcionalitats
i consideracions de disseny per crear llums intel·ligents.

Disseny de maquinari del sistema central ESP32-C3

El disseny de maquinari del sistema central ESP32-C3 inclou potència
subministrament, seqüència d'engegada, restabliment del sistema, flaix SPI, font del rellotge,
i consideracions de RF i antena. Aquest subapartat preveu
informació detallada sobre aquests aspectes.

Preguntes freqüents

P: Què és ESP RainMaker?

R: ESP RainMaker és una plataforma basada en núvol que proporciona eines
i serveis per construir i gestionar dispositius IoT. Simplifica
el procés de desenvolupament i permet una fàcil configuració del dispositiu, a distància
control i seguiment.

P: Com puc configurar l'entorn de desenvolupament per?
ESP32-C3?

R: Per configurar l'entorn de desenvolupament per a ESP32-C3, necessiteu
instal·lar ESP-IDF (Espressif IoT Development Framework) i
configureu-lo segons les instruccions proporcionades. ESP-IDF és el
marc oficial de desenvolupament per a dispositius basats en ESP32.

P: Quines són les característiques d'ESP RainMaker?

R: ESP RainMaker ofereix diverses funcions, inclòs l'usuari
gestió, funcions d'usuari final i funcions d'administració. Gestió d'usuaris
permet una fàcil reclamació del dispositiu i sincronització de dades. Usuari final
Les funcions permeten el control remot dels dispositius mitjançant una aplicació mòbil o
web interfície. Les funcions d'administració proporcionen eines per al seguiment del dispositiu
i gestió.

Aventura sense fil ESP32-C3
Una guia completa per a IoT
Espressif Systems 12 de juny de 2023

Continguts

I Preparació

1

1 Introducció a IoT

3

1.1 Arquitectura de IoT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Aplicació IoT a les cases intel·ligents . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Introducció i pràctica dels projectes IoT

9

2.1 Introducció als projectes típics d'IoT . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1 Mòduls bàsics per a dispositius IoT comuns . . . . . . . . . . . . . . . . . 9

2.1.2 Mòduls bàsics d'aplicacions client . . . . . . . . . . . . . . . . . . . 10

2.1.3 Introducció a les plataformes comunes del núvol IoT . . . . . . . . . . . . . . 11

2.2 Pràctica: Projecte Smart Light . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2.1 Estructura del projecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.2 Funcions del projecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.3 Preparació del maquinari . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.2.4 Procés de desenvolupament . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.3 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Introducció a ESP RainMaker

19

3.1 Què és ESP RainMaker? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2 La implementació d'ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . 21

3.2.1 Servei de reclamacions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.2 Agent RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.3 Backend del núvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2.4 Client RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.3 Pràctica: punts clau per desenvolupar amb ESP RainMaker . . . . . . . . . . . . 25

3.4 Característiques d'ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.1 Gestió d'usuaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.2 Característiques de l'usuari final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4.3 Funcions d'administració . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.5 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4 Configuració de l'entorn de desenvolupament

31

4.1 ESP-IDF acabatview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1 Versions ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3

4.1.2 Flux de treball de Git ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3 Selecció d'una versió adequada . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.4 Finalitzatview del directori ESP-IDF SDK . . . . . . . . . . . . . . . . . . . . 34 4.2 Configuració de l'entorn de desenvolupament ESP-IDF . . . . . . . . . . . . . . . . . 38 4.2.1 Configuració de l'entorn de desenvolupament ESP-IDF a Linux . . . . . . . . 38 4.2.2 Configuració de l'entorn de desenvolupament ESP-IDF a Windows . . . . . . 40 4.2.3 Configuració de l'entorn de desenvolupament ESP-IDF al Mac . . . . . . . . . 45 4.2.4 Instal·lació del codi VS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.5 Introducció als entorns de desenvolupament de tercers . . . . . . . . 46 4.3 Sistema de compilació ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Conceptes bàsics del sistema de compilació . . . . . . . . . . . . . . . . . . 47 4.3.2 Projecte File Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 Regles de compilació per defecte del sistema de compilació . . . . . . . . . . . . . 50 4.3.4 Introducció a l'script de compilació . . . . . . . . . . . . . . . . . . 51 4.3.5 Introducció a les ordres comuns . . . . . . . . . . . . . . . . . . . 52 4.4 Pràctica: compilació Exampel Programa "Parpellejar". . . . . . . . . . . . . . . . . . 53 4.4.1 Exampl Anàlisi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4.2 Compilació del programa Blink . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.3 Parpellejar el programa Blink . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.4 Anàlisi del registre del port sèrie del programa Blink . . . . . . . . . . . . . . 60 4.5 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

II Desenvolupament de maquinari i controladors

65

5 Disseny de maquinari de productes Smart Light basat en ESP32-C3

67

5.1 Característiques i composició dels productes Smart Light . . . . . . . . . . . . . . . 67

5.2 Disseny de maquinari del sistema central ESP32-C3 . . . . . . . . . . . . . . . . . . . 70

5.2.1 Font d'alimentació . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.2.2 Seqüència d'engegada i restabliment del sistema . . . . . . . . . . . . . . . . . . 74

5.2.3 SPI Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2.4 Font del rellotge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2.5 RF i antena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

5.2.6 Pins de fleixament . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.2.7 Controlador GPIO i PWM . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.3 Pràctica: Construcció d'un sistema de llum intel·ligent amb ESP32-C3 . . . . . . . . . . . . . 80

5.3.1 Selecció de mòduls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5.3.2 Configuració de GPIO de senyals PWM . . . . . . . . . . . . . . . . . . . . 82

5.3.3 Descàrrega de firmware i interfície de depuració . . . . . . . . . . . . 82

5.3.4 Directrius per al disseny de RF . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.5 Directrius per al disseny de fonts d'alimentació . . . . . . . . . . . . . . . . . . . 86 5.4 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6 Desenvolupament del controlador

87

6.1 Procés de desenvolupament del controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.2 Aplicacions perifèriques ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . 88

6.3 Conceptes bàsics del controlador LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.3.1 Espais de color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.3.2 Controlador de LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3.3 Atenuació del LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3.4 Introducció a PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.4 Desenvolupament del controlador d'atenuació de LED. . . . . . . . . . . . . . . . . . . . . . . . 96

6.4.1 Emmagatzematge no volàtil (NVS) . . . . . . . . . . . . . . . . . . . . . . . . 97

6.4.2 Controlador LED PWM (LEDC) . . . . . . . . . . . . . . . . . . . . . . . 98

6.4.3 Programació LED PWM . . . . . . . . . . . . . . . . . . . . . . . . . . 100

6.5 Pràctica: afegir controladors al projecte Smart Light . . . . . . . . . . . . . . . . . 103

6.5.1 Controlador de botons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.5.2 Controlador d'atenuació de LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

6.6 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

III Comunicació i control sense fil

109

7 Configuració i connexió Wi-Fi

111

7.1 Conceptes bàsics de Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.1 Introducció a la Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.2 Evolució de l'IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.3 Conceptes de Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.1.4 Connexió Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.2 Conceptes bàsics de Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

7.2.1 Introducció al Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 123

7.2.2 Conceptes de Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

7.2.3 Connexió Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.3 Configuració de la xarxa Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

7.3.1 Guia de configuració de la xarxa Wi-Fi . . . . . . . . . . . . . . . . . . . . 131

7.3.2 SoftAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

7.3.3 SmartConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

7.3.4 Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

7.3.5 Altres mètodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

7.4 Programació Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 Components Wi-Fi a ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2 Exercici: Connexió Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3 Exercici: Connexió Wi-Fi intel·ligent . . . . . . . . . . . . . . . . . . . . . 145
7.5 Pràctica: Configuració Wi-Fi al projecte Smart Light . . . . . . . . . . . . . . . 156 7.5.1 Connexió Wi-Fi al projecte Smart Light . . . . . . . . . . . . . . . . . 156 7.5.2 Configuració Wi-Fi intel·ligent . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.6 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

8 Control local

159

8.1 Introducció al control local . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

8.1.1 Aplicació del control local . . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.2 Avançtages de Control Local. . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.3 Descobriment de dispositius controlats mitjançant telèfons intel·ligents . . . . . . . . . . 161

8.1.4 Comunicació de dades entre telèfons intel·ligents i dispositius . . . . . . . . 162

8.2 Mètodes comuns de descobriment local . . . . . . . . . . . . . . . . . . . . . . . . 162

8.2.1 Emissió . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

8.2.2 Multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

8.2.3 Comparació entre emissió i multidifusió . . . . . . . . . . . . . . 176

8.2.4 Protocol d'aplicació de multidifusió mDNS per a la descoberta local . . . . . . . . 176

8.3 Protocols de comunicació comuns per a dades locals . . . . . . . . . . . . . . . 179

8.3.1 Protocol de control de transmissió (TCP) . . . . . . . . . . . . . . . . . . . 179

8.3.2 Protocol de transferència d'hipertext (HTTP) . . . . . . . . . . . . . . . . . . . 185

8.3.3 Usuari DatagProtocol ram (UDP). . . . . . . . . . . . . . . . . . . . . . 189

8.3.4 Protocol d'aplicació restringida (CoAP) . . . . . . . . . . . . . . . . 192

8.3.5 Protocol Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

8.3.6 Resum dels protocols de comunicació de dades . . . . . . . . . . . . . . . 203

8.4 Garantia de seguretat de les dades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

8.4.1 Introducció a la seguretat de la capa de transport (TLS) . . . . . . . . . . . . . 207

8.4.2 Introducció a DatagSeguretat de la capa de transport de RAM (DTLS) . . . . . . . 213

8.5 Pràctica: Control local en projecte Smart Light . . . . . . . . . . . . . . . . . . 217

8.5.1 Creació d'un servidor de control local basat en Wi-Fi . . . . . . . . . . . . . . . 217

8.5.2 Verificació de la funcionalitat del control local mitjançant scripts . . . . . . . . . . . 221

8.5.3 Creació d'un servidor de control local basat en Bluetooth . . . . . . . . . . . . 222

8.6 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

9 Control del núvol

225

9.1 Introducció al control remot . . . . . . . . . . . . . . . . . . . . . . . . . . 225

9.2 Protocols de comunicació de dades al núvol . . . . . . . . . . . . . . . . . . . . . . 226

9.2.1 Introducció a MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2.2 Principis MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.2.3 Format de missatge MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.2.4 Comparació de protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.2.5 Configuració de MQTT Broker a Linux i Windows . . . . . . . . . . . . 233 9.2.6 Configuració del client MQTT basat en ESP-IDF . . . . . . . . . . . . . . . . 235 9.3 Garantir la seguretat de les dades MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.3.1 Significat i funció dels certificats . . . . . . . . . . . . . . . . . . . 237 9.3.2 Generació de certificats localment . . . . . . . . . . . . . . . . . . . . . . 239 9.3.3 Configuració de MQTT Broker . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.3.4 Configuració del client MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.4 Pràctica: control remot mitjançant ESP RainMaker . . . . . . . . . . . . . . . . 243 9.4.1 Conceptes bàsics d'ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 Protocol de comunicació de backend de nodes i núvols . . . . . . . . . . . 244 9.4.3 Comunicació entre el client i el backend del núvol . . . . . . . . . . . 249 9.4.4 Rols d'usuari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9.4.5 Serveis bàsics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.4.6 Llum intel·ligent Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.4.7 Integracions de l'aplicació RainMaker i de tercers . . . . . . . . . . . . . . . 262 9.5 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

10 Desenvolupament d'aplicacions per a telèfons intel·ligents

269

10.1 Introducció al desenvolupament d'aplicacions per a telèfons intel·ligents . . . . . . . . . . . . . . . . . . 269

10.1.1 Acabatview de desenvolupament d'aplicacions per a telèfons intel·ligents. . . . . . . . . . . . . . . 270

10.1.2 Estructura del projecte Android . . . . . . . . . . . . . . . . . . . . . . 270

10.1.3 Estructura del projecte iOS . . . . . . . . . . . . . . . . . . . . . . . . 271

10.1.4 Cicle de vida d'una activitat d'Android . . . . . . . . . . . . . . . . . . . . . . 272

10.1.5 Cicle de vida d'iOS ViewControlador. . . . . . . . . . . . . . . . . . . . . . 273

10.2 Creació d'un nou projecte d'aplicació per a telèfons intel·ligents . . . . . . . . . . . . . . . . . . . . . 275

10.2.1 Preparació per al desenvolupament d'Android . . . . . . . . . . . . . . . . . . . 275

10.2.2 Creació d'un nou projecte d'Android . . . . . . . . . . . . . . . . . . . . . . 275

10.2.3 Addició de dependències per a MyRainmaker . . . . . . . . . . . . . . . . . 276

10.2.4 Sol·licitud de permís a Android . . . . . . . . . . . . . . . . . . . . . . 277

10.2.5 Preparació per al desenvolupament d'iOS . . . . . . . . . . . . . . . . . . . . . . 277

10.2.6 Creació d'un nou projecte iOS . . . . . . . . . . . . . . . . . . . . . . . . 278

10.2.7 Addició de dependències per a MyRainmaker . . . . . . . . . . . . . . . . . 279

10.2.8 Sol·licitud de permís a iOS . . . . . . . . . . . . . . . . . . . . . . . . . 280

10.3 Anàlisi dels requisits funcionals de l'aplicació . . . . . . . . . . . . . . . . . . 281

10.3.1 Anàlisi dels requisits funcionals del projecte . . . . . . . . . . . . 282

10.3.2 Anàlisi dels requisits de gestió d'usuaris . . . . . . . . . . . . . . . 282 10.3.3 Anàlisi dels requisits d'aprovisionament i vinculació del dispositiu . . . . . . . 283 10.3.4 Anàlisi dels requisits de control remot . . . . . . . . . . . . . . . . 283 10.3.5 Anàlisi de requisits de programació . . . . . . . . . . . . . . . . . . . 284 10.3.6 Anàlisi dels requisits del centre d'usuaris . . . . . . . . . . . . . . . . . . 285 10.4 Desenvolupament de la gestió d'usuaris . . . . . . . . . . . . . . . . . . . . . . . . 285 10.4.1 Introducció a les API de RainMaker . . . . . . . . . . . . . . . . . . . . . . 285 10.4.2 Iniciar la comunicació mitjançant el telèfon intel·ligent . . . . . . . . . . . . . . . . 286 10.4.3 Registre del compte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 10.4.4 Inici de sessió del compte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 10.5 Desenvolupament del subministrament de dispositius . . . . . . . . . . . . . . . . . . . . . . . 292 10.5.1 Dispositius d'escaneig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.5.2 Connexió de dispositius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10.5.3 Generació de claus secretes . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.4 Obtenció de l'ID de node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.5 Aprovisionament de dispositius . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.6 Desenvolupament del control de dispositius . . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1 Vincular dispositius a comptes de núvol . . . . . . . . . . . . . . . . . . . . 303 10.6.2 Obtenció d'una llista de dispositius . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.6.3 Obtenció de l'estat del dispositiu . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 10.6.4 Canvi de l'estat del dispositiu . . . . . . . . . . . . . . . . . . . . . . . . . . 310 10.7 Desenvolupament de la planificació i del centre d'usuaris . . . . . . . . . . . . . . . . . . . 313 10.7.1 Implementació de la funció de planificació . . . . . . . . . . . . . . . . . . . . 313 10.7.2 Implementació del Centre d'usuaris . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.7.3 Més API de núvol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 10.8 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

11 Actualització del firmware i gestió de versions

321

11.1 Actualització del firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

11.1.1 Acabatview de taules de particions. . . . . . . . . . . . . . . . . . . . . . . . 322

11.1.2 Procés d'arrencada del firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

11.1.3 Acabatview del Mecanisme OTA. . . . . . . . . . . . . . . . . . . . . 326

11.2 Gestió de versions de firmware . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.1 Marcatge del firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.2 Rollback i Anti-rollback . . . . . . . . . . . . . . . . . . . . . . . . 331

11.3 Pràctica: Over-the-air (OTA) Example . . . . . . . . . . . . . . . . . . . . . . . 332

11.3.1 Actualització del firmware mitjançant un amfitrió local . . . . . . . . . . . . . . . . . 332

11.3.2 Actualització del firmware mitjançant ESP RainMaker . . . . . . . . . . . . . . . 335

11.4 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

IV Optimització i Producció en sèrie

343

12 Gestió d'energia i optimització de baix consum

345

12.1 ESP32-C3 Gestió d'energia . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

12.1.1 Escalat dinàmic de freqüència . . . . . . . . . . . . . . . . . . . . . . . . 346

12.1.2 Configuració de la gestió d'energia . . . . . . . . . . . . . . . . . . . . 348

12.2 ESP32-C3 Mode de baixa potència . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

12.2.1 Modem de repòs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

12.2.2 Mode de son lleuger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

12.2.3 Mode de son profund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

12.2.4 Consum de corrent en diferents modes de potència . . . . . . . . . . . . . 358

12.3 Gestió d'energia i depuració de baix consum . . . . . . . . . . . . . . . . . 359

12.3.1 Depuració de registres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

12.3.2 Depuració GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

12.4 Pràctica: Gestió de l'energia al projecte Smart Light . . . . . . . . . . . . . . . 363

12.4.1 Configuració de la funció de gestió d'energia . . . . . . . . . . . . . . . . . 364

12.4.2 Utilitzar bloquejos de gestió d'energia . . . . . . . . . . . . . . . . . . . . . . 365

12.4.3 Verificació del consum d'energia . . . . . . . . . . . . . . . . . . . . . . . 366

12.5 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

13 Funcions de seguretat del dispositiu millorades

369

13.1 Acabatview de seguretat de dades de dispositius IoT. . . . . . . . . . . . . . . . . . . . . . . 369

13.1.1 Per què protegir les dades del dispositiu IoT? . . . . . . . . . . . . . . . . . . . . . . 370

13.1.2 Requisits bàsics per a la seguretat de dades del dispositiu IoT . . . . . . . . . . . . 371

13.2 Protecció de la integritat de les dades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

13.2.1 Introducció al mètode de verificació d'integritat . . . . . . . . . . . . . . 372

13.2.2 Verificació d'integritat de les dades del firmware . . . . . . . . . . . . . . . . . . 373

Ex. 13.2.3ample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3 Protecció de la confidencialitat de les dades . . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3.1 Introducció al xifratge de dades . . . . . . . . . . . . . . . . . . . . . . 374

13.3.2 Introducció a l'esquema de xifratge Flash . . . . . . . . . . . . . . . . . 376

13.3.3 Emmagatzematge de claus de xifratge Flash . . . . . . . . . . . . . . . . . . . . . . . 379

13.3.4 Mode de treball del xifratge Flash . . . . . . . . . . . . . . . . . . . . 380

13.3.5 Procés de xifratge Flash . . . . . . . . . . . . . . . . . . . . . . . . . . 381

13.3.6 Introducció al xifratge NVS . . . . . . . . . . . . . . . . . . . . . . 383

Ex. 13.3.7ampfitxers de xifratge Flash i xifratge NVS. . . . . . . . . . . 384

13.4 Protecció de la legitimitat de les dades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

13.4.1 Introducció a la signatura digital . . . . . . . . . . . . . . . . . . . . . 386

13.4.2 Acabatview de l'esquema d'arrencada segur. . . . . . . . . . . . . . . . . . . . . 388

13.4.3 Introducció al programari Secure Boot . . . . . . . . . . . . . . . . . . . 388 13.4.4 Introducció a l'arrencada segura de maquinari . . . . . . . . . . . . . . . . . . 390 13.4.5 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 13.5 Pràctica: característiques de seguretat a la producció en massa . . . . . . . . . . . . . . . . . . 396 13.5.1 Xifratge Flash i arrencada segura . . . . . . . . . . . . . . . . . . . . . 396 13.5.2 Habilitació de l'encriptació Flash i l'arrencada segura amb eines Flash per lots . . 397 13.5.3 Habilitació del xifratge Flash i l'arrencada segura al projecte Smart Light . . . 398 13.6 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

14 Gravació i proves de firmware per a la producció en massa

399

14.1 Gravació de firmware en producció massiva . . . . . . . . . . . . . . . . . . . . . . 399

14.1.1 Definició de particions de dades . . . . . . . . . . . . . . . . . . . . . . . . . . 399

14.1.2 Gravació de firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

14.2 Proves de producció en massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

14.3 Pràctica: Dades de producció massiva al projecte Smart Light . . . . . . . . . . . . . 404

14.4 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

15 ESP Insights: plataforma de monitorització remota

405

15.1 Introducció a ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

15.2 Introducció a ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . 409

15.2.1 Introducció a ESP Insights al projecte esp-insights . . . . . . 409

15.2.2 Córrer Example al projecte esp-insights . . . . . . . . . . . . . . . 411

15.2.3 Informes d'informació de Coredump . . . . . . . . . . . . . . . . . . . . . 411

15.2.4 Personalització dels registres d'interès . . . . . . . . . . . . . . . . . . . . . . . . 412

15.2.5 Informar del motiu del reinici . . . . . . . . . . . . . . . . . . . . . . . . . 413

15.2.6 Informes de mètriques personalitzades . . . . . . . . . . . . . . . . . . . . . . . . . 413

15.3 Pràctica: ús d'ESP Insights al projecte Smart Light . . . . . . . . . . . . . . . 416

15.4 Resum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

Introducció
ESP32-C3 és un SoC de microcontrolador Wi-Fi i Bluetooth 5 (LE) d'un sol nucli, basat en l'arquitectura RISC-V de codi obert. Aconsegueix l'equilibri adequat de potència, capacitats d'E/S i seguretat, oferint així la solució rendible òptima per als dispositius connectats. Per mostrar diverses aplicacions de la família ESP32-C3, aquest llibre d'Espressif us portarà a un viatge interessant per l'AIoT, començant des dels fonaments bàsics del desenvolupament de projectes IoT i la configuració de l'entorn fins a experiències pràctiques.amples. Els quatre primers capítols parlen sobre IoT, ESP RainMaker i ESP-IDF. Breu dels capítols 5 i 6 sobre disseny de maquinari i desenvolupament de controladors. A mesura que avanceu, descobrireu com configurar el vostre projecte mitjançant xarxes Wi-Fi i aplicacions mòbils. Finalment, aprendràs a optimitzar el teu projecte i posar-lo en producció massiva.
Si sou un enginyer en camps relacionats, un arquitecte de programari, un professor, un estudiant o qualsevol persona interessada en IoT, aquest llibre és per a vosaltres.
Podeu descarregar el codi exampfitxer utilitzat en aquest llibre des del lloc d'Espressif a GitHub. Per obtenir la informació més recent sobre el desenvolupament d'IoT, seguiu el nostre compte oficial.

Pròleg
Un món informatitzador
Muntant l'onada d'Internet, Internet de les coses (IoT) va fer el seu gran debut per convertir-se en un nou tipus d'infraestructura en l'economia digital. Per apropar la tecnologia al públic, Espressif Systems treballa per la visió que els desenvolupadors de tots els àmbits de la vida poden utilitzar IoT per resoldre alguns dels problemes més urgents dels nostres temps. Un món de "Xarxa intel·ligent de totes les coses" és el que esperem del futur.
Dissenyar els nostres propis xips és un component crític d'aquesta visió. Ha de ser una marató, que requereix avenços constants contra els límits tecnològics. Des del "Game Changer" ESP8266 fins a la sèrie ESP32 que integra connectivitat Wi-Fi i Bluetoothr (LE), seguida de l'ESP32-S3 equipat amb acceleració AI, Espressif no deixa de investigar i desenvolupar productes per a solucions AIoT. Amb el nostre programari de codi obert, com ara el marc de desenvolupament IoT ESP-IDF, el marc de desenvolupament de malla ESP-MDF i la plataforma de connectivitat de dispositius ESP RainMaker, hem creat un marc independent per crear aplicacions AIoT.
Al juliol de 2022, els enviaments acumulats de chipsets IoT d'Espressif han superat els 800 milions, liderant el mercat de MCU Wi-Fi i alimentant un gran nombre de dispositius connectats a tot el món. La recerca de l'excel·lència fa que cada producte Espressif sigui un gran èxit pel seu alt nivell d'integració i rendibilitat. El llançament d'ESP32-C3 marca una fita important de la tecnologia desenvolupada per Espressif. És un MCU d'un sol nucli, de 32 bits, basat en RISC-V amb 400 KB de SRAM, que pot funcionar a 160 MHz. Incorpora Wi-Fi de 2.4 GHz i Bluetooth 5 (LE) amb suport de llarg abast. Aconsegueix un bon equilibri de potència, capacitats d'E/S i seguretat, oferint així la solució rendible òptima per als dispositius connectats. Basat en un ESP32-C3 tan potent, aquest llibre pretén ajudar els lectors a entendre el coneixement relacionat amb IoT amb una il·lustració detallada i experiències pràctiques.amples.
Per què hem escrit aquest llibre?
Espressif Systems és més que una empresa de semiconductors. També és una empresa de plataformes IoT, que sempre busca avenços i innovacions en el camp de la tecnologia. Al mateix temps, Espressif ha fet de codi obert i ha compartit el seu sistema operatiu de desenvolupament propi i el marc de programari amb la comunitat, formant un ecosistema únic. Els enginyers, els fabricants i els entusiastes de la tecnologia desenvolupen activament noves aplicacions de programari basades en els productes d'Espressif, es comuniquen lliurement i comparteixen la seva experiència. Podeu veure les idees fascinants dels desenvolupadors a diverses plataformes tot el temps, com ara YouTube i GitHub. La popularitat dels productes d'Espressif ha estimulat un nombre creixent d'autors que han produït més de 100 llibres basats en els chipsets Espressif, en més de deu idiomes, inclosos l'anglès, el xinès, l'alemany, el francès i el japonès.

És el suport i la confiança dels socis de la comunitat el que fomenta la innovació contínua d'Espressif. “Ens esforcem perquè els nostres xips, sistemes operatius, marcs, solucions, núvol, pràctiques empresarials, eines, documentació, escrits, idees, etc., siguin cada cop més rellevants per a les respostes que les persones necessiten als problemes més urgents de la vida contemporània. Aquesta és la màxima ambició i brúixola moral d'Espressif". va dir el Sr. Teo Swee Ann, fundador i CEO d'Espressif.
Espressif valora la lectura i les idees. Com que l'actualització contínua de la tecnologia IoT comporta requisits més alts per als enginyers, com podem ajudar més persones a dominar ràpidament els xips, sistemes operatius, marcs de programari, esquemes d'aplicacions i productes de serveis al núvol IoT? Com diu la dita, és millor ensenyar a un home a pescar que no pas donar-li peix. En una sessió de pluja d'idees, se'ns va ocórrer que podríem escriure un llibre per resoldre sistemàticament els coneixements clau del desenvolupament d'IoT. Vam encertar, vam reunir ràpidament un grup d'enginyers sèniors i vam combinar l'experiència de l'equip tècnic en programació integrada, desenvolupament de maquinari i programari IoT, tot contribuint a la publicació d'aquest llibre. En el procés d'escriptura, vam fer tot el possible per ser objectius i justos, despullats del capoll i utilitzar expressions concises per explicar la complexitat i l'encant de l'Internet de les coses. Hem resumit acuradament les preguntes habituals, hem fet referència als comentaris i suggeriments de la comunitat, per tal de respondre clarament a les preguntes que es van trobar en el procés de desenvolupament i oferir directrius pràctiques de desenvolupament d'IoT per als tècnics i els responsables de la presa de decisions rellevants.
Estructura del llibre
Aquest llibre pren una perspectiva centrada en l'enginyer i exposa pas a pas els coneixements necessaris per al desenvolupament de projectes IoT. Està compost per quatre parts, de la següent manera:
· Preparació (Capítol 1): aquesta part presenta l'arquitectura de l'IoT, el marc de projecte típic d'IoT, la plataforma de núvol ESP RainMakerr i l'entorn de desenvolupament ESP-IDF, per establir una base sòlida per al desenvolupament de projectes IoT.
· Desenvolupament de maquinari i controladors (Capítol 5): basat en el conjunt de xips ESP6-C32, aquesta part elabora el desenvolupament mínim del sistema de maquinari i de controladors, i implementa el control de l'atenuació, la graduació de color i la comunicació sense fil.
· Comunicació i control sense fil (Capítol 7): aquesta part explica l'esquema de configuració intel·ligent de Wi-Fi basat en el xip ESP11-C32, els protocols de control local i al núvol i el control local i remot dels dispositius. També ofereix esquemes per desenvolupar aplicacions per a telèfons intel·ligents, actualització de microprogramari i gestió de versions.
· Optimització i producció en massa (Capítol 12-15): aquesta part està pensada per a aplicacions avançades d'IoT, centrades en l'optimització de productes en gestió d'energia, optimització de baix consum i seguretat millorada. També introdueix la gravació i les proves de microprogramari en producció massiva, i com diagnosticar l'estat d'execució i els registres del microprogramari del dispositiu mitjançant la plataforma de monitorització remota ESP Insights.

Sobre el codi font
Els lectors poden executar l'exampprogrames d'aquest llibre, ja sigui introduint el codi manualment o utilitzant el codi font que acompanya el llibre. Posem èmfasi en la combinació de teoria i pràctica, i així establim una secció de pràctica basada en el projecte Smart Light en gairebé tots els capítols. Tots els codis són de codi obert. Els lectors poden descarregar el codi font i parlar-ne a les seccions relacionades amb aquest llibre a GitHub i al nostre fòrum oficial esp32.com. El codi de codi obert d'aquest llibre està subjecte als termes de la llicència Apache 2.0.
Nota de l'autor
Aquest llibre està produït oficialment per Espressif Systems i està escrit pels enginyers superiors de la companyia. És adequat per a directius i personal d'R+D en indústries relacionades amb IoT, professors i estudiants de titulacions relacionades i entusiastes del camp de l'Internet de les coses. Esperem que aquest llibre pugui servir de manual de treball, de referència i de llibre de nit, per ser com un bon tutor i amic.
Durant la compilació d'aquest llibre, ens hem referit a alguns resultats de recerca rellevants d'experts, estudiosos i tècnics nacionals i estrangers, i hem fet tot el possible per citar-los d'acord amb les normes acadèmiques. No obstant això, és inevitable que hi hagi algunes omissions, així que aquí volem expressar el nostre profund respecte i agraïment a tots els autors rellevants. A més, hem citat informació d'Internet, per la qual cosa volem agrair als autors i editors originals i disculpar-nos perquè no podem indicar la font de cada informació.
Per tal de produir un llibre d'alta qualitat, hem organitzat rondes de debats interns i hem après dels suggeriments i comentaris dels lectors de proves i dels editors de les editorials. Aquí, volem donar-vos les gràcies de nou per la vostra ajuda que ha contribuït a aquest treball d'èxit.
Per últim, però el més important, gràcies a tots els d'Espressif que han treballat tant pel naixement i la popularització dels nostres productes.
El desenvolupament de projectes IoT implica una àmplia gamma de coneixements. Limitades a la extensió del llibre, així com al nivell i experiència de l'autor, les omissions són inevitables. Per tant, demanem amablement que els experts i lectors criticin i corregin els nostres errors. Si teniu algun suggeriment per a aquest llibre, poseu-vos en contacte amb nosaltres a book@espressif.com. Esperem els vostres comentaris.

Com utilitzar aquest llibre?
El codi dels projectes d'aquest llibre ha estat de codi obert. Podeu descarregar-lo des del nostre repositori de GitHub i compartir els vostres pensaments i preguntes al nostre fòrum oficial. GitHub: https://github.com/espressif/book-esp32c3-iot-projects Fòrum: https://www.esp32.com/bookc3 Al llarg del llibre, hi haurà parts destacades com es mostra a continuació.
Codi font En aquest llibre, posem èmfasi en la combinació de teoria i pràctica, i així establim una secció de pràctica sobre el projecte Smart Light en gairebé tots els capítols. Els passos corresponents i la pàgina d'origen es marcaran entre dues línies que comencen amb tag Codi font.
NOTA/CONSELLS Aquí és on podeu trobar informació crítica i recordatoris per depurar correctament el vostre programa. Es marcaran entre dues línies gruixudes que comencen amb la tag NOTA o CONSELLS.
La majoria de les ordres d'aquest llibre s'executen sota Linux, sol·licitades pel caràcter “$”. Si l'ordre requereix privilegis de superusuari per executar-se, la sol·licitud se substituirà per "#". L'indicador d'ordres als sistemes Mac és "%", tal com s'utilitza a la Secció 4.2.3 Instal·lació d'ESP-IDF al Mac.
El cos del text d'aquest llibre s'imprimirà a Charter, mentre que el codi examples, components, funcions, variables, codi file els noms, els directoris de codi i les cadenes seran a Courier New.
Les ordres o textos que cal introduir per l'usuari i les ordres que es puguin introduir prement la tecla "Enter" s'imprimiran en negreta de Courier New. Els registres i els blocs de codi es presentaran en requadres de color blau clar.
ExampLI:
En segon lloc, utilitzeu esp-idf/components/nvs flash/nvs partition generator/nvs partition gen.py per generar el binari de la partició NVS file a l'amfitrió de desenvolupament amb l'ordre següent:
$ python $IDF PATH/components/nvs flash/nvs partition generator/nvs partition gen.py –input mass prod.csv –output mass prod.bin –size NVS PARTITION SIZE

Capítol 1

Introducció

a

IoT

A finals del segle XX, amb l'auge de les xarxes informàtiques i les tecnologies de la comunicació, Internet es va integrar ràpidament a la vida de les persones. A mesura que la tecnologia d'Internet continua madurant, va néixer la idea d'Internet de les coses (IoT). Literalment, IoT significa una Internet on les coses estan connectades. Mentre que Internet original trenca els límits de l'espai i el temps i redueix la distància entre "persona i persona", IoT fa que les "coses" siguin un participant important, apropant "persones" i "coses". En un futur previsible, IoT es convertirà en la força motriu de la indústria de la informació.
Aleshores, què és l'Internet de les coses?
És difícil definir amb precisió l'Internet de les coses, ja que el seu significat i abast estan en constant evolució. El 1995, Bill Gates va plantejar per primera vegada la idea d'IoT al seu llibre The Road Ahead. En poques paraules, IoT permet als objectes intercanviar informació entre ells a través d'Internet. El seu objectiu final és establir una "Internet de tot". Aquesta és una interpretació primerenca de IoT, així com una fantasia de la tecnologia futura. Trenta anys després, amb el ràpid desenvolupament de l'economia i la tecnologia, la fantasia es fa realitat. Des de dispositius intel·ligents, llars intel·ligents, ciutats intel·ligents, Internet de vehicles i dispositius portàtils, fins al "metavers" suportat per les tecnologies IoT, contínuament sorgeixen nous conceptes. En aquest capítol, començarem amb una explicació de l'arquitectura de l'Internet de les coses i, a continuació, presentarem l'aplicació d'IoT més comuna, la casa intel·ligent, per ajudar-vos a entendre clarament l'IoT.
1.1 Arquitectura de IoT
Internet de les coses implica múltiples tecnologies que tenen diferents necessitats d'aplicació i formes en diferents indústries. Per tal d'ordenar l'estructura, les tecnologies clau i les característiques d'aplicació de IoT, cal establir una arquitectura unificada i un sistema tècnic estàndard. En aquest llibre, l'arquitectura d'IoT es divideix simplement en quatre capes: capa de percepció i control, capa de xarxa, capa de plataforma i capa d'aplicació.
Capa de percepció i control Com a element més bàsic de l'arquitectura d'IoT, la capa de percepció i control és el nucli per realitzar la detecció integral de l'IoT. La seva funció principal és recollir, identificar i controlar la informació. Consisteix en una varietat de dispositius amb capacitat de percepció,
3

identificació, control i execució, i és responsable de recuperar i analitzar dades com ara les propietats del material, les tendències de comportament i l'estat del dispositiu. D'aquesta manera, IoT aconsegueix reconèixer el món físic real. A més, la capa també és capaç de controlar l'estat del dispositiu.
Els dispositius més comuns d'aquesta capa són diversos sensors, que tenen un paper important en la recollida i identificació d'informació. Els sensors són com els òrgans sensorials humans, com els sensors fotosensibles que equivalen a la visió, els sensors acústics a l'oïda, els sensors de gas a l'olfacte i els sensors sensibles a la pressió i la temperatura al tacte. Amb tots aquests "òrgans sensorials", els objectes es tornen "vius" i capaços de percepció, reconeixement i manipulació intel·ligents del món físic.
Capa de xarxa La funció principal de la capa de xarxa és transmetre informació, incloses les dades obtingudes de la capa de percepció i control a l'objectiu especificat, així com les ordres emeses des de la capa d'aplicació de tornada a la capa de percepció i control. Serveix com a pont de comunicació important que connecta diferents capes d'un sistema IoT. Per configurar un model bàsic d'Internet de les coses, implica dos passos per integrar objectes en una xarxa: accés a Internet i transmissió a través d'Internet.
L'accés a Internet Internet permet la interconnexió entre persona i persona, però no inclou les coses a la gran família. Abans de l'arribada de l'IoT, la majoria de les coses no eren "connectables a la xarxa". Gràcies al desenvolupament continu de la tecnologia, IoT aconsegueix connectar coses a Internet, aconseguint així la interconnexió entre “persones i coses”, i “coses i coses”. Hi ha dues maneres habituals d'implementar la connexió a Internet: l'accés a la xarxa per cable i l'accés a la xarxa sense fil.
Els mètodes d'accés a la xarxa per cable inclouen Ethernet, comunicació en sèrie (per exemple, RS-232, RS-485) i USB, mentre que l'accés a la xarxa sense fil depèn de la comunicació sense fil, que es pot dividir en comunicació sense fil de curt abast i comunicació sense fil de llarg abast.
La comunicació sense fils de curt abast inclou ZigBee, Bluetoothr, Wi-Fi, comunicació de camp proper (NFC) i identificació per radiofreqüència (RFID). La comunicació sense fils de llarg abast inclou la comunicació de tipus de màquina millorada (eMTC), LoRa, Internet de les coses de banda estreta (NB-IoT), 2G, 3G, 4G, 5G, etc.
Transmissió a través d'Internet Els diferents mètodes d'accés a Internet condueixen a l'enllaç físic de transmissió de dades corresponent. El següent és decidir quin protocol de comunicació utilitzar per transmetre les dades. En comparació amb els terminals d'Internet, la majoria de terminals IoT actualment en tenen menys
4 Aventura sense fil ESP32-C3: una guia completa per a IoT

recursos disponibles, com ara el rendiment de processament, la capacitat d'emmagatzematge, la velocitat de la xarxa, etc., per la qual cosa cal escollir un protocol de comunicació que ocupi menys recursos en les aplicacions IoT. Hi ha dos protocols de comunicació que s'utilitzen àmpliament avui dia: Message Queuing Telemetry Transport (MQTT) i Constrained Application Protocol (CoAP).
Capa de plataforma La capa de plataforma es refereix principalment a plataformes en núvol IoT. Quan tots els terminals IoT estan connectats en xarxa, les seves dades s'han d'agregar en una plataforma de núvol IoT per calcular-les i emmagatzemar-les. La capa de plataforma admet principalment aplicacions IoT per facilitar l'accés i la gestió de dispositius massius. Connecta terminals IoT a la plataforma del núvol, recopila dades del terminal i emet ordres als terminals per implementar el control remot. Com a servei intermedi per assignar equips a aplicacions de la indústria, la capa de plataforma té un paper de connexió en tota l'arquitectura IoT, amb una lògica de negoci abstracta i un model de dades bàsic estandarditzat, que no només pot aconseguir un accés ràpid als dispositius, sinó que també ofereix potents capacitats modulars. per satisfer les diferents necessitats en escenaris d'aplicació de la indústria. La capa de plataforma inclou principalment mòduls funcionals com ara l'accés al dispositiu, la gestió del dispositiu, la gestió de la seguretat, la comunicació de missatges, l'operació i el manteniment de la supervisió i les aplicacions de dades.
· Accés al dispositiu, realitzant la connexió i comunicació entre terminals i plataformes de núvol IoT.
· Gestió de dispositius, incloses funcions com ara la creació de dispositius, el manteniment de dispositius, la conversió de dades, la sincronització de dades i la distribució de dispositius.
· Gestió de la seguretat, assegurant la seguretat de la transmissió de dades IoT des de la perspectiva de l'autenticació de seguretat i la seguretat de la comunicació.
· Comunicació de missatges, que inclou tres direccions de transmissió, és a dir, el terminal envia dades a la plataforma de núvol IoT, la plataforma de núvol IoT envia dades al costat del servidor o a altres plataformes de núvol IoT i el costat del servidor controla de manera remota els dispositius IoT.
· Supervisió d'O&M, que inclou monitorització i diagnòstic, actualització de firmware, depuració en línia, serveis de registre, etc.
· Aplicacions de dades, que impliquen l'emmagatzematge, anàlisi i aplicació de dades.
Capa d'aplicació La capa d'aplicació utilitza les dades de la capa de plataforma per gestionar l'aplicació, filtrant-les i processant-les amb eines com ara bases de dades i programari d'anàlisi. Les dades resultants es poden utilitzar per a aplicacions IoT del món real, com ara la salut intel·ligent, l'agricultura intel·ligent, les cases intel·ligents i les ciutats intel·ligents.
Per descomptat, l'arquitectura d'IoT es pot subdividir en més capes, però no importa de quantes capes consti, el principi subjacent segueix essent essencialment el mateix. Aprenentatge
Capítol 1. Introducció a IoT 5

sobre l'arquitectura d'IoT ens ajuda a aprofundir en la nostra comprensió de les tecnologies IoT i a construir projectes IoT totalment funcionals.
1.2 Aplicació IoT a les cases intel·ligents
IoT ha penetrat en tots els àmbits de la vida, i l'aplicació IoT més relacionada amb nosaltres és la casa intel·ligent. Molts aparells tradicionals ara estan equipats amb un o més dispositius IoT, i moltes cases de nova construcció estan dissenyades amb tecnologies IoT des del principi. La figura 1.1 mostra alguns dispositius domèstics intel·ligents habituals.
Figura 1.1. Dispositius domèstics intel·ligents comuns El desenvolupament de la llar intel·ligent es pot dividir simplement en productes intel·ligentstage, interconnexió d'escena stage i intel·ligent stage, tal com es mostra a la figura 1.2.
Figura 1.2. Desenvolupament stage de la casa intel·ligent 6 ESP32-C3 Wireless Adventure: una guia completa per a IoT

El primer stage tracta de productes intel·ligents. A diferència de les cases tradicionals, a les cases intel·ligents, els dispositius IoT reben senyals amb sensors i es connecten en xarxa mitjançant tecnologies de comunicació sense fil com Wi-Fi, Bluetooth LE i ZigBee. Els usuaris poden controlar productes intel·ligents de diverses maneres, com ara aplicacions per a telèfons intel·ligents, assistents de veu, control intel·ligent d'altaveus, etc.tage se centra en la interconnexió d'escenes. En aquest stage, els desenvolupadors ja no es plantegen controlar un sol producte intel·ligent, sinó interconnectar dos o més productes intel·ligents, automatitzar fins a cert punt i, finalment, formar un mode d'escena personalitzat. Per exampQuan l'usuari prem qualsevol botó del mode d'escena, els llums, les cortines i els aparells d'aire condicionat s'adaptaran automàticament als valors predefinits. Per descomptat, hi ha el requisit previ que la lògica d'enllaç estigui fàcilment configurada, incloses les condicions d'activació i les accions d'execució. Imagineu que el mode de calefacció de l'aire condicionat s'activa quan la temperatura interior baixa per sota dels 10 °C; que a les 7 del matí s'escolta música per despertar l'usuari, s'obren les cortines intel·ligents i l'arròs o la torradora de pa arrenca a través d'una presa intel·ligent; a mesura que l'usuari s'aixeca i s'acaba de rentar, ja se serveix l'esmorzar, per tal que no hi hagi demora en anar a treballar. Què convenient s'ha tornat la nostra vida! El tercer stage va a la intel·ligència stage. A mesura que s'accedeixi a més dispositius domèstics intel·ligents, també ho faran els tipus de dades generades. Amb l'ajuda de la computació en núvol, el big data i la intel·ligència artificial, és com si s'hagués plantat un "cervell més intel·ligent" a les cases intel·ligents, que ja no requereixen ordres freqüents de l'usuari. Recopilen dades d'interaccions anteriors i aprenen els patrons de comportament i les preferències de l'usuari, per tal d'automatitzar les activitats, inclòs el proporcionar recomanacions per a la presa de decisions. Actualment, la majoria de cases intel·ligents es troben a l'escenari d'interconnexió stage. A mesura que augmenta la taxa de penetració i la intel·ligència dels productes intel·ligents, s'estan eliminant les barreres entre els protocols de comunicació. En el futur, les cases intel·ligents es tornaran realment "intel·ligents", igual que el sistema d'IA Jarvis a Iron Man, que no només pot ajudar l'usuari a controlar diversos dispositius, gestionar els assumptes quotidians, sinó que també té una gran capacitat de càlcul i capacitat de pensament. A l'intel·ligent stage, els éssers humans rebran millors serveis tant en quantitat com en qualitat.
Capítol 1. Introducció a IoT 7

8 Aventura sense fil ESP32-C3: una guia completa per a IoT

Capítol Introducció i pràctica de 2 projectes IoT
Al capítol 1, vam presentar l'arquitectura de l'IoT i els rols i les interrelacions de la capa de percepció i control, la capa de xarxa, la capa de plataforma i la capa d'aplicació, així com el desenvolupament de la llar intel·ligent. Tanmateix, igual que quan aprenem a pintar, conèixer els coneixements teòrics no és suficient. Hem d'"embrutar-nos les mans" per posar en pràctica projectes IoT per tal de dominar realment la tecnologia. A més, quan un projecte es trasllada a la producció en sèrie stagPer exemple, cal tenir en compte més factors com ara la connexió a la xarxa, la configuració, la interacció de la plataforma al núvol IoT, la gestió i les actualitzacions de microprogramari, la gestió de la producció massiva i la configuració de seguretat. Aleshores, a què hem de prestar atenció quan desenvolupem un projecte complet d'IoT? En el capítol 1, hem esmentat que la llar intel·ligent és un dels escenaris d'aplicació IoT més habituals, i els llums intel·ligents són un dels aparells més bàsics i pràctics, que es poden utilitzar a llars, hotels, gimnasos, hospitals, etc. En aquest llibre, prendrem la construcció d'un projecte de llum intel·ligent com a punt de partida, explicarem els seus components i característiques i oferirem orientació sobre el desenvolupament del projecte. Esperem que pugueu extreure inferències d'aquest cas per crear més aplicacions IoT.
2.1 Introducció als projectes típics d'IoT
Pel que fa al desenvolupament, els mòduls funcionals bàsics dels projectes IoT es poden classificar en desenvolupament de programari i maquinari de dispositius IoT, desenvolupament d'aplicacions de client i desenvolupament de plataforma de núvol IoT. És important aclarir els mòduls funcionals bàsics, que es descriuen amb més detall en aquesta secció.
2.1.1 Mòduls bàsics per a dispositius IoT comuns
El desenvolupament de programari i maquinari de dispositius IoT inclou els següents mòduls bàsics: Recollida de dades
Com a capa inferior de l'arquitectura IoT, els dispositius IoT de la capa de percepció i control connecten sensors i dispositius mitjançant els seus xips i perifèrics per aconseguir la recollida de dades i el control de l'operació.
9

Vinculació de comptes i configuració inicial Per a la majoria de dispositius IoT, l'enllaç de comptes i la configuració inicial es completen en un sol procés operatiu, per exempleample, connectant dispositius amb usuaris mitjançant la configuració de la xarxa Wi-Fi.
Interacció amb plataformes de núvol IoT Per supervisar i controlar els dispositius IoT, també és necessari connectar-los a plataformes de núvol IoT, per tal de donar ordres i informar d'estat mitjançant la interacció entre ells.
Control del dispositiu Quan es connecten amb plataformes de núvol IoT, els dispositius es poden comunicar amb el núvol i ser registrats, vinculats o controlats. Els usuaris poden consultar l'estat del producte i realitzar altres operacions a l'aplicació per a telèfons intel·ligents mitjançant plataformes de núvol IoT o protocols de comunicació locals.
Actualització del firmware Els dispositius IoT també poden aconseguir una actualització del firmware segons les necessitats dels fabricants. En rebre ordres enviades pel núvol, es realitzarà l'actualització del firmware i la gestió de versions. Amb aquesta funció d'actualització del microprogramari, podeu millorar contínuament les funcions dels dispositius IoT, solucionar defectes i millorar l'experiència de l'usuari.
2.1.2 Mòduls bàsics d'aplicacions client
Les aplicacions de client (per exemple, les aplicacions per a telèfons intel·ligents) inclouen principalment els mòduls bàsics següents:
Sistema de comptes i autorització Admet l'autorització de comptes i dispositius.
Control del dispositiu Les aplicacions per a telèfons intel·ligents solen estar equipades amb funcions de control. Els usuaris es poden connectar fàcilment als dispositius IoT i gestionar-los en qualsevol moment i en qualsevol lloc mitjançant aplicacions per a telèfons intel·ligents. En una casa intel·ligent del món real, els dispositius es controlen principalment mitjançant aplicacions per a telèfons intel·ligents, que no només permeten una gestió intel·ligent dels dispositius, sinó que també estalvia el cost de la mà d'obra. Per tant, el control del dispositiu és imprescindible per a les aplicacions de client, com ara el control d'atributs de funció del dispositiu, el control d'escena, la programació, el control remot, l'enllaç de dispositius, etc. Els usuaris domèstics intel·ligents també poden personalitzar les escenes segons les necessitats personals, controlar la il·luminació, els electrodomèstics, l'entrada , etc., per fer la vida a casa més còmoda i còmoda. Poden temporitzar l'aire condicionat, apagar-lo de forma remota, encendre la llum del passadís automàticament un cop s'obri la porta o canviar al mode "teatre" amb un sol botó.
Les aplicacions de client de notificació actualitzen l'estat en temps real dels dispositius IoT i envien alertes quan els dispositius resulten anormals.
10 Aventura sense fil ESP32-C3: una guia completa per a IoT

Atenció al client postvenda Les aplicacions per a telèfons intel·ligents poden oferir serveis postvenda de productes, per resoldre problemes relacionats amb fallades del dispositiu IoT i operacions tècniques de manera oportuna.
Funcions destacades Per satisfer les necessitats dels diferents usuaris, es poden afegir altres funcions, com ara Shake, NFC, GPS, etc. El GPS pot ajudar a establir la precisió de les operacions de l'escena segons la ubicació i la distància, mentre que la funció Shake permet als usuaris configurar el ordres que s'executaran per a un dispositiu o escena específics sacsejant.
2.1.3 Introducció a les plataformes comunes del núvol IoT
La plataforma al núvol IoT és una plataforma tot en un que integra funcions com ara la gestió de dispositius, la comunicació de seguretat de dades i la gestió de notificacions. Segons el seu grup objectiu i accessibilitat, les plataformes de núvol IoT es poden dividir en plataformes de núvol IoT públiques (d'ara endavant "núvol públic") i plataformes privades de núvol IoT (d'ara endavant "núvol privat").
El núvol públic sol indicar plataformes de núvol d'IoT compartides per a empreses o individus, gestionades i mantingudes per proveïdors de plataformes i compartides a través d'Internet. Pot ser gratuït o de baix cost i ofereix serveis a tota la xarxa pública oberta, com ara Alibaba Cloud, Tencent Cloud, Baidu Cloud, AWS IoT, Google IoT, etc. Com a plataforma de suport, el núvol públic pot integrar proveïdors de serveis amunt i usuaris finals aigües avall per crear una cadena de valor i un ecosistema nous.
El núvol privat està creat només per a ús empresarial, garantint així el millor control de les dades, la seguretat i la qualitat del servei. Les empreses mantenen els seus serveis i la seva infraestructura per separat, i el maquinari i el programari de suport també es dediquen a usuaris específics. Les empreses poden personalitzar els serveis al núvol per satisfer les necessitats del seu negoci. Actualment, alguns fabricants de cases intel·ligents ja tenen plataformes privades de núvol IoT i han desenvolupat aplicacions domèstiques intel·ligents basades en elles.
El núvol públic i el núvol privat tenen el seu propi avantatgetages, que s'explicarà més endavant.
Per aconseguir la connectivitat de comunicació, cal completar almenys el desenvolupament incrustat al costat del dispositiu, juntament amb servidors empresarials, plataformes de núvol IoT i aplicacions per a telèfons intel·ligents. Davant d'un projecte tan gran, el núvol públic normalment ofereix kits de desenvolupament de programari per a aplicacions del dispositiu i per a telèfons intel·ligents per accelerar el procés. Tant el núvol públic com el privat ofereixen serveis que inclouen accés al dispositiu, gestió del dispositiu, ombra del dispositiu i operació i manteniment.
Accés al dispositiu Les plataformes de núvol IoT han de proporcionar no només interfícies per a l'accés al dispositiu mitjançant protocols
Capítol 2. Introducció i pràctica dels projectes IoT 11

com ara MQTT, CoAP, HTTPS i WebSocket, però també la funció d'autenticació de seguretat del dispositiu per bloquejar dispositius falsificats i il·legals, reduint de manera efectiva el risc de ser compromès. Aquesta autenticació normalment admet diferents mecanismes, de manera que quan els dispositius es produeixen en massa, cal preassignar el certificat del dispositiu segons el mecanisme d'autenticació seleccionat i gravar-lo als dispositius.
Gestió de dispositius La funció de gestió de dispositius proporcionada per les plataformes en núvol IoT no només pot ajudar els fabricants a controlar l'estat d'activació i l'estat en línia dels seus dispositius en temps real, sinó que també permet opcions com afegir/eliminar dispositius, recuperar, afegir/suprimir grups, actualització del firmware. , i gestió de versions.
Les plataformes de núvol IoT d'ombra del dispositiu poden crear una versió virtual persistent (ombra del dispositiu) per a cada dispositiu, i l'estat de l'ombra del dispositiu es pot sincronitzar i obtenir mitjançant l'aplicació per a telèfons intel·ligents o altres dispositius mitjançant protocols de transmissió d'Internet. Device shadow emmagatzema l'estat informat més recent i l'estat esperat de cada dispositiu, i fins i tot si el dispositiu està fora de línia, encara pot obtenir l'estat trucant a les API. Device shadow proporciona API sempre activades, cosa que facilita la creació d'aplicacions per a telèfons intel·ligents que interactuen amb els dispositius.
Funcionament i manteniment La funció O&M inclou tres aspectes: · Demostració d'informació estadística sobre dispositius i notificacions IoT. · La gestió de registres permet recuperar informació sobre el comportament del dispositiu, el flux de missatges amunt/baix i el contingut del missatge. · La depuració de dispositius admet l'entrega d'ordres, l'actualització de la configuració i la comprovació de la interacció entre les plataformes de núvol IoT i els missatges del dispositiu.
2.2 Pràctica: Projecte Smart Light
Després de la introducció teòrica de cada capítol, trobareu una secció pràctica relacionada amb el projecte Smart Light per ajudar-vos a obtenir una experiència pràctica. El projecte es basa en el xip ESP32-C3 d'Espressif i la plataforma ESP RainMaker IoT Cloud, i cobreix el maquinari de mòduls sense fil en productes de llum intel·ligent, programari incrustat per a dispositius intel·ligents basats en ESP32C3, aplicacions per a telèfons intel·ligents i la interacció ESP RainMaker.
Codi font Per a una millor experiència d'aprenentatge i desenvolupament, el projecte d'aquest llibre ha estat de codi obert. Podeu descarregar el codi font del nostre repositori de GitHub a https://github. com/espressif/book-esp32c3-iot-projects.
12 Aventura sense fil ESP32-C3: una guia completa per a IoT

2.2.1 Estructura del projecte
El projecte Smart Light consta de tres parts: i. Dispositius de llum intel·ligent basats en ESP32-C3, encarregats d'interactuar amb plataformes de núvol IoT i controlar l'interruptor, la brillantor i la temperatura de color del LED lamp perles. ii. Aplicacions per a telèfons intel·ligents (incloses les aplicacions per a tauletes que s'executen a Android i iOS), responsables de la configuració de xarxa dels productes de llum intel·ligent, així com de consultar i controlar el seu estat.
iii. Una plataforma al núvol IoT basada en ESP RainMaker. Per simplificar, considerem la plataforma en núvol IoT i el servidor empresarial en conjunt en aquest llibre. Els detalls sobre ESP RainMaker es proporcionaran al capítol 3.
La correspondència entre l'estructura del projecte Smart Light i l'arquitectura d'IoT es mostra a la figura 2.1.
Figura 2.1. Estructura del projecte de llum intel·ligent
2.2.2 Funcions del projecte
Dividides segons l'estructura, les funcions de cada part són les següents. Dispositius de llum intel·ligent
· Configuració i connexió de xarxa. · Control LED PWM, com ara interruptor, lluminositat, temperatura de color, etc. · Automatització o control d'escena, per exemple, interruptor horari. · Encriptació i arrencada segura del Flash. · Actualització del firmware i gestió de versions.
Capítol 2. Introducció i pràctica dels projectes IoT 13

Aplicacions per a telèfons intel·ligents · Configuració de xarxa i vinculació de dispositius. · Control intel·ligent de productes de llum, com ara interruptor, brillantor, temperatura de color, etc. · Automatització o configuració d'escena, per exemple, interruptor horària. · Control local/remot. · Registre d'usuari, inici de sessió, etc.
Plataforma de núvol ESP RainMaker IoT · Habilitació de l'accés al dispositiu IoT. · Proporcionar API d'operació del dispositiu accessibles a les aplicacions de telèfons intel·ligents. · Actualització del firmware i gestió de versions.
2.2.3 Preparació del maquinari
Si esteu interessats a posar en pràctica el projecte, també necessitareu el següent maquinari: llums intel·ligents, telèfons intel·ligents, encaminadors Wi-Fi i un ordinador que compleixi els requisits d'instal·lació de l'entorn de desenvolupament. Llums intel·ligents
Les llums intel·ligents són un nou tipus de bombetes, la forma és la mateixa que la bombeta incandescent general. Una llum intel·ligent es compon d'una font d'alimentació regulada per condensadors, mòdul sense fil (amb ESP32-C3 integrat), controlador LED i matriu LED RGB. Quan està connectat a l'alimentació, el vol de 15 V CCtagLa sortida després de la baixada del condensador, la rectificació del díode i la regulació proporciona energia al controlador LED i a la matriu LED. El controlador LED pot enviar automàticament nivells alts i baixos a determinats intervals, canviant la matriu LED RGB entre tancat (llums encesos) i oberts (llums apagats), de manera que pugui emetre cian, groc, verd, morat, blau, vermell i llum blanca. El mòdul sense fil s'encarrega de connectar-se a l'encaminador Wi-Fi, rebre i informar de l'estat dels llums intel·ligents i enviar ordres per controlar el LED.
Figura 2.2. Una llum intel·ligent simulada
Als primers desenvolupaments stage, podeu simular una llum intel·ligent mitjançant la placa ESP32-C3DevKitM-1 connectada amb LED RGB lamp perles (vegeu la figura 2.2). Però hauries
14 Aventura sense fil ESP32-C3: una guia completa per a IoT

tingueu en compte que aquesta no és l'única manera de muntar una llum intel·ligent. El disseny de maquinari del projecte d'aquest llibre només conté un mòdul sense fil (amb ESP32-C3 integrat), però no un disseny de maquinari de llum intel·ligent complet. A més, Espressif també produeix una placa de desenvolupament d'àudio basada en ESP32-C3 ESP32C3-Lyra per controlar llums amb àudio. La placa té interfícies per a micròfons i altaveus i pot controlar tires LED. Es pot utilitzar per desenvolupar emissores d'àudio d'alt rendiment i de baix cost i tires de llum rítmica. La figura 2.3 mostra una placa ESP32-C3Lyra enllaçada amb una tira de 40 llums LED.
Figura 2.3. ESP32-C3-Lyra enllaçat amb una tira de 40 llums LED
Telèfons intel·ligents (Android/iOS) El projecte Smart Light implica el desenvolupament d'una aplicació per a telèfons intel·ligents per configurar i controlar productes de llum intel·ligent.
Encaminadors Wi-Fi Els encaminadors Wi-Fi converteixen els senyals de xarxa amb cable i els senyals de xarxa mòbil en senyals de xarxa sense fil, perquè els ordinadors, els telèfons intel·ligents, les tauletes i altres dispositius sense fil es connectin a la xarxa. Per exampD'altra banda, la banda ampla a la llar només s'ha de connectar a un encaminador Wi-Fi per aconseguir una xarxa sense fil de dispositius Wi-Fi. L'estàndard de protocol principal compatible amb els encaminadors Wi-Fi és IEEE 802.11n, amb un TxRate mitjà de 300 Mbps, o 600 Mbps com a màxim. Són retrocompatibles amb IEEE 802.11b i IEEE 802.11g. El xip ESP32-C3 d'Espressif és compatible amb IEEE 802.11b/g/n, de manera que podeu triar un encaminador Wi-Fi de banda única (2.4 GHz) o de banda dual (2.4 GHz i 5 GHz).
Al capítol 4 s'introduirà un entorn de desenvolupament d'ordinadors (Linux/macOS/Windows). Capítol 2. Introducció i pràctica dels projectes IoT 15

2.2.4 Procés de desenvolupament
Figura 2.4. Passos del desenvolupament del projecte Smart Light
Disseny de maquinari El disseny de maquinari de dispositius IoT és essencial per a un projecte IoT. Un projecte complet de llum intel·ligent està pensat per produir alamp treballant sota la xarxa elèctrica. Diferents fabricants produeixen lamps de diferents estils i tipus de controladors, però els seus mòduls sense fil solen tenir la mateixa funció. Per simplificar el procés de desenvolupament del projecte Smart Ligh, aquest llibre només cobreix el disseny de maquinari i el desenvolupament de programari de mòduls sense fil.
Configuració de la plataforma al núvol IoT Per utilitzar les plataformes al núvol IoT, heu de configurar projectes al backend, com ara la creació de productes, la creació de dispositius, la configuració de propietats del dispositiu, etc.
Desenvolupament de programari incrustat per a dispositius IoT Implementeu les funcions esperades amb ESP-IDF, l'SDK del costat del dispositiu d'Espressif, inclosa la connexió a plataformes de núvol IoT, el desenvolupament de controladors LED i l'actualització del firmware.
Desenvolupament d'aplicacions per a telèfons intel·ligents Desenvolupar aplicacions per a telèfons intel·ligents per a sistemes Android i iOS per realitzar el registre i l'inici de sessió dels usuaris, el control del dispositiu i altres funcions.
Optimització del dispositiu IoT Un cop finalitzat el desenvolupament bàsic de les funcions del dispositiu IoT, podeu recórrer a tasques d'optimització, com ara l'optimització de l'energia.
Proves de producció en massa Realitzeu proves de producció en massa d'acord amb els estàndards relacionats, com ara proves de funcionament de l'equip, prova d'envelliment, prova de RF, etc.
Malgrat els passos esmentats anteriorment, un projecte de llum intel·ligent no està necessàriament subjecte a aquest procediment, ja que també es poden dur a terme diferents tasques al mateix temps. Per example, el programari incrustat i les aplicacions per a telèfons intel·ligents es poden desenvolupar en paral·lel. També és possible que s'hagin de repetir alguns passos, com ara l'optimització de dispositius IoT i les proves de producció en massa.
16 Aventura sense fil ESP32-C3: una guia completa per a IoT

2.3 Resum
En aquest capítol, primer vam exposar els components bàsics i els mòduls funcionals d'un projecte IoT, i després vam introduir el cas Smart Light per a la pràctica, fent referència a la seva estructura, funcions, preparació de maquinari i procés de desenvolupament. Els lectors poden extreure inferències de la pràctica i tenir confiança per dur a terme projectes IoT amb el mínim d'errors en el futur.
Capítol 2. Introducció i pràctica dels projectes IoT 17

18 Aventura sense fil ESP32-C3: una guia completa per a IoT

Capítol 3

Introducció

a

ESP

RainMaker

L'Internet de les coses (IoT) ofereix infinites possibilitats per canviar la manera de viure de les persones, però el desenvolupament de l'enginyeria d'IoT està ple de reptes. Amb els núvols públics, els fabricants de terminals poden implementar la funcionalitat del producte mitjançant les solucions següents:
Basat en les plataformes de núvol dels proveïdors de solucions D'aquesta manera, els fabricants de terminals només han de dissenyar el maquinari del producte, després connectar el maquinari al núvol mitjançant el mòdul de comunicació proporcionat i configurar les funcions del producte seguint les directrius. Aquest és un enfocament eficient, ja que elimina la necessitat de desenvolupament i operacions i manteniment (O&M) del costat del servidor i de l'aplicació. Permet als fabricants de terminals centrar-se en el disseny de maquinari sense haver de considerar la implementació al núvol. Tanmateix, aquestes solucions (p. ex., el microprogramari del dispositiu i l'aplicació) generalment no són de codi obert, de manera que les funcions del producte estaran limitades per la plataforma al núvol del proveïdor que no es pot personalitzar. Mentrestant, les dades d'usuari i dispositiu també pertanyen a la plataforma de núvol.
Basat en productes de núvol En aquesta solució, després de completar el disseny de maquinari, els fabricants de terminals no només han d'implementar funcions de núvol mitjançant un o més productes de núvol proporcionats pel núvol públic, sinó que també han d'enllaçar el maquinari amb el núvol. Per example, per connectar-se a Amazon Web Serveis (AWS), els fabricants de terminals han d'utilitzar productes AWS com Amazon API Gateway, AWS IoT Core i AWS Lambda per permetre l'accés al dispositiu, el control remot, l'emmagatzematge de dades, la gestió d'usuaris i altres funcions bàsiques. No només demana als fabricants de terminals que utilitzin i configuren de manera flexible els productes al núvol amb una comprensió profunda i una experiència rica, sinó que també els exigeix ​​que tinguin en compte el cost de construcció i manteniment de les operacions inicials i posteriors.tages Això suposa grans reptes per a l'energia i els recursos de l'empresa.
En comparació amb els núvols públics, els núvols privats solen crear-se per a projectes i productes específics. Els desenvolupadors de núvols privats tenen el nivell més alt de llibertat en el disseny de protocols i la implementació de la lògica empresarial. Els fabricants de terminals poden crear productes i dissenyar esquemes a voluntat, i integrar i potenciar fàcilment les dades dels usuaris. Combinant l'alta seguretat, escalabilitat i fiabilitat del núvol públic amb l'advantages del núvol privat, Espressif va llançar ESP
19

RainMaker, una solució de núvol privat profundament integrada basada en el núvol d'Amazon. Els usuaris poden implementar ESP RainMaker i crear núvols privats simplement amb un compte d'AWS.
3.1 Què és ESP RainMaker?
ESP RainMaker és una plataforma AIoT completa construïda amb diversos productes AWS madurs. Proporciona diversos serveis necessaris per a la producció massiva, com ara l'accés al núvol del dispositiu, l'actualització del dispositiu, la gestió del backend, l'inici de sessió de tercers, la integració de veu i la gestió d'usuaris. Mitjançant l'ús del dipòsit d'aplicacions sense servidor (SAR) proporcionat per AWS, els fabricants de terminals poden implementar ràpidament ESP RainMaker als seus comptes d'AWS, la qual cosa és eficient en temps i fàcil d'operar. Gestionat i mantingut per Espressif, el SAR utilitzat per ESP RainMaker ajuda els desenvolupadors a reduir els costos de manteniment del núvol i accelerar el desenvolupament de productes AIoT, creant així solucions AIoT segures, estables i personalitzables. La figura 3.1 mostra l'arquitectura de l'ESP RainMaker.
Figura 3.1. Arquitectura d'ESP RainMaker
El servidor públic ESP RainMaker d'Espressif és gratuït per a tots els entusiastes, creadors i educadors d'ESP per a l'avaluació de la solució. Els desenvolupadors poden iniciar sessió amb comptes d'Apple, Google o GitHub i crear ràpidament els seus propis prototips d'aplicacions IoT. El servidor públic integra Alexa i Google Home i ofereix serveis de control de veu, compatibles amb Alexa Skill i Google Actions. La seva funció de reconeixement semàntic també està impulsada per tercers. Els dispositius RainMaker IoT només responen a accions específiques. Per obtenir una llista exhaustiva d'ordres de veu compatibles, consulteu les plataformes de tercers. A més, Espressif ofereix una aplicació pública RainMaker perquè els usuaris puguin controlar els productes mitjançant telèfons intel·ligents. 20 Aventura sense fil ESP32-C3: una guia completa per a IoT

3.2 La implementació d'ESP RainMaker
Tal com es mostra a la figura 3.2, ESP RainMaker consta de quatre parts: · Servei de reclamació, que permet als dispositius RainMaker obtenir certificats dinàmicament. · RainMaker Cloud (també conegut com a backend del núvol), que ofereix serveis com ara filtratge de missatges, gestió d'usuaris, emmagatzematge de dades i integracions de tercers. · RainMaker Agent, que permet que els dispositius RainMaker es connectin a RainMaker Cloud. · Client RainMaker (aplicació RainMaker o scripts CLI), per a l'aprovisionament, creació d'usuaris, associació i control de dispositius, etc.
Figura 3.2. Estructura de l'ESP RainMaker
ESP RainMaker ofereix un conjunt complet d'eines per al desenvolupament de productes i la producció massiva, que inclou: RainMaker SDK
RainMaker SDK es basa en ESP-IDF i proporciona el codi font de l'agent del dispositiu i les API C relacionades per al desenvolupament del microprogramari. Els desenvolupadors només han d'escriure la lògica de l'aplicació i deixar la resta al marc de RainMaker. Per obtenir més informació sobre les API C, visiteu https://bookc3.espressif.com/rm/c-api-reference. Aplicació RainMaker La versió pública de l'aplicació RainMaker permet als desenvolupadors completar l'aprovisionament de dispositius i controlar i consultar l'estat dels dispositius (p. ex., productes d'il·luminació intel·ligent). Està disponible a les botigues d'aplicacions per a iOS i Android. Per obtenir més detalls, consulteu el Capítol 10. API REST Les API REST ajuden els usuaris a crear les seves pròpies aplicacions semblants a l'aplicació RainMaker. Per obtenir més informació, visiteu https://swaggerapis.rainmaker.espressif.com/.
Capítol 3. Introducció a ESP RainMaker 21

API de Python Es proporciona una CLI basada en Python, que ve amb l'SDK RainMaker, per implementar totes les funcions similars a les funcions dels telèfons intel·ligents. Per obtenir més informació sobre les API de Python, visiteu https://bookc3.espressif.com/rm/python-api-reference.
CLI d'administració La CLI d'administració, amb un nivell d'accés més alt, es proporciona per al desplegament privat de l'ESP RainMaker per generar certificats de dispositiu a granel.
3.2.1 Servei de reclamacions
Tota la comunicació entre els dispositius RainMaker i el backend del núvol es realitza mitjançant MQTT+TLS. En el context d'ESP RainMaker, "Claiming" és el procés en què els dispositius obtenen certificats del servei de reclamacions per connectar-se al backend del núvol. Tingueu en compte que el servei de reclamació només s'aplica al servei públic RainMaker, mentre que per al desplegament privat, els certificats del dispositiu s'han de generar de manera massiva mitjançant la CLI d'administració. ESP RainMaker admet tres tipus de servei de reclamació: auto reclamació
El propi dispositiu obté els certificats mitjançant una clau secreta preprogramada a eFuse després de connectar-se a Internet. Reclamació impulsada per l'amfitrió Els certificats s'obtenen de l'amfitrió de desenvolupament amb el compte de RainMaker. Reclamació assistida Els certificats s'obtenen mitjançant aplicacions per a telèfons intel·ligents durant el subministrament.
3.2.2 Agent RainMaker
Figura 3.3. Estructura de RainMaker SDK La funció principal de l'agent RainMaker és proporcionar connectivitat i ajudar la capa d'aplicació a processar les dades del núvol d'enllaços ascendents/descensos. Està creat a través del RainMaker SDK 22 ESP32-C3 Wireless Adventure: una guia completa per a IoT

i desenvolupat a partir del marc provat ESP-IDF, utilitzant components ESP-IDF com RTOS, NVS i MQTT. La figura 3.3 mostra l'estructura del RainMaker SDK.
El RainMaker SDK inclou dues funcions principals.
Connexió
i. Col·laborar amb el servei de reclamacions per obtenir certificats de dispositiu.
ii. Connexió al backend del núvol mitjançant el protocol MQTT segur per proporcionar connectivitat remota i implementar control remot, informes de missatges, gestió d'usuaris, gestió de dispositius, etc. Utilitza el component MQTT a ESP-IDF de manera predeterminada i proporciona una capa d'abstracció per connectar-se amb altres piles de protocols.
iii. Proporciona un component de subministrament de wifi per a la connexió i l'aprovisionament de Wi-Fi, especialment el component https ota per a les actualitzacions d'OTA i, sobretot, el component de control local per a la descoberta i la connexió de dispositius locals. Tots aquests objectius es poden assolir mitjançant una configuració senzilla.
Tractament de dades
i. Emmagatzemar els certificats de dispositiu emesos per Claiming Service i les dades necessàries quan s'executa RainMaker, de manera predeterminada utilitzant la interfície proporcionada pel component flash nvs i proporcionant API per als desenvolupadors per a l'ús directe.
ii. Utilitzar el mecanisme de devolució de trucada per processar dades del núvol d'enllaços ascendents/davallades i desbloquejar automàticament les dades a la capa d'aplicació per facilitar el processament dels desenvolupadors. Per exampEl RainMaker SDK proporciona interfícies riques per establir dades TSL (Thing Specification Language), que són necessàries per definir models TSL per descriure dispositius IoT i implementar funcions com ara el temps, el compte enrere i el control de veu. Per a funcions interactives bàsiques com ara el temps, RainMaker SDK ofereix una solució sense desenvolupament que es pot activar simplement quan sigui necessari. Aleshores, l'agent RainMaker processarà directament les dades, les enviarà al núvol mitjançant el tema MQTT associat i retroalimentarà els canvis de dades al backend del núvol mitjançant un mecanisme de devolució de trucada.
3.2.3 Backend del núvol
El backend del núvol es basa en AWS Serverless Computing i s'aconsegueix mitjançant AWS Cognito (sistema de gestió d'identitats), Amazon API Gateway, AWS Lambda (servei informàtic), Amazon DynamoDB (base de dades NoSQL), AWS IoT Core (nucli d'accés IoT que proporciona accés MQTT). i filtrat de regles), Amazon Simple Email Service (servei de correu simple SES), Amazon CloudFront (xarxa de lliurament ràpid), Amazon Simple Queue Service (cua de missatges SQS) i Amazon S3 (servei d'emmagatzematge de cubs). Té com a objectiu optimitzar l'escalabilitat i la seguretat. Amb ESP RainMaker, els desenvolupadors poden gestionar dispositius sense haver d'escriure codi al núvol. Els missatges informats pels dispositius es transmeten de manera transparent a
Capítol 3. Introducció a ESP RainMaker 23

clients d'aplicacions o altres serveis de tercers. La taula 3.1 mostra els productes i funcions del núvol d'AWS que s'utilitzen al backend del núvol, amb més productes i funcions en desenvolupament.
Taula 3.1. Productes i funcions del núvol AWS utilitzats pel backend del núvol

Producte AWS Cloud utilitzat per RainMaker

Funció

AWS Cognito

Gestionar les credencials dels usuaris i donar suport als inicis de sessió de tercers

AWS Lambda

Implementació de la lògica empresarial bàsica del backend del núvol

Amazon Timestream Emmagatzemar dades de sèries temporals

Amazon DynamoDB Emmagatzemar la informació privada dels clients

AWS IoT Core

Suport a la comunicació MQTT

Amazon SES

Proporcionar serveis d'enviament de correu electrònic

Amazon CloudFront Accelerant la gestió del backend webaccés al lloc

Amazon SQS

Reenviant missatges des d'AWS IoT Core

3.2.4 Client RainMaker
Els clients de RainMaker, com ara App i CLI, es comuniquen amb el backend del núvol mitjançant les API REST. Podeu trobar informació detallada i instruccions sobre les API REST a la documentació de Swagger proporcionada per Espressif. El client d'aplicacions mòbils de RainMaker està disponible per a sistemes iOS i Android. Permet el subministrament, el control i la compartició de dispositius, així com crear i habilitar tasques de compte enrere i connectar-se a plataformes de tercers. Pot carregar automàticament la interfície d'usuari i les icones segons la configuració informada pels dispositius i mostrar completament el TSL del dispositiu.
Per example, si es construeix una llum intel·ligent a l'SDK proporcionat per RainMaker, exampels, la icona i la interfície d'usuari de la bombeta es carregaran automàticament quan finalitzi l'aprovisionament. Els usuaris poden canviar el color i la brillantor de la llum a través de la interfície i aconseguir el control de tercers enllaçant Alexa Smart Home Skill o Google Smart Home Actions als seus comptes ESP RainMaker. La figura 3.4 mostra la icona i la interfície d'usuari exampde la bombeta a l'aplicació Alexa, Google Home i ESP RainMaker respectivament.

24 Aventura sense fil ESP32-C3: una guia completa per a IoT

(a) Exampel - Alexa

(b) Example – Google Home

(c) Example – ESP RainMaker
Figura 3.4. Exampfitxers de la icona i la interfície d'usuari de la llum de la bombeta a l'aplicació Alexa, Google Home i ESP RainMaker
3.3 Pràctica: punts clau per desenvolupar amb ESP RainMaker
Un cop completada la capa del controlador del dispositiu, els desenvolupadors poden començar a crear models TSL i processar dades d'enllaç descendent mitjançant les API proporcionades per RainMaker SDK i habilitar els serveis bàsics de l'ESP RainMaker en funció de la definició i els requisits del producte.
Capítol 3. Introducció a ESP RainMaker 25

La secció 9.4 d'aquest llibre explicarà la implementació de la llum intel·ligent LED a RainMaker. Durant la depuració, els desenvolupadors poden utilitzar les eines CLI del RainMaker SDK per comunicar-se amb la llum intel·ligent (o trucar a les API REST de Swagger).
El capítol 10 elaborarà l'ús de les API REST en el desenvolupament d'aplicacions per a telèfons intel·ligents. Les actualitzacions OTA de llums intel·ligents LED es tractaran al capítol 11. Si els desenvolupadors han habilitat el control remot d'ESP Insights, el backend de gestió de l'ESP RainMaker mostrarà les dades d'ESP Insights. Els detalls es presentaran al capítol 15.
ESP RainMaker admet el desplegament privat, que es diferencia del servidor públic de RainMaker de les maneres següents:
Servei de reclamació Per generar certificats en desplegaments privats, cal utilitzar la CLI d'administració de RainMaker en comptes de la reclamació. Amb el servidor públic, els desenvolupadors han de tenir drets d'administrador per implementar l'actualització del microprogramari, però no és desitjable en els desplegaments comercials. Per tant, no es pot proporcionar un servei d'autenticació independent per a la reclamació pròpia, ni els drets d'administració per a la reclamació impulsada o assistida per l'amfitrió.
Aplicacions de telèfon En els desplegaments privats, les aplicacions s'han de configurar i compilar per separat per garantir que els sistemes de comptes no siguin interoperables.
Inicis de sessió de tercers i integració de veu Els desenvolupadors s'han de configurar per separat mitjançant comptes de desenvolupadors de Google i Apple per habilitar els inicis de sessió de tercers, així com la integració d'Alexa Skill i Google Voice Assistant.
CONSELLS Per obtenir més informació sobre el desplegament del núvol, visiteu https://customer.rainmaker.espressif. com. Pel que fa al microprogramari, la migració d'un servidor públic a un servidor privat només requereix la substitució dels certificats del dispositiu, la qual cosa millora molt l'eficiència de la migració i redueix el cost de la migració i la depuració secundària.
3.4 Característiques d'ESP RainMaker
Les funcions d'ESP RainMaker estan dirigides principalment a tres aspectes: gestió d'usuaris, usuaris finals i administradors. Totes les funcions són compatibles tant en servidors públics com privats tret que s'indiqui el contrari.
3.4.1 Gestió d'usuaris
Les funcions de gestió d'usuaris permeten als usuaris finals registrar-se, iniciar sessió, canviar contrasenyes, recuperar contrasenyes, etc.
26 Aventura sense fil ESP32-C3: una guia completa per a IoT

Registreu-vos i inicieu sessió Els mètodes de registre i d'inici de sessió admesos per RainMaker inclouen: · Identificació de correu electrònic + contrasenya · Número de telèfon + contrasenya · Compte de Google · Compte d'Apple · Compte de GitHub (només servidor públic) · Compte d'Amazon (només servidor privat)
NOTA Registreu-vos amb Google/Amazon comparteix l'adreça de correu electrònic de l'usuari amb RainMaker. Registra't amb Apple comparteix una adreça simulada que Apple assigna a l'usuari específicament per al servei RainMaker. Es crearà automàticament un compte de RainMaker per als usuaris que iniciïn sessió amb un compte de Google, Apple o Amazon per primera vegada.
Canviar la contrasenya Vàlid només per a inicis de sessió basats en l'identificador de correu electrònic/número de telèfon. Totes les altres sessions actives es tancaran després de canviar la contrasenya. Segons el comportament d'AWS Cognito, les sessions tancades poden romandre actives fins a 1 hora.
Recuperar contrasenya Vàlid només per a inicis de sessió basats en l'identificador de correu electrònic/número de telèfon.
3.4.2 Característiques de l'usuari final
Les funcions obertes als usuaris finals inclouen control i monitoratge locals i remots, programació, agrupació de dispositius, compartició de dispositius, notificacions push i integracions de tercers.
Control remot i monitorització · Consulta de configuració, valors de paràmetres i estat de connexió per a un o tots els dispositius. · Establir paràmetres per a un o diversos dispositius.
Control i monitorització locals El telèfon mòbil i el dispositiu han d'estar connectats a la mateixa xarxa per al control local.
Programació · Els usuaris preestableixen determinades accions en un moment concret. · No es requereix connexió a Internet per al dispositiu mentre s'executa la programació. · Una vegada o repetició (especificant dies) per a un o diversos dispositius.
Agrupació de dispositius Admet l'agrupació abstracta de diversos nivells Les metadades de grup es poden utilitzar per crear una estructura de la sala de casa.
Capítol 3. Introducció a ESP RainMaker 27

Compartició de dispositius Un o més dispositius es poden compartir amb un o més usuaris.
Notificacions push Els usuaris finals rebran notificacions push per a esdeveniments com ara · Dispositius nous afegits/eliminats · Dispositiu connectat al núvol · Dispositiu desconnectat del núvol · Sol·licituds per compartir dispositius creades/acceptades/rebutjades · Missatges d'alerta informats pels dispositius
Les integracions de tercers Alexa i Google Voice Assistant són compatibles per controlar els dispositius RainMaker, inclosos llums, interruptors, endolls, ventiladors i sensors de temperatura.
3.4.3 Funcions d'administració
Les funcions d'administració permeten als administradors implementar el registre de dispositius, l'agrupació de dispositius i les actualitzacions OTA, i també view estadístiques i dades d'ESP Insights.
Registre del dispositiu Genereu certificats de dispositiu i registreu-vos amb la CLI d'administració (només servidor privat).
Agrupació de dispositius Creeu grups abstractes o estructurats basats en la informació del dispositiu (només servidor privat).
Actualitzacions a l'aire (OTA) Carregueu el microprogramari en funció de la versió i el model, a un o més dispositius o a un grup. Monitoritzar, cancel·lar o arxivar treballs OTA.
View estadístiques ViewLes estadístiques que poden incloure: · Registres de dispositius (certificats registrats per l'administrador) · Activacions de dispositius (dispositiu connectat per primera vegada) · Comptes d'usuari · Associació usuari-dispositiu
View Dades d'ESP Insights ViewLes dades d'ESP Insights poden incloure: · Errors, avisos i registres personalitzats · Informes i anàlisi d'errors · Motius de reinici · Mètriques com l'ús de memòria, RSSI, etc. · Mètriques i variables personalitzades
28 Aventura sense fil ESP32-C3: una guia completa per a IoT

3.5 Resum
En aquest capítol, hem introduït algunes diferències clau entre el desplegament públic de RainMaker i el desplegament privat. La solució privada ESP RainMaker llançada per Espressif és altament fiable i extensible. Tots els xips de la sèrie ESP32 s'han connectat i adaptat a AWS, la qual cosa redueix molt el cost. Els desenvolupadors poden centrar-se en la verificació de prototips sense haver d'aprendre sobre els productes del núvol AWS. També vam explicar la implementació i les característiques d'ESP RainMaker, i alguns punts clau per al desenvolupament amb la plataforma.
Escaneja per descarregar ESP RainMaker per a Android Escaneja per descarregar ESP RainMaker per a iOS
Capítol 3. Introducció a ESP RainMaker 29

30 Aventura sense fil ESP32-C3: una guia completa per a IoT

Capítol Configuració 4 Entorn de desenvolupament
Aquest capítol se centra en ESP-IDF, el marc oficial de desenvolupament de programari per a ESP32-C3. Explicarem com configurar l'entorn en diversos sistemes operatius i presentarem l'estructura del projecte i el sistema de compilació d'ESP-IDF, així com l'ús d'eines de desenvolupament relacionades. A continuació, presentarem el procés de compilació i execució d'un example projecte, alhora que ofereix una explicació detallada del registre de sortida a cada stage.
4.1 ESP-IDF acabatview
ESP-IDF (Espressif IoT Development Framework) és un marc de desenvolupament d'IoT únic proporcionat per Espressif Technology. Utilitza C/C++ com a llenguatge de desenvolupament principal i admet la compilació creuada amb sistemes operatius convencionals com Linux, Mac i Windows. L'exampEls programes inclosos en aquest llibre es desenvolupen utilitzant ESP-IDF, que ofereix les següents característiques: · Controladors de sistema SoC. ESP-IDF inclou controladors per a ESP32, ESP32-S2, ESP32-C3,
i altres fitxes. Aquests controladors inclouen la biblioteca perifèrica de baix nivell (LL), la biblioteca de capa d'abstracció de maquinari (HAL), suport RTOS i programari de controlador de capa superior, etc. · Components essencials. ESP-IDF incorpora components fonamentals necessaris per al desenvolupament d'IoT. Això inclou múltiples piles de protocols de xarxa com HTTP i MQTT, un marc de gestió d'energia amb modulació de freqüència dinàmica i funcions com Flash Encryption i Secure Boot, etc. · Eines de desenvolupament i producció. ESP-IDF proporciona eines d'ús habitual per a la creació, el flash i la depuració durant el desenvolupament i la producció en massa (vegeu la figura 4.1), com ara el sistema de construcció basat en CMake, la cadena d'eines de compilació creuada basada en GCC i el J.TAG eina de depuració basada en OpenOCD, etc. Val la pena assenyalar que el codi ESP-IDF s'adhereix principalment a la llicència de codi obert Apache 2.0. Els usuaris poden desenvolupar programari personal o comercial sense restriccions mentre compleixen els termes de la llicència de codi obert. A més, els usuaris reben llicències de patent permanents de manera gratuïta, sense l'obligació d'obrir cap modificació feta al codi font.
31

Figura 4.1.

Construcció, parpelleig i depuració

eines de desenvolupament i producció en massa

4.1.1 Versions ESP-IDF
El codi ESP-IDF està allotjat a GitHub com a projecte de codi obert. Actualment, hi ha tres versions principals disponibles: v3, v4 i v5. Cada versió principal normalment conté diverses subversions, com ara v4.2, v4.3, etc. Espressif Systems garanteix un suport de 30 mesos per a correccions d'errors i pedaços de seguretat per a cada subversió publicada. Per tant, també es publiquen regularment revisions de subversions, com ara v4.3.1, v4.2.2, etc. La taula 4.1 mostra l'estat de suport de diferents versions d'ESP-IDF per als xips Espressif, indicant si es troben en una versió prèvia.view stage (oferint suport per a preview versions, que poden no tenir certes característiques o documentació) o tenen suport oficial.

Taula 4.1. Estat de suport de diferents versions d'ESP-IDF per a xips Espressif

Sèrie ESP32 ESP32-S2 ESP32-C3 ESP32-S3 ESP32-C2 ESP32-H2

Admet la v4.1

Admet la v4.2

v4.3 compatible amb suport compatible

v4.4 compatible amb suport compatible amb suport
preview

v5.0 compatible amb suport compatible amb suport preview

32 Aventura sense fil ESP32-C3: una guia completa per a IoT

La iteració de les versions principals sovint implica ajustos a l'estructura del marc i actualitzacions del sistema de compilació. Per example, el canvi principal de v3.* a v4.* va ser la migració gradual del sistema de compilació de Make a CMake. D'altra banda, la iteració de versions menors normalment implica l'addició de noves funcions o suport per a nous xips.
És important distingir i entendre la relació entre les versions estables i les branques de GitHub. Les versions etiquetades com a v*.* o v*.*.* representen versions estables que han superat les proves internes completes d'Espressif. Un cop arreglat, el codi, la cadena d'eines i els documents de llançament de la mateixa versió romanen sense canvis. Tanmateix, les branques de GitHub (per exemple, la branca release/v4.3) es sotmeten a confirmacions de codi freqüents, sovint diàriament. Per tant, dos fragments de codi de la mateixa branca poden diferir, la qual cosa requereix que els desenvolupadors actualitzin ràpidament el seu codi en conseqüència.
4.1.2 Flux de treball ESP-IDF Git
Espressif segueix un flux de treball específic de Git per a ESP-IDF, que es descriu a continuació:
· Es fan nous canvis a la branca mestra, que serveix com a branca principal de desenvolupament. La versió ESP-IDF a la branca mestra sempre porta un -dev tag per indicar que actualment està en desenvolupament, com ara v4.3-dev. Els canvis a la branca mestra seran primer revieweditat i provat al dipòsit intern d'Espressif, i després enviat a GitHub un cop finalitzades les proves automatitzades.
· Un cop una nova versió ha completat el desenvolupament de funcions a la branca mestra i ha complert els criteris per entrar a les proves beta, passa a una nova branca, com ara la versió/v4.3. A més, aquesta nova branca és tagged com a versió prèvia al llançament, com v4.3-beta1. Els desenvolupadors poden consultar la plataforma GitHub per accedir a la llista completa de branques i tags per a ESP-IDF. És important tenir en compte que la versió beta (versió prèvia al llançament) encara pot tenir un nombre important de problemes coneguts. A mesura que la versió beta es sotmet a proves contínues, s'afegeixen correccions d'errors tant a aquesta versió com a la branca mestra simultàniament. Mentrestant, és possible que la branca mestra ja hagi començat a desenvolupar noves funcions per a la següent versió. Quan les proves estan gairebé acabades, s'afegeix una etiqueta candidata a la versió (rc) a la branca, que indica que és un candidat potencial a la versió oficial, com ara v4.3-rc1. En aquest stage, la branca segueix sent una versió prèvia al llançament.
· Si no es descobreix ni informa cap error important, la versió prèvia al llançament finalment rep una etiqueta de versió principal (p. ex., v5.0) o una etiqueta de versió menor (p. ex., v4.3) i es converteix en una versió de llançament oficial, que està documentada. a la pàgina de notes de la versió. Posteriorment, qualsevol error identificat en aquesta versió es corregeix a la branca de llançament. Un cop finalitzada la prova manual, s'assigna a la branca una etiqueta de versió de correcció d'errors (per exemple, v4.3.2), que també es reflecteix a la pàgina de notes de la versió.
Capítol 4. Configuració de l'entorn de desenvolupament 33

4.1.3 Selecció d'una versió adequada
Com que ESP-IDF va començar oficialment a donar suport a ESP32-C3 des de la versió v4.3, i la v4.4 encara no s'ha llançat oficialment en el moment d'escriure aquest llibre, la versió utilitzada en aquest llibre és la v4.3.2, que és una versió revisada. de v4.3. Tanmateix, és important tenir en compte que, quan llegiu aquest llibre, és possible que la v4.4 o versions posteriors ja estiguin disponibles. Quan seleccioneu una versió, us recomanem el següent:
· Per als desenvolupadors de nivell d'entrada, és recomanable triar la versió estable v4.3 o la seva versió revisada, que s'alinea amb l'exampla versió utilitzada en aquest llibre.
· Per a la producció en massa, es recomana utilitzar l'última versió estable per beneficiar-se del suport tècnic més actualitzat.
· Si teniu intenció d'experimentar amb nous xips o explorar noves característiques del producte, feu servir la branca mestra. La darrera versió conté totes les característiques més recents, però tingueu en compte que hi pot haver errors coneguts o desconeguts.
· Si la versió estable que s'utilitza no inclou les noves característiques desitjades i voleu minimitzar els riscos associats a la branca mestra, considereu utilitzar la branca de llançament corresponent, com ara la branca release/v4.4. El repositori GitHub d'Espressif crearà primer la branca release/v4.4 i, posteriorment, llançarà la versió estable v4.4 basant-se en una instantània històrica específica d'aquesta branca, després de completar totes les proves i desenvolupament de funcions.
4.1.4 Acabatview del directori ESP-IDF SDK
L'SDK ESP-IDF consta de dos directoris principals: esp-idf i .espressif. El primer conté el codi font del dipòsit ESP-IDF files i scripts de compilació, mentre que aquest últim emmagatzema principalment cadenes d'eines de compilació i altres programaris. La familiaritat amb aquests dos directoris ajudarà els desenvolupadors a fer un millor ús dels recursos disponibles i a accelerar el procés de desenvolupament. L'estructura de directoris d'ESP-IDF es descriu a continuació:
(1) Directori de codis del dipòsit ESP-IDF (/esp/esp-idf), tal com es mostra a la figura 4.2.
a. Components del directori de components
Aquest directori bàsic integra nombrosos components de programari essencials d'ESP-IDF. No es pot compilar cap codi de projecte sense dependre dels components d'aquest directori. Inclou suport de controladors per a diversos xips Espressif. Des de la biblioteca LL i les interfícies de la biblioteca HAL per a perifèrics fins al controlador de nivell superior i virtual File Suport de la capa del sistema (VFS), els desenvolupadors poden triar els components adequats a diferents nivells per a les seves necessitats de desenvolupament. ESP-IDF també admet múltiples piles de protocols de xarxa estàndard com ara TCP/IP, HTTP, MQTT, WebSocket, etc. Els desenvolupadors poden utilitzar interfícies familiars com Socket per crear aplicacions de xarxa. Els components proporcionen comprensió
34 Aventura sense fil ESP32-C3: una guia completa per a IoT

Figura 4.2. Directori de codis del repositori ESP-IDF
funcionalitat i es pot integrar fàcilment a les aplicacions, permetent als desenvolupadors centrar-se únicament en la lògica empresarial. Alguns components comuns inclouen: · controlador: aquest component conté programes de controlador perifèric per a diversos Espressif
sèries de xips, com ara GPIO, I2C, SPI, UART, LEDC (PWM), etc. Els programes de controladors perifèrics d'aquest component ofereixen interfícies abstractes independents del xip. Cada perifèric té una capçalera comuna file (com ara gpio.h), eliminant la necessitat de fer front a diferents preguntes d'assistència específiques del xip. · esp_wifi: el Wi-Fi, com a perifèric especial, es tracta com un component independent. Inclou diverses API, com ara la inicialització de diversos modes de controlador Wi-Fi, configuració de paràmetres i processament d'esdeveniments. Algunes funcions d'aquest component es proporcionen en forma de biblioteques d'enllaços estàtiques. ESP-IDF també proporciona una documentació completa del controlador per facilitar-ne l'ús.
Capítol 4. Configuració de l'entorn de desenvolupament 35

· freertos: aquest component conté el codi FreeRTOS complet. A part de proporcionar un suport integral per a aquest sistema operatiu, Espressif també ha ampliat el seu suport als xips de doble nucli. Per als xips de doble nucli com ESP32 i ESP32-S3, els usuaris poden crear tasques en nuclis específics.
b. Document directori docs
Aquest directori conté documents de desenvolupament relacionats amb ESP-IDF, com ara la Guia d'inici, el Manual de referència de l'API, la Guia de desenvolupament, etc.
NOTA Després de ser compilat per eines automatitzades, el contingut d'aquest directori es desplega a https://docs.espressif.com/projects/esp-idf. Assegureu-vos de canviar l'objectiu del document a ESP32-C3 i seleccioneu la versió ESP-IDF especificada.
c. Eines d'eines de script
Aquest directori conté eines de compilació de front-end d'ús comú com idf.py i l'eina de terminal de monitor idf_monitor.py, etc. El subdirectori cmake també conté l'script principal files del sistema de compilació, que serveix com a base per implementar les regles de compilació ESP-IDF. Quan s'afegeixen les variables d'entorn, el contingut del directori d'eines s'afegeix a la variable d'entorn del sistema, la qual cosa permet que idf.py s'executi directament sota la ruta del projecte.
d. Example directori del programa examples
Aquest directori inclou una gran col·lecció d'ESP-IDF exampprogrames que demostren l'ús de les API de components. L'exampEls fitxers s'organitzen en diversos subdirectoris segons les seves categories:
· començar: aquest subdirectori inclou exampcom "hola món" i "parpellejar" per ajudar els usuaris a comprendre els conceptes bàsics.
· bluetooth: podeu trobar relacionats amb Bluetooth per exempleampaquí, incloent Bluetooth LE Mesh, Bluetooth LE HID, BluFi i molt més.
· wifi: aquest subdirectori se centra en Wi-Fi exampels, inclosos programes bàsics com Wi-Fi SoftAP, Wi-Fi Station, espnow, així com el protocol de comunicació propietari examples d'Espressif. També inclou múltiples capes d'aplicació, exampfitxers basats en Wi-Fi, com ara Iperf, Sniffer i Smart Config.
· perifèrics: aquest ampli subdirectori es divideix a més en nombroses subcarpetes basades en noms de perifèrics. Conté principalment un controlador perifèric examples per a xips Espressif, amb cada example amb diversos subexamples. Per exemple, el subdirectori gpio inclou dos examples: GPIO i teclat matricial GPIO. És important tenir en compte que no tots els exampEls fitxers d'aquest directori són aplicables a ESP32-C3.
36 Aventura sense fil ESP32-C3: una guia completa per a IoT

Per exampel, l'exampEls fitxers USB/host només són aplicables als perifèrics amb maquinari USB Host (com l'ESP32-S3) i l'ESP32-C3 no té aquest perifèric. El sistema de compilació normalment proporciona indicacions quan s'estableix l'objectiu. El README file de cada example llista els xips compatibles. · protocols: aquest subdirectori conté exampfitxers per a diversos protocols de comunicació, inclosos MQTT, HTTP, HTTP Server, PPPoS, Modbus, mDNS, SNTP, que cobreixen una àmplia gamma de protocols de comunicació, per exemple.ampels requerits per al desenvolupament d'IoT. · aprovisionament: aquí trobareu l'aprovisionament exampfitxers per a diferents mètodes, com ara el subministrament de Wi-Fi i el subministrament de Bluetooth LE. · sistema: aquest subdirectori inclou la depuració del sistema, exampfitxers (p. ex., seguiment de pila, seguiment en temps d'execució, monitorització de tasques), gestió d'energia, pamples (per exemple, diversos modes de repòs, coprocessadors) i exampfitxers relacionats amb components comuns del sistema com el terminal de la consola, el bucle d'esdeveniments i el temporitzador del sistema. · emmagatzematge: dins d'aquest subdirectori, descobrireu examples de tots file sistemes i mecanismes d'emmagatzematge compatibles amb ESP-IDF (com ara lectura i escriptura de Flash, targeta SD i altres mitjans d'emmagatzematge), així com exampfitxers d'emmagatzematge no volàtil (NVS), FatFS, SPIFFS i altres file operacions del sistema. · seguretat: aquest subdirectori conté exampfitxers relacionats amb el xifratge flash. (2) Directori de la cadena d'eines de compilació ESP-IDF (/.espressif), tal com es mostra a la figura 4.3.
Figura 4.3. Directori de la cadena d'eines de compilació ESP-IDF
Capítol 4. Configuració de l'entorn de desenvolupament 37

a. Directori de distribució de programari dist
La cadena d'eines ESP-IDF i altres programes es distribueixen en forma de paquets comprimits. Durant el procés d'instal·lació, l'eina d'instal·lació primer baixa el paquet comprimit al directori dist i després l'extreu al directori especificat. Un cop finalitzada la instal·lació, el contingut d'aquest directori es pot eliminar de manera segura.
b. Directori d'entorns virtuals de Python python env
Les diferents versions d'ESP-IDF es basen en versions específiques de paquets Python. Instal·lar aquests paquets directament al mateix host pot provocar conflictes entre les versions de paquets. Per solucionar-ho, ESP-IDF utilitza entorns virtuals Python per aïllar diferents versions de paquets. Amb aquest mecanisme, els desenvolupadors poden instal·lar diverses versions d'ESP-IDF al mateix host i canviar fàcilment entre elles mitjançant la importació de diferents variables d'entorn.
c. Eines de directori de cadena d'eines de compilació ESP-IDF
Aquest directori conté principalment eines de compilació creuada necessàries per compilar projectes ESP-IDF, com ara les eines CMake, les eines de compilació Ninja i la cadena d'eines gcc que genera el programa executable final. A més, aquest directori allotja la biblioteca estàndard del llenguatge C/C++ juntament amb la capçalera corresponent files. Si un programa fa referència a una capçalera del sistema file com #inclou , la cadena d'eines de compilació localitzarà el fitxer stdio.h file dins d'aquest directori.
4.2 Configuració de l'entorn de desenvolupament ESP-IDF
L'entorn de desenvolupament ESP-IDF admet sistemes operatius convencionals com Windows, Linux i macOS. Aquesta secció presentarà com configurar l'entorn de desenvolupament a cada sistema. Es recomana desenvolupar ESP32-C3 al sistema Linux, que s'introduirà en detall aquí. Moltes instruccions són aplicables a totes les plataformes a causa de la similitud de les eines de desenvolupament. Per tant, es recomana llegir atentament el contingut d'aquesta secció.
NOTA Podeu consultar els documents en línia disponibles a https://bookc3.espressif.com/esp32c3, que proporcionen les ordres esmentades en aquesta secció.
4.2.1 Configuració de l'entorn de desenvolupament ESP-IDF a Linux
Les eines de desenvolupament i depuració de GNU necessàries per a l'entorn de desenvolupament ESP-IDF són natives del sistema Linux. A més, el terminal de línia d'ordres a Linux és potent i fàcil d'utilitzar, el que el converteix en una opció ideal per al desenvolupament d'ESP32-C3. Tu pots
38 Aventura sense fil ESP32-C3: una guia completa per a IoT

seleccioneu la vostra distribució Linux preferida, però us recomanem que utilitzeu Ubuntu o altres sistemes basats en Debian. Aquesta secció proporciona orientació sobre com configurar l'entorn de desenvolupament ESP-IDF a Ubuntu 20.04.
1. Instal·leu els paquets necessaris
Obriu un nou terminal i executeu l'ordre següent per instal·lar tots els paquets necessaris. L'ordre saltarà automàticament els paquets que ja estan instal·lats.
$ sudo apt-get install git wget flex bison gperf python3 python3-pip python3setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
CONSELLS Heu d'utilitzar el compte d'administrador i la contrasenya per a l'ordre anterior. Per defecte, no es mostrarà cap informació en introduir la contrasenya. Simplement premeu la tecla "Enter" per continuar el procediment.
Git és una eina de gestió de codi clau a ESP-IDF. Després de configurar correctament l'entorn de desenvolupament, podeu utilitzar l'ordre git log per view tots els canvis de codi fets des de la creació d'ESP-IDF. A més, Git també s'utilitza a ESP-IDF per confirmar la informació de la versió, que és necessària per instal·lar la cadena d'eines correcta corresponent a versions específiques. Juntament amb Git, altres eines importants del sistema inclouen Python. ESP-IDF incorpora nombrosos scripts d'automatització escrits en Python. Eines com CMake, Ninja-build i Ccache s'utilitzen àmpliament en projectes C/C++ i serveixen com a eines de compilació i creació de codi per defecte a ESP-IDF. libusb-1.0-0 i dfu-util són els controladors principals utilitzats per a la comunicació sèrie USB i la gravació de microprogramari. Un cop instal·lats els paquets de programari, podeu utilitzar l'apt show comanda per obtenir descripcions detallades de cada paquet. Per example, utilitzeu apt show git per imprimir la informació de descripció de l'eina Git.
P: Què cal fer si la versió de Python no és compatible? R: ESP-IDF v4.3 requereix una versió de Python que no sigui inferior a la v3.6. Per a versions anteriors d'Ubuntu, descarregueu i instal·leu manualment una versió superior de Python i configureu Python3 com a entorn Python predeterminat. Podeu trobar instruccions detallades cercant la paraula clau update-alternatives python.
2. Baixeu el codi del repositori ESP-IDF
Obriu un terminal i creeu una carpeta anomenada esp al vostre directori d'inici mitjançant l'ordre mkdir. Si ho preferiu, podeu triar un nom diferent per a la carpeta. Utilitzeu l'ordre cd per entrar a la carpeta.
Capítol 4. Configuració de l'entorn de desenvolupament 39

$ mkdir -p /esp $ cd /esp
Utilitzeu l'ordre git clone per descarregar el codi del repositori ESP-IDF, tal com es mostra a continuació:
$ git clone -b v4.3.2 –recursiu https://github.com/espressif/esp-idf.git
A l'ordre anterior, el paràmetre -b v4.3.2 especifica la versió a descarregar (en aquest cas, la versió 4.3.2). El paràmetre –recursive garanteix que tots els subrepositoris d'ESP-IDF es descarreguen de forma recursiva. Podeu trobar informació sobre subrepositoris als .gitmodules file.
3. Instal·leu la cadena d'eines de desenvolupament ESP-IDF
Espressif proporciona un script automatitzat install.sh per descarregar i instal·lar la cadena d'eines. Aquest script comprova la versió actual de l'ESP-IDF i l'entorn del sistema operatiu, i després baixa i instal·la la versió adequada dels paquets d'eines de Python i les cadenes d'eines de compilació. El camí d'instal·lació predeterminat per a la cadena d'eines és /.espressif. Tot el que heu de fer és anar al directori esp-idf i executar install.sh.
$ cd /esp/esp-idf $ ./install.sh
Si instal·leu la cadena d'eines correctament, el terminal mostrarà:
Tot fet!
En aquest punt, heu configurat correctament l'entorn de desenvolupament ESP-IDF.
4.2.2 Configuració de l'entorn de desenvolupament ESP-IDF a Windows
1. Baixeu l'instal·lador d'eines ESP-IDF
CONSELLS Es recomana configurar l'entorn de desenvolupament ESP-IDF a Windows 10 o superior. Podeu descarregar l'instal·lador des de https://dl.espressif.com/dl/esp-idf/. L'instal·lador també és un programari de codi obert, i el seu codi font pot ser vieweditat a https: //github.com/espressif/idf-installer.
· Instal·lador d'eines ESP-IDF en línia
Aquest instal·lador és relativament petit, d'uns 4 MB de mida, i altres paquets i codi es baixaran durant el procés d'instal·lació. L'avançtagL'instal·lador en línia és que no només es poden descarregar paquets de programari i codi sota demanda durant el procés d'instal·lació, sinó que també permet la instal·lació de totes les versions disponibles d'ESP-IDF i la darrera branca del codi GitHub (com ara la branca mestra). . La desavantatgetagÉs que requereix una connexió de xarxa durant el procés d'instal·lació, cosa que pot provocar un error d'instal·lació a causa de problemes de xarxa.
40 Aventura sense fil ESP32-C3: una guia completa per a IoT

· Instal·lador d'eines ESP-IDF fora de línia Aquest instal·lador és més gran, aproximadament 1 GB de mida i conté tots els paquets de programari i el codi necessaris per a la configuració de l'entorn. El principal avantatgetagL'instal·lador fora de línia és que es pot utilitzar en ordinadors sense accés a Internet i, en general, té una taxa d'èxit d'instal·lació més alta. Cal tenir en compte que l'instal·lador fora de línia només pot instal·lar versions estables d'ESP-IDF identificades per v*.* o v*.*.*.
2. Executeu l'instal·lador d'eines ESP-IDF Després de descarregar una versió adequada de l'instal·lador (per exemple, feu servir ESP-IDF Tools Offline 4.3.2ample aquí), feu doble clic a l'exe file per iniciar la interfície d'instal·lació ESP-IDF. A continuació es mostra com instal·lar la versió estable d'ESP-IDF v4.3.2 mitjançant l'instal·lador fora de línia.
(1) A la interfície "Seleccioneu l'idioma d'instal·lació" que es mostra a la figura 4.4, seleccioneu l'idioma que voleu utilitzar a la llista desplegable.
Figura 4.4. Interfície "Seleccioneu l'idioma d'instal·lació" (2) Després de seleccionar l'idioma, feu clic a "D'acord" per obrir la interfície "Acord de llicència"
(vegeu la figura 4.5). Després de llegir atentament l'acord de llicència d'instal·lació, seleccioneu "Accepto l'acord" i feu clic a "Següent".
Figura 4.5. Interfície “Acord de llicència” Capítol 4. Configuració de l'entorn de desenvolupament 41

(3) Review la configuració del sistema a la interfície "Comprovació del sistema prèvia a la instal·lació" (vegeu la figura 4.6). Comproveu la versió de Windows i la informació del programari antivirus instal·lat. Feu clic a "Següent" si tots els elements de configuració són normals. En cas contrari, podeu fer clic a "Registre complet" per obtenir solucions basades en elements clau.
Figura 4.6. CONSELLS de la interfície "Comprovació del sistema abans de la instal·lació".
Podeu enviar registres a https://github.com/espressif/idf-installer/issues per obtenir ajuda. (4) Seleccioneu el directori d'instal·lació de l'ESP-IDF. Aquí, seleccioneu D:/.espressif, tal com es mostra a
Figura 4.7 i feu clic a "Següent". Tingueu en compte que .espressif aquí és un directori ocult. Un cop finalitzada la instal·lació, podeu fer-ho view els continguts específics d'aquest directori obrint el fitxer file gestor i mostra elements ocults.
Figura 4.7. Seleccioneu el directori d'instal·lació d'ESP-IDF 42 ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT

(5) Comproveu els components que cal instal·lar, tal com es mostra a la figura 4.8. Es recomana utilitzar l'opció predeterminada, és a dir, completar la instal·lació i després fer clic a "Següent".
Figura 4.8. Seleccioneu els components a instal·lar (6) Confirmeu els components que voleu instal·lar i feu clic a "Instal·la" per iniciar la instal·lació automatitzada.
procés d'instal·lació, tal com es mostra a la figura 4.9. El procés d'instal·lació pot durar desenes de minuts i la barra de progrés del procés d'instal·lació es mostra a la figura 4.10. Si us plau, espereu pacientment.
Figura 4.9. Preparació per a la instal·lació (7) Un cop finalitzada la instal·lació, es recomana marcar "Registra l'ESP-IDF
Eines executables com a exclusions de Windows Defender..." per evitar que el programari antivirus s'elimini files. L'addició d'elements d'exclusió també pot saltar les exploracions freqüents de l'antivirus
Capítol 4. Configuració de l'entorn de desenvolupament 43

Figura 4.10. Programari de barra de progrés de la instal·lació, millorant considerablement l'eficiència de compilació de codi del sistema Windows. Feu clic a "Finalitzar" per completar la instal·lació de l'entorn de desenvolupament, tal com es mostra a la figura 4.11. Podeu optar per marcar "Executar l'entorn ESP-IDF PowerShell" o "Executar el símbol d'ordres ESP-IDF". Executeu la finestra de compilació directament després de la instal·lació per assegurar-vos que l'entorn de desenvolupament funcioni amb normalitat.
Figura 4.11. Instal·lació completada (8) Obriu l'entorn de desenvolupament instal·lat a la llista de programes (o bé ESP-IDF 4.3
El terminal PowerShell CMD o ESP-IDF 4.3, com es mostra a la figura 4.12), i la variable d'entorn ESP-IDF s'afegiran automàticament quan s'executen al terminal. Després d'això, podeu utilitzar l'ordre idf.py per a les operacions. El CMD ESP-IDF 4.3 obert es mostra a la figura 4.13. 44 Aventura sense fil ESP32-C3: una guia completa per a IoT

Figura 4.12. Entorn de desenvolupament instal·lat
Figura 4.13. ESP-IDF 4.3 CMD
4.2.3 Configuració de l'entorn de desenvolupament ESP-IDF al Mac
El procés d'instal·lació de l'entorn de desenvolupament ESP-IDF en un sistema Mac és el mateix que en un sistema Linux. Les ordres per descarregar el codi del dipòsit i instal·lar la cadena d'eines són exactament les mateixes. Només les ordres per instal·lar paquets de dependència són lleugerament diferents. 1. Instal·leu paquets de dependència Obriu un terminal i instal·leu pip, l'eina de gestió de paquets de Python, executant l'ordre següent:
% sudo easy install pip
Instal·leu Homebrew, una eina de gestió de paquets per a macOS, executant l'ordre següent:
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Instal·leu els paquets de dependència necessaris executant l'ordre següent:
% brew python3 instal·la cmake ninja ccache dfu-util
2. Baixeu el codi del repositori ESP-IDF Seguiu les instruccions proporcionades a la secció 4.2.1 per descarregar el codi del repositori ESP-IDF. Els passos són els mateixos que per descarregar en un sistema Linux.
Capítol 4. Configuració de l'entorn de desenvolupament 45

3. Instal·leu la cadena d'eines de desenvolupament ESP-IDF
Seguiu les instruccions proporcionades a la secció 4.2.1 per instal·lar la cadena d'eines de desenvolupament ESP-IDF. Els passos són els mateixos que per a la instal·lació en un sistema Linux.
4.2.4 Instal·lació del codi VS
De manera predeterminada, l'SDK ESP-IDF no inclou una eina d'edició de codi (tot i que l'últim instal·lador ESP-IDF per a Windows ofereix l'opció d'instal·lar ESP-IDF Eclipse). Podeu utilitzar qualsevol eina d'edició de text que vulgueu per editar el codi i després compilar-lo mitjançant ordres del terminal.
Una eina d'edició de codi popular és VS Code (Visual Studio Code), que és un editor de codi gratuït i ric en funcions amb una interfície fàcil d'utilitzar. Ofereix diverses plugins que proporcionen funcionalitats com ara navegació per codi, ressaltat de sintaxi, control de versions de Git i integració de terminals. A més, Espressif ha desenvolupat un connector dedicat anomenat Espressif IDF per a VS Code, que simplifica la configuració i la depuració del projecte.
Podeu utilitzar l'ordre de codi al terminal per obrir ràpidament la carpeta actual a VS Code. Alternativament, podeu utilitzar la drecera Ctrl+ per obrir la consola del terminal predeterminada del sistema dins de VS Code.
CONSELLS Es recomana utilitzar VS Code per al desenvolupament del codi ESP32-C3. Baixeu i instal·leu la darrera versió de VS Code a https://code.visualstudio.com/.
4.2.5 Introducció als entorns de desenvolupament de tercers
A més de l'entorn de desenvolupament oficial ESP-IDF, que utilitza principalment el llenguatge C, ESP32-C3 també admet altres llenguatges de programació convencionals i una àmplia gamma d'entorns de desenvolupament de tercers. Algunes opcions notables inclouen:
Arduino: una plataforma de codi obert tant per a maquinari com per a programari, que admet diversos microcontroladors, inclòs ESP32-C3.
Utilitza el llenguatge C++ i ofereix una API simplificada i estandarditzada, comunament anomenada llenguatge Arduino. Arduino s'utilitza àmpliament en el desenvolupament de prototips i en contextos educatius. Proporciona un paquet de programari extensible i un IDE que permet una fàcil compilació i flasheig.
MicroPython: un intèrpret de llenguatge Python 3 dissenyat per funcionar en plataformes de microcontroladors incrustats.
Amb un llenguatge de script senzill, pot accedir directament als recursos perifèrics de l'ESP32-C3 (com ara UART, SPI i I2C) i funcions de comunicació (com Wi-Fi i Bluetooth LE).
46 Aventura sense fil ESP32-C3: una guia completa per a IoT

Això simplifica la interacció del maquinari. MicroPython, combinat amb l'extensa biblioteca d'operacions matemàtiques de Python, permet la implementació d'algoritmes complexos a ESP32-C3, facilitant el desenvolupament d'aplicacions relacionades amb la IA. Com a llenguatge d'escriptura, no hi ha necessitat de compilacions repetides; es poden fer modificacions i es poden executar scripts directament.
NodeMCU: un intèrpret de llenguatge LUA desenvolupat per a xips de la sèrie ESP.
Admet gairebé totes les funcions perifèriques dels xips ESP i és més lleuger que MicroPython. De manera similar a MicroPython, NodeMCU utilitza un llenguatge de script, eliminant la necessitat de compilacions repetides.
A més, ESP32-C3 també és compatible amb els sistemes operatius NuttX i Zephyr. NuttX és un sistema operatiu en temps real que proporciona interfícies compatibles amb POSIX, millorant la portabilitat de les aplicacions. Zephyr és un petit sistema operatiu en temps real dissenyat específicament per a aplicacions IoT. Inclou nombroses biblioteques de programari necessàries per al desenvolupament d'IoT, evolucionant gradualment cap a un ecosistema de programari complet.
Aquest llibre no proporciona instruccions detallades d'instal·lació per als entorns de desenvolupament esmentats anteriorment. Podeu instal·lar un entorn de desenvolupament segons els vostres requisits seguint la documentació i les instruccions corresponents.
4.3 Sistema de compilació ESP-IDF
4.3.1 Conceptes bàsics del sistema de compilació
Un projecte ESP-IDF és una col·lecció d'un programa principal amb una funció d'entrada i múltiples components funcionals independents. Per example, un projecte que controla interruptors LED consisteix principalment en un programa principal d'entrada i un component de controlador que controla GPIO. Si voleu realitzar el control remot LED, també heu d'afegir Wi-Fi, pila de protocols TCP/IP, etc.
El sistema de compilació pot compilar, enllaçar i generar un executable files (.bin) per al codi mitjançant un conjunt de regles de construcció. El sistema de compilació d'ESP-IDF v4.0 i versions superiors es basa en CMake de manera predeterminada, i l'script de compilació CMakeLists.txt es pot utilitzar per controlar el comportament de compilació del codi. A més de donar suport a la sintaxi bàsica de CMake, el sistema de compilació ESP-IDF també defineix un conjunt de regles de compilació per defecte i funcions de CMake, i podeu escriure l'script de compilació amb declaracions senzilles.
4.3.2 Projecte File Estructura
Un projecte és una carpeta que conté un programa d'entrada principal, components definits per l'usuari i files necessari per crear aplicacions executables, com ara scripts de compilació, configuració
Capítol 4. Configuració de l'entorn de desenvolupament 47

files, taules de particions, etc. Els projectes es poden copiar i passar, i el mateix executable file es pot compilar i generar en màquines amb la mateixa versió de l'entorn de desenvolupament ESP-IDF. Un projecte ESP-IDF típic file l'estructura es mostra a la figura 4.14.
Figura 4.14. Projecte típic ESP-IDF file estructura Com que l'ESP-IDF admet múltiples xips IoT d'Espressif, com ara ESP32, sèrie ESP32-S, sèrie ESP32-C, sèrie ESP32-H, etc., cal determinar un objectiu abans de compilar el codi. L'objectiu és tant el dispositiu de maquinari que executa el programa d'aplicació com l'objectiu de compilació del sistema de compilació. En funció de les vostres necessitats, podeu especificar un o més objectius per al vostre projecte. Per exampli, mitjançant l'ordre idf.py set-target esp32c3, podeu establir l'objectiu de compilació a ESP32-C3, durant el qual es carregaran els paràmetres predeterminats i el camí de la cadena de l'eina de compilació per a ESP32C3. Després de la compilació, es pot generar un programa executable per a ESP32C3. També podeu tornar a executar l'ordre set-target per establir un objectiu diferent i el sistema de compilació netejarà i reconfigurarà automàticament. Components
Els components d'ESP-IDF són unitats de codi modulars i independents gestionades dins del sistema de compilació. S'organitzen com a carpetes, amb el nom de la carpeta que representa el nom del component per defecte. Cada component té el seu propi script de compilació que 48 ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT

especifica els seus paràmetres de compilació i dependències. Durant el procés de compilació, els components es compilen en biblioteques estàtiques separades (.a files) i eventualment combinat amb altres components per formar el programa d'aplicació.
ESP-IDF proporciona funcions essencials, com ara el sistema operatiu, els controladors perifèrics i la pila de protocols de xarxa, en forma de components. Aquests components s'emmagatzemen al directori de components situat dins del directori arrel ESP-IDF. Els desenvolupadors no necessiten copiar aquests components al directori de components de myProject. En canvi, només han d'especificar les relacions de dependència d'aquests components al CMakeLists.txt del projecte. file utilitzant les directives REQUIRES o PRIV_REQUIRES. El sistema de compilació localitzarà i compilarà automàticament els components necessaris.
Per tant, el directori de components a myProject no és necessari. Només s'utilitza per incloure alguns components personalitzats del projecte, que poden ser biblioteques de tercers o codi definit per l'usuari. A més, els components es poden obtenir des de qualsevol directori que no sigui ESP-IDF o el projecte actual, com ara un projecte de codi obert desat en un altre directori. En aquest cas, només cal que afegiu la ruta del component establint la variable EXTRA_COMPONENT_DIRS al CMakeLists.txt al directori arrel. Aquest directori substituirà qualsevol component ESP-IDF amb el mateix nom, assegurant-se que s'utilitza el component correcte.
Programa d'entrada principal El directori principal dins del projecte segueix el mateix file estructura com altres components (p. ex., component1). Tanmateix, té una importància especial ja que és un component obligatori que ha d'existir en cada projecte. El directori principal conté el codi font del projecte i el punt d'entrada del programa d'usuari, normalment anomenat app_main. Per defecte, l'execució del programa d'usuari comença des d'aquest punt d'entrada. El component principal també difereix perquè depèn automàticament de tots els components del camí de cerca. Per tant, no cal indicar explícitament les dependències mitjançant les directives REQUIRES o PRIV_REQUIRES al CMakeLists.txt file.
Configuració file El directori arrel del projecte conté una configuració file anomenat sdkconfig, que conté els paràmetres de configuració de tots els components del projecte. El fitxer sdkconfig file es genera automàticament pel sistema de compilació i es pot modificar i regenerar mitjançant l'ordre idf.py menuconfig. Les opcions de menuconfig provenen principalment del Kconfig.projbuild del projecte i del Kconfig dels components. Els desenvolupadors de components generalment afegeixen elements de configuració a Kconfig per fer que el component sigui flexible i configurable.
Directori de compilació Per defecte, el directori de compilació dins del projecte emmagatzema elements intermedis files i la fi-
Capítol 4. Configuració de l'entorn de desenvolupament 49

programes executables finals generats per l'ordre de compilació idf.py. En general, no és necessari accedir directament al contingut del directori de compilació. ESP-IDF proporciona ordres predefinides per interactuar amb el directori, com ara utilitzar l'ordre flash idf.py per localitzar automàticament el binari compilat file i flasheu-lo a l'adreça flash especificada o utilitzeu l'ordre idf.py fullclean per netejar tot el directori de compilació.
Taula de particions (partitions.csv) Cada projecte requereix una taula de particions per dividir l'espai de flash i especificar la mida i l'adreça inicial del programa executable i l'espai de dades d'usuari. L'ordre idf.py flash o el programa d'actualització OTA flashejarà el microprogramari a l'adreça corresponent segons aquesta taula. ESP-IDF proporciona diverses taules de particions predeterminades a components/partition_table, com ara partitions_singleapp.csv i partitions_two_ota.csv, que es poden seleccionar a menuconfig.
Si la taula de particions per defecte del sistema no pot complir els requisits del projecte, es pot afegir un partitions.csv personalitzat al directori del projecte i seleccionar-lo a menuconfig.
4.3.3 Regles de compilació per defecte del sistema de compilació
Regles per substituir components amb el mateix nom Durant el procés de cerca de components, el sistema de compilació segueix un ordre específic. Primer cerca components interns d'ESP-IDF, després cerca components del projecte de l'usuari i, finalment, cerca components a EXTRA_COMPONENT_DIRS. En els casos en què diversos directoris contenen components amb el mateix nom, el component que es troba a l'últim directori anul·larà els components anteriors amb el mateix nom. Aquesta regla permet la personalització dels components ESP-IDF dins del projecte de l'usuari, mantenint intacte el codi ESP-IDF original.
Regles per incloure components comuns per defecte Com s'ha esmentat a la secció 4.3.2, els components han d'especificar explícitament les seves dependències d'altres components al CMakeLists.txt. Tanmateix, els components comuns com ara els freertos s'inclouen automàticament al sistema de compilació de manera predeterminada, encara que les seves relacions de dependència no estiguin definides explícitament a l'script de compilació. Els components comuns d'ESP-IDF inclouen freertos, Newlib, heap, log, soc, esp_rom, esp_common, xtensa/riscv i cxx. L'ús d'aquests components comuns evita el treball repetitiu en escriure CMakeLists.txt i el fa més concís.
Regles per anul·lar els elements de configuració Els desenvolupadors poden afegir paràmetres de configuració predeterminats afegint una configuració predeterminada file anomenat sdkconfig.defaults al projecte. Per exampli, afegint CONFIG_LOG_
50 Aventura sense fil ESP32-C3: una guia completa per a IoT

DEFAULT_LEVEL_NONE = es pot configurar la interfície UART perquè no imprimeixi dades de registre de manera predeterminada. A més, si cal establir paràmetres específics per a un objectiu concret, una configuració file Es pot afegir sdkconfig.defaults.TARGET_NAME, on TARGET_NAME pot ser esp32s2, esp32c3, etc. Aquestes configuracions files s'importen a l'sdkconfig durant la compilació, amb la configuració general per defecte file sdkconfig.defaults s'importa primer, seguit de la configuració específica de l'objectiu file, com ara sdkconfig.defaults.esp32c3. En els casos en què hi ha elements de configuració amb el mateix nom, aquesta darrera configuració file anul·larà l'anterior.
4.3.4 Introducció a l'script de compilació
Quan es desenvolupen un projecte amb ESP-IDF, els desenvolupadors no només han d'escriure codi font sinó que també han d'escriure CMakeLists.txt per al projecte i els components. CMakeLists.txt és un text file, també conegut com a script de compilació, que defineix una sèrie d'objectes de compilació, elements de configuració de compilació i ordres per guiar el procés de compilació del codi font. El sistema de compilació d'ESP-IDF v4.3.2 es basa en CMake. A més de donar suport a les ordres i funcions natives de CMake, també defineix una sèrie de funcions personalitzades, cosa que fa que sigui molt més fàcil escriure scripts de compilació.
Els scripts de compilació a ESP-IDF inclouen principalment el script de compilació del projecte i els scripts de compilació de components. El CMakeLists.txt del directori arrel del projecte s'anomena script de compilació del projecte, que guia el procés de compilació de tot el projecte. Un script bàsic de compilació de projectes normalment inclou les tres línies següents:
1. cmake_minimum_required(VERSIÓ 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. projecte(myProject)
Entre ells, cal col·locar el cmake_minimum_required (VERSIÓ 3.5) a la primera línia, que s'utilitza per indicar el número mínim de versió de CMake requerit pel projecte. Les versions més noves de CMake generalment són compatibles amb versions anteriors, així que ajusteu el número de versió en conseqüència quan utilitzeu ordres CMake més recents per garantir la compatibilitat.
include($ENV {IDF_PATH}/tools/cmake/project.cmake) importa elements de configuració predefinits i ordres del sistema de compilació ESP-IDF, incloses les regles de compilació per defecte del sistema de compilació descrit a la Secció 4.3.3. project(myProject) crea el projecte i n'especifica el nom. Aquest nom s'utilitzarà com a binari de sortida final file nom, és a dir, myProject.elf i myProject.bin.
Un projecte pot tenir diversos components, inclòs el component principal. El directori de nivell superior de cada component conté un CMakeLists.txt file, que s'anomena script de compilació de components. Els scripts de compilació de components s'utilitzen principalment per especificar dependències de components, paràmetres de configuració i codi font files, i la capçalera inclosa files per
Capítol 4. Configuració de l'entorn de desenvolupament 51

compilació. Amb la funció personalitzada d'ESP-IDF idf_component_register, el codi mínim necessari per a un script de compilació de components és el següent:

1. idf_component_register(SRCS “src1.c”

2.

INCLUDE_DIRS "incloure"

3.

REQUEREIX component 1)

El paràmetre SRCS proporciona una llista de fonts files en el component, separats per espais si n'hi ha múltiples files. El paràmetre INCLUDE_DIRS proporciona una llista de capçalera pública file directoris per al component, que s'afegiran a la ruta de cerca d'inclusió per a altres components que depenguin del component actual. El paràmetre REQUIRES identifica les dependències del component públic per al component actual. És necessari que els components indiquin explícitament de quins components depenen, com ara el component2 en funció del component1. Tanmateix, per al component principal, que depèn de tots els components per defecte, es pot ometre el paràmetre REQUIRES.

A més, les ordres natives CMake també es poden utilitzar a l'script de compilació. Per example, utilitzeu l'ordre set per establir variables, com ara set(VARIABLE “VALUE”).

4.3.5 Introducció a les ordres comuns
ESP-IDF utilitza CMake (eina de configuració de projectes), Ninja (eina de creació de projectes) i esptool (eina flash) en el procés de compilació de codi. Cada eina té un paper diferent en el procés de compilació, creació i flash, i també admet diferents ordres operatives. Per facilitar el funcionament de l'usuari, ESP-IDF afegeix una interfície idf.py unificada que permet cridar ràpidament les ordres anteriors.
Abans d'utilitzar idf.py, assegureu-vos que:
· S'ha afegit la variable d'entorn IDF_PATH d'ESP-IDF al terminal actual. · El directori d'execució d'ordres és el directori arrel del projecte, que inclou el
script de compilació del projecte CMakeLists.txt.
Les ordres habituals d'idf.py són les següents:
· idf.py –help: mostra una llista d'ordres i les seves instruccions d'ús. · idf.py set-target : establint la compilació taidf.py fullcleanrget, tal
com a substitució amb esp32c3. · idf.py menuconfig: llançament de menuconfig, una configuració gràfica del terminal
eina, que pot seleccionar o modificar les opcions de configuració, i els resultats de la configuració es guarden a l'sdkconfig file. · compilació idf.py: iniciant la compilació de codi. L'intermedi files i el programa executable final generat per la compilació es desarà al directori de compilació del projecte per defecte. El procés de compilació és incremental, el que significa que si només hi ha una font file està modificat, només el modificat file es compilarà la propera vegada.

52 Aventura sense fil ESP32-C3: una guia completa per a IoT

· idf.py clean: neteja de l'intermedi files generades per la compilació del projecte. Tot el projecte es veurà obligat a compilar en la propera compilació. Tingueu en compte que la configuració de CMake i les modificacions de configuració fetes per menuconfig no s'eliminaran durant la neteja.
· idf.py fullclean: eliminació de tot el directori de compilació, inclosa tota la sortida de configuració de CMake files. Quan torni a crear el projecte, CMake configurarà el projecte des de zero. Tingueu en compte que aquesta ordre ho suprimirà tot de forma recursiva files al directori de compilació, així que utilitzeu-lo amb precaució i la configuració del projecte file no s'eliminarà.
· idf.py flash: flasheja el programa binari executable file generat per la compilació a l'objectiu ESP32-C3. Les opcions -p i -b s'utilitzen per establir el nom del dispositiu del port sèrie i la velocitat en baudis per parpellejar, respectivament. Si no s'especifiquen aquestes dues opcions, el port sèrie es detectarà automàticament i s'utilitzarà la velocitat de transmissió predeterminada.
· monitor idf.py: mostra la sortida del port sèrie de l'ESP32-C3 objectiu. L'opció -p es pot utilitzar per especificar el nom del dispositiu del port sèrie de l'amfitrió. Durant la impressió del port sèrie, premeu la combinació de tecles Ctrl+] per sortir del monitor.
Les ordres anteriors també es poden combinar segons sigui necessari. Per example, l'ordre idf.py build flash monitor realitzarà la compilació de codi, flashejarà i obrirà el monitor del port sèrie en seqüència.
Podeu visitar https://bookc3.espressif.com/build-system per saber més sobre el sistema de compilació ESP-IDF.
4.4 Pràctica: compilació Exampel programa "Parpelleig"
Ex. 4.4.1ampl Anàlisi
Aquesta secció agafarà el programa Blink com a exampel per analitzar el file estructura i normes de codificació d'un projecte real en detall. El programa Blink implementa l'efecte de parpelleig del LED i el projecte es troba al directori examples/get-started/blink, que conté una font file, configuració files, i diversos scripts de compilació.
El projecte de llum intel·ligent presentat en aquest llibre es basa en aquest exempleampel programa. Les funcions s'afegiran gradualment en capítols posteriors per completar-lo finalment.
Codi font Per tal de demostrar tot el procés de desenvolupament, el programa Blink s'ha copiat a esp32c3-iot-projects/device firmware/1 blink.
L'estructura de directoris del projecte blink files es mostra a la figura 4.15.
El projecte blink conté només un directori principal, que és un component especial que
Capítol 4. Configuració de l'entorn de desenvolupament 53

Figura 4.15. File estructura de directoris del projecte blink

s'han d'incloure tal com es descriu a l'apartat 4.3.2. El directori principal s'utilitza principalment per emmagatzemar la implementació de la funció app_main(), que és el punt d'entrada al programa d'usuari. El projecte blink no inclou el directori de components, perquè aquest ex.ample només necessita utilitzar els components que vénen amb ESP-IDF i no requereix components addicionals. El CMakeLists.txt inclòs al projecte blink s'utilitza per guiar el procés de compilació, mentre que Kconfig.projbuild s'utilitza per afegir elements de configuració per a aquest ex.ample programa a menuconfig. Altres innecessaris files no afectarà la compilació del codi, per la qual cosa no es parlaran aquí. Una introducció detallada al projecte Blink files és el següent.

1. /*blink.c inclou la capçalera següent files*/

2. #inclou

//Capçalera de la biblioteca C estàndard file

3. #include “freertos/freeRTOS.h” //Capçalera principal de FreeRTOS file

4. #inclou “freertos/task.h”

//Capçalera de la tasca de FreeRTOS file

5. #include “sdkconfig.h”

//Capçalera de configuració file generat per kconfig

6. #inclou "driver/gpio.h"

//Capçalera del controlador GPIO file

La font file blink.c conté una sèrie de capçaleres files corresponent a la declaració de funció

cions. L'ESP-IDF generalment segueix l'ordre d'incloure la capçalera estàndard de la biblioteca files, lliureR-

Capçalera del TOS files, capçalera del conductor files, capçalera d'altres components files i la capçalera del projecte files.

L'ordre en què la capçalera files inclouen poden afectar el resultat final de la compilació, així que proveu-ho

seguir les regles per defecte. Cal tenir en compte que sdkconfig.h es genera automàticament

per kconfig i només es pot configurar mitjançant l'ordre idf.py menuconfig.

Modificació directa d'aquesta capçalera file es sobreescriurà.

1. /* Podeu seleccionar el GPIO corresponent al LED a idf.py menuconfig, i el resultat de la modificació de menuconfig és que el valor de CONFIG_BLINK

_GPIO es canviarà. També podeu modificar directament la definició de la macro

aquí i canvieu CONFIG_BLINK_GPIO a un valor fix.*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO

3. void app_main(void)

4. {

5.

/*Configura IO com a funció predeterminada de GPIO, activa el mode pull-up i

6.

desactivar els modes d'entrada i sortida*/

7.

gpio_reset_pin(BLINK_GPIO);

54 Aventura sense fil ESP32-C3: una guia completa per a IoT

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. }

/*Estableix GPIO al mode de sortida*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); mentre(1) {
/*Imprimeix el registre*/ printf(“Apagant el LEDn”); /*Apaga el LED (sortida de nivell baix)*/ gpio_set_level(BLINK_GPIO, 0); /*Retard (1000 ms)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf(“Engegant el LEDn”); /*Enceneu el LED (sortida de nivell alt)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000 / portTICK_PERIOD_MS); }

La funció app_main() a Blink example programa serveix com a punt d'entrada per als programes d'usuari. És una funció senzilla sense paràmetres i sense valor de retorn. Aquesta funció s'anomena després que el sistema hagi completat la inicialització, que inclou tasques com la inicialització del port sèrie del registre, la configuració de nucli simple/dual i la configuració del gos de vigilància.

La funció app_main() s'executa en el context d'una tasca anomenada main. La mida de la pila i la prioritat d'aquesta tasca es poden ajustar a menuconfig Componentconfig Common ESP relacionat.

Per a tasques senzilles com parpellejar un LED, tot el codi necessari es pot implementar directament a la funció app_main(). Normalment, això implica inicialitzar el GPIO corresponent al LED i utilitzar un bucle while(1) per activar i apagar el LED. Alternativament, podeu utilitzar l'API FreeRTOS per crear una tasca nova que gestioni el parpelleig del LED. Un cop creada la tasca nova, podeu sortir de la funció app_main().

El contingut de main/CMakeLists.txt file, que guia el procés de compilació del component principal, és el següent:

1. idf_component_register(SRCS “blink.c” INCLUDE_DIRS “.” )

Entre ells, main/CMakeLists.txt només crida a una funció del sistema de compilació, que és idf_component_register. De manera similar al CMakeLists.txt per a la majoria dels altres components, blink.c s'afegeix a SRCS i la font files afegits a SRCS es compilaran. Al mateix temps, ".", que representa el camí on es troba CMakeLists.txt, s'hauria d'afegir a INCLUDE_DIRS com a directoris de cerca per a la capçalera files. El contingut de CMakeLists.txt és el següent:
1. #Especifiqueu la v3.5 com la versió de CMake més antiga compatible amb el projecte actual 2. #Les versions inferiors a la v3.5 s'han d'actualitzar abans que la compilació continuï 3. cmake_minimum_required(VERSIÓ 3.5) 4. #Incloeu la configuració predeterminada de CMake de l'ESP -Sistema de compilació IDF

Capítol 4. Configuració de l'entorn de desenvolupament 55

5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. #Crear un projecte anomenat “blink” 7. project(myProject)
Entre ells, el CMakeLists.txt al directori arrel inclou principalment $ENV{IDF_ PATH}/tools/cmake/project.cmake, que és la configuració principal de CMake file proporcionada per ESP-IDF. S'utilitza per con

Documents/Recursos

Espressif Systems ESP32-C3 Wireless Adventure [pdfGuia de l'usuari
ESP32-C3 Wireless Adventure, ESP32-C3, Wireless Adventure, Adventure

Referències

Deixa un comentari

La teva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats *