Aventura sem fio ESP32-C3

Aventura sem fio ESP32-C3

Um guia abrangente para IoT

Espressif Sistemas 12 de Junho de 2023

Especificações

  • Produto: ESP32-C3 aventura sem fio
  • Fabricante: Sistemas Espressif
  • Data: 12 de junho de 2023

Instruções de uso do produto

Preparação

Antes de usar o ESP32-C3 Wireless Adventure, certifique-se de estar
familiarizado com os conceitos e arquitetura da IoT. Isso vai ajudar
você entende como o dispositivo se encaixa no ecossistema IoT mais amplo
e suas aplicações potenciais em casas inteligentes.

Introdução e prática de projetos IoT

Nesta seção, você aprenderá sobre projetos típicos de IoT,
incluindo os módulos básicos para dispositivos IoT comuns, módulos básicos
de aplicativos clientes e plataformas de nuvem IoT comuns. Isso vai
fornecer a você uma base para compreender e criar seu
próprios projetos de IoT.

Prática: Projeto Smart Light

Neste projeto prático, você aprenderá como criar um ambiente inteligente
luz usando o ESP32-C3 Wireless Adventure. A estrutura do projeto,
funções, preparação de hardware e processo de desenvolvimento serão
explicado em detalhes.

Estrutura do Projeto

O projeto consiste em vários componentes, incluindo o
ESP32-C3 Wireless Adventure, LEDs, sensores e uma nuvem
backend.

Funções do Projeto

O projeto de luz inteligente permite controlar o brilho e
cor dos LEDs remotamente através de um aplicativo móvel ou web
interface.

Preparação de Hardware

Para se preparar para o projeto, você precisará reunir os
componentes de hardware necessários, como o ESP32-C3 Wireless
Placa de aventura, LEDs, resistores e uma fonte de alimentação.

Processo de desenvolvimento

O processo de desenvolvimento envolve a configuração do desenvolvimento
ambiente, escrevendo código para controlar os LEDs, conectando-se ao
back-end da nuvem e testando a funcionalidade do smart
luz.

Introdução ao ESP RainMaker

ESP RainMaker é uma estrutura poderosa para o desenvolvimento de IoT
dispositivos. Nesta seção, você aprenderá o que é ESP RainMaker e
como ele pode ser implementado em seus projetos.

O que é ESP RainMaker?

ESP RainMaker é uma plataforma baseada em nuvem que fornece um conjunto de
ferramentas e serviços para construir e gerenciar dispositivos IoT.

A implementação do ESP RainMaker

Esta seção explica os diferentes componentes envolvidos no
implementação do ESP RainMaker, incluindo o serviço de reclamação,
Agente RainMaker, back-end em nuvem e cliente RainMaker.

Prática: pontos-chave para desenvolvimento com ESP RainMaker

Nesta seção prática, você aprenderá sobre os pontos-chave para
considere ao desenvolver com ESP RainMaker. Isso inclui dispositivo
reivindicação, sincronização de dados e gerenciamento de usuários.

Recursos do ESP RainMaker

ESP RainMaker oferece vários recursos para gerenciamento de usuários, final
usuários e administradores. Esses recursos permitem fácil dispositivo
configuração, controle remoto e monitoramento.

Configurando o ambiente de desenvolvimento

Esta seção fornece uma visão geralview do ESP-IDF (Espressif IoT
Quadro de Desenvolvimento), que é o quadro oficial de desenvolvimento
para dispositivos baseados em ESP32. Explica as diferentes versões de
ESP-IDF e como configurar o ambiente de desenvolvimento.

Desenvolvimento de Hardware e Drivers

Projeto de hardware de produtos Smart Light baseados em ESP32-C3

Esta seção se concentra no design de hardware da luz inteligente
produtos baseados no ESP32-C3 Wireless Adventure. Ele cobre o
características e composição de produtos de luz inteligente, bem como o
projeto de hardware do sistema central ESP32-C3.

Características e composição de produtos Smart Light

Esta subseção explica os recursos e componentes que tornam
criar produtos de luz inteligentes. Discute as diferentes funcionalidades
e considerações de design para a criação de luzes inteligentes.

Projeto de hardware do sistema central ESP32-C3

O design de hardware do sistema central ESP32-C3 inclui energia
fonte, sequência de inicialização, reinicialização do sistema, flash SPI, fonte de relógio,
e considerações sobre RF e antena. Esta subseção fornece
informações detalhadas sobre esses aspectos.

Perguntas frequentes

P: O que é ESP RainMaker?

R: ESP RainMaker é uma plataforma baseada em nuvem que fornece ferramentas
e serviços para construção e gerenciamento de dispositivos IoT. Isso simplifica
o processo de desenvolvimento e permite fácil configuração do dispositivo, controle remoto
controle e monitoramento.

P: Como posso configurar o ambiente de desenvolvimento para
ESP32-C3?

R: Para configurar o ambiente de desenvolvimento do ESP32-C3, você precisa
instalar o ESP-IDF (Espressif IoT Development Framework) e
configure-o de acordo com as instruções fornecidas. ESP-IDF é o
estrutura oficial de desenvolvimento para dispositivos baseados em ESP32.

P: Quais são os recursos do ESP RainMaker?

R: ESP RainMaker oferece vários recursos, incluindo usuário
gerenciamento, recursos de usuário final e recursos de administração. Gerenciamento de usuários
permite fácil reivindicação de dispositivos e sincronização de dados. Usuário final
recursos permitem o controle remoto de dispositivos por meio de um aplicativo móvel ou
web interface. Os recursos de administração fornecem ferramentas para monitoramento de dispositivos
e gestão.

Aventura sem fio ESP32-C3
Um guia abrangente para IoT
Espressif Sistemas 12 de Junho de 2023

Conteúdo

I Preparação

1

1 Introdução à IoT

3

1.1 Arquitetura da IoT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Aplicação IoT em Casas Inteligentes . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Introdução e Prática de Projetos IoT

9

2.1 Introdução a projetos típicos de IoT. . . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1 Módulos Básicos para Dispositivos IoT Comuns . . . . . . . . . . . . . . . . . 9

2.1.2 Módulos Básicos de Aplicações Clientes . . . . . . . . . . . . . . . . . . . 10

2.1.3 Introdução às plataformas IoT comuns em nuvem. . . . . . . . . . . . . . 11

2.2 Prática: Projeto Smart Light . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2.1 Estrutura do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.2 Funções do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.3 Preparação de Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.2.4 Processo de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.3 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Introdução ao ESP RainMaker

19

3.1 O que é ESP RainMaker? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2 A Implementação do ESP RainMaker. . . . . . . . . . . . . . . . . . . . . . 21

3.2.1 Serviço de reivindicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.2 Agente RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.3 Back-end em nuvem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2.4 Cliente RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.3 Prática: pontos-chave para desenvolvimento com ESP RainMaker . . . . . . . . . . . . 25

3.4 Recursos do ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.1 Gerenciamento de usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.2 Recursos do usuário final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4.3 Recursos de administração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4 Configurando o Ambiente de Desenvolvimento

31

4.1 ESP-IDF encerradoview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1 Versões ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3

4.1.2 Fluxo de trabalho Git do ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3 Escolhendo uma Versão Adequada . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.4 Terminadoview do Diretório SDK ESP-IDF. . . . . . . . . . . . . . . . . . . . 34 4.2 Configurando o Ambiente de Desenvolvimento ESP-IDF . . . . . . . . . . . . . . . . . 38 4.2.1 Configurando o ambiente de desenvolvimento ESP-IDF no Linux . . . . . . . . 38 4.2.2 Configurando o ambiente de desenvolvimento ESP-IDF no Windows . . . . . . 40 4.2.3 Configurando o ambiente de desenvolvimento ESP-IDF no Mac . . . . . . . . . 45 4.2.4 Instalando o Código VS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.5 Introdução aos ambientes de desenvolvimento de terceiros . . . . . . . . 46 4.3 Sistema de compilação ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Conceitos Básicos de Sistema de Compilação . . . . . . . . . . . . . . . . . . 47 4.3.2 Projeto File Estrutura. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 Regras de compilação padrão do sistema de compilação . . . . . . . . . . . . . 50 4.3.4 Introdução ao script de compilação . . . . . . . . . . . . . . . . . . 51 4.3.5 Introdução aos Comandos Comuns . . . . . . . . . . . . . . . . . . . 52 4.4 Prática: Compilando Example Programa “Piscar” . . . . . . . . . . . . . . . . . . 53 4.4.1Exampa Análise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4.2 Compilando o Programa Blink . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.3 Piscando o programa Blink . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.4 Análise do Log da Porta Serial do Programa Blink . . . . . . . . . . . . . . 60 4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

II Desenvolvimento de Hardware e Drivers

65

5 Projeto de hardware de produtos Smart Light baseados em ESP32-C3

67

5.1 Recursos e composição de produtos Smart Light . . . . . . . . . . . . . . . 67

5.2 Projeto de hardware do sistema central ESP32-C3. . . . . . . . . . . . . . . . . . . 70

5.2.1 Fonte de alimentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.2.2 Sequência de inicialização e reinicialização do sistema . . . . . . . . . . . . . . . . . . 74

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

5.2.4 Fonte do Relógio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2.5 RF e Antena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

5.2.6 Pinos de cintagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.2.7 Controlador GPIO e PWM . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.3 Prática: Construindo um Sistema de Luz Inteligente com ESP32-C3 . . . . . . . . . . . . . 80

5.3.1 Selecionando Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5.3.2 Configurando GPIOs de Sinais PWM . . . . . . . . . . . . . . . . . . . . 82

5.3.3 Download de firmware e interface de depuração . . . . . . . . . . . . 82

5.3.4 Diretrizes para Projeto de RF . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.5 Diretrizes para Projeto de Fontes de Alimentação . . . . . . . . . . . . . . . . . . . 86 5.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6 Desenvolvimento de Motoristas

87

6.1 Processo de desenvolvimento de drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.2 Aplicações periféricas ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . 88

6.3 Noções básicas do driver de LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.3.1 Espaços de Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

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

6.3.3 Dimerização dos LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3.4 Introdução ao PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.4 Desenvolvimento do Driver de Dimerização de LED . . . . . . . . . . . . . . . . . . . . . . . . 96

6.4.1 Armazenamento Não Volátil (NVS) . . . . . . . . . . . . . . . . . . . . . . . . 97

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

6.4.3 Programação LED PWM . . . . . . . . . . . . . . . . . . . . . . . . . . 100

6.5 Prática: Adicionando Drivers ao Projeto Smart Light . . . . . . . . . . . . . . . . . 103

6.5.1 Driver de botão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6.5.2 Driver de dimerização de LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

6.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

III Comunicação e Controle Sem Fio

109

7 Configuração e conexão Wi-Fi

111

7.1 Noções básicas de Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.1 Introdução ao Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.2 Evolução do IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.1.3 Conceitos de Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.1.4 Conexão Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.2 Noções básicas de Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

7.2.1 Introdução ao Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 123

7.2.2 Conceitos de Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

7.2.3 Conexão Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.3 Configuração da rede Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

7.3.1 Guia de configuração de rede Wi-Fi . . . . . . . . . . . . . . . . . . . . 131

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

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

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

7.3.5 Outros Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

7.4 Programação Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.1 Componentes Wi-Fi no ESP-IDF . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2 Exercício: Conexão Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3 Exercício: Conexão Smart Wi-Fi . . . . . . . . . . . . . . . . . . . . . 145
7.5 Prática: Configuração de Wi-Fi no Projeto Smart Light . . . . . . . . . . . . . . . 156 7.5.1 Conexão Wi-Fi no Projeto Smart Light . . . . . . . . . . . . . . . . . 156 7.5.2 Configuração de Wi-Fi Inteligente . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

8 Controle Local

159

8.1 Introdução ao Controle Local . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

8.1.1 Aplicação de Controle Local . . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.2 Avançadotages de Controle Local. . . . . . . . . . . . . . . . . . . . . . . . 161

8.1.3 Descobrindo Dispositivos Controlados através de Smartphones . . . . . . . . . . 161

8.1.4 Comunicação de Dados entre Smartphones e Dispositivos . . . . . . . . 162

8.2 Métodos Comuns de Descoberta Local. . . . . . . . . . . . . . . . . . . . . . . . 162

8.2.1 Transmissão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

8.2.2 Multidifusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

8.2.3 Comparação entre Broadcast e Multicast . . . . . . . . . . . . . . 176

8.2.4 Protocolo de aplicação multicast mDNS para descoberta local . . . . . . . . 176

8.3 Protocolos Comuns de Comunicação para Dados Locais . . . . . . . . . . . . . . . 179

8.3.1 Protocolo de Controle de Transmissão (TCP) . . . . . . . . . . . . . . . . . . . 179

8.3.2 Protocolo de Transferência de Hipertexto (HTTP) . . . . . . . . . . . . . . . . . . . 185

8.3.3 Usuário DatagProtocolo RAM (UDP). . . . . . . . . . . . . . . . . . . . . . 189

8.3.4 Protocolo de Aplicação Restrita (CoAP) . . . . . . . . . . . . . . . . 192

8.3.5 Protocolo Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

8.3.6 Resumo dos Protocolos de Comunicação de Dados . . . . . . . . . . . . . . . 203

8.4 Garantia de Segurança de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

8.4.1 Introdução à Segurança da Camada de Transporte (TLS) . . . . . . . . . . . . . 207

8.4.2 Introdução ao DatagRAM Segurança da Camada de Transporte (DTLS). . . . . . . 213

8.5 Prática: Controle Local no Projeto Smart Light . . . . . . . . . . . . . . . . . . 217

8.5.1 Criando um servidor de controle local baseado em Wi-Fi . . . . . . . . . . . . . . . 217

8.5.2 Verificando a funcionalidade do controle local usando scripts . . . . . . . . . . . 221

8.5.3 Criando um servidor de controle local baseado em Bluetooth . . . . . . . . . . . . 222

8.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

9 Controle de Nuvem

225

9.1 Introdução ao Controle Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . 225

9.2 Protocolos de comunicação de dados em nuvem. . . . . . . . . . . . . . . . . . . . . . 226

9.2.1 Introdução ao MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2.2 Princípios MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.2.3 Formato de mensagem MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.2.4 Comparação de protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.2.5 Configurando o Broker MQTT no Linux e Windows . . . . . . . . . . . . 233 9.2.6 Configurando cliente MQTT baseado em ESP-IDF . . . . . . . . . . . . . . . . 235 9.3 Garantindo a segurança dos dados MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.3.1 Significado e Função dos Certificados . . . . . . . . . . . . . . . . . . . 237 9.3.2 Gerando Certificados Localmente . . . . . . . . . . . . . . . . . . . . . . 239 9.3.3 Configurando o Broker MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.3.4 Configurando o cliente MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.4 Prática: Controle remoto através do ESP RainMaker . . . . . . . . . . . . . . . . 243 9.4.1 Fundamentos do ESP RainMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 Protocolo de comunicação de back-end de nó e nuvem . . . . . . . . . . . 244 9.4.3 Comunicação entre o Cliente e o Backend da Nuvem . . . . . . . . . . . 249 9.4.4 Funções do usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9.4.5 Serviços Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.4.6 Luz Inteligente Exampeu. . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.4.7 Aplicativo RainMaker e integrações de terceiros . . . . . . . . . . . . . . . 262 9.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

10 Desenvolvimento de aplicativos para smartphones

269

10.1 Introdução ao desenvolvimento de aplicativos para smartphone. . . . . . . . . . . . . . . . . . 269

10.1.1 Acimaview de desenvolvimento de aplicativos para smartphones. . . . . . . . . . . . . . . 270

10.1.2 Estrutura do Projeto Android . . . . . . . . . . . . . . . . . . . . . . 270

10.1.3 Estrutura do Projeto iOS . . . . . . . . . . . . . . . . . . . . . . . . 271

10.1.4 Ciclo de vida de uma atividade Android . . . . . . . . . . . . . . . . . . . . . . 272

10.1.5 Ciclo de vida do iOS ViewControlador. . . . . . . . . . . . . . . . . . . . . . 273

10.2 Criando um novo projeto de aplicativo para smartphone . . . . . . . . . . . . . . . . . . . . . 275

10.2.1 Preparando para desenvolvimento Android . . . . . . . . . . . . . . . . . . . 275

10.2.2 Criando um novo projeto Android . . . . . . . . . . . . . . . . . . . . . . 275

10.2.3 Adicionando dependências para MyRainmaker . . . . . . . . . . . . . . . . . 276

10.2.4 Solicitação de permissão no Android . . . . . . . . . . . . . . . . . . . . . . 277

10.2.5 Preparando para Desenvolvimento iOS . . . . . . . . . . . . . . . . . . . . . . 277

10.2.6 Criando um novo projeto iOS . . . . . . . . . . . . . . . . . . . . . . . . 278

10.2.7 Adicionando dependências para MyRainmaker . . . . . . . . . . . . . . . . . 279

10.2.8 Solicitação de permissão no iOS . . . . . . . . . . . . . . . . . . . . . . . . . 280

10.3 Análise dos Requisitos Funcionais do App. . . . . . . . . . . . . . . . . . 281

10.3.1 Análise dos Requisitos Funcionais do Projeto. . . . . . . . . . . . 282

