Você está na página 1de 53

ESP 32 PROGRAMAÇÃO

https://wokwi.com/
ESP 32
ESP 32
TIPOS DE DADOS

Em microcontroladores que possui baixa capacidade de memória a escolha dos tipos de dados são
Importantes para a otimização de espaço de armazenamento e processamento.

TIPO FAIXA DE VALORES TAMANHO EM BYTES


signed char -128 a 127 1
char 0 a 255 1
int -32.768 a 32767 2
unsigned int 0 a 65.535 2
unsigned long int 0 a 4.294.967.295 4
long int -2147483647 a 2147483647 4
float 1.17549e-38 a 3.40282e38 4
double 2.23e-308 a 1.7e308 8
long double 2.23e-308 a 1.7e308 8
ESP 32 PROGRAMAÇÃO

Pisca LED

#define LED 2

void setup() {
pinMode(LED, OUTPUT);
}

void loop() {
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
COMANDOS CONDICIONAIS - IF
if (condição) comando;

O comando IF só é ativado em uma condição verdadeira, caso contrário o comando não tem efeito e o
programa lê a próxima linha. Para a linguagem C a condição verdadeira é nível 1 é falso é 0

1
IF

0 COMANDO
COMANDOS CONDICIONAIS - IF

Exemplo de um botão de um controle remoto

chave=digitalRead(terminal);

1 if (chave)
CHAVE

else 0 LED LIGADO digitalWrite(led, HIGH)

LED DESLIGADO digitalWrite(led, LOW)


ESP 32 PROGRAMAÇÃO

#define led 4 LIGA E DESLIGA


#define terminal 14
int chave;

void setup()
{
pinMode(led, OUTPUT);
pinMode(terminal, INPUT_PULLUP);

void loop()
{
chave=digitalRead(terminal);
if(chave){digitalWrite(led, LOW);}
else {digitalWrite(led, HIGH);}

}
MICROCONTROLADORES – PORTAS
Nível 0 em DDRB Nível 1 em DDRB
libera este buffer e libera este buffer e
temos a porta temos a porta
configurada como configurada como
entrada. saída.

Configuramos o
PULL UP para
garantir o nível
baixo na porta

PTB, pode enviar um


nível lógico para saída
do microcontrolador ou
receber um nível e
enviá-lo para CPU

Para fazer a configuração da porta devemos usar o DDR antes de enviar um comando PT.
DDRA, estaremos configurando a porta A do microcontrolador
DDRB, estaremos configurando a porta B do microcontrolador
PTA, estaremos enviando (1) ou recebendo (0) uma informação pela porta A
PTB, estaremos enviando (1) ou recebendo (0) uma informação pela porta B
ESP 32 PROGRAMAÇÃO

#define led 4 LIGA E DESLIGA SEM PULLUP GERA INSTABILIDADE NA SAIDA


#define terminal 14
int chave;

void setup()
{
pinMode(led, OUTPUT);
pinMode(terminal, INPUT);

void loop()
{
chave=digitalRead(terminal);
if(chave){digitalWrite(led, LOW);}
else {digitalWrite(led, HIGH);}

}
ESP 32 PROGRAMAÇÃO

#define led 4 LIGA E DESLIGA COM PULLUP GERA ESTABILIDADE NA SAIDA


#define terminal 14
int chave;

void setup()
{
pinMode(led, OUTPUT);
pinMode(terminal, INPUT_PULLUP);

void loop()
{
chave=digitalRead(terminal);
if(chave){digitalWrite(led, LOW);}
else {digitalWrite(led, HIGH);}

}
ESP 32 PROGRAMAÇÃO

#define led 4 LIGA E DESLIGA COM INPUT E RESISTOR GERA ESTABILIDADE NA SAIDA
#define terminal 14
int chave;

void setup()
{
pinMode(led, OUTPUT);
pinMode(terminal, INPUT);

void loop()
{
chave=digitalRead(terminal);
if(chave){digitalWrite(led, LOW);}
else {digitalWrite(led, HIGH);}

}
#define led 4 ESP 32 PROGRAMAÇÃO
#define terminal 14
int chave;
Utilização do modo monitor como ponta de prova
void setup() Interessante para analisar o comportamento do programa
{
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(terminal, INPUT);

void loop()
{
chave=digitalRead(terminal);
if(chave){digitalWrite(led, LOW);}
else {digitalWrite(led, HIGH);}

Serial.println("Condição da chave");
Serial.println(chave);
}
COMANDOS REPETIÇÃO – FOR
for (inicialização;condição;incremento) comando;

Para trabalharmos com o FOR, adotamos uma variável o qual fica na CONDIÇÃO, onde esta
pode ser INCREMENTADA (acima ou abaixo – X++ ou X--) o qual fica sempre comparada
com a INICIALIZAÇÃO. Quando este processo estiver em igualdade a CONDIÇÃO com a
INICIALIZAÇÃO o laço FOR terá terminado, mas enquanto isto não acontecer ele ficará em
seu laço e com o devido COMANDO funcionando.

INCREMENTO

COMANDO

? N
INICIALIZAÇÃO = CONDIÇÃO
S
#define LED 4
int x; ESP 32 PROGRAMAÇÃO

void setup() {
pinMode(LED, OUTPUT);
}

void loop() {
for (x=0;x<5;x++)
{digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);}

delay(3000);

for (x=0;x<10;x++)
{digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);}

delay(3000);
}
COMANDOS REPETIÇÃO – WHILE

WHILE

While é utilizado para processos de repetição quando


não sabemos quantas vezes deve ser repetido.

Uma condição externa irá informar quando deve 0


acontecer a finalização do while CONDIÇÃO

FIM DO WHILE
1

COMANDOS
#define led 4 ESP 32 PROGRAMAÇÃO
#define terminal 14
int chave;

void setup()
{
pinMode(led, OUTPUT);
pinMode(terminal, INPUT_PULLUP);
}

void loop()
{
while(digitalRead(terminal)==HIGH)
{
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}

digitalWrite(led, LOW);
}
COMANDOS CONDICIONAIS – SWITCH CASE
switch (expressão)
{
case (expressão 1): comando; comando; comando n; break;
case (expressão 2): comando; comando; comando n; break;
case (expressão n): comando; comando; comando n; break;
default: comando; comando; comando n;
}

CASE (E1) COMANDOS BREAK

SWITCH

CASE (E2) COMANDOS BREAK

CASE (En) COMANDOS BREAK

DEFAULT
Este comando permite a escolha de uma opção entre várias variáveis.
Uma vez escolhida é comparada a SWITCH com o devido CASE. Uma vez escolhido,
os comandos contidos no CASE serão executados até a chegada do comando
BREAK. Logo em seguida retorna novamente ao comando SWITCH para novo
COMANDOS teste. Caso não exista nenhuma relação do SWITCH com os CASES disponíveis o
programa irá para o comando DEFAULT e executará um ou mais comandos
determinado pelo programador
COMANDOS CONDICIONAIS – SWITCH CASE

TECLADO

controle=1;

CASO 1 COMANDOS BREAK

digitalWrite(led_vermelho,HIGH);
digitalWrite(led_verde,LOW);
SWITCH

CASO 2 COMANDOS BREAK

digitalWrite(led_vermelho,LOW);
digitalWrite(led_verde,HIGH);
digitalWrite(led_vermelho,LOW);
DEFAULT
digitalWrite(led_verde,LOW);

BREAK
# define led_vermelho 4 ESP 32 PROGRAMAÇÃO
# define led_verde 2
int controle;

void setup() {
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);}

void loop() {
controle=1;
switch(controle) {
case 1:
digitalWrite(led_vermelho, HIGH);
digitalWrite(led_verde, LOW);
break;

case 2:
digitalWrite(led_vermelho, LOW);
digitalWrite(led_verde, HIGH);
break;

default:
digitalWrite(led_vermelho, LOW);
digitalWrite(led_verde, LOW);
break;}}
Conversor Analógico / Digital – A/D
Um conversor A/D se faz necessário para processar
as informações dentro do Microcontrolador (Digital –
10100...).
O processo se dá desta forma:
1. Amostragem:
Analisa o sinal ponto a ponto em um intervalo;
2. Quantização:
Adequa esse ponto ao nível de tensão mais
próximo – levando em conta a quantidade de
bits;
3. Codificação:
A sequencia binaria para cada nível de tensão
representada no processo de quantização.
MICROCONTROLADORES – CONVERSOR ANALÓGICO / DIGITAL

CHANNEL SELECT
Responsável para habilitar os pinos
do HC para fazer a conversão A/D

ADC
Conversor Analógico Digital de 8 bits

ADC DATA REGISTER


Local onde ficará registrado o valor
Convertido em HEXADECIMAL

CLOCK GENERATOR
Responsável pela velocidade de
conversão do ADC

INTERRUPT LOGIC
Ao termino da conversão é habilitada
uma interrupção avisando que o dado
esta no ADC DATA REGISTER
PORTA ANALÓGICA

Portas de entrada analógicas são importantes para adquirir valores como temperatura, pressão, luminosidade
e outros valores que não são de estado binário.

O Arduino possui 18 entradas analógicas com resolução de 12 bits = 2^12 = 4096

O valor de conversão analógica é de 4096

A tensão de entrada máxima de entrada desta porta é de 3,3V

Portanto teremos uma resolução de:

VR = 3,3/4096 = 805 uV
PORTA ANALÓGICA

Mapeamento do ADC 1

•ADC1_CH0 >>>GPIO36
•ADC1_CH1 >>>Não disponível nesta placa Devkit DoIT ( versão de 30 pinos)
•ADC1_CH2 >>> NA
•ADC1_CH3 >>>GPIO39
•ADC1_CH6 >>>GPIO34
•ADC1_CH7 >>> GPIO35
•ADC1_CH4 >>> GPIO32
•ADC1_CH5 >>>GPIO33
PORTA ANALÓGICA

Mapeamento do ADC 1

•ADC2_CH0 >>>GPIO0
•ADC2_CH1 >>> Este canal não está disponível na placa Devkit DOIT
•ADC2_CH2 >>>GPIO2
•ADC2_CH3 >>> GPIO15
•ADC2_CH4 >>> GPIO13
•ADC2_CH5 >>> GPIO12
•ADC2_CH6 >>>GPIO14
•ADC2_CH7 >>> GPIO27
•ADC2_CH8 >>> GPIO25
•ADC2_CH9 >>> GPIO26
PORTA ANALÓGICA
PORTA ANALÓGICA
# define entrada_analogica 1 // entrada analógica
# define led 2
# define adc_referencia 3300.0 // tensão de referência = 3,3v
# define adc_resolucao 4096.0 // pino do conversor A/D (ADC0)
int valor_pot;
float mili_volts;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(115200);
}

void loop() {
//leitura da tensão do potênciometro
valor_pot=analogRead(entrada_analogica);
// converter o valor do potênciometro em milivolts
mili_volts=valor_pot*(adc_referencia/adc_resolucao);
digitalWrite(led, HIGH);
delay(mili_volts);
digitalWrite(led, LOW);
delay(mili_volts);
Serial.println("tensão em mili volts");
Serial.println(mili_volts);
}
VISUAL STUDIO CODE – ESP32

Visual Studio Code é um editor de código-fonte desenvolvido pela Microsoft.

Pode escrever em diversas linguagens


- C/C++
- Python
- JavaScript e outras

Pode ser instalado nos sistemas operacionais


- Windows
- Linux
- Mac Os

Tamanho do arquivo 57 MB
VISUAL STUDIO CODE – ESP32

Instalação do Visual Studio Code

Acessar o link abaixo e fazer o download para a versão do Windows


https://code.visualstudio.com/download

Durante a instalação confirme as configurações de tela como mostra a sequencia apresentada nos
próximos slides.
VISUAL STUDIO CODE – ESP32
VISUAL STUDIO CODE – ESP32
VISUAL STUDIO CODE – ESP32

Ao termino da instalação, irá apresentar a tela inicial do Visual Studio Code


VISUAL STUDIO CODE – ESP32

Instale pela Microsoft Store a versão mais recente do Python (opcional para quem desejar programar em Python)
VISUAL STUDIO CODE – ESP32

Para programar em ESP32 ou Arduino é necessário instalar a extensão PlatformIO IDE


1. Clique em Extensions
2. Busque por PlatformIO IDE
3. Selecione a primeira opção
4. Clique em Install
VISUAL STUDIO CODE – ESP32

Após a PlatformIO IDE estiver instalada, verifique se a mesma está habilitada (enable)
VISUAL STUDIO CODE – ESP32

Para acessar a extensão da Plataform IO IDE clique na casinha (rodapé) ou no ícone do E.T.
VISUAL STUDIO CODE – ESP32

Conecte o seu ESP32 na porta USB e perceba que um LED vermelho irá ligar.
Este LED vermelho informa que o ESP32 está energizado.
Mas não existe nenhum programa ainda no ESP32.
Nos próximos passos será apresentado as configurações necessárias para a programação do ESP32

ATENÇÃO!!! Existem cabos que energizam o ESP32, mas não transmitem os dados do programa
VISUAL STUDIO CODE – ESP32

Criar um programa para piscar o LED 2 Azul que existe na placa do ESP32

Na extensão do PlatformIO IDE clique em New Project


VISUAL STUDIO CODE – ESP32

Ao criar um novo projeto, devemos dar um nome e localizar a placa.


- O nome fica por escolha do programador -> Sugestão “Blink_LED”
- A placa deve ser DOIT ESP32 DEVKIT V1
- O framework será ARDUINO
VISUAL STUDIO CODE – ESP32

Ao acessar o nome do projeto do programa é possivel ver todas as opções de arquivos.


VISUAL STUDIO CODE – ESP32

O próximo procedimento é configurar a taxa de transmissão de dados.


Isto é importante para transmitir o programa criado no Visual Studio Code para a placa do ESP32
Acesse o platformio.ini e inclua o monitor_speed = 115200
VISUAL STUDIO CODE – ESP32

Para localizar onde será desenvolvido o programa deve-se ir em src e em seguida main.cpp
É possível perceber que não existe nenhum programa neste momento.
Somente a área de configuração void setup () e o laço principal void loop ()
VISUAL STUDIO CODE – ESP32

Escreva o programa exemplo para testar o LED azul da placa piscar


VISUAL STUDIO CODE – ESP32

Compilação

O próximo passo é compilar


o programa para ver se não
existe problemas de sintaxe

Clique no rosto do E.T.


Acesse PROJECT TASKS
Clique em BUILD

Caso tudo der certo a tela


terminal irá mostrar o resultado
abaixo.
VISUAL STUDIO CODE – ESP32

Carregamento

O próximo passo é carregar


o programa para a placa do ESP32

Clique no rosto do E.T.


Acesse PROJECT TASKS
Clique em UPLOAD

Caso tudo der certo a tela


terminal irá mostrar o resultado
abaixo.
VISUAL STUDIO CODE – ESP32

Monitor

O próximo passo é ativar o monitor


Ele irá apresentar no terminal
em que passo o programa está
sendo executado

Clique no rosto do E.T.


Acesse PROJECT TASKS
Clique em MONITOR

Caso tudo der certo a tela


terminal irá mostrar o resultado
abaixo.
VISUAL STUDIO CODE – ESP32

Programa carregado na placa

Feito todo este procedimento,


o Visual Studio Code se encarrega
de fazer a carga do programa na
placa do ESP 32.

A figura ao lado mostra o LED 2 azul


operando em modo pisca pisca.
PROTOCOLO MQTT
(Message Queuing Telemetry Transport)

O protocolo MQTT realiza o transporte de dados por meio de enfileiramento sendo utilizado em telemetria.

O seu conceito vem da comunicação M2M (Machine To Machine).

O MQTT precisa de pouco processamento de CPU e pouca memória RAM para enviar os dados.

Seu consumo de largura de banda é muito baixo durante a transmissão dos dados.

O consumo de energia no processo de transmissão é baixo, aumentando a durabilidade das baterias

Pode ser usado em diversas linguagens de programação – C, C++, Python e Java.

Utilizado em aplicações com IoT (Internet das Coisas).

O ESP 32 é indicado para projetos que necessitam de conectividade com a internet.

O protocolo MQTT pode ser implementado para o ESP32.

Também pode ser implementado em ambiente de nuvem – IBM, Google, AWS, Azure e outras.
PROTOCOLO MQTT
(Message Queuing Telemetry Transport)

Broker é um servidor de comunicação MQTT que fica na nuvem (instância).


Esta topologia faz com que o Broker seja acessível em qualquer lugar do mundo mediante conectado na internet.
Sua escalabilidade é altíssima e não existe limites de publishers e subscriber (publicar e assinar).
PROTOCOLO MQTT
(Message Queuing Telemetry Transport)

A arquitetura publishers – subscriber (publicar e assinar) é um padrão de mensagens para serem enviadas a um
receptor específico, chamado de assinantes.

Os assinantes (subscriber) só irão receber as mensagens de seu interesse.


Os assinante desconhecem os editores (publishers) que enviam as mensagens.

Este método é uma alternativa de cliente e servidor usado em redes em comunicações end point.
O processo publishers – subscriber separa o remetente e o destinatário de uma
mensagem específica. Portanto o remetente (Pub) e o destinatário (Sub)
não se conhecem e necessitam de um terceiro chamado de Broker.

Este tipo de controle são feitas por APIs específicas.

Uma API (Application Programming Interface – Interface de Programação


de Aplicativos), tem a finalidade de realizar a comunicação de dois ou mais
programas de computadores se comunicarem entre si.

Portanto o Broker tem como finalidade de fazer a gerência na troca de mensagens.

O Broker sincroniza o envio e recebimento de mensagens publishers – subscriber.


Comunicação MQTT

O MQTT usa filtragem de mensagens baseadas em assunto.

Os editores (Publishers) enviam as mensagens relacionada ao tópico.

Os assinantes (Subscribe) recebem as mensagens se tiverem assinado o tópico

Isto é conhecido como chave – Identificação da mensagem realizado por uma


string, por exemplo – MQTTValorDaTemperatura.

Este tipo de comunicação Pub-Sub é importante saber o endereço IP do Broker


para que ocorra a comunicação.

O campo Payload (Carga útil) é onde está a informação a ser transmitida.


Esta informação pode ser a temperatura do sensor, exemplo, 25°C.
Operação e fluxo de mensagens do MQTT

CONNECT – Cliente para Broker (Servidor), solicita a conexão CLIENTE #1 para BROKER.
CONNACK – Broker para Cliente, reconhecimento da conexão CLIENTE #1 para BROKER.
SUBSCRIBE – Cliente para Broker, solicitação de inscrição para o cliente.
SUBACK – Broker para cliente, reconhecimento da inscrição.
PUBLISH – Cliente para Broker ou Broker para Cliente,
publicar a mensagem.
PUBREC – Cliente para Broker ou Broker para Cliente,
mensagem recebida
Transmissão, portas e segurança

Sistemas IoT que utilizam o protocolo MQTT, possuem somente um Servidor (Broker) e diversos Clientes (MQTT).

Isto elimina a necessidade de ter uma infraestrutura de rede configuradas para os clientes.

Não existe o redirecionamento de portas e nem a liberação de endereços IPs para os clientes.

As portas utilizadas no MQTT são:

Porta 1883: Conexão com o Broker MQTT sem encriptação – transmissão dos dados em forma de texto – sem segurança.
A falta de segurança dos dados abre a possibilidade de invasão da rede pelos dispositivos IoT.
A utilização desta porta (1883) tem como finalidade testes de protótipos e estudos acadêmicos. Não sendo utilizada para
produtos finais comerciais.

Porta 8883: Conexão com o Broker MQTT com encriptação – transmissão de dados codificados em TLS/SSL – com segurança.

Ao utilizar a porta 8883 com TLS/SSL, pode ocorrer falta de compatibilidade com os dispositivos IoT e assim não ocorrendo
a conexão. Nesta condição, deve-se consultar o manual do fabricante do microcontrolador e suas bibliotecas PubSubClient.

Você também pode gostar