Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
chave=digitalRead(terminal);
1 if (chave)
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
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
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
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
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;
}
SWITCH
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;
digitalWrite(led_vermelho,HIGH);
digitalWrite(led_verde,LOW);
SWITCH
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
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.
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
Tamanho do arquivo 57 MB
VISUAL STUDIO CODE – ESP32
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
Instale pela Microsoft Store a versão mais recente do Python (opcional para quem desejar programar em Python)
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
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
Compilação
Carregamento
Monitor
O protocolo MQTT realiza o transporte de dados por meio de enfileiramento sendo utilizado em telemetria.
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.
Também pode ser implementado em ambiente de nuvem – IBM, Google, AWS, Azure e outras.
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.
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.
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.
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.