10.3.2 Análise dos Requisitos de Gerenciamento de Usuários . . . . . . . . . . . . . . . 282 10.3.3 Análise de requisitos de provisionamento e vinculação de dispositivos . . . . . . . 283 10.3.4 Análise de Requisitos de Controle Remoto . . . . . . . . . . . . . . . . 283 10.3.5 Análise de Requisitos de Programação . . . . . . . . . . . . . . . . . . . 284 10.3.6 Análise dos Requisitos do Centro do Usuário . . . . . . . . . . . . . . . . . . 285 10.4 Desenvolvimento do Gerenciamento de Usuários . . . . . . . . . . . . . . . . . . . . . . . . 285 10.4.1 Introdução às APIs do RainMaker . . . . . . . . . . . . . . . . . . . . . . 285 10.4.2 Iniciando comunicação via smartphone . . . . . . . . . . . . . . . . 286 10.4.3 Registro de conta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 10.4.4 Login da conta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 10.5 Desenvolvimento de provisionamento de dispositivos . . . . . . . . . . . . . . . . . . . . . . . 292 10.5.1 Dispositivos de digitalização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.5.2 Conectando Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10.5.3 Gerando chaves secretas . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.4 Obtendo ID do nó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.5.5 Dispositivos de provisionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.6 Desenvolvimento de Controle de Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1 Vinculando dispositivos a contas na nuvem . . . . . . . . . . . . . . . . . . . . 303 10.6.2 Obtendo uma lista de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.6.3 Obtendo o status do dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 10.6.4 Alterando o status do dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . 310 10.7 Desenvolvimento de Agendamento e Central de Usuários . . . . . . . . . . . . . . . . . . . 313 10.7.1 Implementando função de agendamento . . . . . . . . . . . . . . . . . . . . 313 10.7.2 Implementando o Centro do Usuário . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.7.3 Mais APIs de nuvem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 10.8 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

11 Atualização de firmware e gerenciamento de versão

321

11.1 Atualização de firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

11.1.1 Acimaview de tabelas de partição. . . . . . . . . . . . . . . . . . . . . . . . 322

11.1.2 Processo de inicialização do firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

11.1.3 Acimaview do Mecanismo OTA. . . . . . . . . . . . . . . . . . . . . 326

11.2 Gerenciamento de versão de firmware . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.1 Marcação de firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11.2.2 Reversão e Anti-reversão . . . . . . . . . . . . . . . . . . . . . . . . 331

11.3 Prática: Over-the-air (OTA) Exampeu. . . . . . . . . . . . . . . . . . . . . . . 332

11.3.1 Atualizar firmware por meio de um host local . . . . . . . . . . . . . . . . . 332

11.3.2 Atualizar firmware através do ESP RainMaker . . . . . . . . . . . . . . . 335

11.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

IV Otimização e Produção em Massa

343

12 Gerenciamento de energia e otimização de baixo consumo de energia

345

12.1 Gerenciamento de energia ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

12.1.1 Escala Dinâmica de Frequência . . . . . . . . . . . . . . . . . . . . . . . . 346

12.1.2 Configuração de gerenciamento de energia . . . . . . . . . . . . . . . . . . . . 348

12.2 Modo de baixo consumo de energia ESP32-C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

12.2.1 Modo de suspensão do modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

12.2.2 Modo de suspensão leve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

12.2.3 Modo de suspensão profunda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

12.2.4 Consumo de Corrente em Diferentes Modos de Potência . . . . . . . . . . . . . 358

12.3 Gerenciamento de energia e depuração de baixo consumo . . . . . . . . . . . . . . . . . 359

12.3.1 Depuração de logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

12.3.2 Depuração GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

12.4 Prática: Gerenciamento de energia no projeto Smart Light . . . . . . . . . . . . . . . 363

12.4.1 Configurando o recurso de gerenciamento de energia . . . . . . . . . . . . . . . . . 364

12.4.2 Usar bloqueios de gerenciamento de energia . . . . . . . . . . . . . . . . . . . . . . 365

12.4.3 Verificando o consumo de energia . . . . . . . . . . . . . . . . . . . . . . . 366

12.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

13 Recursos aprimorados de segurança do dispositivo

369

13.1 Acimaview de segurança de dados de dispositivos IoT. . . . . . . . . . . . . . . . . . . . . . . 369

13.1.1 Por que proteger dados de dispositivos IoT? . . . . . . . . . . . . . . . . . . . . . . 370

13.1.2 Requisitos básicos para segurança de dados de dispositivos IoT . . . . . . . . . . . . 371

13.2 Proteção da Integridade de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

13.2.1 Introdução ao Método de Verificação de Integridade . . . . . . . . . . . . . . 372

13.2.2 Verificação de integridade de dados de firmware . . . . . . . . . . . . . . . . . . 373

13.2.3 Exampeu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3 Proteção da Confidencialidade de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . 374

13.3.1 Introdução à criptografia de dados . . . . . . . . . . . . . . . . . . . . . . 374

13.3.2 Introdução ao esquema de criptografia Flash . . . . . . . . . . . . . . . . . 376

13.3.3 Armazenamento de Chave de Criptografia Flash . . . . . . . . . . . . . . . . . . . . . . . 379

13.3.4 Modo de funcionamento da criptografia Flash . . . . . . . . . . . . . . . . . . . . 380

13.3.5 Processo de criptografia Flash . . . . . . . . . . . . . . . . . . . . . . . . . . 381

13.3.6 Introdução à criptografia NVS . . . . . . . . . . . . . . . . . . . . . . 383

13.3.7 Examparquivos de criptografia Flash e criptografia NVS. . . . . . . . . . . 384

13.4 Proteção da Legitimidade de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

13.4.1 Introdução à Assinatura Digital . . . . . . . . . . . . . . . . . . . . . 386

13.4.2 Acimaview do esquema de inicialização segura. . . . . . . . . . . . . . . . . . . . . 388

13.4.3 Introdução à inicialização segura de software . . . . . . . . . . . . . . . . . . . 388 13.4.4 Introdução à inicialização segura de hardware . . . . . . . . . . . . . . . . . . 390 13.4.5Exampeles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 13.5 Prática: Recursos de segurança na produção em massa . . . . . . . . . . . . . . . . . . 396 13.5.1 Criptografia Flash e inicialização segura . . . . . . . . . . . . . . . . . . . . . 396 13.5.2 Ativando criptografia Flash e inicialização segura com ferramentas Flash em lote . . 397 13.5.3 Ativando criptografia Flash e inicialização segura no projeto Smart Light . . . 398 13.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

14 Gravação e teste de firmware para produção em massa

399

14.1 Gravação de firmware em produção em massa . . . . . . . . . . . . . . . . . . . . . . 399

14.1.1 Definindo Partições de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . 399

14.1.2 Gravação de Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

14.2 Testes de produção em massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

14.3 Prática: Dados de produção em massa no projeto Smart Light . . . . . . . . . . . . . 404

14.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

15 ESP Insights: Plataforma de Monitoramento Remoto

405

15.1 Introdução ao ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

15.2 Introdução ao ESP Insights . . . . . . . . . . . . . . . . . . . . . . . . . 409

15.2.1 Introdução ao ESP Insights no projeto esp-insights . . . . . . 409

15.2.2 Executando Example no projeto esp-insights. . . . . . . . . . . . . . . 411

15.2.3 Relatando Informações de Coredump . . . . . . . . . . . . . . . . . . . . . 411

15.2.4 Personalizando Logs de Interesse . . . . . . . . . . . . . . . . . . . . . . . . 412

15.2.5 Relatando o Motivo da Reinicialização . . . . . . . . . . . . . . . . . . . . . . . . . 413

15.2.6 Relatório de Métricas Personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . 413

15.3 Prática: Usando ESP Insights no Projeto Smart Light . . . . . . . . . . . . . . . 416

15.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

Introdução
ESP32-C3 é um SoC microcontrolador Wi-Fi e Bluetooth 5 (LE) de núcleo único, baseado na arquitetura RISC-V de código aberto. Ele atinge o equilíbrio certo entre potência, recursos de E/S e segurança, oferecendo assim a solução econômica ideal para dispositivos conectados. Para mostrar diversas aplicações da família ESP32-C3, este livro da Espressif irá levá-lo a uma jornada interessante pela AIoT, desde o básico do desenvolvimento de projetos de IoT e configuração do ambiente até a prática ex.ampmenos. Os primeiros quatro capítulos falam sobre IoT, ESP RainMaker e ESP-IDF. Os Capítulos 5 e 6 apresentam um breve resumo sobre design de hardware e desenvolvimento de driver. À medida que avança, você descobrirá como configurar seu projeto através de redes Wi-Fi e aplicativos móveis. Por fim, você aprenderá a otimizar seu projeto e colocá-lo em produção em massa.
Se você é engenheiro em áreas afins, arquiteto de software, professor, aluno ou qualquer pessoa interessada em IoT, este livro é para você.
Você pode baixar o código examparquivo usado neste livro do site do Espressif no GitHub. Para obter informações mais recentes sobre o desenvolvimento de IoT, siga nossa conta oficial.

Prefácio
Um mundo informatizado
Aproveitando a onda da Internet, a Internet das Coisas (IoT) fez sua grande estreia para se tornar um novo tipo de infraestrutura na economia digital. Para aproximar a tecnologia do público, a Espressif Systems trabalha com a visão de que desenvolvedores de todas as esferas da vida podem usar a IoT para resolver alguns dos problemas mais urgentes dos nossos tempos. Um mundo de “Rede Inteligente de Todas as Coisas” é o que esperamos do futuro.
Projetar nossos próprios chips é um componente crítico dessa visão. Será uma maratona, exigindo avanços constantes contra as fronteiras tecnológicas. Do “Game Changer” ESP8266 à série ESP32 integrando conectividade Wi-Fi e Bluetoothr (LE), seguido pelo ESP32-S3 equipado com aceleração de IA, a Espressif nunca para de pesquisar e desenvolver produtos para soluções AIoT. Com nosso software de código aberto, como o IoT Development Framework ESP-IDF, o Mesh Development Framework ESP-MDF e a Device Connectivity Platform ESP RainMaker, criamos uma estrutura independente para a construção de aplicativos AIoT.
Em julho de 2022, as remessas acumuladas de chipsets IoT da Espressif ultrapassaram 800 milhões, liderando o mercado de MCU Wi-Fi e alimentando um grande número de dispositivos conectados em todo o mundo. A busca pela excelência faz de cada produto Espressif um grande sucesso pelo seu alto nível de integração e eficiência de custos. O lançamento do ESP32-C3 marca um marco significativo na tecnologia desenvolvida pela Espressif. É um MCU baseado em RISC-V de núcleo único de 32 bits com 400 KB de SRAM, que pode rodar a 160 MHz. Possui Wi-Fi de 2.4 GHz integrado e Bluetooth 5 (LE) com suporte de longo alcance. Ele atinge um equilíbrio perfeito entre potência, recursos de E/S e segurança, oferecendo assim a solução econômica ideal para dispositivos conectados. Baseado no poderoso ESP32-C3, este livro tem como objetivo ajudar os leitores a compreender o conhecimento relacionado à IoT com ilustrações detalhadas e exemplos práticos.amples.
Por que escrevemos este livro?
A Espressif Systems é mais do que uma empresa de semicondutores. É também uma empresa de plataforma IoT, que sempre busca avanços e inovações na área de tecnologia. Ao mesmo tempo, a Espressif abriu o código-fonte e compartilhou seu sistema operacional e estrutura de software autodesenvolvidos com a comunidade, formando um ecossistema único. Engenheiros, fabricantes e entusiastas da tecnologia desenvolvem ativamente novos aplicativos de software baseados nos produtos da Espressif, comunicam-se livremente e compartilham suas experiências. Você pode ver ideias fascinantes de desenvolvedores em várias plataformas o tempo todo, como YouTube e GitHub. A popularidade dos produtos Espressif estimulou um número crescente de autores que produziram mais de 100 livros baseados em chipsets Espressif, em mais de dez idiomas, incluindo inglês, chinês, alemão, francês e japonês.

É o apoio e a confiança dos parceiros da comunidade que incentivam a inovação contínua da Espressif. “Nós nos esforçamos para tornar nossos chips, sistemas operacionais, estruturas, soluções, nuvem, práticas de negócios, ferramentas, documentação, escritos, ideias, etc., cada vez mais relevantes para as respostas que as pessoas precisam nos problemas mais urgentes da vida contemporânea. Esta é a maior ambição e bússola moral do Espressif.” disse o Sr. Teo Swee Ann, fundador e CEO da Espressif.
A Espressif valoriza a leitura e as ideias. Como a atualização contínua da tecnologia IoT impõe requisitos mais elevados aos engenheiros, como podemos ajudar mais pessoas a dominar rapidamente os chips, sistemas operacionais, estruturas de software, esquemas de aplicativos e produtos de serviços em nuvem da IoT? Como diz o ditado, é melhor ensinar um homem a pescar do que dar-lhe peixe. Em uma sessão de brainstorming, ocorreu-nos que poderíamos escrever um livro para classificar sistematicamente os principais conhecimentos do desenvolvimento da IoT. Nós nos demos bem, reunimos rapidamente um grupo de engenheiros seniores e combinamos a experiência da equipe técnica em programação embarcada, desenvolvimento de hardware e software IoT, todos contribuindo para a publicação deste livro. No processo de escrita, tentamos ao máximo ser objetivos e justos, despojados do casulo e usar expressões concisas para contar a complexidade e o encanto da Internet das Coisas. Resumimos cuidadosamente as perguntas comuns, consultando os comentários e sugestões da comunidade, a fim de responder claramente às perguntas encontradas no processo de desenvolvimento e fornecer diretrizes práticas de desenvolvimento de IoT para técnicos e tomadores de decisão relevantes.
Estrutura do livro
Este livro adota uma perspectiva centrada no engenheiro e expõe passo a passo o conhecimento necessário para o desenvolvimento de projetos de IoT. É composto por quatro partes, sendo elas:
· Preparação (Capítulo 1): Esta parte apresenta a arquitetura de IoT, a estrutura típica de projeto de IoT, a plataforma de nuvem ESP RainMakerr e o ambiente de desenvolvimento ESP-IDF, de modo a estabelecer uma base sólida para o desenvolvimento de projetos de IoT.
· Desenvolvimento de hardware e driver (Capítulo 5): Baseado no chipset ESP6-C32, esta parte elabora o sistema mínimo de hardware e desenvolvimento de driver e implementa o controle de escurecimento, gradação de cores e comunicação sem fio.
· Comunicação e controle sem fio (Capítulo 7): Esta parte explica o esquema de configuração inteligente de Wi-Fi baseado no chip ESP11-C32, protocolos de controle local e de nuvem e controle local e remoto de dispositivos. Ele também fornece esquemas para desenvolvimento de aplicativos para smartphones, atualização de firmware e gerenciamento de versões.
· Otimização e produção em massa (Capítulo 12-15): Esta parte é destinada a aplicações avançadas de IoT, com foco na otimização de produtos em gerenciamento de energia, otimização de baixo consumo de energia e segurança aprimorada. Ele também apresenta gravação e teste de firmware na produção em massa e como diagnosticar o status de execução e os registros do firmware do dispositivo por meio da plataforma de monitoramento remoto ESP Insights.

Sobre o código-fonte
Os leitores podem executar o exampprogramas neste livro, inserindo o código manualmente ou usando o código-fonte que acompanha o livro. Enfatizamos a combinação de teoria e prática e, assim, definimos uma seção Prática baseada no projeto Smart Light em quase todos os capítulos. Todos os códigos são de código aberto. Os leitores podem baixar o código-fonte e discuti-lo nas seções relacionadas a este livro no GitHub e em nosso fórum oficial esp32.com. O código-fonte aberto deste livro está sujeito aos termos da Licença Apache 2.0.
Nota do autor
Este livro foi produzido oficialmente pela Espressif Systems e escrito pelos engenheiros seniores da empresa. É adequado para gerentes e pessoal de P&D em setores relacionados à IoT, professores e estudantes de áreas relacionadas e entusiastas na área de Internet das Coisas. Esperamos que este livro possa servir como manual de trabalho, referência e livro de cabeceira, para ser como um bom tutor e amigo.
Ao compilar este livro, referimo-nos a alguns resultados de investigação relevantes de especialistas, académicos e técnicos nacionais e estrangeiros, e fizemos o nosso melhor para citá-los de acordo com as normas académicas. No entanto, é inevitável que haja algumas omissões, por isso gostaríamos de expressar aqui o nosso profundo respeito e gratidão a todos os autores relevantes. Além disso, citamos informações da Internet, por isso gostaríamos de agradecer aos autores e editores originais e pedir desculpas por não podermos indicar a fonte de cada informação.
Para produzir um livro de alta qualidade, organizamos rodadas de discussões internas e aprendemos com as sugestões e comentários dos leitores experimentais e dos editores das editoras. Aqui, gostaríamos de agradecer novamente pela ajuda que todos contribuíram para este trabalho de sucesso.
Por último, mas o mais importante, obrigado a todos da Espressif que trabalharam arduamente para o nascimento e popularização dos nossos produtos.
O desenvolvimento de projetos de IoT envolve uma ampla gama de conhecimentos. Limitadas à extensão do livro, bem como ao nível e experiência do autor, as omissões são inevitáveis. Portanto, solicitamos gentilmente que especialistas e leitores critiquem e corrijam nossos erros. Se você tiver alguma sugestão para este livro, entre em contato conosco pelo e-mail book@espressif.com. Aguardamos seu feedback.

