ESP32-C3 Draadloos avontuur
ESP32-C3 Draadloos avontuur
Een uitgebreide gids voor IoT
Espressif Systems 12 juni 2023
Specificaties
- Product: ESP32-C3 Draadloos avontuur
- Fabrikant: Espressif Systems
- Datum: 12 juni 2023
Instructies voor productgebruik
Voorbereiding
Zorg ervoor dat u dat doet voordat u de ESP32-C3 Wireless Adventure gebruikt
bekend met de concepten en architectuur van IoT. Dit zal helpen
je begrijpt hoe het apparaat in het grotere IoT-ecosysteem past
en de mogelijke toepassingen ervan in slimme huizen.
Introductie en praktijk van IoT-projecten
In dit gedeelte leert u over typische IoT-projecten,
inclusief de basismodules voor gangbare IoT-apparaten, basismodules
van clientapplicaties en veelgebruikte IoT-cloudplatforms. Dit zal
bieden u een basis voor het begrijpen en creëren van uw
eigen IoT-projecten.
Praktijk: Smart Light Project
In dit oefenproject leer je hoe je een smart
licht met behulp van de ESP32-C3 Wireless Adventure. De projectstructuur,
functies, hardwarevoorbereiding en ontwikkelingsproces zullen zijn
gedetailleerd uitgelegd.
Projectstructuur
Het project bestaat uit verschillende onderdelen, waaronder de
ESP32-C3 Draadloos avontuur, LED's, sensoren en een cloud
achterkant.
Projectfuncties
Met het slimme lichtproject kunt u de helderheid regelen en
kleur van de LED's op afstand via een mobiele app of web
interface.
Hardwarevoorbereiding
Ter voorbereiding op het project moet u de benodigde gegevens verzamelen
noodzakelijke hardwarecomponenten, zoals de ESP32-C3 Wireless
Avonturenbord, LED's, weerstanden en een voeding.
Ontwikkelingsproces
Het ontwikkelproces omvat het opzetten van de ontwikkeling
omgeving, code schrijven om de LED's te besturen, verbinding maken met de
cloud-backend en het testen van de functionaliteit van de smart
licht.
Inleiding tot ESP RainMaker
ESP RainMaker is een krachtig raamwerk voor de ontwikkeling van IoT
apparaten. In dit gedeelte leert u wat ESP RainMaker is en wat het is
hoe het in uw projecten kan worden geïmplementeerd.
Wat is ESP RainMaker?
ESP RainMaker is een cloudgebaseerd platform dat een reeks biedt
tools en diensten voor het bouwen en beheren van IoT-apparaten.
De implementatie van ESP RainMaker
In dit gedeelte worden de verschillende componenten uitgelegd die hierbij betrokken zijn
implementatie van ESP RainMaker, inclusief de claimservice,
RainMaker Agent, cloud-backend en RainMaker Client.
Oefenen: kernpunten voor het ontwikkelen met ESP RainMaker
In dit oefengedeelte leert u de belangrijkste punten kennen
Houd hier rekening mee bij het ontwikkelen met ESP RainMaker. Dit is inclusief apparaat
claimen, gegevenssynchronisatie en gebruikersbeheer.
Kenmerken van ESP RainMaker
ESP RainMaker biedt verschillende functies voor gebruikersbeheer, end
gebruikers en beheerders. Deze functies zorgen voor een eenvoudig apparaat
installatie, bediening op afstand en monitoring.
Ontwikkelingsomgeving opzetten
In dit gedeelte wordt een overzicht gegevenview van ESP-IDF (Espressif IoT
Development Framework), het officiële ontwikkelingsraamwerk
voor op ESP32 gebaseerde apparaten. Het legt de verschillende versies van uit
ESP-IDF en hoe u de ontwikkelomgeving inricht.
Ontwikkeling van hardware en stuurprogramma's
Hardwareontwerp van Smart Light-producten op basis van ESP32-C3
Deze sectie richt zich op het hardwareontwerp van slim licht
producten gebaseerd op de ESP32-C3 Wireless Adventure. Het bestrijkt de
kenmerken en samenstelling van slimme lichtproducten, evenals de
hardwareontwerp van het ESP32-C3-kernsysteem.
Kenmerken en samenstelling van Smart Light-producten
In deze subsectie worden de functies en componenten uitgelegd die dit maken
slimme lichtproducten ontwikkelen. Er wordt ingegaan op de verschillende functionaliteiten
en ontwerpoverwegingen voor het creëren van slimme lampen.
Hardwareontwerp van ESP32-C3-kernsysteem
Het hardwareontwerp van het ESP32-C3-kernsysteem omvat voeding
voeding, inschakelvolgorde, systeemreset, SPI-flash, klokbron,
en RF- en antenne-overwegingen. Deze onderafdeling biedt
gedetailleerde informatie over deze aspecten.
Veelgestelde vragen
Vraag: Wat is ESP RainMaker?
A: ESP RainMaker is een cloudgebaseerd platform dat tools biedt
en diensten voor het bouwen en beheren van IoT-apparaten. Het vereenvoudigt
het ontwikkelingsproces en maakt eenvoudige apparaatinstallatie op afstand mogelijk
controle en monitoring.
Vraag: Hoe kan ik de ontwikkelomgeving instellen?
ESP32-C3?
A: Om de ontwikkelomgeving voor ESP32-C3 in te stellen, hebt u nodig
om ESP-IDF (Espressif IoT Development Framework) te installeren en
configureer het volgens de meegeleverde instructies. ESP-IDF is de
officieel ontwikkelingsframework voor op ESP32 gebaseerde apparaten.
Vraag: Wat zijn de kenmerken van ESP RainMaker?
A: ESP RainMaker biedt verschillende functies, inclusief gebruikersfuncties
beheer, eindgebruikersfuncties en beheerdersfuncties. Gebruikersbeheer
maakt het eenvoudig claimen van apparaten en gegevenssynchronisatie mogelijk. Eindgebruiker
Functies maken bediening op afstand van apparaten mogelijk via een mobiele app of
web koppel. Beheerfuncties bieden tools voor apparaatmonitoring
en management.
ESP32-C3 Draadloos avontuur
Een uitgebreide gids voor IoT
Espressif Systems 12 juni 2023
Inhoud
Ik Voorbereiding
1
1 Inleiding tot IoT
3
1.1 Architectuur van IoT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 IoT-toepassing in slimme huizen. . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Introductie en praktijk van IoT-projecten
9
2.1 Inleiding tot typische IoT-projecten. . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Basismodules voor gangbare IoT-apparaten . . . . . . . . . . . . . . . . . 9
2.1.2 Basismodules van clientapplicaties . . . . . . . . . . . . . . . . . . . 10
2.1.3 Inleiding tot veelgebruikte IoT-cloudplatforms. . . . . . . . . . . . . . 11
2.2 Praktijk: Smart Light-project . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1 Projectstructuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Projectfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.3 Hardwarevoorbereiding. . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Ontwikkelingsproces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Inleiding tot ESP RainMaker
19
3.1 Wat is ESP RainMaker? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 De implementatie van ESP RainMaker. . . . . . . . . . . . . . . . . . . . . . 21
3.2.1 Service claimen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2 RainMaker-agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.3 Cloud-backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.4 RainMaker-client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Oefenen: kernpunten voor het ontwikkelen met ESP RainMaker . . . . . . . . . . . . 25
3.4 Kenmerken van ESP RainMaker. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.1 Gebruikersbeheer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.2 Eindgebruikersfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.3 Beheerfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Ontwikkelomgeving instellen
31
4.1 ESP-IDF voorbijview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1 ESP-IDF-versies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3
4.1.2 ESP-IDF Git-workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3 Een geschikte versie kiezen . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.4 Overview van ESP-IDF SDK-directory . . . . . . . . . . . . . . . . . . . . 34 4.2 ESP-IDF-ontwikkelomgeving instellen . . . . . . . . . . . . . . . . . 38 4.2.1 ESP-IDF-ontwikkelomgeving instellen op Linux . . . . . . . . 38 4.2.2 ESP-IDF-ontwikkelomgeving instellen op Windows . . . . . . 40 4.2.3 ESP-IDF-ontwikkelomgeving instellen op Mac . . . . . . . . . 45 4.2.4 VS-code installeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.5 Inleiding tot ontwikkelomgevingen van derden . . . . . . . . 46 4.3 ESP-IDF-compilatiesysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Basisconcepten van het compilatiesysteem . . . . . . . . . . . . . . . . . . 47 4.3.2 Project File Structuur. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 Standaard buildregels van het compilatiesysteem . . . . . . . . . . . . . 50 4.3.4 Inleiding tot het compilatiescript . . . . . . . . . . . . . . . . . . 51 4.3.5 Inleiding tot algemene opdrachten . . . . . . . . . . . . . . . . . . . 52 4.4 Oefenen: compileren Vbample Programma “Blink” . . . . . . . . . . . . . . . . . . 53 4.4.1 Bijvample Analyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4.2 Het Blink-programma samenstellen . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.3 Het Blink-programma flashen . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.4 Loganalyse van de seriële poort van het Blink-programma . . . . . . . . . . . . . . 60 4.5 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
II Hardware- en driverontwikkeling
65
5 Hardwareontwerp van Smart Light-producten op basis van ESP32-C3
67
5.1 Kenmerken en samenstelling van Smart Light-producten. . . . . . . . . . . . . . . 67
5.2 Hardwareontwerp van ESP32-C3-kernsysteem . . . . . . . . . . . . . . . . . . . 70
5.2.1 Voeding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.2 Inschakelvolgorde en systeemreset . . . . . . . . . . . . . . . . . . 74
5.2.3 SPI-Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.4 Klokbron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.5 RF en antenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.6 Omsnoeringspennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2.7 GPIO- en PWM-controller . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.3 Praktijk: een slim lichtsysteem bouwen met ESP32-C3 . . . . . . . . . . . . . 80
5.3.1 Modules selecteren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.3.2 GPIO's van PWM-signalen configureren . . . . . . . . . . . . . . . . . . . . 82
5.3.3 Firmware downloaden en interface voor foutopsporing. . . . . . . . . . . . 82
5.3.4 Richtlijnen voor RF-ontwerp. . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.5 Richtlijnen voor het ontwerpen van voedingen . . . . . . . . . . . . . . . . . . . 86 5.4 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6 Ontwikkeling van coureurs
87
6.1 Ontwikkelingsproces van chauffeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.2 ESP32-C3 Randapparatuurtoepassingen . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.3 Basisprincipes van LED-drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3.1 Kleurruimten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3.2 LED-driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.3.3 LED-dimmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.3.4 Inleiding tot PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.4 Ontwikkeling van LED-dimdrivers . . . . . . . . . . . . . . . . . . . . . . . . 96
6.4.1 Niet-vluchtige opslag (NVS) . . . . . . . . . . . . . . . . . . . . . . . . 97
6.4.2 LED-PWM-controller (LEDC) . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.3 LED-PWM-programmering . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.5 Oefening: stuurprogramma's toevoegen aan Smart Light Project . . . . . . . . . . . . . . . . . 103
6.5.1 Knopstuurprogramma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5.2 LED-dimdriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.6 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
III Draadloze communicatie en controle
109
7 Wi-Fi-configuratie en -verbinding
111
7.1 Basisprincipes van Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.1 Inleiding tot Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.2 Evolutie van IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.3 Wi-Fi-concepten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.1.4 Wi-Fi-verbinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.2 Basisprincipes van Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.2.1 Inleiding tot Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.2.2 Bluetooth-concepten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.2.3 Bluetooth-verbinding . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.3 Wi-Fi-netwerkconfiguratie . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.3.1 Wi-Fi-netwerkconfiguratiegids . . . . . . . . . . . . . . . . . . . . 131
7.3.2 SoftAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.3.3 SmartConfig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.3.4 Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.3.5 Andere methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.4 Wi-Fi-programmering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 Wi-Fi-componenten in ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2 Oefening: Wi-Fi-verbinding . . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3 Oefening: slimme Wi-Fi-verbinding . . . . . . . . . . . . . . . . . . . . . 145
7.5 Oefenen: Wi-Fi-configuratie in Smart Light Project . . . . . . . . . . . . . . . 156 7.5.1 Wi-Fi-verbinding in Smart Light Project . . . . . . . . . . . . . . . . . 156 7.5.2 Slimme Wi-Fi-configuratie . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.6 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8 Lokale bediening
159
8.1 Inleiding tot lokale besturing. . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.1.1 Toepassing van lokale besturing. . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.2 Voordelentages van Lokale Controle. . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.3 Gecontroleerde apparaten ontdekken via smartphones . . . . . . . . . . 161
8.1.4 Datacommunicatie tussen smartphones en apparaten . . . . . . . . 162
8.2 Algemene lokale detectiemethoden. . . . . . . . . . . . . . . . . . . . . . . . 162
8.2.1 Uitzending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.2.2 Multicasten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
8.2.3 Vergelijking tussen uitzending en multicast. . . . . . . . . . . . . . 176
8.2.4 Multicast-applicatieprotocol mDNS voor lokale detectie . . . . . . . . 176
8.3 Algemene communicatieprotocollen voor lokale gegevens. . . . . . . . . . . . . . . 179
8.3.1 Transmissiecontroleprotocol (TCP) . . . . . . . . . . . . . . . . . . . 179
8.3.2 HyperText Transfer Protocol (HTTP) . . . . . . . . . . . . . . . . . . . 185
8.3.3 Gebruiker Datagram-protocol (UDP) . . . . . . . . . . . . . . . . . . . . . . 189
8.3.4 Beperkt toepassingsprotocol (CoAP) . . . . . . . . . . . . . . . . 192
8.3.5 Bluetooth-protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
8.3.6 Samenvatting van datacommunicatieprotocollen. . . . . . . . . . . . . . . 203
8.4 Garantie van gegevensbeveiliging. . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8.4.1 Inleiding tot Transport Layer Security (TLS) . . . . . . . . . . . . . 207
8.4.2 Inleiding tot Datagram Transportlaagbeveiliging (DTLS) . . . . . . . 213
8.5 Oefening: lokale besturing in Smart Light Project . . . . . . . . . . . . . . . . . . 217
8.5.1 Een op Wi-Fi gebaseerde lokale controleserver creëren . . . . . . . . . . . . . . . 217
8.5.2 Lokale besturingsfunctionaliteit verifiëren met behulp van scripts . . . . . . . . . . . 221
8.5.3 Een op Bluetooth gebaseerde lokale besturingsserver creëren . . . . . . . . . . . . 222
8.6 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
9 Cloudbeheer
225
9.1 Inleiding tot afstandsbediening. . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.2 Protocollen voor clouddatacommunicatie. . . . . . . . . . . . . . . . . . . . . . 226
9.2.1 MQTT-introductie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2.2 MQTT-principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.2.3 MQTT-berichtformaat . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.2.4 Protocolvergelijking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.2.5 MQTT Broker instellen op Linux en Windows . . . . . . . . . . . . 233 9.2.6 MQTT-client instellen op basis van ESP-IDF . . . . . . . . . . . . . . . . 235 9.3 Zorgen voor MQTT-gegevensbeveiliging . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.3.1 Betekenis en functie van certificaten . . . . . . . . . . . . . . . . . . . 237 9.3.2 Certificaten lokaal genereren . . . . . . . . . . . . . . . . . . . . . . 239 9.3.3 MQTT Broker configureren . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.3.4 MQTT-client configureren . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.4 Oefenen: afstandsbediening via ESP RainMaker . . . . . . . . . . . . . . . . 243 9.4.1 Basisprincipes van ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 Knooppunt- en cloud-backend-communicatieprotocol . . . . . . . . . . . 244 9.4.3 Communicatie tussen client en cloud-backend . . . . . . . . . . . 249 9.4.4 Gebruikersrollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9.4.5 Basisdiensten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.4.6 Smart Light Bijvample. . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.4.7 RainMaker-app en integraties van derden . . . . . . . . . . . . . . . 262 9.5 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
10 Ontwikkeling van smartphone-apps
269
10.1 Inleiding tot de ontwikkeling van smartphone-apps. . . . . . . . . . . . . . . . . . 269
10.1.1 Meer danview van de ontwikkeling van smartphone-apps. . . . . . . . . . . . . . . 270
10.1.2 Structuur van het Android-project . . . . . . . . . . . . . . . . . . . . . . 270
10.1.3 Structuur van het iOS-project . . . . . . . . . . . . . . . . . . . . . . . . 271
10.1.4 Levenscyclus van een Android-activiteit . . . . . . . . . . . . . . . . . . . . . . 272
10.1.5 Levenscyclus van iOS ViewControleur. . . . . . . . . . . . . . . . . . . . . . 273
10.2 Een nieuw smartphone-app-project maken . . . . . . . . . . . . . . . . . . . . . 275
10.2.1 Voorbereiden op Android-ontwikkeling . . . . . . . . . . . . . . . . . . . 275
10.2.2 Een nieuw Android-project maken . . . . . . . . . . . . . . . . . . . . . . 275
10.2.3 Afhankelijkheden toevoegen voor MyRainmaker . . . . . . . . . . . . . . . . . 276
10.2.4 Toestemmingsverzoek in Android . . . . . . . . . . . . . . . . . . . . . . 277
10.2.5 Voorbereiden op iOS-ontwikkeling . . . . . . . . . . . . . . . . . . . . . . 277
10.2.6 Een nieuw iOS-project aanmaken . . . . . . . . . . . . . . . . . . . . . . . . 278
10.2.7 Afhankelijkheden toevoegen voor MyRainmaker . . . . . . . . . . . . . . . . . 279
10.2.8 Toestemmingsverzoek in iOS . . . . . . . . . . . . . . . . . . . . . . . . . 280
10.3 Analyse van de functionele vereisten van de app. . . . . . . . . . . . . . . . . . 281
10.3.1 Analyse van de functionele vereisten van het project . . . . . . . . . . . . 282
10.3.2 Analyse van vereisten voor gebruikersbeheer . . . . . . . . . . . . . . . 282 10.3.3 Analyse van inrichtings- en bindingsvereisten voor apparaten . . . . . . . 283 10.3.4 Analyse van vereisten voor afstandsbedieningen . . . . . . . . . . . . . . . . 283 10.3.5 Analyse van planningsvereisten . . . . . . . . . . . . . . . . . . . 284 10.3.6 Analyse van gebruikerscentrumvereisten . . . . . . . . . . . . . . . . . . 285 10.4 Ontwikkeling van gebruikersbeheer . . . . . . . . . . . . . . . . . . . . . . . . 285 10.4.1 Inleiding tot RainMaker API's . . . . . . . . . . . . . . . . . . . . . . 285 10.4.2 Communicatie via smartphone initiëren . . . . . . . . . . . . . . . . 286 10.4.3 Accountregistratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 10.4.4 Accountaanmelding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 10.5 Ontwikkeling van Device Provisioning . . . . . . . . . . . . . . . . . . . . . . . 292 10.5.1 Scanapparaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.5.2 Apparaten aansluiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10.5.3 Geheime sleutels genereren . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.4 Knooppunt-ID verkrijgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.5 Apparaten inrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.6 Ontwikkeling van apparaatbesturing . . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1 Apparaten aan cloudaccounts koppelen . . . . . . . . . . . . . . . . . . . . 303 10.6.2 Een lijst met apparaten verkrijgen . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.6.3 Apparaatstatus verkrijgen . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 10.6.4 Apparaatstatus wijzigen . . . . . . . . . . . . . . . . . . . . . . . . . . 310 10.7 Ontwikkeling van planning en gebruikerscentrum . . . . . . . . . . . . . . . . . . . 313 10.7.1 Planningsfunctie implementeren . . . . . . . . . . . . . . . . . . . . 313 10.7.2 Gebruikerscentrum implementeren . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.7.3 Meer cloud-API's . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 10.8 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
11 Firmware-upgrade en versiebeheer
321
11.1 Firmware-upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
11.1.1 Meer danview van partitietabellen. . . . . . . . . . . . . . . . . . . . . . . . 322
11.1.2 Firmware-opstartproces . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
11.1.3 Meer danview van het OTA-mechanisme. . . . . . . . . . . . . . . . . . . . . 326
11.2 Firmwareversiebeheer . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.2.1 Firmware-markering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.2.2 Terugdraaien en anti-terugdraaien . . . . . . . . . . . . . . . . . . . . . . . . 331
11.3 Oefening: Over-the-air (OTA) Bijvample. . . . . . . . . . . . . . . . . . . . . . . 332
11.3.1 Firmware upgraden via een lokale host . . . . . . . . . . . . . . . . . 332
11.3.2 Firmware upgraden via ESP RainMaker . . . . . . . . . . . . . . . 335
11.4 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
IV Optimalisatie en massaproductie
343
12 Energiebeheer en optimalisatie van laag energieverbruik
345
12.1 ESP32-C3 Energiebeheer . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
12.1.1 Dynamische frequentieschaling . . . . . . . . . . . . . . . . . . . . . . . . 346
12.1.2 Configuratie van energiebeheer . . . . . . . . . . . . . . . . . . . . 348
12.2 ESP32-C3 Energiezuinige modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
12.2.1 Modem-slaapmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
12.2.2 Lichte slaapmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
12.2.3 Diepe slaapmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.2.4 Stroomverbruik in verschillende energiemodi. . . . . . . . . . . . . 358
12.3 Energiebeheer en foutopsporing bij laag energieverbruik. . . . . . . . . . . . . . . . . 359
12.3.1 Foutopsporing in logboeken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
12.3.2 GPIO-foutopsporing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
12.4 Praktijk: energiebeheer in Smart Light Project . . . . . . . . . . . . . . . 363
12.4.1 Energiebeheerfunctie configureren . . . . . . . . . . . . . . . . . 364
12.4.2 Energiebeheervergrendelingen gebruiken . . . . . . . . . . . . . . . . . . . . . . 365
12.4.3 Stroomverbruik verifiëren . . . . . . . . . . . . . . . . . . . . . . . 366
12.5 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
13 Verbeterde apparaatbeveiligingsfuncties
369
13.1 Meer danview van IoT-apparaatgegevensbeveiliging. . . . . . . . . . . . . . . . . . . . . . . 369
13.1.1 Waarom IoT-apparaatgegevens beveiligen? . . . . . . . . . . . . . . . . . . . . . . 370
13.1.2 Basisvereisten voor beveiliging van IoT-apparaatgegevens. . . . . . . . . . . . 371
13.2 Bescherming van gegevensintegriteit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
13.2.1 Inleiding tot de integriteitsverificatiemethode. . . . . . . . . . . . . . 372
13.2.2 Integriteitsverificatie van firmwaregegevens . . . . . . . . . . . . . . . . . . 373
13.2.3 voorbeeldample. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.3 Bescherming van gegevensvertrouwelijkheid. . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.3.1 Inleiding tot gegevensversleuteling. . . . . . . . . . . . . . . . . . . . . . 374
13.3.2 Inleiding tot het Flash-coderingsschema. . . . . . . . . . . . . . . . . 376
13.3.3 Flash-coderingssleutelopslag . . . . . . . . . . . . . . . . . . . . . . . 379
13.3.4 Werkmodus van Flash-codering . . . . . . . . . . . . . . . . . . . . 380
13.3.5 Flash-coderingsproces . . . . . . . . . . . . . . . . . . . . . . . . . . 381
13.3.6 Inleiding tot NVS-codering . . . . . . . . . . . . . . . . . . . . . . 383
13.3.7 voorbeeldampbestanden van Flash Encryption en NVS Encryption. . . . . . . . . . . 384
13.4 Bescherming van gegevenslegitimiteit. . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
13.4.1 Inleiding tot digitale handtekening . . . . . . . . . . . . . . . . . . . . . 386
13.4.2 Meer danview van het Secure Boot-schema. . . . . . . . . . . . . . . . . . . . . 388
13.4.3 Inleiding tot Software Secure Boot . . . . . . . . . . . . . . . . . . . 388 13.4.4 Inleiding tot Hardware Secure Boot . . . . . . . . . . . . . . . . . . 390 13.4.5 Bijvamples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 13.5 Praktijk: veiligheidsvoorzieningen bij massaproductie . . . . . . . . . . . . . . . . . . 396 13.5.1 Flash-codering en veilig opstarten . . . . . . . . . . . . . . . . . . . . . 396 13.5.2 Flash-codering en veilig opstarten inschakelen met batch-Flash-tools . . 397 13.5.3 Flash-codering en veilig opstarten inschakelen in Smart Light Project . . . 398 13.6 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
14 Firmware branden en testen voor massaproductie
399
14.1 Firmware branden in massaproductie. . . . . . . . . . . . . . . . . . . . . . 399
14.1.1 Gegevenspartities definiëren . . . . . . . . . . . . . . . . . . . . . . . . . . 399
14.1.2 Firmware branden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
14.2 Testen van massaproductie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
14.3 Praktijk: massaproductiegegevens in Smart Light Project . . . . . . . . . . . . . 404
14.4 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
15 ESP Insights: platform voor monitoring op afstand
405
15.1 Inleiding tot ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
15.2 Aan de slag met ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . 409
15.2.1 Aan de slag met ESP Insights in het esp-insights-project . . . . . . 409
15.2.2 Hardlopen bijvampbestand in het esp-insights Project . . . . . . . . . . . . . . . 411
15.2.3 Coredump-informatie rapporteren . . . . . . . . . . . . . . . . . . . . . 411
15.2.4 Logboeken van interesse aanpassen . . . . . . . . . . . . . . . . . . . . . . . . 412
15.2.5 Reden van opnieuw opstarten rapporteren . . . . . . . . . . . . . . . . . . . . . . . . . 413
15.2.6 Aangepaste statistieken rapporteren . . . . . . . . . . . . . . . . . . . . . . . . . 413
15.3 Oefenen: ESP Insights gebruiken in Smart Light Project . . . . . . . . . . . . . . . 416
15.4 Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Invoering
ESP32-C3 is een single-core Wi-Fi en Bluetooth 5 (LE) microcontroller SoC, gebaseerd op de open-source RISC-V-architectuur. Het biedt de juiste balans tussen kracht, I/O-mogelijkheden en beveiliging en biedt daarmee de optimale kosteneffectieve oplossing voor aangesloten apparaten. Om verschillende toepassingen van de ESP32-C3-familie te laten zien, neemt dit boek van Espressif je mee op een interessante reis door AIoT, beginnend bij de basisprincipes van IoT-projectontwikkeling en het opzetten van de omgeving tot praktische voorbeeldenamples. De eerste vier hoofdstukken gaan over IoT, ESP RainMaker en ESP-IDF. Hoofdstuk 5 en 6 geven een kort overzicht van hardwareontwerp en driverontwikkeling. Naarmate u verder komt, ontdekt u hoe u uw project kunt configureren via Wi-Fi-netwerken en mobiele apps. Ten slotte leert u uw project te optimaliseren en in massaproductie te brengen.
Als je een ingenieur bent in aanverwante vakgebieden, een software-architect, een leraar, een student of iemand anders die geïnteresseerd is in IoT, dan is dit boek iets voor jou.
U kunt de code downloaden example gebruikt in dit boek van de site van Espressif op GitHub. Voor de laatste informatie over IoT-ontwikkeling kunt u ons officiële account volgen.
Voorwoord
Een informatiserende wereld
Op de golf van internet maakte Internet of Things (IoT) zijn grote debuut als nieuw type infrastructuur in de digitale economie. Om de technologie dichter bij het publiek te brengen, werkt Espressif Systems aan de visie dat ontwikkelaars uit alle lagen van de bevolking IoT kunnen gebruiken om enkele van de meest urgente problemen van onze tijd op te lossen. Een wereld van “Intelligent Netwerk van Alle Dingen” is wat we van de toekomst verwachten.
Het ontwerpen van onze eigen chips is een cruciaal onderdeel van die visie. Het moet een marathon worden, die voortdurend doorbraken vergt, tegen technologische grenzen in. Van de “Game Changer” ESP8266 tot de ESP32-serie met integratie van Wi-Fi en Bluetoothr (LE)-connectiviteit, gevolgd door ESP32-S3 uitgerust met AI-versnelling, Espressif stopt nooit met het onderzoeken en ontwikkelen van producten voor AIoT-oplossingen. Met onze open source software, zoals het IoT Development Framework ESP-IDF, Mesh Development Framework ESP-MDF en Device Connectivity Platform ESP RainMaker, hebben we een onafhankelijk raamwerk gecreëerd voor het bouwen van AIoT-applicaties.
Vanaf juli 2022 hebben de cumulatieve leveringen van Espressif's IoT-chipsets de 800 miljoen overschreden, wat toonaangevend is op de Wi-Fi MCU-markt en een groot aantal verbonden apparaten wereldwijd van stroom voorziet. Het streven naar uitmuntendheid maakt van elk Espressif-product een grote hit vanwege het hoge niveau van integratie en kostenefficiëntie. De release van ESP32-C3 markeert een belangrijke mijlpaal in de zelfontwikkelde technologie van Espressif. Het is een single-core, 32-bit, RISC-V-gebaseerde MCU met 400 KB SRAM, die op 160 MHz kan draaien. Het heeft 2.4 GHz Wi-Fi en Bluetooth 5 (LE) geïntegreerd met ondersteuning voor lange afstanden. Het biedt een fijne balans tussen kracht, I/O-mogelijkheden en beveiliging en biedt daarmee de optimale, kosteneffectieve oplossing voor aangesloten apparaten. Dit boek is gebaseerd op de krachtige ESP32-C3 en is bedoeld om lezers te helpen IoT-gerelateerde kennis te begrijpen met gedetailleerde illustraties en praktische voorbeelden.amples.
Waarom wij dit boek hebben geschreven?
Espressif Systems is meer dan een halfgeleiderbedrijf. Het is bovendien een IoT-platformbedrijf, dat altijd streeft naar doorbraken en innovaties op technologiegebied. Tegelijkertijd heeft Espressif zijn zelfontwikkelde besturingssysteem en softwareframework open source gemaakt en gedeeld met de gemeenschap, waardoor een uniek ecosysteem is ontstaan. Ingenieurs, makers en technologieliefhebbers ontwikkelen actief nieuwe softwareapplicaties op basis van de producten van Espressif, communiceren vrijelijk en delen hun ervaringen. Je kunt de fascinerende ideeën van ontwikkelaars voortdurend op verschillende platforms zien, zoals YouTube en GitHub. De populariteit van de producten van Espressif heeft een toenemend aantal auteurs gestimuleerd die meer dan 100 boeken hebben geproduceerd op basis van Espressif-chipsets, in meer dan tien talen, waaronder Engels, Chinees, Duits, Frans en Japans.
Het is de steun en het vertrouwen van gemeenschapspartners die de voortdurende innovatie van Espressif aanmoedigen. “We streven ernaar om onze chips, besturingssystemen, raamwerken, oplossingen, cloud, bedrijfspraktijken, tools, documentatie, geschriften, ideeën, enz. steeds relevanter te maken voor de antwoorden die mensen nodig hebben op de meest urgente problemen van het hedendaagse leven. Dit is Espressifs hoogste ambitie en morele kompas.” zei de heer Teo Swee Ann, oprichter en CEO van Espressif.
Espressif waardeert lezen en ideeën. Nu de voortdurende verbetering van IoT-technologie hogere eisen stelt aan ingenieurs, hoe kunnen we meer mensen helpen om IoT-chips, besturingssystemen, softwareframeworks, applicatieschema's en cloudserviceproducten snel onder de knie te krijgen? Zoals het gezegde luidt: het is beter een man te leren vissen dan hem vis te geven. Tijdens een brainstormsessie kwamen we op het idee dat we een boek zouden kunnen schrijven om systematisch de belangrijkste kennis van IoT-ontwikkeling op een rij te zetten. Het klikte, we verzamelden snel een groep ervaren ingenieurs en combineerden de ervaring van het technische team op het gebied van embedded programmeren en IoT-hardware- en softwareontwikkeling, wat allemaal bijdroeg aan de publicatie van dit boek. Tijdens het schrijven hebben we ons best gedaan om objectief en eerlijk te zijn, ontdaan van de cocon, en beknopte uitdrukkingen te gebruiken om de complexiteit en charme van het internet der dingen te vertellen. We hebben de veelgestelde vragen zorgvuldig samengevat, verwezen naar de feedback en suggesties van de gemeenschap, om de vragen die we tijdens het ontwikkelingsproces tegenkwamen duidelijk te beantwoorden en praktische IoT-ontwikkelingsrichtlijnen te bieden voor relevante technici en besluitvormers.
Boekstructuur
Dit boek heeft een ingenieursperspectief en zet stap voor stap de noodzakelijke kennis voor IoT-projectontwikkeling uiteen. Het bestaat uit vier delen, als volgt:
· Voorbereiding (hoofdstuk 1): Dit deel introduceert de architectuur van IoT, het typische IoT-projectframework, het ESP RainMakerr-cloudplatform en de ontwikkelomgeving ESP-IDF, om zo een solide basis te leggen voor de ontwikkeling van IoT-projecten.
· Hardware- en driverontwikkeling (hoofdstuk 5): Gebaseerd op de ESP6-C32-chipset, gaat dit deel dieper in op de minimale hardwaresysteem- en driverontwikkeling, en implementeert het de besturing van dimmen, kleurgradatie en draadloze communicatie.
· Draadloze communicatie en bediening (hoofdstuk 7): In dit deel wordt het intelligente Wi-Fi-configuratieschema uitgelegd op basis van de ESP11-C32-chip, lokale en cloudbesturingsprotocollen, en lokale en afstandsbediening van apparaten. Het biedt ook schema's voor het ontwikkelen van smartphone-apps, firmware-upgrades en versiebeheer.
· Optimalisatie en massaproductie (hoofdstuk 12-15): Dit deel is bedoeld voor geavanceerde IoT-toepassingen, met de nadruk op de optimalisatie van producten op het gebied van energiebeheer, optimalisatie van laag energieverbruik en verbeterde beveiliging. Het introduceert ook het branden en testen van firmware in massaproductie, en hoe de actieve status en logboeken van apparaatfirmware kunnen worden gediagnosticeerd via het externe monitoringplatform ESP Insights.
Over de broncode
Lezers kunnen het exampbestandsprogramma's in dit boek, door de code handmatig in te voeren of door de broncode te gebruiken die bij het boek hoort. We benadrukken de combinatie van theorie en praktijk en plaatsen daarom in bijna elk hoofdstuk een praktijkgedeelte gebaseerd op het Smart Light-project. Alle codes zijn open source. Lezers zijn welkom om de broncode te downloaden en te bespreken in de secties gerelateerd aan dit boek op GitHub en ons officiële forum esp32.com. Op de opensourcecode van dit boek zijn de voorwaarden van Apache License 2.0 van toepassing.
Opmerking van de auteur
Dit boek is officieel geproduceerd door Espressif Systems en is geschreven door de senior ingenieurs van het bedrijf. Het is geschikt voor managers en R&D-personeel in IoT-gerelateerde industrieën, docenten en studenten van gerelateerde majors, en liefhebbers op het gebied van Internet of Things. We hopen dat dit boek kan dienen als werkhandboek, naslagwerk en als boek voor naast het bed, en dat we als een goede leraar en vriend kunnen fungeren.
Bij het samenstellen van dit boek hebben we verwezen naar enkele relevante onderzoeksresultaten van experts, wetenschappers en technici in binnen- en buitenland, en we hebben ons best gedaan om ze te citeren volgens academische normen. Het is echter onvermijdelijk dat er enkele omissies zijn, dus hier willen we graag ons diepe respect en onze dank uitspreken aan alle relevante auteurs. Daarnaast hebben we informatie van internet geciteerd, dus we willen de oorspronkelijke auteurs en uitgevers bedanken en onze excuses aanbieden dat we niet van elk stukje informatie de bron kunnen vermelden.
Om een boek van hoge kwaliteit te produceren, hebben we interne discussierondes georganiseerd en geleerd van de suggesties en feedback van proeflezers en redacteuren van uitgeverijen. Hierbij willen wij u nogmaals bedanken voor uw hulp, die allemaal heeft bijgedragen aan dit succesvolle werk.
Als laatste, maar het allerbelangrijkste, willen wij iedereen bij Espressif bedanken die zo hard heeft gewerkt voor de geboorte en popularisering van onze producten.
Bij de ontwikkeling van IoT-projecten komt een breed scala aan kennis kijken. Beperkt door de lengte van het boek, maar ook door het niveau en de ervaring van de auteur, zijn weglatingen onvermijdelijk. Daarom verzoeken wij deskundigen en lezers vriendelijk onze fouten te bekritiseren en te corrigeren. Als u suggesties heeft voor dit boek, neem dan contact met ons op via book@espressif.com. Wij kijken uit naar uw feedback.
Hoe gebruik je dit boek?
De code van de projecten in dit boek is open source. Je kunt het downloaden vanuit onze GitHub-repository en je gedachten en vragen delen op ons officiële forum. GitHub: https://github.com/espressif/book-esp32c3-iot-projects Forum: https://www.esp32.com/bookc3 Door het hele boek heen zullen er delen worden gemarkeerd, zoals hieronder weergegeven.
Broncode In dit boek leggen we de nadruk op de combinatie van theorie en praktijk, en daarom plaatsen we in vrijwel elk hoofdstuk een praktijkgedeelte over het Smart Light-project. De corresponderende stappen en de bronpagina worden gemarkeerd tussen twee regels die beginnen met de tag Broncode.
OPMERKING/TIPS Hier kunt u belangrijke informatie en herinneringen vinden voor het succesvol debuggen van uw programma. Ze worden gemarkeerd tussen twee dikke lijnen, beginnend met de tag OPMERKING of TIPS.
De meeste opdrachten in dit boek worden uitgevoerd onder Linux, aangegeven door het teken “$”. Als de opdracht superuser-rechten vereist om uit te voeren, wordt de prompt vervangen door “#”. De opdrachtprompt op Mac-systemen is “%”, zoals gebruikt in Paragraaf 4.2.3 ESP-IDF installeren op Mac.
De hoofdtekst in dit boek wordt afgedrukt in Charter, terwijl de code exampbestanden, componenten, functies, variabelen, code file namen, codemappen en tekenreeksen bevinden zich in Courier New.
Commando's of teksten die door de gebruiker moeten worden ingevoerd, en commando's die kunnen worden ingevoerd door op de "Enter"-toets te drukken, worden vetgedrukt in Courier New afgedrukt. Logboeken en codeblokken worden weergegeven in lichtblauwe vakken.
Exampon:
Ten tweede: gebruik esp-idf/components/nvs flash/nvs partitiegenerator/nvs partitie gen.py om de binaire NVS-partitie te genereren file op de ontwikkelingshost met de volgende opdracht:
$ python $IDF PATH/components/nvs flash/nvs partitiegenerator/nvs partitie gen.py –input mass prod.csv –output mass prod.bin –size NVS PARTITION SIZE
Hoofdstuk 1
Invoering
naar
IoT
Aan het einde van de 20e eeuw, met de opkomst van computernetwerken en communicatietechnologieën, werd internet snel geïntegreerd in het leven van mensen. Terwijl de internettechnologie steeds volwassener wordt, werd het idee van Internet of Things (IoT) geboren. Letterlijk betekent IoT een internet waarop dingen met elkaar zijn verbonden. Terwijl het oorspronkelijke internet de grenzen van ruimte en tijd doorbreekt en de afstand tussen ‘persoon en persoon’ verkleint, maakt IoT van ‘dingen’ een belangrijke deelnemer, waardoor ‘mensen’ en ‘dingen’ dichter bij elkaar worden gebracht. In de nabije toekomst zal IoT de drijvende kracht worden achter de informatie-industrie.
Dus, wat is het internet der dingen?
Het is moeilijk om het internet der dingen nauwkeurig te definiëren, omdat de betekenis en reikwijdte ervan voortdurend evolueren. In 1995 bracht Bill Gates het idee van IoT voor het eerst naar voren in zijn boek The Road Ahead. Simpel gezegd zorgt IoT ervoor dat objecten via internet informatie met elkaar kunnen uitwisselen. Het uiteindelijke doel is om een ‘internet van alles’ tot stand te brengen. Dit is een vroege interpretatie van IoT, maar ook een fantasie over toekomstige technologie. Dertig jaar later, met de snelle ontwikkeling van de economie en de technologie, wordt deze fantasie werkelijkheid. Van slimme apparaten, slimme huizen, slimme steden, het internet van voertuigen en draagbare apparaten tot de ‘metaverse’ die wordt ondersteund door IoT-technologieën: er ontstaan voortdurend nieuwe concepten. In dit hoofdstuk beginnen we met een uitleg van de architectuur van het Internet of Things en introduceren we vervolgens de meest voorkomende IoT-toepassing, het slimme huis, om u te helpen een duidelijk begrip van IoT te krijgen.
1.1 Architectuur van IoT
Internet of Things omvat meerdere technologieën met verschillende toepassingsbehoeften en -vormen in verschillende industrieën. Om de structuur, de belangrijkste technologieën en toepassingskenmerken van het IoT in kaart te brengen, is het noodzakelijk om een uniforme architectuur en een standaard technisch systeem tot stand te brengen. In dit boek wordt de architectuur van het IoT eenvoudigweg in vier lagen verdeeld: de perceptie- en controlelaag, de netwerklaag, de platformlaag en de applicatielaag.
Perceptie- en controlelaag Als het meest fundamentele element van de IoT-architectuur is de perceptie- en controlelaag de kern om de uitgebreide detectie van IoT te realiseren. De belangrijkste functie is het verzamelen, identificeren en controleren van informatie. Het bestaat uit een verscheidenheid aan apparaten met het vermogen tot waarneming,
3
identificatie, controle en uitvoering, en is verantwoordelijk voor het ophalen en analyseren van gegevens zoals materiaaleigenschappen, gedragstrends en apparaatstatus. Op deze manier leert IoT de echte fysieke wereld herkennen. Bovendien kan de laag ook de status van het apparaat controleren.
De meest voorkomende apparaten van deze laag zijn verschillende sensoren, die een belangrijke rol spelen bij het verzamelen en identificeren van informatie. Sensoren lijken op menselijke zintuigen, zoals lichtgevoelige sensoren voor zien, akoestische sensoren voor horen, gassensoren voor ruiken, en druk- en temperatuurgevoelige sensoren voor aanraking. Met al deze ‘sensorische organen’ worden objecten ‘levend’ en in staat tot intelligente perceptie, herkenning en manipulatie van de fysieke wereld.
Netwerklaag De belangrijkste functie van de netwerklaag is het verzenden van informatie, inclusief gegevens verkregen van de perceptie- en controlelaag naar een gespecificeerd doel, evenals opdrachten die worden uitgegeven vanuit de applicatielaag terug naar de perceptie- en controlelaag. Het dient als een belangrijke communicatiebrug die verschillende lagen van een IoT-systeem met elkaar verbindt. Om een basismodel van Internet of Things op te zetten, zijn er twee stappen nodig om objecten in een netwerk te integreren: toegang tot internet en transmissie via internet.
Toegang tot internet Internet maakt onderlinge verbinding tussen persoon en persoon mogelijk, maar slaagt er niet in om dingen in de grote familie op te nemen. Vóór de komst van IoT waren de meeste dingen niet ‘netwerkbaar’. Dankzij de voortdurende ontwikkeling van de technologie slaagt IoT erin om dingen met het internet te verbinden, waardoor de onderlinge verbinding tussen ‘mensen en dingen’ en ‘dingen en dingen’ wordt gerealiseerd. Er zijn twee veelgebruikte manieren om een internetverbinding te implementeren: bekabelde netwerktoegang en draadloze netwerktoegang.
Bekabelde netwerktoegangsmethoden omvatten Ethernet, seriële communicatie (bijv. RS-232, RS-485) en USB, terwijl draadloze netwerktoegang afhankelijk is van draadloze communicatie, die verder kan worden onderverdeeld in draadloze communicatie over korte afstand en draadloze communicatie over lange afstand.
Draadloze communicatie op korte afstand omvat ZigBee, Bluetoothr, Wi-Fi, Near-Field Communication (NFC) en Radio Frequency Identification (RFID). Draadloze communicatie over lange afstand omvat Enhanced Machine Type Communication (eMTC), LoRa, Narrow Band Internet of Things (NB-IoT), 2G, 3G, 4G, 5G, enz.
Verzending via internet Verschillende methoden voor internettoegang leiden tot een overeenkomstige fysieke transmissieverbinding van gegevens. Het volgende is om te beslissen welk communicatieprotocol moet worden gebruikt om de gegevens te verzenden. Vergeleken met internetterminals hebben de meeste IoT-terminals er momenteel minder
4 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
beschikbare bronnen, zoals verwerkingsprestaties, opslagcapaciteit, netwerksnelheid, enz., dus is het noodzakelijk om een communicatieprotocol te kiezen dat minder bronnen in IoT-toepassingen in beslag neemt. Er zijn twee communicatieprotocollen die tegenwoordig veel worden gebruikt: Message Queuing Telemetry Transport (MQTT) en Constrained Application Protocol (CoAP).
Platformlaag De platformlaag verwijst vooral naar IoT-cloudplatforms. Wanneer alle IoT-terminals op een netwerk zijn aangesloten, moeten hun gegevens worden samengevoegd op een IoT-cloudplatform om te worden berekend en opgeslagen. De platformlaag ondersteunt voornamelijk IoT-toepassingen bij het vergemakkelijken van de toegang en het beheer van enorme apparaten. Het verbindt IoT-terminals met het cloudplatform, verzamelt terminalgegevens en geeft opdrachten aan terminals om bediening op afstand te implementeren. Als tussendienst voor het toewijzen van apparatuur aan industriële toepassingen speelt de platformlaag een verbindende rol in de gehele IoT-architectuur, met abstracte bedrijfslogica en een gestandaardiseerd kerngegevensmodel, dat niet alleen snelle toegang tot apparaten kan realiseren, maar ook krachtige modulaire mogelijkheden kan bieden. om te voldoen aan verschillende behoeften in industriële toepassingsscenario's. De platformlaag omvat voornamelijk functionele modules zoals apparaattoegang, apparaatbeheer, beveiligingsbeheer, berichtcommunicatie, monitoring van bediening en onderhoud, en datatoepassingen.
· Device access, het realiseren van de verbinding en communicatie tussen terminals en IoT-cloudplatforms.
· Apparaatbeheer, inclusief functies zoals het maken van apparaten, apparaatonderhoud, gegevensconversie, gegevenssynchronisatie en apparaatdistributie.
· Beveiligingsbeheer, waarbij de veiligheid van IoT-gegevensoverdracht wordt gewaarborgd vanuit het perspectief van beveiligingsauthenticatie en communicatiebeveiliging.
· Berichtcommunicatie, inclusief drie transmissierichtingen, dat wil zeggen dat de terminal gegevens naar het IoT-cloudplatform verzendt, het IoT-cloudplatform gegevens naar de serverzijde of andere IoT-cloudplatforms verzendt, en de serverzijde op afstand IoT-apparaten bestuurt.
· Monitoring van O&M, inclusief monitoring en diagnose, firmware-upgrade, online foutopsporing, logservices, enz.
· Datatoepassingen, waarbij gegevens worden opgeslagen, geanalyseerd en toegepast.
Applicatielaag De applicatielaag gebruikt de gegevens uit de platformlaag om de applicatie te beheren, te filteren en te verwerken met tools zoals databases en analysesoftware. De resulterende gegevens kunnen worden gebruikt voor echte IoT-toepassingen zoals slimme gezondheidszorg, slimme landbouw, slimme huizen en slimme steden.
Uiteraard kan de architectuur van IoT in meer lagen worden onderverdeeld, maar uit hoeveel lagen deze ook bestaat, het onderliggende principe blijft in essentie hetzelfde. Aan het leren
Hoofdstuk 1. Inleiding tot IoT 5
over de architectuur van IoT helpt ons begrip van IoT-technologieën te verdiepen en volledig functionele IoT-projecten te bouwen.
1.2 IoT-toepassing in slimme huizen
IoT is doorgedrongen tot alle lagen van de bevolking, en de meest verwante IoT-toepassing voor ons is het slimme huis. Veel traditionele apparaten zijn nu uitgerust met een of meer IoT-apparaten, en veel nieuwbouwhuizen zijn vanaf het begin ontworpen met IoT-technologieën. Figuur 1.1 toont enkele veelgebruikte smarthome-apparaten.
Figuur 1.1. Veel voorkomende smart home-apparaten De ontwikkeling van smart home kan eenvoudig worden onderverdeeld in slimme productentage, scène-interconnectie stage en intelligente stage, zoals weergegeven in figuur 1.2.
Figuur 1.2. Ontwikkeling ztage van smart home 6 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
De eerste stage gaat over slimme producten. Anders dan in traditionele huizen ontvangen IoT-apparaten in slimme huizen signalen met sensoren en zijn ze met elkaar verbonden via draadloze communicatietechnologieën zoals Wi-Fi, Bluetooth LE en ZigBee. Gebruikers kunnen slimme producten op verschillende manieren bedienen, zoals smartphone-apps, stemassistenten, slimme luidsprekerbediening, enz. De tweede stage richt zich op scène-interconnectie. In deze ztagOntwikkelaars overwegen niet langer om één slim product te besturen, maar om twee of meer slimme producten met elkaar te verbinden, tot op zekere hoogte te automatiseren en uiteindelijk een aangepaste scènemodus te vormen. BijvoorbeeldampWanneer de gebruiker op een scènemodusknop drukt, worden de lichten, gordijnen en airconditioners automatisch aangepast aan de presets. Uiteraard is er de voorwaarde dat de koppelingslogica gemakkelijk kan worden opgezet, inclusief triggervoorwaarden en uitvoeringsacties. Stel je voor dat de verwarmingsmodus van de airconditioning wordt geactiveerd wanneer de binnentemperatuur onder de 10°C daalt; dat er om 7 uur ’s ochtends muziek wordt gespeeld om de gebruiker wakker te maken, slimme gordijnen opengaan en de rijstkoker of broodrooster start via een slim stopcontact; als de gebruiker opstaat en klaar is met wassen, wordt het ontbijt al geserveerd, zodat er geen vertraging ontstaat bij het naar het werk gaan. Hoe gemakkelijk is ons leven geworden! De derde stage gaat naar intelligentie stage. Naarmate er meer toegang wordt verkregen tot smarthome-apparaten, zullen ook de soorten gegevens die worden gegenereerd toenemen. Met behulp van cloud computing, big data en kunstmatige intelligentie is het alsof er een ‘slimmer brein’ in slimme huizen is geplant, die niet langer frequente opdrachten van de gebruiker vereisen. Ze verzamelen gegevens uit eerdere interacties en leren de gedragspatronen en voorkeuren van de gebruiker kennen, om activiteiten te automatiseren en aanbevelingen te doen voor de besluitvorming. Momenteel zijn de meeste slimme huizen aanwezig op het gebied van interconnectietage. Naarmate de penetratiegraad en intelligentie van slimme producten toenemen, worden barrières tussen communicatieprotocollen opgeheven. In de toekomst zullen slimme huizen ongetwijfeld echt ‘slim’ worden, net als het AI-systeem Jarvis in Iron Man, dat de gebruiker niet alleen kan helpen verschillende apparaten te besturen en dagelijkse zaken af te handelen, maar ook over supercomputerkracht en denkvermogen beschikt. In de intelligente stagDat wil zeggen dat mensen betere diensten zullen ontvangen, zowel in kwantiteit als in kwaliteit.
Hoofdstuk 1. Inleiding tot IoT 7
8 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Hoofdstuk Introductie en praktijk van 2 IoT-projecten
In hoofdstuk 1 introduceerden we de architectuur van IoT, en de rollen en onderlinge relaties van de perceptie- en controlelaag, netwerklaag, platformlaag en applicatielaag, evenals de ontwikkeling van smart home. Maar net als wanneer we leren schilderen, is het kennen van de theoretische kennis verre van voldoende. We moeten “onze handen vuil maken” om IoT-projecten in de praktijk te brengen om de technologie echt onder de knie te krijgen. Bovendien, wanneer een project zich naar de massaproductie verplaatsttagHet is bijvoorbeeld noodzakelijk om meer factoren in overweging te nemen, zoals netwerkverbinding, configuratie, IoT-cloudplatforminteractie, firmwarebeheer en -updates, beheer van massaproductie en beveiligingsconfiguratie. Waar moeten we op letten bij het ontwikkelen van een compleet IoT-project? In hoofdstuk 1 vermeldden we dat smart home een van de meest voorkomende IoT-toepassingsscenario's is, en dat slimme lampen een van de meest basale en praktische apparaten zijn, die kunnen worden gebruikt in huizen, hotels, sportscholen, ziekenhuizen, enz. In dit boek nemen we de constructie van een slim lichtproject als uitgangspunt, leggen we de componenten en kenmerken ervan uit en geven we begeleiding bij de projectontwikkeling. We hopen dat u uit deze casus conclusies kunt trekken om meer IoT-toepassingen te creëren.
2.1 Inleiding tot typische IoT-projecten
In termen van ontwikkeling kunnen functionele basismodules van IoT-projecten worden ingedeeld in software- en hardwareontwikkeling van IoT-apparaten, ontwikkeling van clientapplicaties en ontwikkeling van IoT-cloudplatforms. Het is belangrijk om de functionele basismodules te verduidelijken, die in deze sectie verder worden beschreven.
2.1.1 Basismodules voor gangbare IoT-apparaten
De software- en hardwareontwikkeling van IoT-apparaten omvat de volgende basismodules: Gegevensverzameling
Als de onderste laag van de IoT-architectuur verbinden de IoT-apparaten van de perceptie- en controlelaag sensoren en apparaten via hun chips en randapparatuur om gegevensverzameling en operationele controle te bereiken.
9
Accountbinding en initiële configuratie Voor de meeste IoT-apparaten worden accountbinding en initiële configuratie bijvoorbeeld in één operationeel proces voltooidample, apparaten verbinden met gebruikers door een Wi-Fi-netwerk te configureren.
Interactie met IoT-cloudplatforms Om IoT-apparaten te monitoren en te besturen is het ook nodig om deze te verbinden met IoT-cloudplatforms, om door interactie tussen elkaar opdrachten te geven en status te rapporteren.
Apparaatbeheer Wanneer apparaten zijn verbonden met IoT-cloudplatforms, kunnen ze communiceren met de cloud en worden geregistreerd, gebonden of bestuurd. Gebruikers kunnen de productstatus opvragen en andere handelingen uitvoeren op de smartphone-app via IoT-cloudplatforms of lokale communicatieprotocollen.
Firmware-upgrade IoT-apparaten kunnen ook een firmware-upgrade uitvoeren op basis van de behoeften van fabrikanten. Door opdrachten te ontvangen die door de cloud worden verzonden, worden firmware-upgrades en versiebeheer gerealiseerd. Met deze firmware-upgradefunctie kunt u de functies van IoT-apparaten voortdurend verbeteren, defecten verhelpen en de gebruikerservaring verbeteren.
2.1.2 Basismodules van clientapplicaties
Clienttoepassingen (bijvoorbeeld smartphone-apps) omvatten hoofdzakelijk de volgende basismodules:
Accountsysteem en autorisatie Het ondersteunt account- en apparaatautorisatie.
Apparaatbediening Smartphone-apps zijn meestal uitgerust met bedieningsfuncties. Gebruikers kunnen eenvoudig verbinding maken met IoT-apparaten en deze altijd en overal beheren via smartphone-apps. In een echt slim huis worden apparaten meestal bestuurd via smartphone-apps, wat niet alleen intelligent beheer van apparaten mogelijk maakt, maar ook de kosten van mankracht bespaart. Daarom is apparaatbesturing een must voor clienttoepassingen, zoals controle van apparaatfuncties, scènebesturing, planning, afstandsbediening, apparaatkoppeling, enz. Smart Home-gebruikers kunnen scènes ook aanpassen aan persoonlijke behoeften, het regelen van verlichting, huishoudelijke apparaten, entree , enz., om het leven thuis comfortabeler en gemakkelijker te maken. Ze kunnen de airconditioning timen, deze op afstand uitschakelen, de gangverlichting automatisch laten inschakelen zodra de deur wordt ontgrendeld, of met één enkele knop overschakelen naar de ‘theater’-modus.
Notificatie Clienttoepassingen updaten de realtime status van IoT-apparaten en sturen waarschuwingen wanneer apparaten abnormaal worden.
10 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Klantenservice na verkoop Smartphone-apps kunnen after-salesdiensten voor producten bieden, om problemen met betrekking tot storingen in IoT-apparaten en technische handelingen tijdig op te lossen.
Uitgelichte functies Om aan de behoeften van verschillende gebruikers te voldoen, kunnen andere functies worden toegevoegd, zoals Shake, NFC, GPS, etc. GPS kan helpen bij het instellen van de nauwkeurigheid van scènebewerkingen op basis van locatie en afstand, terwijl de Shake-functie gebruikers in staat stelt de opdrachten die voor een specifiek apparaat of scène moeten worden uitgevoerd door te schudden.
2.1.3 Inleiding tot veelgebruikte IoT-cloudplatforms
IoT-cloudplatform is een alles-in-één platform dat functies integreert zoals apparaatbeheer, gegevensbeveiligingscommunicatie en meldingsbeheer. Afhankelijk van hun doelgroep en toegankelijkheid kunnen IoT-cloudplatforms worden onderverdeeld in publieke IoT-cloudplatforms (hierna “public cloud” genoemd) en private IoT-cloudplatforms (hierna “private cloud” genoemd).
Publieke cloud duidt meestal op gedeelde IoT-cloudplatforms voor bedrijven of individuen, beheerd en onderhouden door platformaanbieders, en gedeeld via internet. Het kan gratis of goedkoop zijn en biedt diensten aan via het hele open publieke netwerk, zoals Alibaba Cloud, Tencent Cloud, Baidu Cloud, AWS IoT, Google IoT, enz. Als ondersteunend platform kan de publieke cloud upstream-serviceproviders integreren en downstream-eindgebruikers om een nieuwe waardeketen en ecosysteem te creëren.
De private cloud is uitsluitend gebouwd voor zakelijk gebruik en garandeert zo de beste controle over gegevens, beveiliging en servicekwaliteit. De diensten en infrastructuur worden afzonderlijk onderhouden door ondernemingen, en de ondersteunende hardware en software zijn ook bestemd voor specifieke gebruikers. Bedrijven kunnen clouddiensten aanpassen aan de behoeften van hun bedrijf. Op dit moment hebben sommige smart home-fabrikanten al particuliere IoT-cloudplatforms en hebben ze op basis daarvan smart home-applicaties ontwikkeld.
Publieke cloud en private cloud hebben hun eigen voordelentages, wat later zal worden uitgelegd.
Om communicatieconnectiviteit te realiseren is het noodzakelijk om op zijn minst de embedded ontwikkeling aan de kant van het apparaat te voltooien, samen met bedrijfsservers, IoT-cloudplatforms en smartphone-apps. Bij zo'n groot project biedt de publieke cloud normaal gesproken softwareontwikkelingskits voor apparaat- en smartphone-apps om het proces te versnellen. Zowel de publieke als de private cloud bieden diensten zoals apparaattoegang, apparaatbeheer, apparaatschaduw en bediening en onderhoud.
Toegang tot apparaten IoT-cloudplatforms moeten niet alleen interfaces bieden voor apparaattoegang met behulp van protocollen
Hoofdstuk 2. Introductie en praktijk van IoT-projecten 11
zoals MQTT, CoAP, HTTPS en WebSocket, maar ook de functie van apparaatbeveiligingsauthenticatie om vervalste en illegale apparaten te blokkeren, waardoor het risico op besmetting effectief wordt verminderd. Dergelijke authenticatie ondersteunt doorgaans verschillende mechanismen, dus wanneer apparaten in massa worden geproduceerd, is het noodzakelijk om het apparaatcertificaat vooraf toe te wijzen volgens het geselecteerde authenticatiemechanisme en dit in de apparaten te branden.
Apparaatbeheer De apparaatbeheerfunctie van IoT-cloudplatforms kan fabrikanten niet alleen helpen de activeringsstatus en onlinestatus van hun apparaten in realtime te bewaken, maar maakt ook opties mogelijk zoals het toevoegen/verwijderen van apparaten, het ophalen, toevoegen/verwijderen van groepen, firmware-upgrades en versiebeheer.
Apparaatschaduw IoT-cloudplatforms kunnen voor elk apparaat een permanente virtuele versie (apparaatschaduw) creëren, en de status van de apparaatschaduw kan worden gesynchroniseerd en verkregen via een smartphone-app of andere apparaten via internettransmissieprotocollen. Apparaatschaduw slaat de laatst gerapporteerde status en verwachte status van elk apparaat op, en zelfs als het apparaat offline is, kan het nog steeds de status verkrijgen door API's aan te roepen. Apparaatschaduw biedt altijd actieve API's, waardoor het eenvoudiger wordt om smartphone-apps te bouwen die communiceren met apparaten.
Bediening en onderhoud De O&M-functie omvat drie aspecten: · Het aantonen van statistische informatie over IoT-apparaten en meldingen. · Met logbeheer kan informatie worden opgehaald over het gedrag van het apparaat, de berichtenstroom omhoog/omlaag en de berichtinhoud. · Het debuggen van apparaten ondersteunt de levering van opdrachten, configuratie-updates en het controleren van de interactie tussen IoT-cloudplatforms en apparaatberichten.
2.2 Praktijk: Smart Light-project
Na de theoretische inleiding in elk hoofdstuk vindt u een praktijkgedeelte gerelateerd aan het Smart Light-project, zodat u praktijkervaring kunt opdoen. Het project is gebaseerd op de ESP32-C3-chip van Espressif en het ESP RainMaker IoT Cloud Platform, en omvat draadloze modulehardware in slimme lichtproducten, ingebedde software voor slimme apparaten op basis van ESP32C3, smartphone-apps en ESP RainMaker-interactie.
Broncode Voor een betere leer- en ontwikkelingservaring is het project in dit boek open source. U kunt de broncode downloaden van onze GitHub-repository op https://github. com/espressif/book-esp32c3-iot-projects.
12 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
2.2.1 Projectstructuur
Het Smart Light-project bestaat uit drie delen: i. Slimme lichtapparaten gebaseerd op ESP32-C3, verantwoordelijk voor de interactie met IoT-cloudplatforms en het regelen van de schakelaar, helderheid en kleurtemperatuur van de LED lamp kralen. ii. Smartphone-apps (inclusief tablet-apps draaiend op Android en iOS), verantwoordelijk voor de netwerkconfiguratie van slimme lichtproducten, evenals het opvragen en controleren van hun status.
iii. Een IoT-cloudplatform gebaseerd op ESP RainMaker. Ter vereenvoudiging beschouwen we in dit boek het IoT-cloudplatform en de bedrijfsserver als één geheel. Details over ESP RainMaker vindt u in hoofdstuk 3.
De overeenkomst tussen de Smart Light-projectstructuur en de architectuur van IoT wordt weergegeven in Figuur 2.1.
Figuur 2.1. Structuur van slim lichtproject
2.2.2 Projectfuncties
Verdeeld volgens de structuur, zijn de functies van elk onderdeel als volgt. Slimme lichte apparaten
· Netwerkconfiguratie en verbinding. · LED-PWM-besturing, zoals schakelaar, helderheid, kleurtemperatuur, etc. · Automatisering of scènebesturing, bijvoorbeeld tijdschakelklok. · Versleuteling en veilig opstarten van de Flash. · Firmware-upgrade en versiebeheer.
Hoofdstuk 2. Introductie en praktijk van IoT-projecten 13
Smartphone-apps · Netwerkconfiguratie en apparaatbinding. · Slimme lichtproductbesturing, zoals schakelaar, helderheid, kleurtemperatuur etc. · Automatisering of scène-instellingen, bijvoorbeeld tijdschakelklok. · Lokale/afstandsbediening. · Gebruikersregistratie, inloggen, enz.
ESP RainMaker IoT-cloudplatform · Toegang tot IoT-apparaten mogelijk maken. · Het verstrekken van API's voor apparaatbediening die toegankelijk zijn voor smartphone-apps. · Firmware-upgrade en versiebeheer.
2.2.3 Hardware-voorbereiding
Als je het project in de praktijk wilt brengen, heb je ook de volgende hardware nodig: slimme lampen, smartphones, wifi-routers en een computer die voldoet aan de installatievereisten van de ontwikkelomgeving. Slimme lampen
Slimme lampen zijn een nieuw type lampen, waarvan de vorm hetzelfde is als de gewone gloeilamp. Een slim licht bestaat uit een condensator-down-geregelde voeding, een draadloze module (met ingebouwde ESP32-C3), LED-controller en RGB LED-matrix. Wanneer aangesloten op de voeding, zal de 15 V DC voltagDe uitvoer na condensatorverlaging, diode-rectificatie en regeling levert energie aan de LED-controller en LED-matrix. De LED-controller kan met bepaalde intervallen automatisch hoge en lage niveaus verzenden, waarbij de RGB LED-matrix wordt geschakeld tussen gesloten (verlichting aan) en open (verlichting uit), zodat deze cyaan, geel, groen, paars, blauw, rood en wit Licht. De draadloze module is verantwoordelijk voor het verbinden met de Wi-Fi-router, het ontvangen en rapporteren van de status van slimme lampen en het verzenden van opdrachten om de LED te bedienen.
Figuur 2.2. Een gesimuleerd slim licht
In de vroege ontwikkeling stage, u kunt een slim licht simuleren met behulp van het ESP32-C3DevKitM-1-bord dat is aangesloten op RGB LED lamp kralen (zie figuur 2.2). Maar dat zou je wel moeten doen
14 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
let op: dit is niet de enige manier om een slimme lamp in elkaar te zetten. Het hardwareontwerp van het project in dit boek bevat alleen een draadloze module (met ingebouwde ESP32-C3), maar geen compleet smart light hardware-ontwerp. Daarnaast produceert Espressif ook een op ESP32-C3 gebaseerd audio-ontwikkelbord ESP32C3-Lyra voor het aansturen van lampen met audio. Het bord heeft interfaces voor microfoons en luidsprekers en kan LED-strips aansturen. Het kan worden gebruikt voor het ontwikkelen van ultragoedkope, hoogwaardige audio-omroepen en ritmelichtstrips. Figuur 2.3 toont een ESP32-C3Lyra-bord gekoppeld aan een strip van 40 LED-lampjes.
Figuur 2.3. ESP32-C3-Lyra gekoppeld met een strip van 40 LED-lampjes
Smartphones (Android/iOS) Het Smart Light-project betreft de ontwikkeling van een smartphone-app voor het instellen en besturen van slimme lichtproducten.
Wi-Fi-routers Wi-Fi-routers zetten bekabelde netwerksignalen en mobiele netwerksignalen om in draadloze netwerksignalen, zodat computers, smartphones, tablets en andere draadloze apparaten verbinding kunnen maken met het netwerk. BijvoorbeeldampZo hoeft breedband in huis alleen te worden aangesloten op een Wi-Fi-router om draadloze netwerken van Wi-Fi-apparaten tot stand te brengen. De reguliere protocolstandaard die door Wi-Fi-routers wordt ondersteund, is IEEE 802.11n, met een gemiddelde TxRate van 300 Mbps, of maximaal 600 Mbps. Ze zijn achterwaarts compatibel met IEEE 802.11b en IEEE 802.11g. De ESP32-C3 chip van Espressif ondersteunt IEEE 802.11b/g/n, waardoor je kunt kiezen voor een single-band (2.4 GHz) of dual-band (2.4 GHz en 5 GHz) wifi-router.
In hoofdstuk 4 wordt een computerontwikkelomgeving (Linux/macOS/Windows) geïntroduceerd. Hoofdstuk 2. Introductie en praktijk van IoT-projecten 15
2.2.4 Ontwikkelingsproces
Figuur 2.4. Stappen voor het ontwikkelen van het Smart Light-project
Hardwareontwerp Hardwareontwerp van IoT-apparaten is essentieel voor een IoT-project. Een compleet slim lichtproject is bedoeld om alamp werken onder netvoeding. Verschillende fabrikanten produceren lamps van verschillende stijlen en drivertypes, maar hun draadloze modules hebben meestal dezelfde functie. Om het ontwikkelingsproces van het Smart Ligh-project te vereenvoudigen, behandelt dit boek alleen het hardwareontwerp en de softwareontwikkeling van draadloze modules.
Configuratie van het IoT-cloudplatform Om IoT-cloudplatforms te gebruiken, moet u projecten op de backend configureren, zoals het maken van producten, het maken van apparaten, het instellen van apparaateigenschappen, enz.
Ingebouwde softwareontwikkeling voor IoT-apparaten Implementeer de verwachte functies met ESP-IDF, de SDK aan de apparaatzijde van Espressif, inclusief verbinding maken met IoT-cloudplatforms, het ontwikkelen van LED-stuurprogramma's en het upgraden van firmware.
Ontwikkeling van smartphone-apps Ontwikkel smartphone-apps voor Android- en iOS-systemen om gebruikersregistratie en login, apparaatcontrole en andere functies te realiseren.
Optimalisatie van IoT-apparaten Zodra de basisontwikkeling van de IoT-apparaatfuncties is voltooid, kunt u zich wenden tot optimalisatietaken, zoals energieoptimalisatie.
Massaproductietesten Voer massaproductietests uit volgens gerelateerde normen, zoals een functietest van de apparatuur, verouderingstest, RF-test, enz.
Ondanks de hierboven genoemde stappen is een Smart Light-project niet noodzakelijkerwijs onderworpen aan een dergelijke procedure, omdat er ook verschillende taken tegelijkertijd kunnen worden uitgevoerd. BijvoorbeeldampZo kunnen embedded software en smartphone-apps parallel worden ontwikkeld. Sommige stappen moeten mogelijk ook worden herhaald, zoals de optimalisatie van IoT-apparaten en het testen van massaproductie.
16 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
2.3 Samenvatting
In dit hoofdstuk hebben we eerst de basiscomponenten en functionele modules van een IoT-project uiteengezet en vervolgens de Smart Light-case voor de praktijk geïntroduceerd, verwijzend naar de structuur, functies, hardwarevoorbereiding en ontwikkelingsproces. Lezers kunnen conclusies trekken uit de praktijk en er vertrouwen in hebben dat ze in de toekomst IoT-projecten met minimale fouten kunnen uitvoeren.
Hoofdstuk 2. Introductie en praktijk van IoT-projecten 17
18 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Hoofdstuk 3
Invoering
naar
ESP
Regenmaker
Het Internet of Things (IoT) biedt eindeloze mogelijkheden om de manier waarop mensen leven te veranderen, maar de ontwikkeling van IoT-techniek zit vol uitdagingen. Met publieke clouds kunnen terminalfabrikanten productfunctionaliteit implementeren via de volgende oplossingen:
Gebaseerd op de cloudplatforms van oplossingsaanbieders. Op deze manier hoeven terminalfabrikanten alleen de producthardware te ontwerpen, vervolgens de hardware met de cloud te verbinden met behulp van de meegeleverde communicatiemodule, en de productfuncties te configureren volgens de richtlijnen. Dit is een efficiënte aanpak, omdat hierdoor de noodzaak voor ontwikkeling en exploitatie en onderhoud (O&M) aan de server- en applicatiezijde wordt geëlimineerd. Het stelt terminalfabrikanten in staat zich te concentreren op het hardwareontwerp zonder na te denken over cloudimplementatie. Dergelijke oplossingen (bijvoorbeeld apparaatfirmware en app) zijn echter over het algemeen niet open source, dus de productfuncties zullen beperkt zijn door het cloudplatform van de provider, dat niet kan worden aangepast. Ondertussen behoren ook de gebruikers- en apparaatgegevens tot het cloudplatform.
Gebaseerd op cloudproducten Bij deze oplossing moeten terminalfabrikanten, na voltooiing van het hardwareontwerp, niet alleen cloudfuncties implementeren met behulp van een of meer cloudproducten van de publieke cloud, maar moeten ze ook de hardware koppelen aan de cloud. Bijvoorbeeldample, om verbinding te maken met Amazon Web Services (AWS) moeten terminalfabrikanten AWS-producten zoals Amazon API Gateway, AWS IoT Core en AWS Lambda gebruiken om apparaattoegang, afstandsbediening, gegevensopslag, gebruikersbeheer en andere basisfuncties mogelijk te maken. Het vraagt niet alleen van terminalfabrikanten om op flexibele wijze cloudproducten te gebruiken en te configureren met diepgaand inzicht en rijke ervaring, maar vereist ook dat ze rekening houden met de bouw- en onderhoudskosten voor initiële en latere s.tages Dit stelt grote uitdagingen voor de energie en hulpbronnen van het bedrijf.
Vergeleken met publieke clouds worden private clouds doorgaans gebouwd voor specifieke projecten en producten. Private cloud-ontwikkelaars krijgen de hoogste mate van vrijheid bij het ontwerpen van protocollen en de implementatie van bedrijfslogica. Terminalfabrikanten kunnen naar believen producten en ontwerpschema's maken en gebruikersgegevens eenvoudig integreren en versterken. Het combineren van de hoge beveiliging, schaalbaarheid en betrouwbaarheid van de publieke cloud met de voordelentagAls private cloud lanceerde Espressif ESP
19
RainMaker, een diep geïntegreerde private cloud-oplossing gebaseerd op de Amazon-cloud. Gebruikers kunnen ESP RainMaker implementeren en eenvoudig een privécloud bouwen met een AWS-account.
3.1 Wat is ESP RainMaker?
ESP RainMaker is een compleet AIoT-platform gebouwd met meerdere volwassen AWS-producten. Het biedt verschillende services die nodig zijn voor massaproductie, zoals toegang tot de cloud van apparaten, apparaatupgrades, backendbeheer, inloggen door derden, spraakintegratie en gebruikersbeheer. Door de Serverless Application Repository (SAR) van AWS te gebruiken, kunnen terminalfabrikanten ESP RainMaker snel op hun AWS-accounts implementeren, wat tijdbesparend en eenvoudig te bedienen is. De door ESP RainMaker gebruikte SAR, beheerd en onderhouden door Espressif, helpt ontwikkelaars de onderhoudskosten van de cloud te verlagen en de ontwikkeling van AIoT-producten te versnellen, waardoor veilige, stabiele en aanpasbare AIoT-oplossingen worden gebouwd. Figuur 3.1 toont de architectuur van ESP RainMaker.
Figuur 3.1. Architectuur van ESP RainMaker
De openbare server ESP RainMaker van Espressif is gratis voor alle ESP-enthousiastelingen, makers en docenten voor oplossingsevaluatie. Ontwikkelaars kunnen inloggen met Apple-, Google- of GitHub-accounts en snel hun eigen prototypes van IoT-applicaties bouwen. De openbare server integreert Alexa en Google Home en biedt spraakbesturingsdiensten, die worden ondersteund door Alexa Skill en Google Actions. De semantische herkenningsfunctie wordt ook mogelijk gemaakt door derden. RainMaker IoT-apparaten reageren alleen op specifieke acties. Voor een volledige lijst met ondersteunde spraakopdrachten kunt u de platforms van derden raadplegen. Daarnaast biedt Espressif een openbare RainMaker-app waarmee gebruikers de producten via smartphones kunnen bedienen. 20 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
3.2 De implementatie van ESP RainMaker
Zoals weergegeven in figuur 3.2 bestaat ESP RainMaker uit vier delen: · Claiming Service, waardoor RainMaker-apparaten dynamisch certificaten kunnen verkrijgen. · RainMaker Cloud (ook bekend als cloud-backend), dat diensten levert zoals berichtfiltering, gebruikersbeheer, gegevensopslag en integraties van derden. · RainMaker Agent, waardoor RainMaker-apparaten verbinding kunnen maken met RainMaker Cloud. · RainMaker Client (RainMaker App of CLI-scripts), voor provisioning, aanmaken van gebruikers, koppelen en beheren van apparaten, enz.
Figuur 3.2. Structuur van ESP RainMaker
ESP RainMaker biedt een complete set tools voor productontwikkeling en massaproductie, waaronder: RainMaker SDK
RainMaker SDK is gebaseerd op ESP-IDF en levert de broncode van de apparaatzijde-agent en gerelateerde C API's voor firmware-ontwikkeling. Ontwikkelaars hoeven alleen de applicatielogica te schrijven en de rest aan het RainMaker-framework over te laten. Ga voor meer informatie over C API's naar https://bookc3.espressif.com/rm/c-api-reference. RainMaker App Met de openbare versie van de RainMaker App kunnen ontwikkelaars de inrichting van apparaten voltooien en de status van apparaten controleren en opvragen (bijvoorbeeld slimme verlichtingsproducten). Het is beschikbaar in zowel iOS- als Android-appstores. Raadpleeg hoofdstuk 10 voor meer details. REST API's REST API's helpen gebruikers hun eigen applicaties te bouwen, vergelijkbaar met de RainMaker-app. Ga voor meer informatie naar https://swaggerapis.rainmaker.espressif.com/.
Hoofdstuk 3. Inleiding tot ESP RainMaker 21
Python-API's Er wordt een op Python gebaseerde CLI geleverd, die wordt geleverd met de RainMaker SDK, om alle functies te implementeren die vergelijkbaar zijn met smartphonefuncties. Ga voor meer informatie over Python-API's naar https://bookc3.espressif.com/rm/python-api-reference.
Admin CLI Admin CLI, met een hoger toegangsniveau, is bedoeld voor de privé-implementatie van ESP RainMaker om apparaatcertificaten in bulk te genereren.
3.2.1 Service claimen
Alle communicatie tussen RainMaker-apparaten en de cloud-backend wordt uitgevoerd via MQTT+TLS. In de context van ESP RainMaker is ‘Claiming’ het proces waarbij apparaten certificaten verkrijgen van de Claiming Service om verbinding te maken met de cloud-backend. Houd er rekening mee dat de Claiming Service alleen van toepassing is op de openbare RainMaker-service, terwijl voor privé-implementatie de apparaatcertificaten in bulk moeten worden gegenereerd via de Admin CLI. ESP RainMaker ondersteunt drie soorten claimservices: Zelfclaimend
Het apparaat haalt de certificaten zelf op via een geheime sleutel die is voorgeprogrammeerd in eFuse nadat hij verbinding heeft gemaakt met internet. Hostgestuurde claiming De certificaten worden verkregen van de ontwikkelingshost met het RainMaker-account. Assisted Claiming De certificaten worden tijdens de provisioning verkregen via smartphone-applicaties.
3.2.2 RainMaker-agent
Figuur 3.3. Structuur van RainMaker SDK De primaire functie van de RainMaker Agent is het bieden van connectiviteit en het helpen van de applicatielaag bij het verwerken van uplink/downlink cloudgegevens. Het is gebouwd via de RainMaker SDK 22 ESP32-C3 Wireless Adventure: een uitgebreide gids voor IoT
en ontwikkeld op basis van het beproefde ESP-IDF-framework, met behulp van ESP-IDF-componenten zoals RTOS, NVS en MQTT. Figuur 3.3 toont de structuur van de RainMaker SDK.
De RainMaker SDK bevat twee belangrijke functies.
Verbinding
i. Samenwerken met Claiming Service om apparaatcertificaten te verkrijgen.
ii. Verbinding maken met de cloud-backend met behulp van het beveiligde MQTT-protocol om connectiviteit op afstand te bieden en bediening op afstand, berichtrapportage, gebruikersbeheer, apparaatbeheer, enz. te implementeren. Het maakt standaard gebruik van de MQTT-component in ESP-IDF en biedt een abstractielaag om te communiceren met andere protocolstapels.
iii. Biedt een wifi-voorzieningscomponent voor Wi-Fi-verbinding en -voorziening, esp https ota-component voor OTA-upgrades, en esp local ctrl-component voor detectie en verbinding van lokale apparaten. Al deze doelstellingen kunnen worden bereikt door middel van een eenvoudige configuratie.
Gegevensverwerking
i. Het opslaan van de apparaatcertificaten uitgegeven door Claiming Service en de gegevens die nodig zijn bij het uitvoeren van RainMaker, standaard met behulp van de interface van de nvs flash-component, en het leveren van API's voor ontwikkelaars voor direct gebruik.
ii. Het callback-mechanisme gebruiken om uplink/downlink-cloudgegevens te verwerken en de gegevens automatisch te deblokkeren naar de applicatielaag voor eenvoudige verwerking door ontwikkelaars. Bijvoorbeeldample biedt de RainMaker SDK rijke interfaces voor het vaststellen van TSL-gegevens (Thing Specification Language), die nodig zijn om TSL-modellen te definiëren om IoT-apparaten te beschrijven en functies zoals timing, aftellen en stembesturing te implementeren. Voor elementaire interactieve functies zoals timing biedt RainMaker SDK een ontwikkelingsvrije oplossing die eenvoudig kan worden ingeschakeld wanneer dat nodig is. Vervolgens verwerkt de RainMaker Agent de gegevens rechtstreeks, stuurt deze naar de cloud via het bijbehorende MQTT-onderwerp en koppelt de gegevenswijzigingen terug in de cloud-backend via een callback-mechanisme.
3.2.3 Cloud-backend
De cloud-backend is gebouwd op AWS Serverless Computing en wordt bereikt via AWS Cognito (identiteitsbeheersysteem), Amazon API Gateway, AWS Lambda (serverloze computerservice), Amazon DynamoDB (NoSQL-database), AWS IoT Core (IoT-toegangskern die MQTT-toegang biedt en regelfiltering), Amazon Simple Email Service (eenvoudige e-mailservice SES), Amazon CloudFront (netwerk voor snelle levering), Amazon Simple Queue Service (SQS-berichtenwachtrij) en Amazon S3 (bucketopslagservice). Het is bedoeld om de schaalbaarheid en veiligheid te optimaliseren. Met ESP RainMaker kunnen ontwikkelaars apparaten beheren zonder code in de cloud te hoeven schrijven. Berichten die door apparaten worden gerapporteerd, worden transparant verzonden naar
Hoofdstuk 3. Inleiding tot ESP RainMaker 23
applicatieclients of andere diensten van derden. Tabel 3.1 toont de AWS-cloudproducten en -functies die worden gebruikt in de cloud-backend, met meer producten en functies in ontwikkeling.
Tabel 3.1. AWS-cloudproducten en -functies die worden gebruikt door de cloud-backend
AWS Cloud-product gebruikt door RainMaker
Functie
AWS Cognito
Beheer van gebruikersgegevens en ondersteuning van aanmeldingen van derden
AWS Lambda
Implementatie van de kernbedrijfslogica van de cloudbackend
Amazon Timestream Tijdreeksgegevens opslaan
Amazon DynamoDB Privégegevens van klanten opslaan
AWS IoT-kern
Ondersteuning van MQTT-communicatie
Amazon SES
Het aanbieden van e-mailverzenddiensten
Amazon CloudFront Versnelt het beheer van de backend webtoegang tot de site
Amazon-SQS
Berichten doorsturen vanuit AWS IoT Core
3.2.4 RainMaker-client
RainMaker-clients, zoals App en CLI, communiceren met de cloud-backend via REST API's. Gedetailleerde informatie en instructies over REST API's zijn te vinden in de Swagger-documentatie van Espressif. De mobiele applicatieclient van RainMaker is beschikbaar voor zowel iOS- als Android-systemen. Het maakt het inrichten, beheren en delen van apparaten mogelijk, evenals het maken en inschakelen van afteltaken en het verbinden met platforms van derden. Het kan automatisch de gebruikersinterface en pictogrammen laden volgens de configuratie die door de apparaten wordt gerapporteerd en de TSL van het apparaat volledig weergeven.
Bijvoorbeeldample, als er een slim licht is gebouwd op de door RainMaker SDK geleverde exampbestanden, het pictogram en de gebruikersinterface van de lamplamp worden automatisch geladen wanneer de inrichting is voltooid. Gebruikers kunnen de kleur en helderheid van het licht via de interface wijzigen en controle door derden verkrijgen door Alexa Smart Home Skill of Google Smart Home Actions aan hun ESP RainMaker-accounts te koppelen. Figuur 3.4 toont het pictogram en de gebruikersinterfaceampbestanden van de lamp branden respectievelijk op Alexa, Google Home en ESP RainMaker App.
24 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
(a) Bijvample – Alexa
(b) Bijvample – Google Home
(c) Bijvample – ESP RainMaker
Afbeelding 3.4. Exampbestanden met pictogram en gebruikersinterface van het lamplampje op Alexa, Google Home en de ESP RainMaker-app
3.3 Oefenen: kernpunten voor het ontwikkelen met ESP RainMaker
Zodra de apparaatstuurprogrammalaag is voltooid, kunnen ontwikkelaars beginnen met het maken van TSL-modellen en het verwerken van downlinkgegevens met behulp van de API's van RainMaker SDK, en het inschakelen van de ESP RainMaker-basisservices op basis van de productdefinitie en -vereisten.
Hoofdstuk 3. Inleiding tot ESP RainMaker 25
In paragraaf 9.4 van dit boek wordt de implementatie van het slimme LED-licht in RainMaker uitgelegd. Tijdens het debuggen kunnen ontwikkelaars de CLI-tools in de RainMaker SDK gebruiken om met het slimme licht te communiceren (of REST API's van Swagger aanroepen).
Hoofdstuk 10 gaat dieper in op het gebruik van REST API's bij het ontwikkelen van smartphone-applicaties. De OTA-upgrades van slimme LED-lampen worden behandeld in hoofdstuk 11. Als ontwikkelaars de ESP Insights-monitoring op afstand hebben ingeschakeld, zal de ESP RainMaker-beheerbackend de ESP Insights-gegevens weergeven. Details worden gepresenteerd in hoofdstuk 15.
ESP RainMaker ondersteunt privé-implementatie, die op de volgende manieren verschilt van de openbare RainMaker-server:
Claimservice Om certificaten in privé-implementaties te genereren, is het vereist om de RainMaker Admin CLI te gebruiken in plaats van Claiming. Bij openbare servers moeten ontwikkelaars beheerdersrechten krijgen om een firmware-upgrade te implementeren, maar dit is ongewenst bij commerciële implementaties. Daarom kan er geen afzonderlijke authenticatieservice worden aangeboden voor zelfclaimen, noch beheerdersrechten voor hostgestuurde of ondersteunde claims.
Telefoonapps Bij privé-implementaties moeten applicaties afzonderlijk worden geconfigureerd en samengesteld om ervoor te zorgen dat de accountsystemen niet interoperabel zijn.
Logins van derden en spraakintegratie Ontwikkelaars moeten afzonderlijk configureren via Google- en Apple Developer-accounts om logins van derden mogelijk te maken, evenals de integratie van Alexa Skill en Google Voice Assistant.
TIPS Ga voor meer informatie over cloudimplementatie naar https://customer.rainmaker.espressif. com. Wat de firmware betreft, vereist de migratie van een openbare server naar een privéserver alleen het vervangen van apparaatcertificaten, wat de migratie-efficiëntie aanzienlijk verbetert en de kosten van migratie en secundaire foutopsporing verlaagt.
3.4 Kenmerken van ESP RainMaker
De ESP RainMaker-functies zijn voornamelijk gericht op drie aspecten: gebruikersbeheer, eindgebruikers en beheerders. Alle functies worden ondersteund op zowel publieke als private servers, tenzij anders vermeld.
3.4.1 Gebruikersbeheer
Dankzij de gebruikersbeheerfuncties kunnen eindgebruikers zich registreren, inloggen, wachtwoorden wijzigen, wachtwoorden opvragen, enz.
26 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Registreren en inloggen De registratie- en inlogmethoden die door RainMaker worden ondersteund, zijn onder meer: · E-mailadres + wachtwoord · Telefoonnummer + wachtwoord · Google-account · Apple-account · GitHub-account (alleen openbare server) · Amazon-account (alleen privéserver)
OPMERKING Aanmelden via Google/Amazon deelt het e-mailadres van de gebruiker met RainMaker. Aanmelden via Apple deelt een dummy-adres dat Apple specifiek aan de gebruiker toewijst voor de RainMaker-service. Er wordt automatisch een RainMaker-account aangemaakt voor gebruikers die zich voor de eerste keer aanmelden met een Google-, Apple- of Amazon-account.
Wachtwoord wijzigen Alleen geldig voor inloggen op basis van e-mailadres/telefoonnummer. Alle andere actieve sessies worden uitgelogd nadat het wachtwoord is gewijzigd. Volgens het gedrag van AWS Cognito kunnen de uitgelogde sessies maximaal 1 uur actief blijven.
Wachtwoord ophalen Alleen geldig voor inloggen op basis van e-mailadres/telefoonnummer.
3.4.2 Eindgebruikersfuncties
Functies die toegankelijk zijn voor eindgebruikers omvatten lokale en externe bediening en monitoring, planning, apparaatgroepering, het delen van apparaten, pushmeldingen en integraties van derden.
Bediening en monitoring op afstand · Queryconfiguratie, parameterwaarden en verbindingsstatus voor één of alle apparaten. · Stel parameters in voor één of meerdere apparaten.
Lokale bediening en monitoring Mobiele telefoon en het apparaat moeten op hetzelfde netwerk zijn aangesloten voor lokale bediening.
Planning · Gebruikers kunnen vooraf bepaalde acties op een specifiek tijdstip instellen. · Er is geen internetverbinding vereist voor het apparaat tijdens het uitvoeren van het schema. · Eenmalig of herhalen (door dagen op te geven) voor één of meerdere apparaten.
Apparaatgroepering Ondersteunt abstracte groepering op meerdere niveaus Groepsmetagegevens kunnen worden gebruikt om een Home Room-structuur te creëren.
Hoofdstuk 3. Inleiding tot ESP RainMaker 27
Apparaat delen Een of meer apparaten kunnen worden gedeeld met een of meer gebruikers.
Pushmeldingen Eindgebruikers ontvangen pushmeldingen voor gebeurtenissen zoals · Nieuwe apparaten toegevoegd/verwijderd · Apparaat verbonden met de cloud · Apparaat losgekoppeld van de cloud · Verzoeken voor het delen van apparaten gemaakt/geaccepteerd/geweigerd · Waarschuwingsberichten gerapporteerd door apparaten
Integraties van derden Alexa en Google Voice Assistant worden ondersteund om RainMaker-apparaten te bedienen, inclusief lampen, schakelaars, stopcontacten, ventilatoren en temperatuursensoren.
3.4.3 Beheerfuncties
Met beheerdersfuncties kunnen beheerders apparaatregistratie, apparaatgroepering en OTA-upgrades implementeren view statistieken en ESP Insights-gegevens.
Apparaatregistratie Genereer apparaatcertificaten en registreer u met Admin CLI (alleen privéserver).
Apparaatgroepering Maak abstracte of gestructureerde groepen op basis van apparaatinformatie (alleen privéserver).
Over-the-Air (OTA)-upgrades Upload firmware op basis van versie en model, naar een of meer apparaten of een groep. Bewaak, annuleer of archiveer OTA-taken.
View statistieken ViewTot de beschikbare statistieken behoren: · Apparaatregistraties (certificaten geregistreerd door de beheerder) · Apparaatactiveringen (apparaat voor de eerste keer verbonden) · Gebruikersaccounts · Koppeling tussen gebruiker en apparaat
View ESP Insights-gegevens ViewTot de beschikbare ESP Insights-gegevens behoren: · Fouten, waarschuwingen en aangepaste logboeken · Crashrapporten en -analyses · Redenen voor opnieuw opstarten · Statistieken zoals geheugengebruik, RSSI, enz. · Aangepaste statistieken en variabelen
28 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
3.5 Samenvatting
In dit hoofdstuk hebben we enkele belangrijke verschillen geïntroduceerd tussen de publieke RainMaker-implementatie en de private implementatie. De particuliere ESP RainMaker-oplossing gelanceerd door Espressif is zeer betrouwbaar en uitbreidbaar. Alle chips uit de ESP32-serie zijn verbonden en aangepast aan AWS, wat de kosten aanzienlijk verlaagt. Ontwikkelaars kunnen zich concentreren op prototypeverificatie zonder kennis te hoeven nemen van AWS-cloudproducten. We hebben ook de implementatie en functies van ESP RainMaker uitgelegd, en enkele belangrijke punten voor ontwikkeling met behulp van het platform.
Scannen om ESP RainMaker voor Android te downloaden Scannen om ESP RainMaker voor iOS te downloaden
Hoofdstuk 3. Inleiding tot ESP RainMaker 29
30 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Hoofdstuk Installatie 4 Ontwikkelomgeving
Dit hoofdstuk richt zich op ESP-IDF, het officiële softwareontwikkelingsframework voor ESP32-C3. We leggen uit hoe u de omgeving op verschillende besturingssystemen kunt instellen en introduceren de projectstructuur en het bouwsysteem van ESP-IDF, evenals het gebruik van gerelateerde ontwikkeltools. Vervolgens presenteren we het compileer- en uitvoeringsproces van een example project, terwijl het een gedetailleerde uitleg biedt van het uitvoerlogboek bij elke stage.
4.1 ESP-IDF voorbijview
ESP-IDF (Espressif IoT Development Framework) is een alles-in-één IoT-ontwikkelingsframework dat wordt aangeboden door Espressif Technology. Het gebruikt C/C++ als de belangrijkste ontwikkeltaal en ondersteunt cross-compilatie onder reguliere besturingssystemen zoals Linux, Mac en Windows. De exampDe programma's in dit boek zijn ontwikkeld met behulp van ESP-IDF, dat de volgende kenmerken biedt: · Stuurprogramma's op SoC-systeemniveau. ESP-IDF bevat stuurprogramma's voor ESP32, ESP32-S2, ESP32-C3,
en andere chips. Deze stuurprogramma's omvatten een perifere low-level (LL)-bibliotheek, een HAL-bibliotheek (Hardware Abstraction Layer), RTOS-ondersteuning en driversoftware voor de bovenste laag, enz. · Essentiële componenten. ESP-IDF bevat fundamentele componenten die nodig zijn voor IoT-ontwikkeling. Dit omvat meerdere netwerkprotocolstacks zoals HTTP en MQTT, een raamwerk voor energiebeheer met dynamische frequentiemodulatie en functies zoals Flash Encryption en Secure Boot, enz. · Ontwikkelings- en productietools. ESP-IDF biedt veelgebruikte tools voor het bouwen, flashen en debuggen tijdens ontwikkeling en massaproductie (zie figuur 4.1), zoals het bouwsysteem gebaseerd op CMake, de cross-compilatietoolketen gebaseerd op GCC, en de JTAG debugging tool gebaseerd op OpenOCD, etc. Het is vermeldenswaard dat de ESP-IDF-code voornamelijk voldoet aan de Apache 2.0 open-source licentie. Gebruikers kunnen zonder beperkingen persoonlijke of commerciële software ontwikkelen, terwijl ze voldoen aan de voorwaarden van de open-sourcelicentie. Bovendien krijgen gebruikers gratis permanente patentlicenties, zonder de verplichting om eventuele wijzigingen in de broncode open source te maken.
31
Figuur 4.1.
Bouwen, flashen en debuggen
tools voor ontwikkeling en massaproductie
4.1.1 ESP-IDF-versies
De ESP-IDF-code wordt gehost op GitHub als een open-sourceproject. Momenteel zijn er drie hoofdversies beschikbaar: v3, v4 en v5. Elke hoofdversie bevat doorgaans verschillende subversies, zoals v4.2, v4.3, enzovoort. Espressif Systems garandeert 30 maanden ondersteuning voor bugfixes en beveiligingspatches voor elke uitgebrachte subversie. Daarom worden er ook regelmatig revisies van subversies uitgebracht, zoals v4.3.1, v4.2.2, enz. Tabel 4.1 toont de ondersteuningsstatus van verschillende ESP-IDF-versies voor Espressif-chips, waarbij wordt aangegeven of deze zich in een pre-versie bevinden.view stage (ondersteuning bieden voor preview versies, die mogelijk bepaalde functies of documentatie missen) of die officieel worden ondersteund.
Tabel 4.1. Ondersteuningsstatus van verschillende ESP-IDF-versies voor Espressif-chips
Serie ESP32 ESP32-S2 ESP32-C3 ESP32-S3 ESP32-C2 ESP32-H2
v4.1 ondersteund
v4.2 ondersteund ondersteund
v4.3 ondersteund ondersteund ondersteund
v4.4 ondersteund ondersteund ondersteund ondersteund
preview
v5.0 ondersteund ondersteund ondersteund ondersteund ondersteund preview
32 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
De iteratie van hoofdversies omvat vaak aanpassingen aan de raamwerkstructuur en updates van het compilatiesysteem. Bijvoorbeeldample was de belangrijkste verandering van v3.* naar v4.* de geleidelijke migratie van het bouwsysteem van Make naar CMake. Aan de andere kant brengt iteratie van kleine versies doorgaans de toevoeging van nieuwe functies of ondersteuning voor nieuwe chips met zich mee.
Het is belangrijk om de relatie tussen stabiele versies en GitHub-vertakkingen te onderscheiden en te begrijpen. Versies met het label v*.* of v*.*.* vertegenwoordigen stabiele versies die de volledige interne tests door Espressif hebben doorstaan. Eenmaal opgelost, blijven de code, de toolketen en de releasedocumenten voor dezelfde versie ongewijzigd. GitHub-vertakkingen (bijvoorbeeld de release/v4.3-vertakking) ondergaan echter regelmatig code-commits, vaak op dagelijkse basis. Daarom kunnen twee codefragmenten onder dezelfde vertakking verschillen, waardoor ontwikkelaars hun code onmiddellijk dienovereenkomstig moeten bijwerken.
4.1.2 ESP-IDF Git-workflow
Espressif volgt een specifieke Git-workflow voor ESP-IDF, die als volgt wordt beschreven:
· Er worden nieuwe wijzigingen aangebracht in de masterbranch, die dient als de belangrijkste ontwikkelingsbranch. De ESP-IDF-versie op de master-branch heeft altijd een -dev tag om aan te geven dat het momenteel in ontwikkeling is, zoals v4.3-dev. Wijzigingen op de masterbranch worden eerst opnieuw doorgevoerdviewbewerkt en getest in de interne repository van Espressif, en vervolgens naar GitHub gepusht nadat het automatische testen is voltooid.
· Zodra een nieuwe versie de ontwikkeling van functies op de master branch heeft voltooid en voldoet aan de criteria voor deelname aan bètatests, gaat deze over naar een nieuwe branch, zoals release/v4.3. Bovendien is dit nieuwe filiaal tagged als pre-releaseversie, zoals v4.3-beta1. Ontwikkelaars kunnen het GitHub-platform raadplegen voor toegang tot de volledige lijst met branches en tags voor ESP-IDF. Het is belangrijk op te merken dat de bètaversie (pre-releaseversie) mogelijk nog steeds een aanzienlijk aantal bekende problemen kent. Omdat de bètaversie voortdurend wordt getest, worden er tegelijkertijd bugfixes aan zowel deze versie als de masterbranch toegevoegd. Ondertussen is de masterbranch mogelijk al begonnen met het ontwikkelen van nieuwe functies voor de volgende versie. Wanneer het testen bijna voltooid is, wordt een release candidate (rc) label aan de branch toegevoegd, wat aangeeft dat het een potentiële kandidaat is voor de officiële release, zoals v4.3-rc1. Bij deze ztage, de branch blijft een pre-releaseversie.
· Als er geen grote bugs worden ontdekt of gemeld, krijgt de pre-releaseversie uiteindelijk een hoofdversielabel (bijvoorbeeld v5.0) of een klein versielabel (bijvoorbeeld v4.3) en wordt het een officiële releaseversie, die wordt gedocumenteerd op de pagina met release-opmerkingen. Vervolgens worden eventuele bugs die in deze versie worden geïdentificeerd, opgelost in de releasebranch. Nadat het handmatig testen is voltooid, wordt aan de vertakking een versielabel met bugfix toegewezen (bijvoorbeeld v4.3.2), dat ook wordt weergegeven op de pagina met release-opmerkingen.
Hoofdstuk 4. Ontwikkelomgeving instellen 33
4.1.3 Een geschikte versie kiezen
Omdat ESP-IDF ESP32-C3 officieel begon te ondersteunen vanaf versie v4.3, en v4.4 nog niet officieel is uitgebracht op het moment dat dit boek wordt geschreven, is de versie die in dit boek wordt gebruikt v4.3.2, wat een herziene versie is. van v4.3. Het is echter belangrijk op te merken dat tegen de tijd dat u dit boek leest, v4.4 of nieuwere versies mogelijk al beschikbaar zijn. Bij het selecteren van een versie raden wij het volgende aan:
· Voor beginnende ontwikkelaars is het raadzaam om de stabiele versie v4.3 of de herziene versie ervan te kiezen, die aansluit bij de vorigeampversie die in dit boek wordt gebruikt.
· Voor massaproductiedoeleinden wordt het aanbevolen om de nieuwste stabiele versie te gebruiken om te profiteren van de meest up-to-date technische ondersteuning.
· Als je van plan bent om met nieuwe chips te experimenteren of nieuwe productfuncties te verkennen, gebruik dan de master branch. De nieuwste versie bevat de nieuwste functies, maar houd er rekening mee dat er bekende of onbekende bugs aanwezig kunnen zijn.
· Als de stabiele versie die wordt gebruikt niet de gewenste nieuwe functies bevat en je de risico's die met de master branch gepaard gaan wilt minimaliseren, overweeg dan om de corresponderende release branch te gebruiken, zoals de release/v4.4 branch. De GitHub-repository van Espressif zal eerst de release/v4.4-branch creëren en vervolgens de stabiele v4.4-versie vrijgeven op basis van een specifieke historische momentopname van deze branch, nadat alle ontwikkeling en testen van functies zijn voltooid.
4.1.4 Meer danview van de ESP-IDF SDK-directory
De ESP-IDF SDK bestaat uit twee hoofdmappen: esp-idf en .espressif. De eerste bevat de broncode van de ESP-IDF-repository files en compilatiescripts, terwijl deze laatste voornamelijk compilatietoolketens en andere software opslaan. Bekendheid met deze twee mappen zal ontwikkelaars helpen de beschikbare bronnen beter te gebruiken en het ontwikkelingsproces te versnellen. De directorystructuur van ESP-IDF wordt hieronder beschreven:
(1) ESP-IDF-repositorycodedirectory (/esp/esp-idf), zoals weergegeven in figuur 4.2.
A. Componentdirectorycomponenten
Deze kerndirectory integreert talrijke essentiële softwarecomponenten van ESP-IDF. Er kan geen projectcode worden gecompileerd zonder te vertrouwen op de componenten in deze map. Het bevat stuurprogrammaondersteuning voor verschillende Espressif-chips. Van de LL-bibliotheek en HAL-bibliotheekinterfaces voor randapparatuur tot het hogere niveau Driver en Virtual File Systeemlaagondersteuning (VFS), ontwikkelaars kunnen de juiste componenten op verschillende niveaus kiezen voor hun ontwikkelingsbehoeften. ESP-IDF ondersteunt ook meerdere standaard netwerkprotocolstacks zoals TCP/IP, HTTP, MQTT, WebSocket, enz. Ontwikkelaars kunnen vertrouwde interfaces zoals Socket gebruiken om netwerkapplicaties te bouwen. Componenten bieden inzicht
34 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Figuur 4.2. ESP-IDF-repositorycodedirectory
uitgebreide functionaliteit en kan eenvoudig in applicaties worden geïntegreerd, waardoor ontwikkelaars zich uitsluitend op de bedrijfslogica kunnen concentreren. Enkele veel voorkomende componenten zijn: · stuurprogramma: dit onderdeel bevat stuurprogramma's voor randapparatuur voor verschillende Espressif
chipseries, zoals GPIO, I2C, SPI, UART, LEDC (PWM), enz. De perifere driverprogramma's in dit onderdeel bieden chiponafhankelijke abstracte interfaces. Elk randapparaat heeft een gemeenschappelijke header file (zoals gpio.h), waardoor het niet meer nodig is om met verschillende chipspecifieke ondersteuningsvragen om te gaan. · esp_wifi: Wi-Fi wordt als speciaal randapparaat behandeld als een afzonderlijk onderdeel. Het bevat meerdere API's, zoals initialisatie van verschillende Wi-Fi-stuurprogrammamodi, parameterconfiguratie en gebeurtenisverwerking. Bepaalde functies van dit onderdeel worden aangeboden in de vorm van statische linkbibliotheken. ESP-IDF biedt ook uitgebreide driverdocumentatie voor gebruiksgemak.
Hoofdstuk 4. Ontwikkelomgeving instellen 35
· freertos: dit onderdeel bevat de volledige FreeRTOS-code. Naast uitgebreide ondersteuning voor dit besturingssysteem heeft Espressif de ondersteuning ook uitgebreid naar dual-core chips. Voor dual-core chips zoals ESP32 en ESP32-S3 kunnen gebruikers taken op specifieke kernen maken.
B. Documentenmap documenten
Deze map bevat ESP-IDF-gerelateerde ontwikkelingsdocumenten, waaronder de Get Started Guide, API Reference Manual, Development Guide, enz.
OPMERKING Nadat de inhoud van deze map door geautomatiseerde tools is gecompileerd, wordt deze geïmplementeerd op https://docs.espressif.com/projects/esp-idf. Zorg ervoor dat u het documentdoel wijzigt naar ESP32-C3 en selecteer de opgegeven ESP-IDF-versie.
C. Gereedschappen voor scripttools
Deze map bevat veelgebruikte front-end-compilatietools zoals idf.py en de monitorterminaltool idf_monitor.py, enz. De submap cmake bevat ook het kernscript files van het compilatiesysteem, dat als basis dient voor de implementatie van ESP-IDF-compilatieregels. Bij het toevoegen van de omgevingsvariabelen wordt de inhoud in de directory tools toegevoegd aan de systeemomgevingsvariabele, waardoor idf.py direct onder het projectpad kan worden uitgevoerd.
D. Example programmamap exampde
Deze map bevat een uitgebreide verzameling ESP-IDF exampbestandprogramma's die het gebruik van component-API's demonstreren. De exampbestanden zijn georganiseerd in verschillende submappen op basis van hun categorieën:
· aan de slag: deze submap bevat bijvoorbeeld instapniveausampbestanden als “Hallo wereld” en “knipperen” om gebruikers te helpen de basisbeginselen te begrijpen.
· Bluetooth: u kunt Bluetooth-gerelateerde bijv. vindenampbestanden hier, inclusief Bluetooth LE Mesh, Bluetooth LE HID, BluFi en meer.
· wifi: deze submap richt zich op Wi-Fi exampbestanden, inclusief basisprogramma's zoals Wi-Fi SoftAP, Wi-Fi Station, espnow, evenals een eigen communicatieprotocol examples van Espressif. Het bevat ook meerdere applicatielagen, bijvoorbeeldampbestanden gebaseerd op Wi-Fi, zoals Iperf, Sniffer en Smart Config.
· randapparatuur: deze uitgebreide submap is verder onderverdeeld in talrijke submappen op basis van randapparatuurnamen. Het bevat voornamelijk perifere driver examples voor Espressif-chips, met elke example met verschillende sub-examples. De gpio-submap bevat bijvoorbeeld twee examples: GPIO en GPIO-matrixtoetsenbord. Het is belangrijk op te merken dat niet alle exampbestanden in deze map zijn van toepassing op ESP32-C3.
36 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Bijvoorbeeldample, de exampbestanden in usb/host zijn alleen van toepassing op randapparatuur met USB Host-hardware (zoals ESP32-S3), en ESP32-C3 beschikt niet over dit randapparaat. Het compilatiesysteem geeft doorgaans aanwijzingen bij het instellen van het doel. De LEESMIJ file van elke example geeft een overzicht van de ondersteunde chips. · protocollen: Deze submap bevat bijvampbestanden voor verschillende communicatieprotocollen, waaronder MQTT, HTTP, HTTP Server, PPPoS, Modbus, mDNS, SNTP, die een breed scala aan communicatieprotocollen bestrijken, bijvoorbeeldampminder nodig voor IoT-ontwikkeling. · provisioning: Hier vindt u de provisioning exampbestanden voor verschillende methoden, zoals Wi-Fi-voorziening en Bluetooth LE-voorziening. · systeem: deze submap bevat bijvoorbeeld systeemfoutopsporingampbestanden (bijv. stacktracing, runtime tracing, taakmonitoring), energiebeheer, bijvoorbeeldampbestanden (bijv. verschillende slaapmodi, co-processors) en exampbestanden gerelateerd aan algemene systeemcomponenten zoals consoleterminal, gebeurtenislus en systeemtimer. · opslag: In deze submap vindt u examples van allemaal file systemen en opslagmechanismen ondersteund door ESP-IDF (zoals lezen en schrijven van Flash, SD-kaart en andere opslagmedia), evenals exampbestanden van niet-vluchtige opslag (NVS), FatFS, SPIFFS en andere file systeem operaties. · beveiliging: Deze submap bevat exampbestanden gerelateerd aan flash-encryptie. (2) Chain-directory voor ESP-IDF-compilatietool (/.espressif), zoals weergegeven in figuur 4.3.
Figuur 4.3. ESP-IDF-compilatietoolketenmap
Hoofdstuk 4. Ontwikkelomgeving instellen 37
A. Softwaredistributiemap dist
De ESP-IDF-toolketen en andere software worden gedistribueerd in de vorm van gecomprimeerde pakketten. Tijdens het installatieproces downloadt de installatietool eerst het gecomprimeerde pakket naar de dist-map en extraheert het vervolgens naar de opgegeven map. Zodra de installatie is voltooid, kan de inhoud in deze map veilig worden verwijderd.
B. Python virtuele omgevingsmap Python env
Verschillende versies van ESP-IDF zijn afhankelijk van specifieke versies van Python-pakketten. Het rechtstreeks installeren van deze pakketten op dezelfde host kan leiden tot conflicten tussen pakketversies. Om dit aan te pakken, maakt ESP-IDF gebruik van virtuele Python-omgevingen om verschillende pakketversies te isoleren. Met dit mechanisme kunnen ontwikkelaars meerdere versies van ESP-IDF op dezelfde host installeren en eenvoudig hiertussen schakelen door verschillende omgevingsvariabelen te importeren.
C. ESP-IDF-compilatietool voor ketendirectorytools
Deze map bevat voornamelijk cross-compilatietools die nodig zijn om ESP-IDF-projecten te compileren, zoals CMake-tools, Ninja-buildtools en de gcc-toolketen die het uiteindelijke uitvoerbare programma genereert. Bovendien bevat deze map de standaardbibliotheek van de C/C++-taal samen met de bijbehorende header fileS. Als een programma verwijst naar een systeemheader file zoals #include , zal de compilatietoolketen de stdio.h lokaliseren file binnen deze map.
4.2 ESP-IDF-ontwikkelomgeving instellen
De ESP-IDF-ontwikkelomgeving ondersteunt reguliere besturingssystemen zoals Windows, Linux en macOS. In dit gedeelte wordt uitgelegd hoe u de ontwikkelomgeving op elk systeem instelt. Het wordt aanbevolen om ESP32-C3 op een Linux-systeem te ontwikkelen, wat hier in detail zal worden geïntroduceerd. Veel instructies zijn toepasbaar op verschillende platforms vanwege de gelijkenis van de ontwikkeltools. Daarom wordt geadviseerd om de inhoud van dit gedeelte aandachtig te lezen.
OPMERKING U kunt de onlinedocumenten raadplegen die beschikbaar zijn op https://bookc3.espressif.com/esp32c3 en die de in deze sectie genoemde opdrachten bevatten.
4.2.1 ESP-IDF-ontwikkelomgeving instellen op Linux
De GNU-ontwikkelings- en foutopsporingstools die nodig zijn voor de ESP-IDF-ontwikkelomgeving zijn eigen aan het Linux-systeem. Bovendien is de opdrachtregelterminal in Linux krachtig en gebruiksvriendelijk, waardoor het een ideale keuze is voor ESP32-C3-ontwikkeling. Jij kan
38 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
selecteer de Linux-distributie van uw voorkeur, maar we raden u aan Ubuntu of andere op Debian gebaseerde systemen te gebruiken. Deze sectie biedt richtlijnen voor het instellen van de ESP-IDF-ontwikkelomgeving op Ubuntu 20.04.
1. Installeer de vereiste pakketten
Open een nieuwe terminal en voer de volgende opdracht uit om alle benodigde pakketten te installeren. Met de opdracht worden pakketten die al zijn geïnstalleerd automatisch overgeslagen.
$ 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
TIPS Voor de bovenstaande opdracht heeft u het beheerdersaccount en wachtwoord nodig. Standaard wordt er geen informatie weergegeven bij het invoeren van het wachtwoord. Druk eenvoudigweg op de “Enter”-toets om door te gaan met de procedure.
Git is een sleutelcodebeheertool in ESP-IDF. Nadat je de ontwikkelomgeving succesvol hebt opgezet, kun je het git log commando gebruiken om view alle codewijzigingen die zijn aangebracht sinds de oprichting van ESP-IDF. Daarnaast wordt Git ook gebruikt in ESP-IDF om versie-informatie te bevestigen, wat nodig is voor het installeren van de juiste toolketen die overeenkomt met specifieke versies. Naast Git omvatten andere belangrijke systeemtools Python. ESP-IDF bevat talrijke automatiseringsscripts geschreven in Python. Tools zoals CMake, Ninja-build en Ccache worden veel gebruikt in C/C++-projecten en dienen als de standaard codecompilatie- en bouwtools in ESP-IDF. libusb-1.0-0 en dfu-util zijn de belangrijkste stuurprogramma's die worden gebruikt voor seriële USB-communicatie en het branden van firmware. Zodra de softwarepakketten zijn geïnstalleerd, kunt u apt show gebruiken commando om gedetailleerde beschrijvingen van elk pakket te verkrijgen. Bijvoorbeeldample, gebruik apt show git om de beschrijvingsinformatie voor de Git-tool af te drukken.
Vraag: Wat moet ik doen als de Python-versie niet wordt ondersteund? A: ESP-IDF v4.3 vereist een Python-versie die niet lager is dan v3.6. Voor oudere versies van Ubuntu dient u handmatig een hogere versie van Python te downloaden en te installeren en Python3 in te stellen als de standaard Python-omgeving. U kunt gedetailleerde instructies vinden door te zoeken naar het trefwoord update-alternatives python.
2. Download ESP-IDF-repositorycode
Open een terminal en maak een map met de naam esp in uw thuismap met behulp van de opdracht mkdir. U kunt desgewenst een andere naam voor de map kiezen. Gebruik de opdracht cd om de map te openen.
Hoofdstuk 4. Ontwikkelomgeving instellen 39
$ mkdir -p /esp $ cd /esp
Gebruik het git clone commando om de ESP-IDF repository code te downloaden, zoals hieronder getoond:
$ git clone -b v4.3.2 – recursief https://github.com/espressif/esp-idf.git
In de bovenstaande opdracht specificeert de parameter -b v4.3.2 de versie die moet worden gedownload (in dit geval versie 4.3.2). De parameter –recursive zorgt ervoor dat alle subrepository's van ESP-IDF recursief worden gedownload. Informatie over subrepository's kun je vinden in de .gitmodules file.
3. Installeer de ESP-IDF-ontwikkeltoolketen
Espressif biedt een geautomatiseerd script install.sh om de toolketen te downloaden en te installeren. Dit script controleert de huidige ESP-IDF-versie en besturingssysteemomgeving en downloadt en installeert vervolgens de juiste versie van Python-toolpakketten en compilatietoolketens. Het standaardinstallatiepad voor de gereedschapsketen is /.espressif. Het enige wat u hoeft te doen is naar de map esp-idf te navigeren en install.sh uit te voeren.
$ cd /esp/esp-idf $ ./install.sh
Als u de gereedschapsketen met succes installeert, geeft de terminal het volgende weer:
Alles is klaar!
Op dit punt hebt u de ESP-IDF-ontwikkelomgeving met succes ingesteld.
4.2.2 ESP-IDF-ontwikkelomgeving instellen op Windows
1. Download het ESP-IDF tools-installatieprogramma
TIPS Het wordt aanbevolen om de ESP-IDF-ontwikkelomgeving in te stellen op Windows 10 of hoger. U kunt het installatieprogramma downloaden van https://dl.espressif.com/dl/esp-idf/. Het installatieprogramma is ook open-sourcesoftware en de broncode kan dat ook zijn viewed op https: //github.com/espressif/idf-installer.
· Online installatieprogramma voor ESP-IDF-tools
Dit installatieprogramma is relatief klein, ongeveer 4 MB groot, en andere pakketten en code worden tijdens het installatieproces gedownload. Het voordeeltagHet e van het online installatieprogramma is dat niet alleen softwarepakketten en code op aanvraag kunnen worden gedownload tijdens het installatieproces, maar ook de installatie mogelijk maakt van alle beschikbare releases van ESP-IDF en de nieuwste tak van GitHub-code (zoals de master branch) . Het nadeeltagHet probleem is dat er tijdens het installatieproces een netwerkverbinding nodig is, waardoor de installatie kan mislukken als gevolg van netwerkproblemen.
40 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
· Offline ESP-IDF tools-installatieprogramma Dit installatieprogramma is groter, ongeveer 1 GB groot, en bevat alle softwarepakketten en code die nodig zijn voor het instellen van de omgeving. Het belangrijkste voordeeltagHet voordeel van het offline installatieprogramma is dat het kan worden gebruikt op computers zonder internettoegang en dat het over het algemeen een hoger succespercentage bij de installatie heeft. Opgemerkt moet worden dat het offline installatieprogramma alleen stabiele releases van ESP-IDF kan installeren, geïdentificeerd door v*.* of v*.*.*.
2. Voer het ESP-IDF tools-installatieprogramma uit. Nadat u een geschikte versie van het installatieprogramma hebt gedownload (neem bijvoorbeeld ESP-IDF Tools Offline 4.3.2amphier), dubbelklik op het exe file om de ESP-IDF-installatieinterface te starten. Hieronder wordt gedemonstreerd hoe u de stabiele versie van ESP-IDF v4.3.2 installeert met behulp van het offline installatieprogramma.
(1) Selecteer in de interface ‘Installatietaal selecteren’, weergegeven in Figuur 4.4, de taal die u wilt gebruiken in de vervolgkeuzelijst.
Figuur 4.4. Interface “Installatietaal selecteren” (2) Nadat u de taal hebt geselecteerd, klikt u op “OK” om de interface “Licentieovereenkomst” te openen
(zie figuur 4.5). Nadat u de installatielicentieovereenkomst zorgvuldig heeft gelezen, selecteert u “Ik accepteer de overeenkomst” en klikt u op “Volgende”.
Figuur 4.5. Interface “Licentieovereenkomst” Hoofdstuk 4. Ontwikkelomgeving instellen 41
(3) Betreftview de systeemconfiguratie in de interface “Pre-installatie systeemcontrole” (zie Figuur 4.6). Controleer de Windows-versie en de geïnstalleerde antivirussoftware-informatie. Klik op “Volgende” als alle configuratie-items normaal zijn. Anders kunt u op “Volledig logboek” klikken voor oplossingen op basis van belangrijke items.
Figuur 4.6. Interface “Systeemcontrole vóór installatie” TIPS
U kunt logboeken voor hulp indienen bij https://github.com/espressif/idf-installer/issues. (4) Selecteer de ESP-IDF-installatiemap. Selecteer hier D:/.espressif, zoals weergegeven in
Figuur 4.7, en klik op “Volgende”. Houd er rekening mee dat .espressif hier een verborgen map is. Nadat de installatie is voltooid, kunt u dat doen view de specifieke inhoud van deze map door het openen van de file manager en het weergeven van verborgen items.
Figuur 4.7. Selecteer de ESP-IDF-installatiemap 42 ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT
(5) Controleer de componenten die moeten worden geïnstalleerd, zoals weergegeven in Figuur 4.8. Het wordt aanbevolen om de standaardoptie te gebruiken, dat wil zeggen de installatie te voltooien en vervolgens op “Volgende” te klikken.
Figuur 4.8. Selecteer de te installeren componenten (6) Bevestig de te installeren componenten en klik op “Installeren” om de automatische installatie te starten
stagnatieproces, zoals weergegeven in figuur 4.9. Het installatieproces kan tientallen minuten duren en de voortgangsbalk van het installatieproces wordt weergegeven in Figuur 4.10. Wacht geduldig.
Figuur 4.9. Installatie voorbereiden (7) Nadat de installatie is voltooid, wordt aanbevolen om “Registreer de ESP-IDF
Uitvoerbare hulpprogramma's als Windows Defender-uitsluitingen...' om te voorkomen dat antivirussoftware wordt verwijderd fileS. Door uitsluitingsitems toe te voegen, kunnen ook frequente scans door antivirus worden overgeslagen
Hoofdstuk 4. Ontwikkelomgeving instellen 43
Figuur 4.10. Installatievoortgangsbalksoftware, waardoor de codecompilatie-efficiëntie van het Windows-systeem aanzienlijk wordt verbeterd. Klik op “Finish” om de installatie van de ontwikkelomgeving te voltooien, zoals weergegeven in Figuur 4.11. U kunt ervoor kiezen om “Voer ESP-IDF PowerShell-omgeving uit” of “Voer ESP-IDF-opdrachtprompt uit” aan te vinken. Voer het compilatievenster direct na de installatie uit om ervoor te zorgen dat de ontwikkelomgeving normaal functioneert.
Figuur 4.11. Installatie voltooid (8) Open de geïnstalleerde ontwikkelomgeving in de programmalijst (ofwel ESP-IDF 4.3
CMD of ESP-IDF 4.3 PowerShell-terminal, zoals weergegeven in figuur 4.12), en de ESP-IDF-omgevingsvariabele worden automatisch toegevoegd wanneer deze in de terminal wordt uitgevoerd. Daarna kunt u de opdracht idf.py gebruiken voor bewerkingen. De geopende ESP-IDF 4.3 CMD wordt weergegeven in figuur 4.13. 44 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Figuur 4.12. Ontwikkelomgeving geïnstalleerd
Figuur 4.13. ESP-IDF 4.3 CMD
4.2.3 ESP-IDF-ontwikkelomgeving instellen op Mac
Het installatieproces van de ESP-IDF-ontwikkelomgeving op een Mac-systeem is hetzelfde als dat op een Linux-systeem. De opdrachten voor het downloaden van de repositorycode en het installeren van de toolketen zijn precies hetzelfde. Alleen de opdrachten voor het installeren van afhankelijkheidspakketten zijn enigszins anders. 1. Installeer afhankelijkheidspakketten Open een terminal en installeer pip, de Python-pakketbeheertool, door de volgende opdracht uit te voeren:
% sudo eenvoudig te installeren pip
Installeer Homebrew, een pakketbeheertool voor macOS, door de volgende opdracht uit te voeren:
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Installeer de vereiste afhankelijkheidspakketten door de volgende opdracht uit te voeren:
% brew python3 installeer cmake ninja ccache dfu-util
2. ESP-IDF-repositorycode downloaden Volg de instructies in paragraaf 4.2.1 om de ESP-IDF-repositorycode te downloaden. De stappen zijn hetzelfde als voor downloaden op een Linux-systeem.
Hoofdstuk 4. Ontwikkelomgeving instellen 45
3. Installeer de ESP-IDF-ontwikkeltoolketen
Volg de instructies in paragraaf 4.2.1 om de ESP-IDF-ontwikkeltoolketen te installeren. De stappen zijn hetzelfde als voor installatie op een Linux-systeem.
4.2.4 VS-code installeren
Standaard bevat de ESP-IDF SDK geen codebewerkingstool (hoewel het nieuwste ESP-IDF-installatieprogramma voor Windows de optie biedt om ESP-IDF Eclipse te installeren). U kunt elk tekstbewerkingsprogramma van uw keuze gebruiken om de code te bewerken en deze vervolgens te compileren met behulp van terminalopdrachten.
Een populaire codebewerkingstool is VS Code (Visual Studio Code), een gratis en veelzijdige code-editor met een gebruiksvriendelijke interface. Het biedt verschillende plugins die functionaliteiten bieden zoals codenavigatie, syntaxisaccentuering, Git-versiebeheer en terminalintegratie. Daarnaast heeft Espressif een speciale plug-in ontwikkeld genaamd Espressif IDF for VS Code, die de projectconfiguratie en het debuggen vereenvoudigt.
U kunt de codeopdracht in de terminal gebruiken om snel de huidige map in VS Code te openen. Als alternatief kunt u de sneltoets Ctrl+ gebruiken om de standaardterminalconsole van het systeem binnen VS Code te openen.
TIPS Het wordt aanbevolen om VS Code te gebruiken voor ESP32-C3-codeontwikkeling. Download en installeer de nieuwste versie van VS Code op https://code.visualstudio.com/.
4.2.5 Inleiding tot ontwikkelomgevingen van derden
Naast de officiële ESP-IDF-ontwikkelomgeving, die voornamelijk de C-taal gebruikt, ondersteunt ESP32-C3 ook andere reguliere programmeertalen en een breed scala aan ontwikkelomgevingen van derden. Enkele opmerkelijke opties zijn onder meer:
Arduino: een open source platform voor zowel hardware als software, dat diverse microcontrollers ondersteunt, waaronder ESP32-C3.
Het maakt gebruik van de C++-taal en biedt een vereenvoudigde en gestandaardiseerde API, gewoonlijk de Arduino-taal genoemd. Arduino wordt veel gebruikt in prototypeontwikkeling en educatieve contexten. Het biedt een uitbreidbaar softwarepakket en een IDE die eenvoudig compileren en flashen mogelijk maakt.
MicroPython: een Python 3-taalinterpreter ontworpen om te draaien op ingebedde microcontrollerplatforms.
Met een eenvoudige scripttaal heeft het rechtstreeks toegang tot de randbronnen van ESP32-C3 (zoals UART, SPI en I2C) en communicatiefuncties (zoals Wi-Fi en Bluetooth LE).
46 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
Dit vereenvoudigt de hardware-interactie. MicroPython, gecombineerd met de uitgebreide bibliotheek met wiskundige bewerkingen van Python, maakt de implementatie van complexe algoritmen op ESP32-C3 mogelijk, waardoor de ontwikkeling van AI-gerelateerde applicaties wordt vergemakkelijkt. Als scripttaal is herhaalde compilatie niet nodig; wijzigingen kunnen worden aangebracht en scripts kunnen direct worden uitgevoerd.
NodeMCU: een LUA-taaltolk ontwikkeld voor chips uit de ESP-serie.
Het ondersteunt vrijwel alle randfuncties van ESP-chips en is lichter dan MicroPython. Net als MicroPython gebruikt NodeMCU een scripttaal, waardoor herhaalde compilatie niet meer nodig is.
Verder ondersteunt ESP32-C3 ook de NuttX- en Zephyr-besturingssystemen. NuttX is een real-time besturingssysteem dat POSIX-compatibele interfaces biedt, waardoor de portabiliteit van applicaties wordt verbeterd. Zephyr is een klein realtime besturingssysteem dat speciaal is ontworpen voor IoT-toepassingen. Het omvat talrijke softwarebibliotheken die nodig zijn voor de IoT-ontwikkeling en evolueert geleidelijk naar een uitgebreid software-ecosysteem.
Dit boek biedt geen gedetailleerde installatie-instructies voor de bovengenoemde ontwikkelomgevingen. U kunt een ontwikkelomgeving installeren op basis van uw vereisten door de betreffende documentatie en instructies te volgen.
4.3 ESP-IDF-compilatiesysteem
4.3.1 Basisconcepten van het compilatiesysteem
Een ESP-IDF-project is een verzameling van een hoofdprogramma met een invoerfunctie en meerdere onafhankelijke functionele componenten. Bijvoorbeeldample, een project dat LED-schakelaars aanstuurt, bestaat voornamelijk uit een hoofdinvoerprogramma en een drivercomponent die GPIO aanstuurt. Als u de LED-afstandsbediening wilt realiseren, moet u ook Wi-Fi, TCP/IP-protocolstack, enz. toevoegen.
Het compilatiesysteem kan een uitvoerbaar bestand compileren, koppelen en genereren files (.bin) voor de code via een reeks bouwregels. Het compilatiesysteem van ESP-IDF v4.0 en hogere versies is standaard gebaseerd op CMake, en het compilatiescript CMakeLists.txt kan worden gebruikt om het compilatiegedrag van de code te controleren. Naast het ondersteunen van de basissyntaxis van CMake, definieert het ESP-IDF-compilatiesysteem ook een set standaardcompilatieregels en CMake-functies, en u kunt het compilatiescript schrijven met eenvoudige instructies.
4.3.2 Project File Structuur
Een project is een map die een hoofdprogramma, door de gebruiker gedefinieerde componenten en files vereist om uitvoerbare applicaties te bouwen, zoals compilatiescripts, configuratie
Hoofdstuk 4. Ontwikkelomgeving instellen 47
files, partitietabellen, enz. Projecten kunnen worden gekopieerd en doorgegeven, en hetzelfde uitvoerbare bestand file kan worden gecompileerd en gegenereerd op machines met dezelfde versie van de ESP-IDF-ontwikkelomgeving. Een typisch ESP-IDF-project file structuur wordt getoond in Figuur 4.14.
Figuur 4.14. Typisch ESP-IDF-project file structuur Omdat ESP-IDF meerdere IoT-chips van Espressif ondersteunt, waaronder ESP32, ESP32-S-serie, ESP32-C-serie, ESP32-H-serie, enz., moet er een doel worden bepaald voordat de code wordt samengesteld. Het doel is zowel het hardwareapparaat waarop het toepassingsprogramma draait als het builddoel van het compilatiesysteem. Afhankelijk van uw behoeften kunt u één of meerdere doelstellingen voor uw project specificeren. Bijvoorbeeldample, via de opdracht idf.py set-target esp32c3 kunt u het compilatiedoel instellen op ESP32-C3, waarbij de standaardparameters en het compilatietoolketenpad voor ESP32C3 worden geladen. Na compilatie kan een uitvoerbaar programma worden gegenereerd voor ESP32C3. U kunt ook de opdracht set-target opnieuw uitvoeren om een ander doel in te stellen, waarna het compilatiesysteem automatisch wordt opgeschoond en opnieuw wordt geconfigureerd. Componenten
Componenten in ESP-IDF zijn modulaire en onafhankelijke code-eenheden die binnen het compilatiesysteem worden beheerd. Ze zijn georganiseerd als mappen, waarbij de mapnaam standaard de componentnaam vertegenwoordigt. Elke component heeft zijn eigen compilatiescript dat 48 ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT
specificeert de compilatieparameters en afhankelijkheden. Tijdens het compilatieproces worden componenten gecompileerd in afzonderlijke statische bibliotheken (.a files) en uiteindelijk gecombineerd met andere componenten om het applicatieprogramma te vormen.
ESP-IDF biedt essentiële functies, zoals het besturingssysteem, stuurprogramma's voor randapparatuur en netwerkprotocolstack, in de vorm van componenten. Deze componenten worden opgeslagen in de componentenmap in de ESP-IDF-hoofdmap. Ontwikkelaars hoeven deze componenten niet naar de componentenmap van myProject te kopiëren. In plaats daarvan hoeven ze alleen de afhankelijkheidsrelaties van deze componenten op te geven in de CMakeLists.txt van het project file met behulp van de REQUIRES- of PRIV_REQUIRES-richtlijnen. Het compilatiesysteem zal automatisch de vereiste componenten lokaliseren en compileren.
Daarom is de componentenmap onder myProject niet nodig. Het wordt alleen gebruikt om enkele aangepaste componenten van het project op te nemen, dit kunnen bibliotheken van derden of door de gebruiker gedefinieerde code zijn. Bovendien kunnen componenten afkomstig zijn uit elke andere map dan ESP-IDF of het huidige project, bijvoorbeeld uit een open-sourceproject dat in een andere map is opgeslagen. In dit geval hoeft u alleen het pad van de component toe te voegen door de EXTRA_COMPONENT_DIRS variabele in CMakeLists.txt onder de hoofdmap in te stellen. Deze map overschrijft alle ESP-IDF-componenten met dezelfde naam, zodat wordt gegarandeerd dat de juiste component wordt gebruikt.
Invoer programma hoofd De hoofddirectory binnen het project volgt hetzelfde file structuur als andere componenten (bijvoorbeeld component1). Het heeft echter een bijzondere betekenis omdat het een verplicht onderdeel is dat in elk project aanwezig moet zijn. De hoofdmap bevat de broncode van het project en het toegangspunt van het gebruikersprogramma, doorgaans app_main genoemd. Standaard begint de uitvoering van het gebruikersprogramma vanaf dit startpunt. Het hoofdcomponent verschilt ook doordat het automatisch afhankelijk is van alle componenten binnen het zoekpad. Daarom is het niet nodig om afhankelijkheden expliciet aan te geven met behulp van de REQUIRES- of PRIV_REQUIRES-richtlijnen in CMakeLists.txt file.
Configuratie file De hoofdmap van het project bevat een configuratie file genaamd sdkconfig, die de configuratieparameters bevat voor alle componenten binnen het project. De sdkconfig file wordt automatisch gegenereerd door het compilatiesysteem en kan worden gewijzigd en opnieuw gegenereerd met de opdracht idf.py menuconfig. De menuconfig-opties zijn voornamelijk afkomstig van de Kconfig.projbuild van het project en de Kconfig van de componenten. Componentontwikkelaars voegen over het algemeen configuratie-items toe in Kconfig om de component flexibel en configureerbaar te maken.
Build-directory Standaard wordt in de build-directory binnen het project een tussenliggende map opgeslagen files en de fi-
Hoofdstuk 4. Ontwikkelomgeving instellen 49
Alle uitvoerbare programma's die zijn gegenereerd door de opdracht idf.py build. Over het algemeen is het niet nodig om rechtstreeks toegang te krijgen tot de inhoud van de build-map. ESP-IDF biedt vooraf gedefinieerde opdrachten voor interactie met de map, zoals het gebruik van de flashopdracht idf.py om automatisch het gecompileerde binaire bestand te lokaliseren file en flash het naar het opgegeven flash-adres, of gebruik de opdracht idf.py fullclean om de hele build-map op te schonen.
Partitietabel (partitions.csv) Voor elk project is een partitietabel nodig om de flashruimte te verdelen en de grootte en het startadres van het uitvoerbare programma en de gebruikersgegevensruimte te specificeren. Het commando idf.py flash of het OTA-upgradeprogramma flasht de firmware naar het overeenkomstige adres volgens deze tabel. ESP-IDF biedt verschillende standaardpartitietabellen in componenten/partitie_tabel, zoals partities_singleapp.csv en partities_two_ota.csv, die kunnen worden geselecteerd in menuconfig.
Als de standaardpartitietabel van het systeem niet aan de vereisten van het project kan voldoen, kan een aangepaste partitie.csv aan de projectmap worden toegevoegd en in menuconfig worden geselecteerd.
4.3.3 Standaard buildregels van het compilatiesysteem
Regels voor het overschrijven van componenten met dezelfde naam Tijdens het zoeken naar componenten volgt het compilatiesysteem een specifieke volgorde. Het zoekt eerst naar interne componenten van ESP-IDF, vervolgens naar componenten van het gebruikersproject en ten slotte naar componenten in EXTRA_COMPONENT_DIRS. In gevallen waarin meerdere mappen componenten met dezelfde naam bevatten, overschrijft de component die in de laatste map wordt gevonden alle voorgaande componenten met dezelfde naam. Deze regel maakt het mogelijk om ESP-IDF-componenten binnen het gebruikersproject aan te passen, terwijl de originele ESP-IDF-code intact blijft.
Regels voor het standaard opnemen van algemene componenten Zoals vermeld in sectie 4.3.2 moeten componenten expliciet hun afhankelijkheden van andere componenten in CMakeLists.txt specificeren. Gemeenschappelijke componenten zoals freerto's worden echter standaard automatisch in het buildsysteem opgenomen, zelfs als hun afhankelijkheidsrelaties niet expliciet zijn gedefinieerd in het compilatiescript. Gemeenschappelijke ESP-IDF-componenten zijn freertos, Newlib, heap, log, soc, esp_rom, esp_common, xtensa/riscv en cxx. Het gebruik van deze algemene componenten vermijdt repetitief werk bij het schrijven van CMakeLists.txt en maakt het beknopter.
Regels voor het overschrijven van configuratie-items Ontwikkelaars kunnen standaardconfiguratieparameters toevoegen door een standaardconfiguratie toe te voegen file met de naam sdkconfig.defaults aan het project. Bijvoorbeeldampbestand, CONFIG_LOG_ toevoegen
50 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
DEFAULT_LEVEL_NONE = y kan de UART-interface configureren om standaard geen loggegevens af te drukken. Bovendien, als specifieke parameters moeten worden ingesteld voor een bepaald doel, een configuratie file met de naam sdkconfig.defaults.TARGET_NAME kan worden toegevoegd, waarbij TARGET_NAME esp32s2, esp32c3, enzovoort kan zijn. Deze configuratie files worden tijdens het compileren in sdkconfig geïmporteerd, met de algemene standaardconfiguratie file sdkconfig.defaults wordt eerst geïmporteerd, gevolgd door de doelspecifieke configuratie file, zoals sdkconfig.defaults.esp32c3. In gevallen waarin er configuratie-items met dezelfde naam zijn, geldt de laatste configuratie file zal de eerste overschrijven.
4.3.4 Inleiding tot het compilatiescript
Bij het ontwikkelen van een project met ESP-IDF moeten ontwikkelaars niet alleen de broncode schrijven, maar ook CMakeLists.txt voor het project en de componenten. CMakeLists.txt is een tekst file, ook bekend als een compilatiescript, dat een reeks compilatieobjecten, compilatieconfiguratie-items en opdrachten definieert om het compilatieproces van de broncode te begeleiden. Het compilatiesysteem van ESP-IDF v4.3.2 is gebaseerd op CMake. Naast het ondersteunen van native CMake-functies en -opdrachten, definieert het ook een reeks aangepaste functies, waardoor het veel eenvoudiger wordt om compilatiescripts te schrijven.
De compilatiescripts in ESP-IDF omvatten voornamelijk het projectcompilatiescript en de componentcompilatiescripts. De CMakeLists.txt in de hoofdmap van het project wordt het projectcompilatiescript genoemd, dat het compilatieproces van het hele project begeleidt. Een basisprojectcompilatiescript bevat doorgaans de volgende drie regels:
1. cmake_minimum_required(VERSIE 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. project(mijnProject)
Daarvan moet de cmake_minimum_required (VERSIE 3.5) op de eerste regel worden geplaatst, die wordt gebruikt om het minimale CMake-versienummer aan te geven dat vereist is voor het project. Nieuwere versies van CMake zijn over het algemeen achterwaarts compatibel met oudere versies, dus pas het versienummer dienovereenkomstig aan wanneer u nieuwere CMake-opdrachten gebruikt om compatibiliteit te garanderen.
include($ENV {IDF_PATH}/tools/cmake/project.cmake) importeert vooraf gedefinieerde configuratie-items en opdrachten van het ESP-IDF-compilatiesysteem, inclusief de standaard bouwregels van het compilatiesysteem beschreven in Paragraaf 4.3.3. project(myProject) maakt het project zelf en specificeert de naam ervan. Deze naam zal worden gebruikt als het uiteindelijke binaire uitvoerbestand file naam, dwz mijnProject.elf en mijnProject.bin.
Een project kan meerdere componenten bevatten, inclusief het hoofdcomponent. De map op het hoogste niveau van elke component bevat een CMakeLists.txt file, dat het componentcompilatiescript wordt genoemd. Componentcompilatiescripts worden voornamelijk gebruikt om componentafhankelijkheden, configuratieparameters en broncode te specificeren files, en inclusief header files voor
Hoofdstuk 4. Ontwikkelomgeving instellen 51
compilatie. Met de aangepaste functie idf_component_register van ESP-IDF is de minimaal vereiste code voor een componentcompilatiescript als volgt:
1. idf_component_register(SRCS “src1.c”
2.
INCLUDE_DIRS “opnemen”
3.
VEREIST onderdeel1)
De SRCS-parameter biedt een lijst met bronnen files in de component, gescheiden door spaties als er meerdere zijn fileS. De parameter INCLUDE_DIRS biedt een lijst met openbare headers file mappen voor de component, die worden toegevoegd aan het zoekpad voor andere componenten die afhankelijk zijn van de huidige component. De parameter REQUIRES identificeert de openbare componentafhankelijkheden voor de huidige component. Het is noodzakelijk dat componenten expliciet aangeven van welke componenten ze afhankelijk zijn, zoals component2 afhankelijk van component1. Voor de hoofdcomponent, die standaard afhankelijk is van alle componenten, kan de parameter REQUIRES echter worden weggelaten.
Bovendien kunnen native CMake-opdrachten ook worden gebruikt in het compilatiescript. Bijvoorbeeldample gebruikt u de opdracht set om variabelen in te stellen, zoals set(VARIABLE “VALUE”).
4.3.5 Inleiding tot algemene opdrachten
ESP-IDF gebruikt CMake (projectconfiguratietool), Ninja (projectbouwtool) en esptool (flashtool) tijdens het compileren van code. Elke tool speelt een andere rol in het compilatie-, bouw- en flashproces en ondersteunt ook verschillende bedieningsopdrachten. Om de bediening door de gebruiker te vergemakkelijken, voegt ESP-IDF een uniforme front-end idf.py toe waarmee de bovenstaande opdrachten snel kunnen worden aangeroepen.
Voordat u idf.py gebruikt, moet u ervoor zorgen dat:
· De omgevingsvariabele IDF_PATH van ESP-IDF is toegevoegd aan de huidige terminal. · De opdrachtuitvoeringsmap is de hoofdmap van het project, waarin de
projectcompilatiescript CMakeLists.txt.
De algemene opdrachten van idf.py zijn als volgt:
· idf.py –help: toont een lijst met opdrachten en hun gebruiksinstructies. · idf.py ingesteld doel : het instellen van de compilatie taidf.py fullcleanrget, zoals
als vervanging met esp32c3. · idf.py menuconfig: starten van menuconfig, een grafische terminalconfiguratie
tool, waarmee configuratie-opties kunnen worden geselecteerd of gewijzigd, en de configuratieresultaten worden opgeslagen in het bestand sdkconfig file. · idf.py build: codecompilatie initiëren. Het tussenproduct files en het uiteindelijke uitvoerbare programma dat door de compilatie wordt gegenereerd, worden standaard opgeslagen in de build-directory van het project. Het compilatieproces is incrementeel, wat betekent dat er slechts één bron is file is gewijzigd, alleen het gewijzigde file wordt de volgende keer samengesteld.
52 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
· idf.py clean: het tussenproduct opschonen files gegenereerd door de projectcompilatie. Het hele project wordt gedwongen te compileren in de volgende compilatie. Houd er rekening mee dat de CMake-configuratie en de configuratiewijzigingen die door menuconfig zijn aangebracht, niet worden verwijderd tijdens het opschonen.
· idf.py fullclean: het verwijderen van de volledige build-directory, inclusief alle CMake-configuratie-uitvoer fileS. Wanneer u het project opnieuw bouwt, zal CMake het project helemaal opnieuw configureren. Houd er rekening mee dat deze opdracht recursief alles verwijdert files in de build-directory, dus gebruik het met voorzichtigheid, en de projectconfiguratie file wordt niet verwijderd.
· idf.py flash: het uitvoerbare programma binair laten knipperen file gegenereerd door build naar de doel-ESP32-C3. De opties -p en B worden gebruikt om respectievelijk de apparaatnaam van de seriële poort en de baudsnelheid voor knipperen in te stellen. Als deze twee opties niet zijn opgegeven, wordt de seriële poort automatisch gedetecteerd en wordt de standaard baudrate gebruikt.
· idf.py monitor: weergave van de seriële poortuitvoer van de doel-ESP32-C3. De optie -p kan worden gebruikt om de apparaatnaam van de seriële poort aan de hostzijde op te geven. Druk tijdens het afdrukken via de seriële poort op de toetsencombinatie Ctrl+] om de monitor af te sluiten.
De bovenstaande opdrachten kunnen indien nodig ook worden gecombineerd. Bijvoorbeeldample, zal de opdracht idf.py build flash monitor achtereenvolgens codecompilatie, flash en openen van de seriële poortmonitor uitvoeren.
U kunt https://bookc3.espressif.com/build-system bezoeken voor meer informatie over het ESP-IDF-compilatiesysteem.
4.4 Oefenen: compileren Example Programma “Blink”
4.4.1 voorbeeldample Analyse
In deze sectie wordt het programma Blink als ex gebruiktample om de te analyseren file structuur en coderingsregels van een echt project in detail. Het Blink-programma implementeert het LED-knippereffect en het project bevindt zich in de map examples/get-started/blink, dat een bron bevat file, configuratie files, en verschillende compilatiescripts.
Het slimme lichtproject dat in dit boek wordt geïntroduceerd, is hierop gebaseerdample programma. Functies zullen geleidelijk worden toegevoegd in latere hoofdstukken om het uiteindelijk te voltooien.
Broncode Om het gehele ontwikkelproces te demonstreren is het Blink programma gekopieerd naar esp32c3-iot-projects/device firmware/1 blink.
De mapstructuur van het blink-project files wordt weergegeven in figuur 4.15.
Het blink-project bevat slechts één hoofdmap, wat een speciaal onderdeel is
Hoofdstuk 4. Ontwikkelomgeving instellen 53
Figuur 4.15. File mapstructuur van het blink-project
moeten worden opgenomen zoals beschreven in paragraaf 4.3.2. De hoofddirectory wordt voornamelijk gebruikt om de implementatie van de app_main()-functie op te slaan, wat het toegangspunt tot het gebruikersprogramma is. Het blink-project bevat niet de componentendirectory, omdat deze exampHet bestand hoeft alleen de componenten te gebruiken die bij ESP-IDF worden geleverd en vereist geen extra componenten. De CMakeLists.txt in het blink-project wordt gebruikt om het compilatieproces te begeleiden, terwijl Kconfig.projbuild wordt gebruikt om configuratie-items voor dit ex toe te voegenample-programma in menuconfig. Andere onnodig files hebben geen invloed op de compilatie van de code en worden daarom hier niet besproken. Een gedetailleerde introductie tot het blink-project files is als volgt.
1. /*blink.c bevat de volgende header fileS*/
2. #opnemen
//Standaard C-bibliotheekheader file
3. #include “freertos/freeRTOS.h” //FreeRTOS hoofdkop file
4. #include “freertos/task.h”
//FreeRTOS Taakkop file
5. #include “sdkconfig.h”
//Configuratiekop file gegenereerd door kconfig
6. #include “driver/gpio.h”
//GPIO-stuurprogrammakop file
De bron file blink.c bevat een reeks headers files die overeenkomen met functiedeclara-
ties. ESP-IDF volgt over het algemeen de volgorde waarin de standaardbibliotheekheader wordt opgenomen files, FreeR-
TOS-kop files, stuurprogrammakoptekst files, andere componentkop files en projectkop files.
De volgorde waarin header files zijn opgenomen, kunnen het uiteindelijke compilatieresultaat beïnvloeden, dus probeer dat te doen
volg de standaardregels. Opgemerkt moet worden dat sdkconfig.h automatisch wordt gegenereerd
door kconfig en kan alleen worden geconfigureerd via de opdracht idf.py menuconfig.
Directe wijziging van deze header file zal worden overschreven.
1. /*U kunt de GPIO selecteren die overeenkomt met de LED in idf.py menuconfig, en het wijzigingsresultaat van menuconfig is dat de waarde van CONFIG_BLINK
_GPIO wordt gewijzigd. U kunt de macrodefinitie ook rechtstreeks wijzigen
hier en wijzig CONFIG_BLINK_GPIO in een vaste waarde.*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO
3. ongeldig app_main(void)
4. {
5.
/*Configureer IO als de GPIO-standaardfunctie, schakel de pull-up-modus in, en
6.
schakel invoer- en uitvoermodi uit*/
7.
gpio_reset_pin(BLINK_GPIO);
54 ESP32-C3 Draadloos avontuur: een uitgebreide gids voor IoT
8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. }
/*Stel GPIO in op uitvoermodus*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); terwijl(1) {
/*Afdruklogboek*/ printf(“LEDn uitschakelen”); /*Zet de LED uit (uitvoer laag niveau)*/ gpio_set_level(BLINK_GPIO, 0); /*Vertraging (1000 ms)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf(“LEDn inschakelen”); /*Zet de LED aan (uitvoer hoog niveau)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000 / portTICK_PERIOD_MS); }
De app_main() functie in de Blink example-programma dient als toegangspunt voor gebruikersprogramma's. Het is een eenvoudige functie zonder parameters en zonder retourwaarde. Deze functie wordt aangeroepen nadat het systeem de initialisatie heeft voltooid. Dit omvat taken zoals het initialiseren van de seriële logpoort, het configureren van single/dual core en het configureren van de watchdog.
De functie app_main() wordt uitgevoerd in de context van een taak met de naam main. De stapelgrootte en prioriteit van deze taak kunnen worden aangepast in menuconfig Componentconfig Common ESP-gerelateerd.
Voor eenvoudige taken zoals het knipperen van een LED kan alle benodigde code rechtstreeks in de app_main() functie worden geïmplementeerd. Dit omvat doorgaans het initialiseren van de GPIO die overeenkomt met de LED en het gebruik van een while(1)-lus om de LED aan en uit te zetten. Als alternatief kunt u de FreeRTOS API gebruiken om een nieuwe taak te maken die het knipperen van de LED afhandelt. Zodra de nieuwe taak met succes is gemaakt, kunt u de functie app_main() afsluiten.
De inhoud van main/CMakeLists.txt file, dat het compilatieproces voor de hoofdcomponent begeleidt, is als volgt:
1. idf_component_register(SRCS “blink.c” INCLUDE_DIRS “.” )
Onder hen roept main/CMakeLists.txt slechts één compilatiesysteemfunctie aan, namelijk idf_component_register. Net als CMakeLists.txt voor de meeste andere componenten, wordt blink.c toegevoegd aan SRCS en wordt de broncode files die aan SRCS worden toegevoegd, worden gecompileerd. Tegelijkertijd moet “.”, dat het pad vertegenwoordigt waar CMakeLists.txt zich bevindt, worden toegevoegd aan INCLUDE_DIRS als de zoekmappen voor header fileS. De inhoud van CMakeLists.txt is als volgt:
1. #Specificeer v3.5 als de oudste CMake-versie die door het huidige project wordt ondersteund 2. #Versies lager dan v3.5 moeten worden geüpgraded voordat de compilatie doorgaat 3. cmake_minimum_required (VERSIE 3.5) 4. #Includeer de standaard CMake-configuratie van de ESP -IDF-compilatiesysteem
Hoofdstuk 4. Ontwikkelomgeving instellen 55
5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. #Maak een project met de naam “blink” 7. project(myProject)
Onder hen bevat de CMakeLists.txt in de hoofdmap voornamelijk $ENV{IDF_ PATH}/tools/cmake/project.cmake, wat de belangrijkste CMake-configuratie is file geleverd door ESP-IDF. Het wordt gebruikt om te con
Documenten / Bronnen
![]() |
Espressif Systems ESP32-C3 Draadloos avontuur [pdf] Gebruikershandleiding ESP32-C3 Draadloos avontuur, ESP32-C3, Draadloos avontuur, Avontuur |