Como usar este livro?
O código dos projetos neste livro foi de código aberto. Você pode baixá-lo em nosso repositório GitHub e compartilhar suas idéias e perguntas em nosso fórum oficial. GitHub: https://github.com/espressif/book-esp32c3-iot-projects Fórum: https://www.esp32.com/bookc3 Ao longo do livro, haverá partes destacadas conforme mostrado abaixo.
Código fonte Neste livro, enfatizamos a combinação de teoria e prática e, assim, definimos uma seção Prática sobre o projeto Smart Light em quase todos os capítulos. As etapas correspondentes e a página de origem serão marcadas entre duas linhas começando com o tag Código fonte.
NOTA/DICAS Aqui é onde você pode encontrar algumas informações críticas e lembretes para depurar seu programa com sucesso. Eles serão marcados entre duas linhas grossas começando com o tag NOTA ou DICAS.
A maioria dos comandos neste livro são executados no Linux, solicitados pelo caractere “$”. Se o comando exigir privilégios de superusuário para ser executado, o prompt será substituído por “#”. O prompt de comando em sistemas Mac é “%”, conforme usado na Seção 4.2.3 Instalando o ESP-IDF no Mac.
O corpo do texto deste livro será impresso em Charter, enquanto o código examparquivos, componentes, funções, variáveis, código file nomes, diretórios de código e strings estarão no Courier New.
Comandos ou textos que precisam ser inseridos pelo usuário e comandos que podem ser inseridos pressionando a tecla “Enter” serão impressos em Courier New em negrito. Logs e blocos de código serão apresentados em caixas azuis claras.
Exampem:
Em segundo lugar, use esp-idf/components/nvs flash/nvs partição gerador/nvs partição gen.py para gerar o binário da partição NVS file no host de desenvolvimento com o seguinte comando:
$ python $IDF PATH/componentes/nvs flash/gerador de partição nvs/partição nvs gen.py –input mass prod.csv –output mass prod.bin –size TAMANHO DA PARTIÇÃO NVS

Capítulo 1

Introdução

para

Internet das coisas

No final do século XX, com o surgimento das redes informáticas e das tecnologias de comunicação, a Internet integrou-se rapidamente na vida das pessoas. À medida que a tecnologia da Internet continua a amadurecer, nasceu a ideia da Internet das Coisas (IoT). Literalmente, IoT significa uma Internet onde as coisas estão conectadas. Enquanto a Internet original rompe os limites do espaço e do tempo e estreita a distância entre “pessoa e pessoa”, a IoT torna as “coisas” um participante importante, aproximando “pessoas” e “coisas”. Num futuro próximo, a IoT deverá tornar-se a força motriz da indústria da informação.
Então, o que é a Internet das Coisas?
É difícil definir com precisão a Internet das Coisas, pois o seu significado e âmbito estão em constante evolução. Em 1995, Bill Gates apresentou pela primeira vez a ideia da IoT em seu livro The Road Ahead. Simplificando, a IoT permite que objetos troquem informações entre si através da Internet. Seu objetivo final é estabelecer uma “Internet de Tudo”. Esta é uma interpretação inicial da IoT, bem como uma fantasia da tecnologia futura. Trinta anos depois, com o rápido desenvolvimento da economia e da tecnologia, a fantasia está a tornar-se realidade. Desde dispositivos inteligentes, casas inteligentes, cidades inteligentes, Internet de Veículos e dispositivos vestíveis, até ao “metaverso” suportado pelas tecnologias IoT, novos conceitos surgem constantemente. Neste capítulo, começaremos com uma explicação da arquitetura da Internet das Coisas e, em seguida, apresentaremos a aplicação IoT mais comum, a casa inteligente, para ajudá-lo a obter uma compreensão clara da IoT.
1.1 Arquitetura da IoT
A Internet das Coisas envolve múltiplas tecnologias que têm diferentes necessidades e formas de aplicação em diferentes setores. Para ordenar a estrutura, as principais tecnologias e as características de aplicação da IoT, é necessário estabelecer uma arquitetura unificada e um sistema técnico padrão. Neste livro, a arquitetura da IoT é simplesmente dividida em quatro camadas: camada de percepção e controle, camada de rede, camada de plataforma e camada de aplicação.
Camada de Percepção e Controle Como o elemento mais básico da arquitetura IoT, a camada de percepção e controle é o núcleo para realizar a detecção abrangente da IoT. Sua principal função é coletar, identificar e controlar informações. Consiste em uma variedade de dispositivos com capacidade de percepção,
3

identificação, controle e execução, e é responsável por recuperar e analisar dados como propriedades de materiais, tendências comportamentais e status de dispositivos. Dessa forma, a IoT consegue reconhecer o mundo físico real. Além disso, a camada também é capaz de controlar o status do dispositivo.
Os dispositivos mais comuns desta camada são diversos sensores, que desempenham um papel importante na coleta e identificação de informações. Os sensores são como órgãos sensoriais humanos, como sensores fotossensíveis que equivalem à visão, sensores acústicos à audição, sensores de gases ao olfato e sensores sensíveis à pressão e à temperatura ao toque. Com todos esses “órgãos sensoriais”, os objetos tornam-se “vivos” e capazes de percepção inteligente, reconhecimento e manipulação do mundo físico.
Camada de Rede A principal função da camada de rede é transmitir informações, incluindo dados obtidos da camada de percepção e controle para um alvo especificado, bem como comandos emitidos da camada de aplicação de volta para a camada de percepção e controle. Ele serve como uma importante ponte de comunicação conectando diferentes camadas de um sistema IoT. Para configurar um modelo básico de Internet das Coisas, são necessárias duas etapas para integrar objetos em uma rede: acesso à Internet e transmissão pela Internet.
Acesso à Internet A Internet permite a interligação entre pessoa e pessoa, mas não consegue incluir as coisas na grande família. Antes do advento da IoT, a maioria das coisas não era “capaz de funcionar em rede”. Graças ao desenvolvimento contínuo da tecnologia, a IoT consegue conectar coisas à Internet, realizando assim a interconexão entre “pessoas e coisas” e “coisas e coisas”. Existem duas maneiras comuns de implementar a conexão à Internet: acesso à rede com fio e acesso à rede sem fio.
Os métodos de acesso à rede com fio incluem Ethernet, comunicação serial (por exemplo, RS-232, RS-485) e USB, enquanto o acesso à rede sem fio depende da comunicação sem fio, que pode ser dividida em comunicação sem fio de curto alcance e comunicação sem fio de longo alcance.
A comunicação sem fio de curto alcance inclui ZigBee, Bluetoothr, Wi-Fi, Near-Field Communication (NFC) e identificação por radiofrequência (RFID). A comunicação sem fio de longo alcance inclui Enhanced Machine Type Communication (eMTC), LoRa, Narrow Band Internet of Things (NB-IoT), 2G, 3G, 4G, 5G, etc.
Transmissão pela Internet Diferentes métodos de acesso à Internet levam a um link de transmissão física correspondente de dados. O próximo passo é decidir qual protocolo de comunicação usar para transmitir os dados. Em comparação com os terminais de Internet, a maioria dos terminais IoT atualmente tem menos
4 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

recursos disponíveis, como desempenho de processamento, capacidade de armazenamento, taxa de rede, etc., por isso é necessário escolher um protocolo de comunicação que ocupe menos recursos em aplicações IoT. Existem dois protocolos de comunicação amplamente utilizados hoje: Message Queuing Telemetry Transport (MQTT) e Constrained Application Protocol (CoAP).
Camada de plataforma A camada de plataforma refere-se principalmente às plataformas de nuvem IoT. Quando todos os terminais IoT estão conectados em rede, seus dados precisam ser agregados em uma plataforma de nuvem IoT para serem calculados e armazenados. A camada de plataforma oferece suporte principalmente a aplicativos IoT, facilitando o acesso e o gerenciamento de dispositivos massivos. Ele conecta terminais IoT à plataforma em nuvem, coleta dados do terminal e emite comandos aos terminais, de modo a implementar o controle remoto. Como um serviço intermediário para atribuir equipamentos a aplicações industriais, a camada de plataforma desempenha um papel de conexão em toda a arquitetura IoT, transportando lógica de negócios abstrata e modelo de dados central padronizado, que pode não apenas realizar acesso rápido aos dispositivos, mas também fornecer recursos modulares poderosos para atender a diversas necessidades em cenários de aplicação da indústria. A camada da plataforma inclui principalmente módulos funcionais, como acesso a dispositivos, gerenciamento de dispositivos, gerenciamento de segurança, comunicação de mensagens, monitoramento de operação e manutenção e aplicativos de dados.
· Acesso a dispositivos, realizando a conexão e comunicação entre terminais e plataformas de nuvem IoT.
· Gerenciamento de dispositivos, incluindo funções como criação e manutenção de dispositivos, conversão de dados, sincronização de dados e distribuição de dispositivos.
· Gestão da segurança, garantindo a segurança da transmissão de dados IoT nas perspectivas de autenticação de segurança e segurança de comunicação.
· Comunicação de mensagens, incluindo três direções de transmissão, ou seja, o terminal envia dados para a plataforma de nuvem IoT, a plataforma de nuvem IoT envia dados para o lado do servidor ou outras plataformas de nuvem IoT e o lado do servidor controla remotamente os dispositivos IoT.
· Monitoramento de O&M, envolvendo monitoramento e diagnóstico, atualização de firmware, depuração online, serviços de log, etc.
· Aplicações de dados, envolvendo armazenamento, análise e aplicação de dados.
Camada de Aplicação A camada de aplicação utiliza os dados da camada de plataforma para gerenciar a aplicação, filtrando-os e processando-os com ferramentas como bancos de dados e software de análise. Os dados resultantes podem ser usados ​​para aplicações IoT do mundo real, como cuidados de saúde inteligentes, agricultura inteligente, casas inteligentes e cidades inteligentes.
É claro que a arquitetura da IoT pode ser subdividida em mais camadas, mas não importa em quantas camadas ela consista, o princípio subjacente permanece essencialmente o mesmo. Aprendizado
Capítulo 1. Introdução à IoT 5

sobre a arquitetura da IoT ajuda a aprofundar nossa compreensão das tecnologias de IoT e a construir projetos de IoT totalmente funcionais.
1.2 Aplicação IoT em Casas Inteligentes
A IoT penetrou em todas as esferas da vida, e a aplicação de IoT mais intimamente relacionada a nós é a casa inteligente. Muitos aparelhos tradicionais estão agora equipados com um ou mais dispositivos IoT, e muitas casas recém-construídas são projetadas com tecnologias IoT desde o início. A Figura 1.1 mostra alguns dispositivos domésticos inteligentes comuns.
Figura 1.1. Dispositivos domésticos inteligentes comuns O desenvolvimento da casa inteligente pode ser simplesmente dividido em produtos inteligentestage, interconexão de cena stage e inteligente stage, conforme mostrado na Figura 1.2.
Figura 1.2. Desenvolvimentotage da casa inteligente 6 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

O primeiro stage é sobre produtos inteligentes. Diferente das casas tradicionais, nas casas inteligentes, os dispositivos IoT recebem sinais com sensores e são conectados em rede por meio de tecnologias de comunicação sem fio, como Wi-Fi, Bluetooth LE e ZigBee. Os usuários podem controlar produtos inteligentes de várias maneiras, como aplicativos de smartphone, assistentes de voz, controle de alto-falante inteligente, etc.tage se concentra na interconexão da cena. Nestetage, os desenvolvedores não estão mais considerando controlar um único produto inteligente, mas interconectar dois ou mais produtos inteligentes, automatizar até certo ponto e, finalmente, formar um modo de cena personalizado. Para exampOu seja, quando o usuário pressiona qualquer botão do modo de cena, as luzes, cortinas e ar condicionado serão automaticamente adaptados aos presets. É claro que existe o pré-requisito de que a lógica de ligação seja prontamente configurada, incluindo condições de disparo e ações de execução. Imagine que o modo de aquecimento do ar condicionado é acionado quando a temperatura interior desce abaixo dos 10°C; que às 7 horas da manhã toca música para acordar o usuário, cortinas inteligentes são abertas e a panela elétrica de arroz ou torradeira liga através de uma tomada inteligente; à medida que o usuário se levanta e termina de se lavar, o café da manhã já está servido, para que não haja demora na ida para o trabalho. Quão conveniente se tornou nossa vida! O terceirotage vai para a inteligênciatage. À medida que mais dispositivos domésticos inteligentes são acessados, também aumentam os tipos de dados gerados. Com a ajuda da computação em nuvem, big data e inteligência artificial, é como se um “cérebro mais inteligente” tivesse sido implantado em casas inteligentes, que não exigem mais comandos frequentes do usuário. Eles coletam dados de interações anteriores e aprendem os padrões e preferências de comportamento do usuário, de forma a automatizar atividades, inclusive fornecendo recomendações para a tomada de decisões. Atualmente, a maioria das casas inteligentes está no local de interconexãotage. À medida que a taxa de penetração e a inteligência dos produtos inteligentes aumentam, as barreiras entre os protocolos de comunicação estão a ser removidas. No futuro, as casas inteligentes certamente se tornarão realmente “inteligentes”, assim como o sistema de IA Jarvis em Homem de Ferro, que pode não apenas ajudar o usuário a controlar vários dispositivos, lidar com assuntos diários, mas também ter super poder de computação e capacidade de raciocínio. Nos inteligentestage, os seres humanos receberão melhores serviços tanto em quantidade como em qualidade.
Capítulo 1. Introdução à IoT 7

8 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Capítulo Introdução e prática de 2 projetos de IoT
No Capítulo 1, apresentamos a arquitetura da IoT e as funções e inter-relações da camada de percepção e controle, camada de rede, camada de plataforma e camada de aplicação, bem como o desenvolvimento de casa inteligente. Porém, assim como quando aprendemos a pintar, conhecer o conhecimento teórico está longe de ser suficiente. Temos que “colocar a mão na massa” para colocar em prática os projetos de IoT para dominar verdadeiramente a tecnologia. Além disso, quando um projeto passa para a produção em massatage, é necessário considerar mais fatores como conexão de rede, configuração, interação da plataforma de nuvem IoT, gerenciamento e atualizações de firmware, gerenciamento de produção em massa e configuração de segurança. Então, no que precisamos prestar atenção ao desenvolver um projeto completo de IoT? No Capítulo 1, mencionamos que a casa inteligente é um dos cenários de aplicação de IoT mais comuns, e as luzes inteligentes são um dos aparelhos mais básicos e práticos, que podem ser usados ​​em residências, hotéis, academias, hospitais, etc. Neste livro, tomaremos a construção de um projeto de luz inteligente como ponto de partida, explicaremos seus componentes e características e forneceremos orientação sobre o desenvolvimento do projeto. Esperamos que você possa tirar conclusões deste caso para criar mais aplicações IoT.
2.1 Introdução a projetos típicos de IoT
Em termos de desenvolvimento, os módulos funcionais básicos dos projetos de IoT podem ser classificados em desenvolvimento de software e hardware de dispositivos IoT, desenvolvimento de aplicativos clientes e desenvolvimento de plataforma em nuvem IoT. É importante esclarecer os módulos funcionais básicos, que serão descritos mais detalhadamente nesta seção.
2.1.1 Módulos Básicos para Dispositivos IoT Comuns
O desenvolvimento de software e hardware de dispositivos IoT inclui os seguintes módulos básicos: Coleta de dados
Como camada inferior da arquitetura IoT, os dispositivos IoT da camada de percepção e controle conectam sensores e dispositivos através de seus chips e periféricos para obter coleta de dados e controle operacional.
9

Vinculação de conta e configuração inicial Para a maioria dos dispositivos IoT, a vinculação de conta e a configuração inicial são concluídas em um processo operacional, por exemploamparquivo, conectando dispositivos com usuários configurando a rede Wi-Fi.
Interação com plataformas IoT em nuvem Para monitorar e controlar dispositivos IoT, também é necessário conectá-los às plataformas IoT em nuvem, a fim de dar comandos e reportar status por meio da interação entre si.
Controle de dispositivos Quando conectados a plataformas de nuvem IoT, os dispositivos podem se comunicar com a nuvem e ser registrados, vinculados ou controlados. Os usuários podem consultar o status do produto e realizar outras operações no aplicativo do smartphone por meio de plataformas de nuvem IoT ou protocolos de comunicação locais.
Os dispositivos IoT de atualização de firmware também podem obter atualização de firmware com base nas necessidades dos fabricantes. Ao receber comandos enviados pela nuvem, será realizada atualização de firmware e gerenciamento de versão. Com esse recurso de atualização de firmware, você pode aprimorar continuamente as funções dos dispositivos IoT, corrigir defeitos e melhorar a experiência do usuário.
2.1.2 Módulos Básicos de Aplicações Clientes
Os aplicativos clientes (por exemplo, aplicativos para smartphones) incluem principalmente os seguintes módulos básicos:
Sistema de contas e autorização Suporta autorização de contas e dispositivos.
Controle de dispositivos Os aplicativos de smartphone geralmente são equipados com funções de controle. Os usuários podem conectar-se facilmente a dispositivos IoT e gerenciá-los a qualquer hora e em qualquer lugar por meio de aplicativos de smartphone. Numa casa inteligente do mundo real, os dispositivos são controlados principalmente através de aplicações de smartphones, o que não só permite a gestão inteligente dos dispositivos, mas também poupa o custo de mão-de-obra. Portanto, o controle do dispositivo é essencial para aplicativos clientes, como controle de atributos de função do dispositivo, controle de cena, agendamento, controle remoto, ligação de dispositivos, etc. Os usuários domésticos inteligentes também podem personalizar cenas de acordo com necessidades pessoais, controlando iluminação, eletrodomésticos, entrada , etc., para tornar a vida doméstica mais confortável e conveniente. Eles podem cronometrar o ar condicionado, desligá-lo remotamente, acender a luz do corredor automaticamente assim que a porta for destrancada ou mudar para o modo “teatro” com um único botão.
Os aplicativos Notification Client atualizam o status em tempo real dos dispositivos IoT e enviam alertas quando os dispositivos ficam anormais.
10 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Atendimento ao cliente pós-venda Os aplicativos de smartphone podem fornecer serviços pós-venda de produtos, para resolver problemas relacionados a falhas de dispositivos IoT e operações técnicas em tempo hábil.
Funções apresentadas Para atender às necessidades de diferentes usuários, outras funções podem ser adicionadas, como Shake, NFC, GPS, etc. O GPS pode ajudar a definir a precisão das operações da cena de acordo com a localização e distância, enquanto a função Shake permite aos usuários definir o comandos a serem executados para um dispositivo ou cena específica agitando.
2.1.3 Introdução às plataformas IoT comuns em nuvem
A plataforma de nuvem IoT é uma plataforma completa que integra funções como gerenciamento de dispositivos, comunicação de segurança de dados e gerenciamento de notificações. De acordo com o seu grupo-alvo e acessibilidade, as plataformas de nuvem IoT podem ser divididas em plataformas de nuvem IoT públicas (doravante denominadas “nuvem pública”) e plataformas de nuvem IoT privadas (doravante denominadas “nuvem privada”).
A nuvem pública geralmente indica plataformas de nuvem IoT compartilhadas para empresas ou indivíduos, operadas e mantidas por provedores de plataforma e compartilhadas pela Internet. Pode ser gratuito ou de baixo custo e fornece serviços em toda a rede pública aberta, como Alibaba Cloud, Tencent Cloud, Baidu Cloud, AWS IoT, Google IoT, etc. utilizadores finais a jusante para criar uma nova cadeia de valor e ecossistema.
A nuvem privada é construída apenas para uso empresarial, garantindo assim o melhor controle sobre dados, segurança e qualidade de serviço. Seus serviços e infraestrutura são mantidos separadamente pelas empresas, e o hardware e software de suporte também são dedicados a usuários específicos. As empresas podem personalizar os serviços em nuvem para atender às necessidades de seus negócios. Atualmente, alguns fabricantes de casas inteligentes já possuem plataformas privadas de nuvem IoT e desenvolveram aplicativos domésticos inteligentes baseados nelas.
Nuvem pública e nuvem privada têm suas próprias vantagenstages, que será explicado mais tarde.
Para alcançar a conectividade de comunicação, é necessário concluir pelo menos o desenvolvimento incorporado no lado do dispositivo, juntamente com servidores de negócios, plataformas de nuvem IoT e aplicativos para smartphones. Diante de um projeto tão grande, a nuvem pública normalmente fornece kits de desenvolvimento de software para aplicativos de dispositivos e smartphones para acelerar o processo. Tanto a nuvem pública quanto a privada fornecem serviços, incluindo acesso a dispositivos, gerenciamento de dispositivos, sombra de dispositivos e operação e manutenção.
As plataformas de nuvem IoT de acesso a dispositivos precisam fornecer não apenas interfaces para acesso a dispositivos usando protocolos
Capítulo 2. Introdução e Prática de Projetos IoT 11

como MQTT, CoAP, HTTPS e WebSocket, mas também a função de autenticação de segurança do dispositivo para bloquear dispositivos falsificados e ilegais, reduzindo efetivamente o risco de serem comprometidos. Essa autenticação geralmente suporta diferentes mecanismos, portanto, quando os dispositivos são produzidos em massa, é necessário pré-atribuir o certificado do dispositivo de acordo com o mecanismo de autenticação selecionado e gravá-lo nos dispositivos.
Gerenciamento de dispositivos A função de gerenciamento de dispositivos fornecida pelas plataformas de nuvem IoT pode não apenas ajudar os fabricantes a monitorar o status de ativação e o status online de seus dispositivos em tempo real, mas também permite opções como adicionar/remover dispositivos, recuperar, adicionar/excluir grupos, atualização de firmware e gerenciamento de versão.
As plataformas de nuvem IoT de sombra de dispositivo podem criar uma versão virtual persistente (sombra de dispositivo) para cada dispositivo, e o status da sombra do dispositivo pode ser sincronizado e obtido por aplicativo de smartphone ou outros dispositivos por meio de protocolos de transmissão da Internet. A sombra do dispositivo armazena o status relatado mais recente e o status esperado de cada dispositivo e, mesmo que o dispositivo esteja offline, ele ainda pode obter o status chamando APIs. O Device Shadow fornece APIs sempre ativas, o que facilita a criação de aplicativos para smartphones que interagem com os dispositivos.
Operação e manutenção A função O&M inclui três aspectos: · Demonstração de informações estatísticas sobre dispositivos IoT e notificações. · O gerenciamento de log permite a recuperação de informações sobre o comportamento do dispositivo, fluxo de mensagens para cima/para baixo e conteúdo da mensagem. · A depuração de dispositivos oferece suporte à entrega de comandos, atualização de configuração e verificação da interação entre plataformas de nuvem IoT e mensagens de dispositivos.
2.2 Prática: Projeto Smart Light
Após a introdução teórica em cada capítulo, você encontrará uma seção prática relacionada ao projeto Smart Light para ajudá-lo a obter experiência prática. O projeto é baseado no chip ESP32-C3 da Espressif e na plataforma ESP RainMaker IoT Cloud e abrange hardware de módulo sem fio em produtos de luz inteligente, software incorporado para dispositivos inteligentes baseados em ESP32C3, aplicativos de smartphone e interação ESP RainMaker.
Código-fonte Para uma melhor experiência de aprendizado e desenvolvimento, o projeto deste livro foi de código aberto. Você pode baixar o código-fonte de nosso repositório GitHub em https://github. com/espressif/book-esp32c3-iot-projects.
12 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

2.2.1 Estrutura do Projeto
O projeto Smart Light consiste em três partes: i. Dispositivos de luz inteligentes baseados em ESP32-C3, responsáveis ​​por interagir com plataformas de nuvem IoT e controlar a comutação, brilho e temperatura de cor do LED lamp miçangas. ii. Aplicativos para smartphones (incluindo aplicativos para tablets rodando em Android e iOS), responsáveis ​​pela configuração de rede de produtos de luz inteligente, bem como consultar e controlar seu status.
iii. Uma plataforma de nuvem IoT baseada em ESP RainMaker. Para simplificar, consideramos neste livro a plataforma de nuvem IoT e o servidor de negócios como um todo. Detalhes sobre o ESP RainMaker serão fornecidos no Capítulo 3.
A correspondência entre a estrutura do projeto Smart Light e a arquitetura da IoT é mostrada na Figura 2.1.
Figura 2.1. Estrutura do projeto de luz inteligente
2.2.2 Funções do Projeto
Divididas de acordo com a estrutura, as funções de cada parte são as seguintes. Dispositivos de luz inteligentes
· Configuração e conexão de rede. · Controle LED PWM, como interruptor, brilho, temperatura de cor, etc. · Automação ou controle de cena, por exemplo, interruptor de tempo. · Criptografia e inicialização segura do Flash. · Atualização de firmware e gerenciamento de versões.
Capítulo 2. Introdução e Prática de Projetos IoT 13

Aplicativos para smartphone · Configuração de rede e vinculação de dispositivos. · Controle inteligente de produtos de luz, como interruptor, brilho, temperatura de cor, etc. · Automação ou configurações de cena, por exemplo, interruptor de tempo. · Controle local/remoto. · Cadastro de usuário, login, etc.
Plataforma de nuvem ESP RainMaker IoT · Permite acesso a dispositivos IoT. · Fornecer APIs de operação de dispositivos acessíveis a aplicativos de smartphones. · Atualização de firmware e gerenciamento de versões.
2.2.3 Preparação de Hardware
Caso tenha interesse em colocar o projeto em prática, você também precisará dos seguintes hardwares: luzes inteligentes, smartphones, roteadores Wi-Fi e um computador que atenda aos requisitos de instalação do ambiente de desenvolvimento. Luzes inteligentes
As luzes inteligentes são um novo tipo de lâmpada, cujo formato é igual ao da lâmpada incandescente geral. Uma luz inteligente é composta por fonte de alimentação regulada por capacitor, módulo sem fio (com ESP32-C3 integrado), controlador de LED e matriz de LED RGB. Quando conectado à energia, o 15 V DC voltagA saída após redução do capacitor, retificação de diodo e regulação fornece energia ao controlador de LED e à matriz de LED. O controlador de LED pode enviar automaticamente níveis altos e baixos em determinados intervalos, alternando a matriz de LED RGB entre fechada (luzes acesas) e aberta (luzes apagadas), para que possa emitir ciano, amarelo, verde, roxo, azul, vermelho e luz branca. O módulo wireless é responsável por se conectar ao roteador Wi-Fi, receber e reportar o status das luzes inteligentes e enviar comandos para controle do LED.
Figura 2.2. Uma luz inteligente simulada
No início do desenvolvimentotage, você pode simular uma luz inteligente usando a placa ESP32-C3DevKitM-1 conectada com LED RGB lamp contas (ver Figura 2.2). Mas voce devia
14 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

observe que esta não é a única maneira de montar uma luz inteligente. O design de hardware do projeto neste livro contém apenas um módulo sem fio (com ESP32-C3 integrado), mas não um design completo de hardware de luz inteligente. Além disso, a Espressif também produz uma placa de desenvolvimento de áudio baseada em ESP32-C3 ESP32C3-Lyra para controlar luzes com áudio. A placa possui interfaces para microfones e alto-falantes e pode controlar faixas de LED. Ele pode ser usado para desenvolver transmissores de áudio de alto desempenho e custo ultrabaixo e faixas de luz rítmica. A Figura 2.3 mostra uma placa ESP32-C3Lyra ligada a uma faixa de 40 luzes LED.
Figura 2.3. ESP32-C3-Lyra conectado a uma faixa de 40 luzes LED
Smartphones (Android/iOS) O projeto Smart Light envolve o desenvolvimento de um aplicativo para smartphone para configuração e controle de produtos de luz inteligente.
Roteadores Wi-Fi Os roteadores Wi-Fi convertem sinais de rede com fio e sinais de rede móvel em sinais de rede sem fio, para computadores, smartphones, tablets e outros dispositivos sem fio se conectarem à rede. Para exampPor exemplo, a banda larga em casa só precisa estar conectada a um roteador Wi-Fi para obter rede sem fio de dispositivos Wi-Fi. O padrão de protocolo principal suportado pelos roteadores Wi-Fi é o IEEE 802.11n, com um TxRate médio de 300 Mbps, ou 600 Mbps no máximo. Eles são compatíveis com versões anteriores de IEEE 802.11b e IEEE 802.11g. O chip ESP32-C3 da Espressif suporta IEEE 802.11b/g/n, então você pode escolher um roteador Wi-Fi de banda única (2.4 GHz) ou banda dupla (2.4 GHz e 5 GHz).
Um ambiente de desenvolvimento de computador (Linux/macOS/Windows) será apresentado no Capítulo 4. Capítulo 2. Introdução e prática de projetos de IoT 15

2.2.4 Processo de desenvolvimento
Figura 2.4. Etapas de desenvolvimento do projeto Smart Light
Design de hardware O design de hardware de dispositivos IoT é essencial para um projeto IoT. Um projeto completo de luz inteligente destina-se a produzir todosamp trabalhando sob alimentação elétrica. Diferentes fabricantes produzem lamps de estilos e tipos de drivers diferentes, mas seus módulos sem fio geralmente têm a mesma função. Para simplificar o processo de desenvolvimento do projeto Smart Ligh, este livro cobre apenas o design de hardware e o desenvolvimento de software de módulos sem fio.
Configuração da plataforma de nuvem IoT Para usar plataformas de nuvem IoT, você precisa configurar projetos no back-end, como criação de produtos, criação de dispositivos, configuração de propriedades de dispositivos, etc.
Desenvolvimento de software integrado para dispositivos IoT Implemente funções esperadas com ESP-IDF, o SDK do lado do dispositivo da Espressif, incluindo conexão a plataformas de nuvem IoT, desenvolvimento de drivers de LED e atualização de firmware.
Desenvolvimento de aplicativos para smartphones Desenvolva aplicativos para smartphones para sistemas Android e iOS para realizar registro e login de usuários, controle de dispositivos e outras funções.
Otimização de dispositivos IoT Depois que o desenvolvimento básico das funções do dispositivo IoT estiver concluído, você poderá recorrer a tarefas de otimização, como otimização de energia.
Testes de produção em massa Realize testes de produção em massa de acordo com padrões relacionados, como teste de função de equipamento, teste de envelhecimento, teste de RF, etc.
Apesar das etapas listadas acima, um projeto Smart Light não está necessariamente sujeito a tal procedimento, pois diferentes tarefas também podem ser realizadas ao mesmo tempo. Para exampPor exemplo, software embarcado e aplicativos para smartphones podem ser desenvolvidos em paralelo. Algumas etapas também podem precisar ser repetidas, como otimização de dispositivos IoT e testes de produção em massa.
16 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

2.3 Resumo
Neste capítulo, primeiro expomos os componentes básicos e módulos funcionais de um projeto de IoT e, em seguida, apresentamos o caso prático do Smart Light, referindo-se à sua estrutura, funções, preparação de hardware e processo de desenvolvimento. Os leitores podem tirar conclusões da prática e ficar confiantes para realizar projetos de IoT com o mínimo de erros no futuro.
Capítulo 2. Introdução e Prática de Projetos IoT 17

18 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Capítulo 3

Introdução

para

ESP

Criador de chuva

A Internet das Coisas (IoT) oferece infinitas possibilidades para mudar a forma como as pessoas vivem, mas o desenvolvimento da engenharia da IoT está cheio de desafios. Com as nuvens públicas, os fabricantes de terminais podem implementar funcionalidades do produto através das seguintes soluções:
Com base nas plataformas de nuvem dos provedores de soluções. Dessa forma, os fabricantes de terminais só precisam projetar o hardware do produto e, em seguida, conectar o hardware à nuvem usando o módulo de comunicação fornecido e configurar as funções do produto seguindo as diretrizes. Essa é uma abordagem eficiente, pois elimina a necessidade de desenvolvimento e operações e manutenção (O&M) no lado do servidor e no lado do aplicativo. Ele permite que os fabricantes de terminais se concentrem no design de hardware sem ter que considerar a implementação na nuvem. No entanto, tais soluções (por exemplo, firmware do dispositivo e aplicativo) geralmente não são de código aberto, portanto as funções do produto serão limitadas pela plataforma em nuvem do provedor, que não pode ser personalizada. Enquanto isso, os dados do usuário e do dispositivo também pertencem à plataforma em nuvem.
Baseado em produtos de nuvem Nesta solução, após concluir o projeto de hardware, os fabricantes de terminais não só precisam implementar funções de nuvem usando um ou mais produtos de nuvem fornecidos pela nuvem pública, mas também precisam vincular o hardware à nuvem. Para example, para se conectar à Amazon Web Services (AWS), os fabricantes de terminais precisam usar produtos da AWS, como Amazon API Gateway, AWS IoT Core e AWS Lambda para permitir acesso a dispositivos, controle remoto, armazenamento de dados, gerenciamento de usuários e outras funções básicas. Ele não apenas pede aos fabricantes de terminais que usem e configurem produtos em nuvem com flexibilidade, com profundo conhecimento e rica experiência, mas também exige que considerem o custo de construção e manutenção para os serviços iniciais e posteriores.tages Isto representa grandes desafios para a energia e os recursos da empresa.
Em comparação com as nuvens públicas, as nuvens privadas são geralmente construídas para projetos e produtos específicos. Os desenvolvedores de nuvem privada recebem o mais alto nível de liberdade no design de protocolos e na implementação de lógica de negócios. Os fabricantes de terminais podem criar produtos e esquemas de design à vontade e integrar e capacitar facilmente os dados do usuário. Combinando a alta segurança, escalabilidade e confiabilidade da nuvem pública com o avançotages de nuvem privada, Espressif lançou ESP
19

RainMaker, uma solução de nuvem privada profundamente integrada baseada na nuvem Amazon. Os usuários podem implantar o ESP RainMaker e construir uma nuvem privada simplesmente com uma conta AWS.
3.1 O que é ESP RainMaker?
ESP RainMaker é uma plataforma AIoT completa construída com vários produtos AWS maduros. Ele fornece vários serviços necessários para produção em massa, como acesso à nuvem de dispositivos, atualização de dispositivos, gerenciamento de back-end, login de terceiros, integração de voz e gerenciamento de usuários. Ao usar o Serverless Application Repository (SAR) fornecido pela AWS, os fabricantes de terminais podem implantar rapidamente o ESP RainMaker em suas contas da AWS, o que é eficiente em termos de tempo e fácil de operar. Gerenciado e mantido pela Espressif, o SAR usado pelo ESP RainMaker ajuda os desenvolvedores a reduzir os custos de manutenção da nuvem e a acelerar o desenvolvimento de produtos AIoT, construindo assim soluções AIoT seguras, estáveis ​​e personalizáveis. A Figura 3.1 mostra a arquitetura do ESP RainMaker.
Figura 3.1. Arquitetura do ESP RainMaker
O servidor público ESP RainMaker da Espressif é gratuito para todos os entusiastas, criadores e educadores de ESP para avaliação da solução. Os desenvolvedores podem fazer login com contas Apple, Google ou GitHub e criar rapidamente seus próprios protótipos de aplicativos IoT. O servidor público integra Alexa e Google Home e fornece serviços de controle de voz, que são suportados por Alexa Skill e Google Actions. Sua função de reconhecimento semântico também é fornecida por terceiros. Os dispositivos RainMaker IoT respondem apenas a ações específicas. Para obter uma lista completa de comandos de voz suportados, verifique as plataformas de terceiros. Além disso, a Espressif oferece um aplicativo público RainMaker para que os usuários controlem os produtos por meio de smartphones. 20 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

3.2 A implementação do ESP RainMaker
Conforme mostrado na Figura 3.2, o ESP RainMaker consiste em quatro partes: · Serviço de solicitação, permitindo que os dispositivos RainMaker obtenham certificados de forma dinâmica. · RainMaker Cloud (também conhecido como backend de nuvem), fornecendo serviços como filtragem de mensagens, gerenciamento de usuários, armazenamento de dados e integrações de terceiros. · Agente RainMaker, permitindo que dispositivos RainMaker se conectem ao RainMaker Cloud. · Cliente RainMaker (RainMaker App ou scripts CLI), para provisionamento, criação de usuários, associação e controle de dispositivos, etc.
Figura 3.2. Estrutura do ESP RainMaker
ESP RainMaker fornece um conjunto completo de ferramentas para desenvolvimento de produtos e produção em massa, incluindo: RainMaker SDK
RainMaker SDK é baseado em ESP-IDF e fornece o código-fonte do agente do lado do dispositivo e APIs C relacionadas para desenvolvimento de firmware. Os desenvolvedores só precisam escrever a lógica do aplicativo e deixar o resto para a estrutura RainMaker. Para obter mais informações sobre APIs C, visite https://bookc3.espressif.com/rm/c-api-reference. Aplicativo RainMaker A versão pública do aplicativo RainMaker permite que os desenvolvedores concluam o provisionamento de dispositivos e controlem e consultem o status dos dispositivos (por exemplo, produtos de iluminação inteligente). Ele está disponível nas lojas de aplicativos iOS e Android. Para obter mais detalhes, consulte o Capítulo 10. APIs REST As APIs REST ajudam os usuários a construir seus próprios aplicativos semelhantes ao aplicativo RainMaker. Para obter mais informações, visite https://swaggerapis.rainmaker.espressif.com/.
Capítulo 3. Introdução ao ESP RainMaker 21

APIs Python Uma CLI baseada em Python, que vem com o RainMaker SDK, é fornecida para implementar todas as funções semelhantes aos recursos do smartphone. Para obter mais informações sobre APIs Python, visite https://bookc3.espressif.com/rm/python-api-reference.
Admin CLI Admin CLI, com nível de acesso mais alto, é fornecido para implantação privada do ESP RainMaker para gerar certificados de dispositivo em massa.
3.2.1 Serviço de reivindicação
Toda a comunicação entre os dispositivos RainMaker e o backend da nuvem é realizada através de MQTT+TLS. No contexto do ESP RainMaker, “Reivindicação” é o processo no qual os dispositivos obtêm certificados do Serviço de Reivindicação para se conectarem ao backend da nuvem. Observe que o serviço de reivindicação só é aplicável ao serviço RainMaker público, enquanto para implantação privada, os certificados do dispositivo precisam ser gerados em massa por meio do Admin CLI. ESP RainMaker oferece suporte a três tipos de serviço de reivindicação: Auto-reivindicação
O próprio dispositivo busca os certificados por meio de uma chave secreta pré-programada no eFuse após se conectar à Internet. Reivindicação orientada por host Os certificados são obtidos do host de desenvolvimento com a conta RainMaker. Solicitação Assistida Os certificados são obtidos por meio de aplicativos de smartphone durante o provisionamento.
3.2.2 Agente RainMaker
Figura 3.3. Estrutura do RainMaker SDK A função principal do RainMaker Agent é fornecer conectividade e auxiliar a camada de aplicativo a processar dados de nuvem de uplink/downlink. Ele é construído por meio do RainMaker SDK 22 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

e desenvolvido com base na estrutura comprovada ESP-IDF, usando componentes ESP-IDF como RTOS, NVS e MQTT. A Figura 3.3 mostra a estrutura do RainMaker SDK.
O RainMaker SDK inclui dois recursos principais.
Conexão
eu. Cooperar com o Claiming Service para obter certificados de dispositivos.
ii. Conectando-se ao back-end da nuvem usando o protocolo MQTT seguro para fornecer conectividade remota e implementar controle remoto, relatórios de mensagens, gerenciamento de usuários, gerenciamento de dispositivos, etc. Ele usa o componente MQTT no ESP-IDF por padrão e fornece uma camada de abstração para interface com outros pilhas de protocolos.
iii. Fornecendo componente de provisionamento de wifi para conexão e provisionamento de Wi-Fi, especialmente componente https ota para atualizações OTA e especialmente componente ctrl local para descoberta e conexão de dispositivos locais. Todos estes objetivos podem ser alcançados através de uma configuração simples.
Processamento de dados
eu. Armazenar os certificados de dispositivo emitidos pelo Claiming Service e os dados necessários ao executar o RainMaker, por padrão usando a interface fornecida pelo componente flash nvs e fornecendo APIs para desenvolvedores para uso direto.
ii. Usando o mecanismo de retorno de chamada para processar dados de nuvem de uplink/downlink e desbloquear automaticamente os dados para a camada de aplicativo para facilitar o processamento pelos desenvolvedores. Para exampPor exemplo, o RainMaker SDK fornece interfaces ricas para estabelecer dados TSL (Thing Specification Language), que são necessários para definir modelos TSL para descrever dispositivos IoT e implementar funções como tempo, contagem regressiva e controle de voz. Para recursos interativos básicos, como tempo, o RainMaker SDK fornece uma solução livre de desenvolvimento que pode ser simplesmente ativada quando necessário. Em seguida, o agente RainMaker processará diretamente os dados, enviará-os para a nuvem por meio do tópico MQTT associado e realimentará as alterações de dados no back-end da nuvem por meio do mecanismo de retorno de chamada.
3.2.3 Back-end em nuvem
O back-end da nuvem é construído em AWS Serverless Computing e obtido por meio de AWS Cognito (sistema de gerenciamento de identidade), Amazon API Gateway, AWS Lambda (serviço de computação sem servidor), Amazon DynamoDB (banco de dados NoSQL), AWS IoT Core (núcleo de acesso IoT que fornece acesso MQTT e filtragem de regras), Amazon Simple Email Service (serviço de correio simples SES), Amazon CloudFront (rede de entrega rápida), Amazon Simple Queue Service (enfileiramento de mensagens SQS) e Amazon S3 (serviço de armazenamento de bucket). O objetivo é otimizar escalabilidade e segurança. Com o ESP RainMaker, os desenvolvedores podem gerenciar dispositivos sem precisar escrever código na nuvem. As mensagens relatadas pelos dispositivos são transmitidas de forma transparente para
Capítulo 3. Introdução ao ESP RainMaker 23

clientes de aplicativos ou outros serviços de terceiros. A Tabela 3.1 mostra os produtos e funções da nuvem AWS usados ​​no backend da nuvem, com mais produtos e recursos em desenvolvimento.
Tabela 3.1. Produtos e funções da nuvem AWS usados ​​pelo back-end da nuvem

Produto de nuvem AWS usado por RainMaker

Função

AWS Cognito

Gerenciar credenciais de usuário e oferecer suporte a logins de terceiros

AWS Lambda

Implementando a lógica de negócios central do back-end da nuvem

Amazon Timestream Armazenamento de dados de série temporal

Amazon DynamoDB Armazenamento de informações privadas dos clientes

Núcleo de IoT da AWS

Suporte à comunicação MQTT

Amazon SES

Fornecimento de serviços de envio de e-mail

Amazon CloudFront Acelerando o gerenciamento de back-end webacesso ao site

Amazon SQS

Encaminhamento de mensagens do AWS IoT Core

3.2.4 Cliente RainMaker
Os clientes RainMaker, como App e CLI, comunicam-se com o back-end da nuvem por meio de APIs REST. Informações detalhadas e instruções sobre APIs REST podem ser encontradas na documentação do Swagger fornecida pela Espressif. O cliente de aplicativo móvel do RainMaker está disponível para sistemas iOS e Android. Ele permite o provisionamento, controle e compartilhamento de dispositivos, além de criar e ativar tarefas de contagem regressiva e conectar-se a plataformas de terceiros. Ele pode carregar automaticamente a UI e os ícones de acordo com a configuração relatada pelos dispositivos e exibir totalmente o TSL do dispositivo.
Por exemploample, se uma luz inteligente for construída no ex fornecido pelo RainMaker SDKamparquivos, o ícone e a interface do usuário da lâmpada serão carregados automaticamente quando o provisionamento for concluído. Os usuários podem alterar a cor e o brilho da luz por meio da interface e obter controle de terceiros vinculando Alexa Smart Home Skill ou Google Smart Home Actions às suas contas ESP RainMaker. A Figura 3.4 mostra o ícone e a UI exampOs arquivos da lâmpada acendem respectivamente no Alexa, Google Home e ESP RainMaker App.

24 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

(a)Exampeu – Alexa

(b) Ex.amparquivo – Google Home

(c) Ex.ample – ESP RainMaker
Figura 3.4. Examparquivos de ícone e UI da lâmpada no Alexa, Google Home e aplicativo ESP RainMaker
3.3 Prática: pontos-chave para desenvolvimento com ESP RainMaker
Assim que a camada do driver de dispositivo for concluída, os desenvolvedores podem começar a criar modelos TSL e processar dados de downlink usando as APIs fornecidas pelo RainMaker SDK e habilitar os serviços básicos do ESP RainMaker com base na definição e nos requisitos do produto.
Capítulo 3. Introdução ao ESP RainMaker 25

A seção 9.4 deste livro explicará a implementação da luz inteligente LED no RainMaker. Durante a depuração, os desenvolvedores podem usar as ferramentas CLI no RainMaker SDK para se comunicar com a luz inteligente (ou chamar APIs REST do Swagger).
O Capítulo 10 irá elaborar o uso de APIs REST no desenvolvimento de aplicativos para smartphones. As atualizações OTA de luzes inteligentes LED serão abordadas no Capítulo 11. Se os desenvolvedores tiverem habilitado o monitoramento remoto do ESP Insights, o back-end de gerenciamento do ESP RainMaker exibirá os dados do ESP Insights. Detalhes serão apresentados no Capítulo 15.
ESP RainMaker suporta implantação privada, que difere do servidor RainMaker público das seguintes maneiras:
Serviço de reivindicação Para gerar certificados em implantações privadas, é necessário usar o RainMaker Admin CLI em vez de reivindicação. Com o servidor público, os desenvolvedores devem receber direitos de administrador para implementar a atualização de firmware, mas isso é indesejável em implantações comerciais. Portanto, nem serviço de autenticação separado pode ser fornecido para auto-reivindicação, nem direitos de administrador para reivindicação orientada ou assistida por host.
Aplicativos de telefone Em implantações privadas, os aplicativos precisam ser configurados e compilados separadamente para garantir que os sistemas de contas não sejam interoperáveis.
Logins de terceiros e integração de voz Os desenvolvedores precisam configurar separadamente por meio das contas de desenvolvedor do Google e da Apple para permitir logins de terceiros, bem como a integração do Alexa Skill e do Google Voice Assistant.
DICAS Para obter detalhes sobre a implantação da nuvem, visite https://customer.rainmaker.espressif. com. Em termos de firmware, a migração do servidor público para o servidor privado requer apenas a substituição dos certificados do dispositivo, o que melhora muito a eficiência da migração e reduz o custo de migração e depuração secundária.
3.4 Recursos do ESP RainMaker
Os recursos do ESP RainMaker são direcionados principalmente a três aspectos – gerenciamento de usuários, usuários finais e administradores. Todos os recursos são suportados em servidores públicos e privados, salvo indicação em contrário.
3.4.1 Gerenciamento de usuários
Os recursos de gerenciamento de usuários permitem que os usuários finais se registrem, façam login, alterem senhas, recuperem senhas, etc.
26 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Registre-se e faça login Os métodos de registro e login suportados pelo RainMaker incluem: · ID de e-mail + senha · Número de telefone + senha · Conta Google · Conta Apple · Conta GitHub (somente servidor público) · Conta Amazon (somente servidor privado)
NOTA Cadastre-se usando Google/Amazon e compartilhe o endereço de e-mail do usuário com o RainMaker. Inscrever-se usando a Apple compartilha um endereço fictício que a Apple atribui ao usuário especificamente para o serviço RainMaker. Uma conta RainMaker será criada automaticamente para usuários que fizerem login com uma conta Google, Apple ou Amazon pela primeira vez.
Alterar senha Válido apenas para logins baseados em ID de e-mail/número de telefone. Todas as outras sessões ativas serão desconectadas após a alteração da senha. De acordo com o comportamento do AWS Cognito, as sessões desconectadas podem permanecer ativas por até 1 hora.
Recuperar senha Válido apenas para logins baseados em ID de e-mail/número de telefone.
3.4.2 Recursos do usuário final
Os recursos abertos aos usuários finais incluem controle e monitoramento local e remoto, agendamento, agrupamento de dispositivos, compartilhamento de dispositivos, notificações push e integrações de terceiros.
Controle e monitoramento remoto · Configuração de consulta, valores de parâmetros e status de conexão para um ou todos os dispositivos. · Defina parâmetros para dispositivos únicos ou múltiplos.
Controle e monitoramento local O telefone celular e o dispositivo precisam estar conectados à mesma rede para controle local.
Agendamento · Os usuários pré-definem determinadas ações em um horário específico. · Não é necessária conexão com a Internet para o dispositivo durante a execução da programação. · Uma vez ou repetir (especificando dias) para um ou vários dispositivos.
Agrupamento de dispositivos Suporta agrupamento abstrato de vários níveis Os metadados do grupo podem ser usados ​​para criar uma estrutura de sala inicial.
Capítulo 3. Introdução ao ESP RainMaker 27

Compartilhamento de dispositivos Um ou mais dispositivos podem ser compartilhados com um ou mais usuários.
Notificações push Os usuários finais receberão notificações push para eventos como · Novos dispositivos adicionados/removidos · Dispositivo conectado à nuvem · Dispositivo desconectado da nuvem · Solicitações de compartilhamento de dispositivos criadas/aceitas/recusadas · Mensagens de alerta relatadas pelos dispositivos
Integrações de terceiros Alexa e Google Voice Assistant são suportadas para controlar dispositivos RainMaker, incluindo luzes, interruptores, tomadas, ventiladores e sensores de temperatura.
3.4.3 Recursos administrativos
Os recursos administrativos permitem que os administradores implementem registro de dispositivos, agrupamento de dispositivos e atualizações OTA, além de view estatísticas e dados do ESP Insights.
Registro de dispositivo Gere certificados de dispositivo e registre-se no Admin CLI (somente servidor privado).
Agrupamento de dispositivos Crie grupos abstratos ou estruturados com base nas informações do dispositivo (somente servidor privado).
Atualizações Over-the-Air (OTA) Carregue firmware com base na versão e modelo, para um ou mais dispositivos ou um grupo Monitore, cancele ou arquive trabalhos OTA.
View Estatísticas Viewas estatísticas disponíveis incluem: · Registros de dispositivos (certificados registrados pelo administrador) · Ativações de dispositivos (dispositivo conectado pela primeira vez) · Contas de usuário · Associação usuário-dispositivo
View Dados do ESP Insights ViewOs dados do ESP Insights disponíveis incluem: · Erros, avisos e logs personalizados · Relatórios e análises de falhas · Motivos de reinicialização · Métricas como uso de memória, RSSI, etc. · Métricas e variáveis ​​personalizadas
28 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

3.5 Resumo
Neste capítulo, apresentamos algumas diferenças importantes entre a implantação pública do RainMaker e a implantação privada. A solução privada ESP RainMaker lançada pela Espressif é altamente confiável e extensível. Todos os chips da série ESP32 foram conectados e adaptados ao AWS, o que reduz bastante o custo. Os desenvolvedores podem se concentrar na verificação de protótipos sem precisar aprender sobre os produtos da nuvem AWS. Também explicamos a implementação e funcionalidades do ESP RainMaker, e alguns pontos-chave para desenvolvimento utilizando a plataforma.
Digitalize para baixar o ESP RainMaker para Android Digitalize para baixar o ESP RainMaker para iOS
Capítulo 3. Introdução ao ESP RainMaker 29

30 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Capítulo Configurando 4 Ambiente de Desenvolvimento
Este capítulo se concentra no ESP-IDF, a estrutura oficial de desenvolvimento de software para ESP32-C3. Explicaremos como configurar o ambiente em vários sistemas operacionais e apresentaremos a estrutura do projeto e o sistema de construção do ESP-IDF, bem como o uso de ferramentas de desenvolvimento relacionadas. Em seguida apresentaremos o processo de compilação e execução de um example projeto, ao mesmo tempo que oferece uma explicação detalhada do log de saída em cadatage.
4.1 ESP-IDF encerradoview
ESP-IDF (Espressif IoT Development Framework) é uma estrutura completa de desenvolvimento de IoT fornecida pela Espressif Technology. Ele usa C/C++ como principal linguagem de desenvolvimento e suporta compilação cruzada em sistemas operacionais convencionais, como Linux, Mac e Windows. O exampOs programas incluídos neste livro são desenvolvidos usando ESP-IDF, que oferece os seguintes recursos: · Drivers de nível de sistema SoC. ESP-IDF inclui drivers para ESP32, ESP32-S2, ESP32-C3,
e outras fichas. Esses drivers abrangem biblioteca periférica de baixo nível (LL), biblioteca de camada de abstração de hardware (HAL), suporte RTOS e software de driver de camada superior, etc. · Componentes essenciais. ESP-IDF incorpora componentes fundamentais necessários para o desenvolvimento de IoT. Isso inclui múltiplas pilhas de protocolos de rede, como HTTP e MQTT, uma estrutura de gerenciamento de energia com modulação de frequência dinâmica e recursos como criptografia Flash e inicialização segura, etc. · Ferramentas de desenvolvimento e produção. ESP-IDF fornece ferramentas comumente usadas para construção, flash e depuração durante o desenvolvimento e produção em massa (veja a Figura 4.1), como o sistema de construção baseado em CMake, a cadeia de ferramentas de compilação cruzada baseada em GCC e o JTAG ferramenta de depuração baseada em OpenOCD, etc. É importante notar que o código ESP-IDF adere principalmente à licença de código aberto Apache 2.0. Os usuários podem desenvolver software pessoal ou comercial sem restrições, cumprindo os termos da licença de código aberto. Além disso, os usuários recebem licenças permanentes de patentes gratuitas, sem a obrigação de abrir o código-fonte de quaisquer modificações feitas no código-fonte.
31

Figura 4.1.

Construindo, atualizando e depurando

ferramentas de desenvolvimento para desenvolvimento e produção em massa

4.1.1 Versões ESP-IDF
O código ESP-IDF está hospedado no GitHub como um projeto de código aberto. Atualmente, existem três versões principais disponíveis: v3, v4 e v5. Cada versão principal geralmente contém várias subversões, como v4.2, v4.3 e assim por diante. A Espressif Systems garante suporte de 30 meses para correções de bugs e patches de segurança para cada subversão lançada. Portanto, revisões de subversões também são lançadas regularmente, como v4.3.1, v4.2.2, etc. A Tabela 4.1 mostra o status de suporte de diferentes versões ESP-IDF para chips Espressif, indicando se eles estão em pré-venda.view stage (oferecendo suporte para préview versões, que podem não ter certos recursos ou documentação) ou são oficialmente suportadas.

Tabela 4.1. Status de suporte de diferentes versões ESP-IDF para chips Espressif

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

v4.1 compatível

v4.2 compatível com suporte

v4.3 suportado suportado suportado

v4.4 suportado suportado suportado suportado
préview

v5.0 compatível com suporte compatível com suporte compatível com préview

32 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

A iteração de versões principais geralmente envolve ajustes na estrutura do framework e atualizações no sistema de compilação. Para exampPor exemplo, a principal mudança da v3.* para a v4.* foi a migração gradual do sistema de compilação do Make para o CMake. Por outro lado, a iteração de versões secundárias normalmente envolve a adição de novos recursos ou suporte para novos chips.
É importante distinguir e compreender a relação entre versões estáveis ​​e ramificações do GitHub. Versões rotuladas como v*.* ou v*.*.* representam versões estáveis ​​que passaram nos testes internos completos da Espressif. Depois de corrigido, o código, a cadeia de ferramentas e os documentos de lançamento da mesma versão permanecem inalterados. No entanto, as ramificações do GitHub (por exemplo, a ramificação release/v4.3) passam por commits de código frequentes, muitas vezes diariamente. Portanto, dois trechos de código na mesma ramificação podem ser diferentes, exigindo que os desenvolvedores atualizem imediatamente seu código de acordo.
4.1.2 Fluxo de trabalho Git do ESP-IDF
O Espressif segue um fluxo de trabalho Git específico para ESP-IDF, descrito a seguir:
· Novas alterações são feitas no branch master, que serve como branch principal de desenvolvimento. A versão ESP-IDF no branch master sempre carrega um -dev tag para indicar que está atualmente em desenvolvimento, como v4.3-dev. As alterações no branch master serão primeiro refeitasvieweditado e testado no repositório interno do Espressif e, em seguida, enviado ao GitHub após a conclusão do teste automatizado.
· Depois que uma nova versão tiver concluído o desenvolvimento de recursos no branch master e atender aos critérios para entrar no teste beta, ela fará a transição para um novo branch, como release/v4.3. Além disso, esta nova filial é tagged como uma versão de pré-lançamento, como v4.3-beta1. Os desenvolvedores podem consultar a plataforma GitHub para acessar a lista completa de filiais e tags para ESP-IDF. É importante observar que a versão beta (versão de pré-lançamento) ainda pode apresentar um número significativo de problemas conhecidos. À medida que a versão beta passa por testes contínuos, correções de bugs são adicionadas a esta versão e ao branch master simultaneamente. Enquanto isso, o branch master já pode ter começado a desenvolver novos recursos para a próxima versão. Quando o teste estiver quase concluído, um rótulo de candidato a lançamento (rc) será adicionado ao branch, indicando que ele é um candidato potencial para o lançamento oficial, como v4.3-rc1. Nestetage, o branch continua sendo uma versão de pré-lançamento.
· Se nenhum bug importante for descoberto ou relatado, a versão de pré-lançamento eventualmente receberá um rótulo de versão principal (por exemplo, v5.0) ou um rótulo de versão secundária (por exemplo, v4.3) e se tornará uma versão de lançamento oficial, que é documentada na página de notas de lançamento. Posteriormente, quaisquer bugs identificados nesta versão são corrigidos no branch de lançamento. Após a conclusão do teste manual, o branch recebe um rótulo de versão de correção de bug (por exemplo, v4.3.2), que também é refletido na página de notas de lançamento.
Capítulo 4. Configurando o Ambiente de Desenvolvimento 33

4.1.3 Escolhendo uma versão adequada
Como o ESP-IDF começou oficialmente a oferecer suporte ao ESP32-C3 a partir da versão v4.3, e a v4.4 ainda não foi lançada oficialmente no momento da redação deste livro, a versão usada neste livro é a v4.3.2, que é uma versão revisada. da v4.3. No entanto, é importante observar que, no momento em que você ler este livro, a versão 4.4 ou versões mais recentes já poderão estar disponíveis. Ao selecionar uma versão, recomendamos o seguinte:
· Para desenvolvedores iniciantes, é aconselhável escolher a versão estável v4.3 ou sua versão revisada, que se alinha com a exampa versão usada neste livro.
· Para fins de produção em massa, recomenda-se utilizar a versão estável mais recente para beneficiar do suporte técnico mais atualizado.
· Se você pretende experimentar novos chips ou explorar novos recursos do produto, use o branch master. A versão mais recente contém todos os recursos mais recentes, mas lembre-se de que pode haver bugs conhecidos ou desconhecidos.
· Se a versão estável usada não inclui os novos recursos desejados e você deseja minimizar os riscos associados ao branch master, considere usar o branch de lançamento correspondente, como o branch release/v4.4. O repositório GitHub do Espressif criará primeiro o branch release/v4.4 e posteriormente lançará a versão estável v4.4 com base em um instantâneo histórico específico deste branch, após concluir todo o desenvolvimento e teste de recursos.
4.1.4 Acimaview do diretório SDK ESP-IDF
O ESP-IDF SDK consiste em dois diretórios principais: esp-idf e .espressif. O primeiro contém o código-fonte do repositório ESP-IDF filese scripts de compilação, enquanto o último armazena principalmente cadeias de ferramentas de compilação e outros softwares. A familiaridade com esses dois diretórios ajudará os desenvolvedores a fazer melhor uso dos recursos disponíveis e a acelerar o processo de desenvolvimento. A estrutura de diretórios do ESP-IDF é descrita abaixo:
(1) Diretório de códigos do repositório ESP-IDF (/esp/esp-idf), conforme Figura 4.2.
a. Componentes do diretório de componentes
Este diretório principal integra vários componentes de software essenciais do ESP-IDF. Nenhum código de projeto pode ser compilado sem depender dos componentes deste diretório. Inclui suporte de driver para vários chips Espressif. Desde as interfaces da biblioteca LL e da biblioteca HAL para periféricos até o Driver e Virtual de nível superior File Suporte à camada de sistema (VFS), os desenvolvedores podem escolher os componentes apropriados em diferentes níveis para suas necessidades de desenvolvimento. ESP-IDF também suporta múltiplas pilhas de protocolos de rede padrão, como TCP/IP, HTTP, MQTT, WebSocket, etc. Os desenvolvedores podem utilizar interfaces familiares como Socket para construir aplicativos de rede. Os componentes fornecem compreensão
34 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Figura 4.2. Diretório de código do repositório ESP-IDF
funcionalidade ampla e pode ser facilmente integrada aos aplicativos, permitindo que os desenvolvedores se concentrem exclusivamente na lógica de negócios. Alguns componentes comuns incluem: · driver: Este componente contém programas de driver de periféricos para vários Espressif
séries de chips, como GPIO, I2C, SPI, UART, LEDC (PWM), etc. Os programas de driver de periféricos neste componente oferecem interfaces abstratas independentes de chip. Cada periférico possui um cabeçalho comum file (como gpio.h), eliminando a necessidade de lidar com diferentes questões de suporte específicas de chips. · esp_wifi: O Wi-Fi, como periférico especial, é tratado como um componente separado. Inclui várias APIs, como inicialização de vários modos de driver Wi-Fi, configuração de parâmetros e processamento de eventos. Certas funções deste componente são fornecidas na forma de bibliotecas de links estáticos. ESP-IDF também fornece documentação abrangente de driver para facilidade de uso.
Capítulo 4. Configurando o Ambiente de Desenvolvimento 35

· freertos: Este componente contém o código completo do FreeRTOS. Além de fornecer suporte abrangente para este sistema operacional, a Espressif também estendeu seu suporte para chips dual-core. Para chips dual-core como ESP32 e ESP32-S3, os usuários podem criar tarefas em núcleos específicos.
b. Documentos do diretório de documentos
Este diretório contém documentos de desenvolvimento relacionados ao ESP-IDF, incluindo o Guia de primeiros passos, Manual de referência da API, Guia de desenvolvimento, etc.
NOTA Após ser compilado por ferramentas automatizadas, o conteúdo deste diretório é implantado em https://docs.espressif.com/projects/esp-idf. Certifique-se de mudar o destino do documento para ESP32-C3 e selecionar a versão ESP-IDF especificada.
c. Ferramentas de script
Este diretório contém ferramentas de front-end de compilação comumente usadas, como idf.py e a ferramenta de terminal de monitor idf_monitor.py, etc. O subdiretório cmake também contém o script principal files do sistema de compilação, servindo de base para a implementação das regras de compilação ESP-IDF. Ao adicionar as variáveis ​​de ambiente, o conteúdo do diretório de ferramentas é adicionado à variável de ambiente do sistema, permitindo que idf.py seja executado diretamente no caminho do projeto.
d. Example diretório do programa exampos
Este diretório compreende uma vasta coleção de ex-ESP-IDFampprogramas que demonstram o uso de APIs de componentes. O exampOs arquivos são organizados em vários subdiretórios com base em suas categorias:
· introdução: Este subdiretório inclui ex de nível básicoamparquivos como “hello world” e “blink” para ajudar os usuários a entender o básico.
· Bluetooth: você pode encontrar ex relacionados ao Bluetoothamparquivos aqui, incluindo Bluetooth LE Mesh, Bluetooth LE HID, BluFi e muito mais.
· wifi: Este subdiretório concentra-se em Wi-Fi examparquivos, incluindo programas básicos como Wi-Fi SoftAP, Wi-Fi Station, espnow, bem como protocolo de comunicação proprietário examples do Espressif. Também inclui múltiplas camadas de aplicação ex.amparquivos baseados em Wi-Fi, como Iperf, Sniffer e Smart Config.
· periféricos: Este extenso subdiretório é dividido em numerosas subpastas baseadas em nomes de periféricos. Ele contém principalmente driver periférico examparquivos para chips Espressif, com cada example apresentando vários sub-exampmenos. Por exemplo, o subdiretório gpio inclui dois examparquivos: teclado de matriz GPIO e GPIO. É importante notar que nem todos os exampOs arquivos neste diretório são aplicáveis ​​ao ESP32-C3.
36 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Por exemploample, o exampOs arquivos em usb/host são aplicáveis ​​apenas a periféricos com hardware USB Host (como ESP32-S3) e o ESP32-C3 não possui esse periférico. O sistema de compilação normalmente fornece avisos ao definir o destino. O LEIA-ME file de cada examparquivo lista os chips suportados. · protocolos: Este subdiretório contém examparquivos para vários protocolos de comunicação, incluindo MQTT, HTTP, HTTP Server, PPPoS, Modbus, mDNS, SNTP, cobrindo uma ampla gama de protocolos de comunicação ex.ampnecessários para o desenvolvimento da IoT. · provisionamento: aqui você encontrará provisionamento examparquivos para diferentes métodos, como provisionamento de Wi-Fi e provisionamento de Bluetooth LE. · sistema: Este subdiretório inclui depuração do sistema examparquivos (por exemplo, rastreamento de pilha, rastreamento de tempo de execução, monitoramento de tarefas), gerenciamento de energia examparquivos (por exemplo, vários modos de suspensão, coprocessadores) e ex.amparquivos relacionados a componentes comuns do sistema, como terminal de console, loop de eventos e temporizador do sistema. · armazenamento: Dentro deste subdiretório, você descobrirá exampmenos de tudo file sistemas e mecanismos de armazenamento suportados pelo ESP-IDF (como leitura e gravação de Flash, cartão SD e outras mídias de armazenamento), bem como examparquivos de armazenamento não volátil (NVS), FatFS, SPIFFS e outros file operações do sistema. · segurança: Este subdiretório contém examparquivos relacionados à criptografia flash. (2) Diretório da cadeia de ferramentas de compilação ESP-IDF (/.espressif), conforme mostrado na Figura 4.3.
Figura 4.3. Diretório da cadeia de ferramentas de compilação ESP-IDF
Capítulo 4. Configurando o Ambiente de Desenvolvimento 37

a. Diretório de distribuição de software dist
A cadeia de ferramentas ESP-IDF e outros softwares são distribuídos na forma de pacotes compactados. Durante o processo de instalação, a ferramenta de instalação primeiro baixa o pacote compactado no diretório dist e depois o extrai no diretório especificado. Assim que a instalação for concluída, o conteúdo deste diretório pode ser removido com segurança.
b. Diretório do ambiente virtual Python python env
Diferentes versões do ESP-IDF dependem de versões específicas de pacotes Python. Instalar esses pacotes diretamente no mesmo host pode levar a conflitos entre versões de pacotes. Para resolver isso, o ESP-IDF utiliza ambientes virtuais Python para isolar diferentes versões de pacotes. Com esse mecanismo, os desenvolvedores podem instalar várias versões do ESP-IDF no mesmo host e alternar facilmente entre elas importando diferentes variáveis ​​de ambiente.
c. Ferramentas de diretório da cadeia de ferramentas de compilação ESP-IDF
Este diretório contém principalmente ferramentas de compilação cruzada necessárias para compilar projetos ESP-IDF, como ferramentas CMake, ferramentas de construção Ninja e a cadeia de ferramentas gcc que gera o programa executável final. Além disso, este diretório abriga a biblioteca padrão da linguagem C/C++ junto com o cabeçalho correspondente fileS. Se um programa fizer referência a um cabeçalho do sistema file como #include , a cadeia de ferramentas de compilação localizará o stdio.h file dentro deste diretório.
4.2 Configurando o Ambiente de Desenvolvimento ESP-IDF
O ambiente de desenvolvimento ESP-IDF oferece suporte aos principais sistemas operacionais, como Windows, Linux e macOS. Esta seção apresentará como configurar o ambiente de desenvolvimento em cada sistema. Recomenda-se o desenvolvimento do ESP32-C3 em sistema Linux, que será apresentado em detalhes aqui. Muitas instruções são aplicáveis ​​em várias plataformas devido à semelhança das ferramentas de desenvolvimento. Portanto, é aconselhável ler atentamente o conteúdo desta seção.
NOTA Você pode consultar os documentos online disponíveis em https://bookc3.espressif.com/esp32c3, que fornecem os comandos mencionados nesta seção.
4.2.1 Configurando o ambiente de desenvolvimento ESP-IDF no Linux
As ferramentas de desenvolvimento e depuração GNU necessárias para o ambiente de desenvolvimento ESP-IDF são nativas do sistema Linux. Além disso, o terminal de linha de comando no Linux é poderoso e fácil de usar, tornando-o a escolha ideal para o desenvolvimento do ESP32-C3. Você pode
38 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

selecione sua distribuição Linux preferida, mas recomendamos usar Ubuntu ou outros sistemas baseados em Debian. Esta seção fornece orientação sobre como configurar o ambiente de desenvolvimento ESP-IDF no Ubuntu 20.04.
1. Instale os pacotes necessários
Abra um novo terminal e execute o seguinte comando para instalar todos os pacotes necessários. O comando irá ignorar automaticamente os pacotes que já estão instalados.
$ 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
DICAS Você precisa usar a conta e senha do administrador para o comando acima. Por padrão, nenhuma informação será exibida ao inserir a senha. Basta pressionar a tecla “Enter” para continuar o procedimento.
Git é uma ferramenta chave de gerenciamento de código no ESP-IDF. Depois de configurar com sucesso o ambiente de desenvolvimento, você pode usar o comando git log para view todas as alterações de código feitas desde a criação do ESP-IDF. Além disso, o Git também é usado no ESP-IDF para confirmar informações de versão, o que é necessário para instalar a cadeia de ferramentas correta correspondente a versões específicas. Junto com o Git, outras ferramentas de sistema importantes incluem Python. ESP-IDF incorpora vários scripts de automação escritos em Python. Ferramentas como CMake, Ninja-build e Ccache são amplamente utilizadas em projetos C/C++ e servem como ferramentas padrão de compilação e construção de código no ESP-IDF. libusb-1.0-0 e dfu-util são os principais drivers usados ​​para comunicação serial USB e gravação de firmware. Depois que os pacotes de software estiverem instalados, você poderá usar o apt show comando para obter descrições detalhadas de cada pacote. Para examparquivo, use apt show git para imprimir as informações de descrição da ferramenta Git.
P: O que fazer se a versão Python não for compatível? R: ESP-IDF v4.3 requer uma versão do Python que não seja inferior à v3.6. Para versões mais antigas do Ubuntu, baixe e instale manualmente uma versão superior do Python e defina Python3 como o ambiente Python padrão. Você pode encontrar instruções detalhadas pesquisando a palavra-chave update-alternatives python.
2. Baixe o código do repositório ESP-IDF
Abra um terminal e crie uma pasta chamada esp em seu diretório inicial usando o comando mkdir. Você pode escolher um nome diferente para a pasta, se preferir. Use o comando cd para entrar na pasta.
Capítulo 4. Configurando o Ambiente de Desenvolvimento 39

$ mkdir -p /esp $ cd /esp
Use o comando git clone para baixar o código do repositório ESP-IDF, conforme mostrado abaixo:
$ git clone -b v4.3.2 –recursivo https://github.com/espressif/esp-idf.git
No comando acima, o parâmetro -b v4.3.2 especifica a versão a ser baixada (neste caso, versão 4.3.2). O parâmetro –recursive garante que todos os sub-repositórios do ESP-IDF sejam baixados recursivamente. Informações sobre sub-repositórios podem ser encontradas em .gitmodules file.
3. Instale a cadeia de ferramentas de desenvolvimento ESP-IDF
Espressif fornece um script automatizado install.sh para baixar e instalar a cadeia de ferramentas. Este script verifica a versão atual do ESP-IDF e o ambiente do sistema operacional e, em seguida, baixa e instala a versão apropriada dos pacotes de ferramentas Python e cadeias de ferramentas de compilação. O caminho de instalação padrão para a cadeia de ferramentas é /.espressif. Tudo que você precisa fazer é navegar até o diretório esp-idf e executar install.sh.
$ cd /esp/esp-idf $ ./install.sh
Se você instalar a cadeia de ferramentas com sucesso, o terminal exibirá:
Tudo pronto!
Neste ponto, você configurou com êxito o ambiente de desenvolvimento ESP-IDF.
4.2.2 Configurando o ambiente de desenvolvimento ESP-IDF no Windows
1. Baixe o instalador de ferramentas ESP-IDF
DICAS Recomenda-se configurar o ambiente de desenvolvimento ESP-IDF no Windows 10 ou superior. Você pode baixar o instalador em https://dl.espressif.com/dl/esp-idf/. O instalador também é um software de código aberto e seu código-fonte pode ser vieweditado em https: //github.com/espressif/idf-installer.
· Instalador online de ferramentas ESP-IDF
Este instalador é relativamente pequeno, com cerca de 4 MB de tamanho, e outros pacotes e códigos serão baixados durante o processo de instalação. O avançotagA vantagem do instalador online é que não apenas os pacotes de software e o código podem ser baixados sob demanda durante o processo de instalação, mas também permitem a instalação de todas as versões disponíveis do ESP-IDF e da ramificação mais recente do código GitHub (como a ramificação master) . A desvantagemtagA questão é que requer uma conexão de rede durante o processo de instalação, o que pode causar falha na instalação devido a problemas de rede.
40 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

· Instalador de ferramentas offline ESP-IDF Este instalador é maior, tem cerca de 1 GB e contém todos os pacotes de software e códigos necessários para a configuração do ambiente. A principal vantagemtagA vantagem do instalador offline é que ele pode ser usado em computadores sem acesso à Internet e geralmente tem uma taxa de sucesso de instalação mais alta. Deve-se observar que o instalador offline só pode instalar versões estáveis ​​do ESP-IDF identificadas por v*.* ou v*.*.*.
2. Execute o instalador de ferramentas ESP-IDF Depois de baixar uma versão adequada do instalador (pegue ESP-IDF Tools Offline 4.3.2 por exemploample aqui), clique duas vezes no exe file para iniciar a interface de instalação do ESP-IDF. A seguir demonstra como instalar a versão estável do ESP-IDF v4.3.2 usando o instalador offline.
(1) Na interface “Selecionar idioma de instalação” mostrada na Figura 4.4, selecione o idioma a ser usado na lista suspensa.
Figura 4.4. Interface “Selecionar idioma de instalação” (2) Após selecionar o idioma, clique em “OK” para abrir a interface “Contrato de licença”
(ver Figura 4.5). Após ler atentamente o contrato de licença de instalação, selecione “Aceito o contrato” e clique em “Avançar”.
Figura 4.5. Interface “Contrato de Licença” Capítulo 4. Configurando o Ambiente de Desenvolvimento 41

(3) Review a configuração do sistema na interface “Verificação do sistema de pré-instalação” (ver Figura 4.6). Verifique a versão do Windows e as informações do software antivírus instalado. Clique em “Avançar” se todos os itens de configuração estiverem normais. Caso contrário, você pode clicar em “Registro completo” para soluções baseadas em itens principais.
Figura 4.6. Interface “Verificação do sistema antes da instalação” DICAS
Você pode enviar logs para https://github.com/espressif/idf-installer/issues para obter ajuda. (4) Selecione o diretório de instalação do ESP-IDF. Aqui, selecione D:/.espressif, conforme mostrado em
Figura 4.7 e clique em “Avançar”. Observe que .espressif aqui é um diretório oculto. Após a conclusão da instalação, você pode view o conteúdo específico deste diretório abrindo o file gerenciador e exibindo itens ocultos.
Figura 4.7. Selecione o diretório de instalação do ESP-IDF 42 ESP32-C3 Wireless Adventure: Um guia abrangente para IoT

(5) Verifique os componentes que precisam ser instalados, conforme Figura 4.8. Recomenda-se utilizar a opção padrão, ou seja, concluir a instalação, e a seguir clicar em “Avançar”.
Figura 4.8. Selecione os componentes a serem instalados (6) Confirme os componentes a serem instalados e clique em “Instalar” para iniciar a instalação automatizada
processo de estagnação, conforme mostrado na Figura 4.9. O processo de instalação pode durar dezenas de minutos e a barra de progresso do processo de instalação é mostrada na Figura 4.10. Por favor, espere pacientemente.
Figura 4.9. Preparando para instalação (7) Após a conclusão da instalação, recomenda-se marcar “Registrar o ESP-IDF
Executáveis ​​de ferramentas como exclusões do Windows Defender…” para evitar a exclusão de software antivírus fileS. Adicionar itens de exclusão também pode ignorar verificações antivírus frequentes
Capítulo 4. Configurando o Ambiente de Desenvolvimento 43

Figura 4.10. Software de barra de progresso de instalação, melhorando significativamente a eficiência de compilação de código do sistema Windows. Clique em “Finish” para concluir a instalação do ambiente de desenvolvimento, conforme mostrado na Figura 4.11. Você pode optar por marcar “Executar ambiente ESP-IDF PowerShell” ou “Executar prompt de comando ESP-IDF”. Execute a janela de compilação diretamente após a instalação para garantir que o ambiente de desenvolvimento funcione normalmente.
Figura 4.11. Instalação concluída (8) Abra o ambiente de desenvolvimento instalado na lista de programas (ESP-IDF 4.3
CMD ou ESP-IDF 4.3 PowerShell, conforme mostrado na Figura 4.12), e a variável de ambiente ESP-IDF será adicionada automaticamente ao executar no terminal. Depois disso, você pode usar o comando idf.py para operações. O ESP-IDF 4.3 CMD aberto é mostrado na Figura 4.13. 44 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Figura 4.12. Ambiente de desenvolvimento instalado
Figura 4.13. ESP-IDF 4.3 CMD
4.2.3 Configurando o ambiente de desenvolvimento ESP-IDF no Mac
O processo de instalação do ambiente de desenvolvimento ESP-IDF em um sistema Mac é igual ao de um sistema Linux. Os comandos para baixar o código do repositório e instalar a cadeia de ferramentas são exatamente os mesmos. Apenas os comandos para instalação de pacotes de dependência são ligeiramente diferentes. 1. Instale pacotes de dependência Abra um terminal e instale o pip, a ferramenta de gerenciamento de pacotes Python, executando o seguinte comando:
% sudo instalação fácil pip
Instale o Homebrew, uma ferramenta de gerenciamento de pacotes para macOS, executando o seguinte comando:
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Instale os pacotes de dependência necessários executando o seguinte comando:
% brew python3 instalar cmake ninja ccache dfu-util
2. Baixe o código do repositório ESP-IDF Siga as instruções fornecidas na seção 4.2.1 para baixar o código do repositório ESP-IDF. As etapas são as mesmas do download em um sistema Linux.
Capítulo 4. Configurando o Ambiente de Desenvolvimento 45

3. Instale a cadeia de ferramentas de desenvolvimento ESP-IDF
Siga as instruções fornecidas na seção 4.2.1 para instalar a cadeia de ferramentas de desenvolvimento ESP-IDF. As etapas são as mesmas da instalação em um sistema Linux.
4.2.4 Instalando o Código VS
Por padrão, o SDK ESP-IDF não inclui uma ferramenta de edição de código (embora o instalador ESP-IDF mais recente para Windows ofereça a opção de instalar o ESP-IDF Eclipse). Você pode usar qualquer ferramenta de edição de texto de sua escolha para editar o código e depois compilá-lo usando comandos de terminal.
Uma ferramenta popular de edição de código é o VS Code (Visual Studio Code), que é um editor de código gratuito e rico em recursos com uma interface amigável. Oferece vários plugins que fornecem funcionalidades como navegação de código, destaque de sintaxe, controle de versão Git e integração de terminal. Além disso, a Espressif desenvolveu um plugin dedicado chamado Espressif IDF para VS Code, que simplifica a configuração e depuração do projeto.
Você pode usar o comando code no terminal para abrir rapidamente a pasta atual no VS Code. Alternativamente, você pode usar o atalho Ctrl+ para abrir o console do terminal padrão do sistema dentro do VS Code.
DICAS Recomenda-se usar o VS Code para desenvolvimento de código ESP32-C3. Baixe e instale a versão mais recente do VS Code em https://code.visualstudio.com/.
4.2.5 Introdução aos Ambientes de Desenvolvimento de Terceiros
Além do ambiente de desenvolvimento oficial ESP-IDF, que utiliza principalmente a linguagem C, o ESP32-C3 também oferece suporte a outras linguagens de programação convencionais e a uma ampla variedade de ambientes de desenvolvimento de terceiros. Algumas opções notáveis ​​incluem:
Arduino: uma plataforma de código aberto para hardware e software, suportando vários microcontroladores, incluindo ESP32-C3.
Ele usa a linguagem C++ e oferece uma API simplificada e padronizada, comumente chamada de linguagem Arduino. Arduino é amplamente utilizado no desenvolvimento de protótipos e em contextos educacionais. Ele fornece um pacote de software extensível e um IDE que permite fácil compilação e atualização.
MicroPython: um interpretador da linguagem Python 3 projetado para rodar em plataformas de microcontroladores embarcados.
Com uma linguagem de script simples, ele pode acessar diretamente os recursos periféricos do ESP32-C3 (como UART, SPI e I2C) e funções de comunicação (como Wi-Fi e Bluetooth LE).
46 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

Isso simplifica a interação do hardware. MicroPython, combinado com a extensa biblioteca de operações matemáticas do Python, permite a implementação de algoritmos complexos no ESP32-C3, facilitando o desenvolvimento de aplicações relacionadas à IA. Por ser uma linguagem de script, não há necessidade de compilação repetida; modificações podem ser feitas e scripts podem ser executados diretamente.
NodeMCU: um interpretador de linguagem LUA desenvolvido para chips da série ESP.
Ele suporta quase todas as funções periféricas dos chips ESP e é mais leve que o MicroPython. Semelhante ao MicroPython, o NodeMCU usa uma linguagem de script, eliminando a necessidade de compilação repetida.
Além disso, o ESP32-C3 também suporta os sistemas operacionais NuttX e Zephyr. NuttX é um sistema operacional em tempo real que fornece interfaces compatíveis com POSIX, melhorando a portabilidade do aplicativo. Zephyr é um pequeno sistema operacional em tempo real projetado especificamente para aplicações IoT. Inclui inúmeras bibliotecas de software necessárias no desenvolvimento de IoT, evoluindo gradualmente para um ecossistema de software abrangente.
Este livro não fornece instruções detalhadas de instalação para os ambientes de desenvolvimento mencionados acima. Você pode instalar um ambiente de desenvolvimento com base em seus requisitos seguindo a respectiva documentação e instruções.
4.3 Sistema de compilação ESP-IDF
4.3.1 Conceitos Básicos de Sistema de Compilação
Um projeto ESP-IDF é uma coleção de um programa principal com uma função de entrada e vários componentes funcionais independentes. Para example, um projeto que controla interruptores de LED consiste principalmente em um programa de entrada principal e um componente de driver que controla o GPIO. Se você deseja realizar o controle remoto LED, também precisa adicionar Wi-Fi, pilha de protocolo TCP/IP, etc.
O sistema de compilação pode compilar, vincular e gerar executáveis files (.bin) para o código por meio de um conjunto de regras de construção. O sistema de compilação do ESP-IDF v4.0 e versões superiores é baseado no CMake por padrão, e o script de compilação CMakeLists.txt pode ser usado para controlar o comportamento de compilação do código. Além de oferecer suporte à sintaxe básica do CMake, o sistema de compilação ESP-IDF também define um conjunto de regras de compilação padrão e funções do CMake, e você pode escrever o script de compilação com instruções simples.
4.3.2 Projeto File Estrutura
Um projeto é uma pasta que contém uma entrada principal do programa, componentes definidos pelo usuário e fileé necessário para construir aplicativos executáveis, como scripts de compilação, configuração
Capítulo 4. Configurando o Ambiente de Desenvolvimento 47

files, tabelas de partição, etc. Os projetos podem ser copiados e repassados, e o mesmo executável file podem ser compilados e gerados em máquinas com a mesma versão do ambiente de desenvolvimento ESP-IDF. Um projeto típico ESP-IDF file estrutura é mostrada na Figura 4.14.
Figura 4.14. Projeto típico ESP-IDF file estrutura Como o ESP-IDF suporta vários chips IoT da Espressif, incluindo ESP32, série ESP32-S, série ESP32-C, série ESP32-H, etc., um alvo precisa ser determinado antes de compilar o código. O destino é o dispositivo de hardware que executa o programa aplicativo e o destino de construção do sistema de compilação. Dependendo das suas necessidades, você pode especificar um ou mais alvos para o seu projeto. Para example, por meio do comando idf.py set-target esp32c3, você pode definir o destino de compilação para ESP32-C3, durante o qual os parâmetros padrão e o caminho da cadeia de ferramentas de compilação para ESP32C3 serão carregados. Após a compilação, um programa executável pode ser gerado para ESP32C3. Você também pode executar o comando set-target novamente para definir um destino diferente, e o sistema de compilação irá limpar e reconfigurar automaticamente. Componentes
Os componentes do ESP-IDF são unidades de código modulares e independentes gerenciadas dentro do sistema de compilação. Eles são organizados como pastas, com o nome da pasta representando o nome do componente por padrão. Cada componente tem seu próprio script de compilação que 48 ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT

especifica seus parâmetros de compilação e dependências. Durante o processo de compilação, os componentes são compilados em bibliotecas estáticas separadas (.a files) e eventualmente combinado com outros componentes para formar o programa aplicativo.
ESP-IDF fornece funções essenciais, como sistema operacional, drivers periféricos e pilha de protocolos de rede, na forma de componentes. Esses componentes são armazenados no diretório de componentes localizado no diretório raiz do ESP-IDF. Os desenvolvedores não precisam copiar esses componentes para o diretório de componentes do myProject. Em vez disso, eles só precisam especificar os relacionamentos de dependência desses componentes no CMakeLists.txt do projeto. file usando as diretivas REQUIRES ou PRIV_REQUIRES. O sistema de compilação localizará e compilará automaticamente os componentes necessários.
Portanto, o diretório de componentes em myProject não é necessário. É usado apenas para incluir alguns componentes customizados do projeto, que podem ser bibliotecas de terceiros ou código definido pelo usuário. Além disso, os componentes podem ser provenientes de qualquer diretório diferente do ESP-IDF ou do projeto atual, como de um projeto de código aberto salvo em outro diretório. Neste caso, você só precisa adicionar o caminho do componente definindo a variável EXTRA_COMPONENT_DIRS no CMakeLists.txt no diretório raiz. Este diretório substituirá qualquer componente ESP-IDF com o mesmo nome, garantindo que o componente correto seja usado.
Programa de entrada main O diretório principal dentro do projeto segue o mesmo file estrutura como outros componentes (por exemplo, componente1). No entanto, tem um significado especial por ser um componente obrigatório que deve existir em todos os projetos. O diretório principal contém o código-fonte do projeto e o ponto de entrada do programa do usuário, normalmente denominado app_main. Por padrão, a execução do programa do usuário começa neste ponto de entrada. O componente principal também difere porque depende automaticamente de todos os componentes no caminho de pesquisa. Portanto, não há necessidade de indicar explicitamente dependências usando as diretivas REQUIRES ou PRIV_REQUIRES no CMakeLists.txt file.
Configuração file O diretório raiz do projeto contém uma configuração file chamado sdkconfig, que contém os parâmetros de configuração para todos os componentes do projeto. O SDKConfig file é gerado automaticamente pelo sistema de compilação e pode ser modificado e regenerado pelo comando idf.py menuconfig. As opções do menuconfig originam-se principalmente do Kconfig.projbuild do projeto e do Kconfig dos componentes. Os desenvolvedores de componentes geralmente adicionam itens de configuração no Kconfig para tornar o componente flexível e configurável.
Diretório de construção Por padrão, o diretório de construção dentro do projeto armazena arquivos intermediários files e o fi-
Capítulo 4. Configurando o Ambiente de Desenvolvimento 49

programas executáveis ​​finais gerados pelo comando de construção idf.py. Em geral, não é necessário acessar diretamente o conteúdo do diretório build. ESP-IDF fornece comandos predefinidos para interagir com o diretório, como usar o comando flash idf.py para localizar automaticamente o binário compilado file e atualize-o para o endereço flash especificado ou use o comando idf.py fullclean para limpar todo o diretório de construção.
Tabela de partição (partitions.csv) Cada projeto requer uma tabela de partição para dividir o espaço do flash e especificar o tamanho e o endereço inicial do programa executável e o espaço de dados do usuário. O comando idf.py flash ou o programa de atualização OTA atualizará o firmware para o endereço correspondente de acordo com esta tabela. ESP-IDF fornece várias tabelas de partição padrão em componentes/partition_table, como partições_singleapp.csv e partições_two_ota.csv, que podem ser selecionadas no menuconfig.
Se a tabela de partição padrão do sistema não atender aos requisitos do projeto, um partições.csv personalizado pode ser adicionado ao diretório do projeto e selecionado no menuconfig.
4.3.3 Regras de compilação padrão do sistema de compilação
Regras para substituir componentes com o mesmo nome Durante o processo de pesquisa de componentes, o sistema de compilação segue uma ordem específica. Ele primeiro procura componentes internos do ESP-IDF, depois procura componentes do projeto do usuário e, finalmente, procura componentes em EXTRA_COMPONENT_DIRS. Nos casos em que vários diretórios contêm componentes com o mesmo nome, o componente encontrado no último diretório substituirá quaisquer componentes anteriores com o mesmo nome. Esta regra permite a customização de componentes ESP-IDF dentro do projeto do usuário, mantendo intacto o código ESP-IDF original.
Regras para inclusão de componentes comuns por padrão Conforme mencionado na seção 4.3.2, os componentes precisam especificar explicitamente suas dependências de outros componentes no CMakeLists.txt. No entanto, componentes comuns como freertos são incluídos automaticamente no sistema de compilação por padrão, mesmo que seus relacionamentos de dependência não sejam explicitamente definidos no script de compilação. Os componentes comuns do ESP-IDF incluem freertos, Newlib, heap, log, soc, esp_rom, esp_common, xtensa/riscv e cxx. O uso desses componentes comuns evita trabalho repetitivo ao escrever CMakeLists.txt e o torna mais conciso.
Regras para substituir itens de configuração Os desenvolvedores podem adicionar parâmetros de configuração padrão adicionando uma configuração padrão file nomeado sdkconfig.defaults para o projeto. Para examparquivo, adicionando CONFIG_LOG_
50 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

DEFAULT_LEVEL_NONE = y pode configurar a interface UART para não imprimir dados de log por padrão. Além disso, se parâmetros específicos precisarem ser definidos para um determinado alvo, uma configuração file chamado sdkconfig.defaults.TARGET_NAME pode ser adicionado, onde TARGET_NAME pode ser esp32s2, esp32c3 e assim por diante. Essas configurações files são importados para o sdkconfig durante a compilação, com a configuração padrão geral file sdkconfig.defaults sendo importado primeiro, seguido pela configuração específica do destino file, como sdkconfig.defaults.esp32c3. Nos casos em que existam itens de configuração com o mesmo nome, esta última configuração file substituirá o primeiro.
4.3.4 Introdução ao Script de Compilação
Ao desenvolver um projeto usando ESP-IDF, os desenvolvedores não precisam apenas escrever o código-fonte, mas também escrever CMakeLists.txt para o projeto e os componentes. CMakeLists.txt é um texto file, também conhecido como script de compilação, que define uma série de objetos de compilação, itens de configuração de compilação e comandos para orientar o processo de compilação do código-fonte. O sistema de compilação do ESP-IDF v4.3.2 é baseado no CMake. Além de suportar funções e comandos nativos do CMake, ele também define uma série de funções customizadas, facilitando muito a escrita de scripts de compilação.
Os scripts de compilação no ESP-IDF incluem principalmente o script de compilação do projeto e os scripts de compilação de componentes. O CMakeLists.txt no diretório raiz do projeto é chamado de script de compilação do projeto, que orienta o processo de compilação de todo o projeto. Um script básico de compilação de projeto normalmente inclui as três linhas a seguir:
1. cmake_minimum_required(VERSÃO 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. projeto(myProject)
Dentre eles, deve ser colocado na primeira linha o cmake_minimum_required (VERSÃO 3.5), que serve para indicar o número mínimo da versão do CMake exigida pelo projeto. As versões mais recentes do CMake geralmente são compatíveis com versões anteriores, portanto, ajuste o número da versão de acordo ao usar comandos CMake mais recentes para garantir a compatibilidade.
include($ENV {IDF_PATH}/tools/cmake/project.cmake) importa itens de configuração e comandos predefinidos do sistema de compilação ESP-IDF, incluindo as regras de construção padrão do sistema de compilação descrito na Seção 4.3.3. project(myProject) cria o próprio projeto e especifica seu nome. Este nome será usado como o binário de saída final file nome, ou seja, myProject.elf e myProject.bin.
Um projeto pode ter vários componentes, incluindo o componente principal. O diretório de nível superior de cada componente contém um CMakeLists.txt file, que é chamado de script de compilação de componentes. Os scripts de compilação de componentes são usados ​​principalmente para especificar dependências de componentes, parâmetros de configuração, código-fonte files e cabeçalho incluído files para
Capítulo 4. Configurando o Ambiente de Desenvolvimento 51

compilação. Com a função personalizada idf_component_register do ESP-IDF, o código mínimo necessário para um script de compilação de componente é o seguinte:

1.idf_component_register(SRCS “src1.c”

2.

INCLUDE_DIRS “incluir”

3.

REQUER componente 1)

O parâmetro SRCS fornece uma lista de fontes files no componente, separados por espaços se houver vários fileS. O parâmetro INCLUDE_DIRS fornece uma lista de cabeçalhos públicos file diretórios do componente, que serão adicionados ao caminho de pesquisa de inclusão para outros componentes que dependem do componente atual. O parâmetro REQUIRES identifica as dependências do componente público para o componente atual. É necessário que os componentes declarem explicitamente de quais componentes eles dependem, como componente2 dependendo do componente1. Porém, para o componente principal, que depende de todos os componentes por padrão, o parâmetro REQUIRES pode ser omitido.

Além disso, comandos nativos do CMake também podem ser usados ​​no script de compilação. Para example, use o comando set para definir variáveis, como set(VARIABLE “VALUE”).

4.3.5 Introdução aos Comandos Comuns
ESP-IDF usa CMake (ferramenta de configuração de projeto), Ninja (ferramenta de construção de projeto) e esptool (ferramenta flash) no processo de compilação de código. Cada ferramenta desempenha uma função diferente no processo de compilação, construção e flash e também oferece suporte a diferentes comandos operacionais. Para facilitar a operação do usuário, ESP-IDF adiciona um front-end unificado idf.py que permite que os comandos acima sejam chamados rapidamente.
Antes de usar idf.py, certifique-se de que:
· A variável de ambiente IDF_PATH do ESP-IDF foi adicionada ao terminal atual. · O diretório de execução do comando é o diretório raiz do projeto, que inclui o
script de compilação do projeto CMakeLists.txt.
Os comandos comuns de idf.py são os seguintes:
· idf.py –help: exibindo uma lista de comandos e suas instruções de uso. · idf.py set-target : definindo a compilação taidf.py fullcleanrget, tal
como substituir por esp32c3. · idf.py menuconfig: iniciando menuconfig, uma configuração gráfica de terminal
ferramenta, que pode selecionar ou modificar opções de configuração, e os resultados da configuração são salvos no sdkconfig file. · build idf.py: iniciando a compilação do código. O intermediário filese o programa executável final gerado pela compilação serão salvos no diretório de construção do projeto por padrão. O processo de compilação é incremental, o que significa que se apenas uma fonte file é modificado, apenas o modificado file será compilado na próxima vez.

52 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

· idf.py clean: limpando o intermediário files gerados pela compilação do projeto. Todo o projeto será forçado a compilar na próxima compilação. Observe que a configuração do CMake e as modificações de configuração feitas pelo menuconfig não serão excluídas durante a limpeza.
· idf.py fullclean: excluindo todo o diretório de compilação, incluindo todas as saídas de configuração do CMake fileS. Ao compilar o projeto novamente, o CMake irá configurar o projeto do zero. Observe que este comando excluirá recursivamente todos files no diretório build, então use-o com cuidado, e a configuração do projeto file não será excluído.
· idf.py flash: atualizando o binário do programa executável file gerado pela compilação para o destino ESP32-C3. As opções -p e -b são usadas para definir o nome do dispositivo da porta serial e a taxa de transmissão para piscar, respectivamente. Se essas duas opções não forem especificadas, a porta serial será detectada automaticamente e a taxa de transmissão padrão será usada.
· monitor idf.py: exibindo a saída da porta serial do alvo ESP32-C3. A opção -p pode ser usada para especificar o nome do dispositivo da porta serial do lado do host. Durante a impressão pela porta serial, pressione a combinação de teclas Ctrl+] para sair do monitor.
Os comandos acima também podem ser combinados conforme necessário. Para example, o comando idf.py build flash monitor executará a compilação do código, fará o flash e abrirá o monitor da porta serial em sequência.
Você pode visitar https://bookc3.espressif.com/build-system para saber mais sobre o sistema de compilação ESP-IDF.
4.4 Prática: Compilando Exampo Programa “Piscar”
4.4.1 Exampa Análise
Esta seção tomará o programa Blink como exampvamos analisar o file estrutura e regras de codificação de um projeto real em detalhes. O programa Blink implementa o efeito de piscar do LED, e o projeto está localizado no diretório examples/get-started/blink, que contém uma fonte file, configuração filese vários scripts de compilação.
O projeto de luz inteligente apresentado neste livro é baseado neste exampo programa. As funções serão adicionadas gradualmente em capítulos posteriores para finalmente completá-lo.
Código fonte Para demonstrar todo o processo de desenvolvimento, o programa Blink foi copiado para esp32c3-iot-projects/device firmware/1 blink.
A estrutura de diretórios do projeto Blink files é mostrado na Figura 4.15.
O projeto Blink contém apenas um diretório principal, que é um componente especial que
Capítulo 4. Configurando o Ambiente de Desenvolvimento 53

Figura 4.15. File estrutura de diretórios do projeto blink

devem ser incluídos conforme descrito na seção 4.3.2. O diretório principal é usado principalmente para armazenar a implementação da função app_main(), que é o ponto de entrada para o programa do usuário. O projeto Blink não inclui o diretório de componentes, porque este example só precisa usar os componentes que acompanham o ESP-IDF e não requer componentes adicionais. O CMakeLists.txt incluído no projeto Blink é usado para guiar o processo de compilação, enquanto Kconfig.projbuild é usado para adicionar itens de configuração para este ex.ample programa em menuconfig. Outros desnecessários files não afetarão a compilação do código, portanto não serão discutidos aqui. Uma introdução detalhada ao projeto Blink files é o seguinte.

1. /*blink.c inclui o seguinte cabeçalho filemerda*/

2. #incluir

//Cabeçalho da biblioteca C padrão file

3. #include “freertos/freeRTOS.h” //Cabeçalho principal do FreeRTOS file

4. #incluir “freertos/task.h”

//Cabeçalho da tarefa FreeRTOS file

5. #incluir “sdkconfig.h”

//Cabeçalho de configuração file gerado pelo kconfig

6. #incluir “driver/gpio.h”

//cabeçalho do driver GPIO file

A fonte file blink.c contém uma série de cabeçalhos files correspondente à declaração da função

ções. ESP-IDF geralmente segue a ordem de inclusão do cabeçalho da biblioteca padrão files, grátisR-

Cabeçalho do TOS files, cabeçalho do driver files, cabeçalho de outro componente files e cabeçalho do projeto files.

A ordem em que o cabeçalho files incluídos podem afetar o resultado final da compilação, então tente

siga as regras padrão. Deve-se observar que sdkconfig.h é gerado automaticamente

pelo kconfig e só pode ser configurado através do comando idf.py menuconfig.

Modificação direta deste cabeçalho file será sobrescrito.

1. /*Você pode selecionar o GPIO correspondente ao LED em idf.py menuconfig, e o resultado da modificação do menuconfig é que o valor de CONFIG_BLINK

_GPIO será alterado. Você também pode modificar diretamente a definição da macro

aqui e altere CONFIG_BLINK_GPIO para um valor fixo.*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO

3. void app_main(void)

4. {

5.

/*Configure IO como a função padrão do GPIO, habilite o modo pull-up e

6.

desativar modos de entrada e saída*/

7.

gpio_reset_pin(BLINK_GPIO);

54 ESP32-C3 Wireless Adventure: um guia abrangente para IoT

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

/*Definir GPIO para modo de saída*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); enquanto(1) {
/*Imprimir log*/ printf(“Desligando o LEDn”); /*Desliga o LED (saída de nível baixo)*/ gpio_set_level(BLINK_GPIO, 0); /*Atraso (1000 ms)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf(“Ligando o LEDn”); /*Acende o LED (saída de alto nível)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000/portTICK_PERIOD_MS); }

A função app_main() no Blink example programa serve como ponto de entrada para programas de usuário. É uma função simples, sem parâmetros e sem valor de retorno. Esta função é chamada depois que o sistema conclui a inicialização, o que inclui tarefas como inicializar a porta serial do log, configurar single/dual core e configurar o watchdog.

A função app_main() é executada no contexto de uma tarefa chamada main. O tamanho da pilha e a prioridade desta tarefa podem ser ajustados no menuconfig Componentconfig Common ESP relacionado.

Para tarefas simples como piscar um LED, todo o código necessário pode ser implementado diretamente na função app_main(). Isso normalmente envolve inicializar o GPIO correspondente ao LED e usar um loop while(1) para ligar e desligar o LED. Como alternativa, você pode usar a API do FreeRTOS para criar uma nova tarefa que lide com o LED piscando. Assim que a nova tarefa for criada com sucesso, você pode sair da função app_main().

O conteúdo de main/CMakeLists.txt file, que orienta o processo de compilação do componente principal, é o seguinte:

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

Entre eles, main/CMakeLists.txt chama apenas uma função do sistema de compilação, que é idf_component_register. Semelhante ao CMakeLists.txt para a maioria dos outros componentes, o blink.c é adicionado ao SRCS e a fonte files adicionados ao SRCS serão compilados. Ao mesmo tempo, “.”, que representa o caminho onde CMakeLists.txt está localizado, deve ser adicionado a INCLUDE_DIRS como diretório de busca para cabeçalho fileS. O conteúdo de CMakeLists.txt é o seguinte:
1. #Especifique v3.5 como a versão mais antiga do CMake suportada pelo projeto atual 2. #Versões inferiores a v3.5 devem ser atualizadas antes que a compilação continue 3. cmake_minimum_required(VERSION 3.5) 4. #Inclua a configuração padrão do CMake do ESP -Sistema de compilação IDF

Capítulo 4. Configurando o Ambiente de Desenvolvimento 55

5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. #Crie um projeto chamado “blink” 7. project(myProject)
Entre eles, o CMakeLists.txt no diretório raiz inclui principalmente $ENV{IDF_PATH}/tools/cmake/project.cmake, que é a configuração principal do CMake file fornecido pela ESP-IDF. É usado para enganar

Documentos / Recursos

Espressif Systems ESP32-C3 Aventura Sem Fio [pdf] Guia do Usuário
ESP32-C3 Aventura Sem Fio, ESP32-C3, Aventura Sem Fio, Aventura

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *