Escolar Documentos
Profissional Documentos
Cultura Documentos
G ERAIS
Lista de ilustrações . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Lista de tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 INTRODUÇÃO E OBJETIVOS . . . . . . . . . . . . . . . . . . . 7
2 ATIVIDADES - ESP 32 . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.6.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.6.2 Tutorial - Criando Planilha . . . . . . . . . . . . . . . . . . . . . . 47
2.6.3 Tutorial - Programação ESP32 . . . . . . . . . . . . . . . . . . . . 52
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
1 Introdução e Objetivos
7
2 Atividades - ESP 32
• De acordo com a versão do seu computador (x64 para 64 bits e x86 para 32
bits), baixe a Arduino IDE em <https://www.arduino.cc/en/main/software>.
9
Figura 2 – Arquivos para configuração da Placa do ESP32
6. Utilize o código abaixo para verificar as redes ao seu redor e testar seu módulo.
OBS: Modificar a linha <#includeC:/Users/ [YOUR_USER_NAME]/Documents/
Arduino/ hardware/ espressif/ esp32/ libraries/ WiFi/ src/ WiFi.h> com o seu nome
de usuário.
1 /*
2 * This sketch demonstrates how to scan WiFi networks.
3 * The API is almost the same as with the WiFi Shield library,
4 * the most obvious difference being the different file you need to include:
5 */
6 #include <Wifi.h>
7
8 String redeSSID = "";
9 int intensidadeSinal = −9999;
10
11 void setup()
12 {
13 // Instrucao para inicializar o Serial
14 // Utilizaremos apenas para log no monitor.
15 Serial.begin(115200);
16
17 // configurando o modo de operacao do WiFi como estacao
18 WiFi.mode(WIFI_STA);
19
20 // desconecta do access point caso ele ja esteja conectado
21 WiFi.disconnect(); //WIFI_STA eh uma constante que indica o modo estacao
22 delay(100);
23 }
24
25 void loop()
26 {
27 // Serial.println("scan start");
28
29 //realiza o escaneamento das redes disponiveis
30 int n = WiFi.scanNetworks();
31 Serial.println("Escaneamento realizado");
32
33 //verifica se encontrou alguma rede
34 if (n == 0) {
35 Serial.println("Nenhuma rede encontrada");
36 } else {
37 redeSSID = "";
38 intensidadeSinal= −9999;
39 Serial.print(n);
40 Serial.println(" redes encontradas\n");
41 for (int i = 0; i < n; ++i) {
42 // imprime no log cada uma das redes encontradas
43 Serial.print("SSID: ");
44 Serial.println(WiFi.SSID(i)); //nome da rede
45 Serial.print("SINAL: ");
46 Serial.print(WiFi.RSSI(i)); //intensidade do sinal
47 Serial.print("\t\tcanal: ");
48 Serial.print((int)WiFi.channel(i));
49 Serial.print("\t\tMAC: ");
50 Serial.print(WiFi.BSSIDstr(i));
51 Serial.println("\n\n");
52
53
54
55 if(abs(WiFi.RSSI(i)) < abs(intensidadeSinal))
56 {
57 intensidadeSinal = WiFi.RSSI(i);
58 redeSSID = WiFi.SSID(i);
59 Serial.print("REDE COM MELHOR SINAL ENCONTRADA: ( ");
60 Serial.print(redeSSID);
61 Serial.print(" ) − SINAL : ( ");
62 Serial.print(intensidadeSinal );
63 Serial.println(" )");
64 }
65
66 delay(10);
67 }
68 }
69 Serial.println("\n−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n");
70
71 // deixa um intervalo de 10 segundos para fazer um novo escaneamento
72 delay(5000);
73 }
• SSID_DA_REDE;
• SENHA_DA_REDE;
• resource = /trigger/NOME_DO_EVENTO/with/key/CHAVE_DE_API.
2.3.1 Introdução
Na última seção, foi possível escrever nas planilhas do Google a partir do serviço
de IFTTT. E como seria feita uma leitura de ujma planilha a partir de um dispositivo
sensor? É possível realizar isso sem o intermediário IFTTT? A resposta é sim! Claro, se
não fosse, pra que começar essa seção, certo? :D
Primeiramente, vamos aprender a escrever no Google Sheets, utilizando o mesmo
como Banco de Dados. Um banco de dados é um conjunto de dados que, geralmente,
possuem um padrão e estão relacionados entre si. Dentre os bancos de dados mais conhe-
cidos, está o MySQL, por exemplo. E por que não utilizá-lo a princípio? Primeiramente,
o MySQL necessita de um servidor para hospedá-lo sempre conectado(o que gera custo),
enquanto o Google Sheets já possui um servidor próprio e muito robusto. Em segundo
lugar está a popularidade do mesmo: por se assemelhar muito ao Excel do MS Office,
o Google Sheets é uma ferramenta de fácil utilização para muitas pessoas. Em terceiro
lugar está a possibilidade fácil de compartilhamento entre usuários, tornando a solução
abrangente e modular.
Bom, para escrever no Google Sheets, vamos usar um outro intermediário, mas
dessa vez em um outro serviço do Google: o Google Forms. Associando um formulário
à uma planilha, consegue-se escrever nela sem problema. "Mas não seria sem um
intermediário?"Sim, é verdade! Porém, o Google Forms nos dá algumas vantagens
importantes! Uma delas é a possibilidade de controle online do formulário, regulando
quando será permitido a escrita no banco de dados sem que haja necessidade de se alterar
a planilha em si. Essa vantagem possibilita que não haja contato direto entre o sensor
e o banco de dados, trazendo segurança em caso de algum tipo de invasão com fins de
se alterar indevidamente os dados no banco. A outra vantagem é que o Google Forms
registra a data e a hora em que a escrita foi feita. Num mundo de sensores com baixo
consumo de energia, reduzir o processamento com Real Time Clock (RTC) e ter mais
espaço para envio de dados se tornam vantagens muito boas!
1. Primeiramente, vá ao seu Google Drive e crie uma planilha. Coloque o nome que
desejar para a mesma.
Figura 12 – Criando uma planilha do Google
• Por fim, clique no olho no canto superior direito para abrir o link do formulá-
rio. Uma tela como a 17 será aberta.
2. Abra seu formulário (no link de respostas) e copie todo o link entre <docs.google.
com> e </viewform>. Salve esse link.
4. Aqui vamos pegar o número dessa entrada de resposta. Para isso, procure no
código fonte por algo semelhante ao exemplo: entry.473197392.
Figura 20 – Selecionar Elemento
5. Pegue estes dois links e altere apenas as partes destacadas na String textFix do
código, como mostram as figuras 21 e 22.
Pronto! Agora você criou um banco de dados que será alimentado pelo sensor de
temperatura acoplado ao ESP32!
DESAFIO: Anexe ao banco de dados um gráfico em linhas atualizado em tempo
real. Como seria possível colocar a umidade no banco de dados também? Faça isso e
anexe um gráfico para a umidade também!
2.4 Google Sheets - Integração de Sensores
2.4.1 Introdução
Em muitas aplicações em IoT é comum que um mesmo módulo possua vários
sensores e atuadores para realizar determinadas ações no sistema. Nessa etapa, faremos a
integração do ESP32 com o DHT11 (sensor de umidade e temperatura), o fototransistor
TCRT5000, muito utilizado em robôs seguidores de linha, por exemplo, e uma buzzer,
na qual iremos atuar.
3. Abra seu formulário (no link de respostas) e copie todo o link entre <docs.google.com>
e </viewform>. Salve esse link.
4. Em seu formulário, clique com o botão direito onde é inserida a resposta e clique
em "Inspecionar"ou "Inspecionar Elemento (Q)"dependendo do seu navegador.
Figura 25 – Inspecionar Elemento
5. Aqui vamos pegar o número dessa entrada de resposta. Para isso, procure no
código fonte por algo semelhante ao exemplo: entry.473197392.
Pronto! Com isso, o módulo ESP32 agora é responsável por coletar 3 medidas
(temperatura, umidade e tempo entre detecções de obstrução do fototransistor) e possui
um atuador (buzzer).
2.5 Google Sites - Integração com ESP32
2.5.1 Introdução
Com o único módulo, é possível realizar diversas medições e colocar os dados
na rede. Com as planilhas do Google, pode-se ter um pequeno banco de dados. Po-
rém, tais dados possuem visualização muitas vezes complicada, tornando complexa e
desinteressante para o cliente. Dessa forma, colocar os dados em formas de gráficos e
disponibilizar em sites é uma ótima alternativa!
O Google Sites é uma ferramenta simples e com fácil integração com outros
serviços do Google. Nessa atividade, será criado um site que permitirá a visualização
dos dados das planilhas em forma gráfica, para acompanhamento remoto.
8. Visualize o seu site clicando no botão "Visualizar"no canto superior direito da tela.
2.6.1 Introdução
Agora que já aprendemos a escrever nas planilhas do Google, vamos aprender
a ler os dados delas! Para realizar isso, vamos utilizar uma API do Google na sua
plataforma de desenvolvimento: a Google Cloud Platform.
A Google Cloud Platform (GCP) é uma plataforma de desenvolvimento que
integra diversos serviços do Google, possibilitando recursos para criação de aplicati-
vos, análise de dados, aprendizagem de máquina, dentre outros! Para essa aplicação,
utilizaremos uma API, como pode ser vista no tutorial abaixo.
4. Vá ao seu Google Drive e crie uma planilha. Coloque o nome que desejar para a
mesma.
Figura 42 – Criando uma planilha do Google
1. Copie o código abaixo para sua aplicação no Arduino. Não se esquecer de alterar
a SSID e Senha da Rede!
1 /* Codigo desenvolvido por Jose Morais do portal.vidadesilicio.com.br (2017)
2 * e adaptado por Dener Brandao da Universidade Federal de Minas Gerais (2019)
3 */
4
5 #include <WiFi.h>
6 #include <WiFiClientSecure.h>
7
8 WiFiClientSecure cl;//Cria um cliente seguro (para ter acesso ao HTTPS)
9 String textFix = "GET /v4/spreadsheets/[SEU_LINK_DA_PLANILHA]/values/";
10 String key = "?key=[SUA_CHAVE_DE_API]";//Chave de API
11 //Essas Strings serao auxiliares, para nao precisar ficar re−escrevendo toda hora
12
13
14 void setup()
15 {
16 Serial.begin(115200);//Inicia a comunicacao serial
17 WiFi.mode(WIFI_STA);//Habilita o modo estacao
18 WiFi.begin("SSID_DA_REDE", "SENHA_DA_REDE");//Conecta na sua rede
19 delay(3000);//Espera um tempo para se conectar no WiFi
20 while (WiFi.status() != WL_CONNECTED)
21 {
22 Serial.print(".");
23 delay(500);
24 }
25
26 //Se chegou aqui esta conectado
27 Serial.println();
28 Serial.println("Connected");
29
30 }
31
32 void loop()
33 {
34
35 if (cl.connect("sheets.googleapis.com", 443) == true)//Tenta se conectar ao servidor do
˓→ Google APIs na porta 443 (HTTPS)
36 {
37 String toSend = textFix; //Atribuimos a String auxiliar na nova String que sera
˓→ enviada
38
39 toSend += "C2:C5";//Os valores que queremos ler da planilha. Para uma unica celula,
˓→ use algo como "A2"; para ler varios, use algo como "A1:C4".
40 toSend += key;//Adicionamos a chave na String
41 toSend += " HTTP/1.1";//Completamos o metodo GET para nosso formulario.
42
43 cl.println(toSend);//Enviamos o GET ao servidor−
44 cl.println("Host: sheets.googleapis.com");//−
45 cl.println();//−
46
47
48 Serial.println("Dado recebido:\n");
49 //Serial.print(cl.readString()); //Mostra no Serial Monitor todo o pacote recebido.
50 String dados_rec = cl.readString(); // A partir daqui pegaremos apenas os valores
˓→ contidos nas celulas.
51 String string_local = "values"; // Define a string a ser localizada no pacote para
˓→ realizar a contagem a partir dela.
52 int indice_valor = dados_rec.indexOf(string_local); // Procura o indice do pacote em
˓→ que esta localizada a string.
53 dados_rec.replace("'",""); // Retira−se os caracteres indesejados dos valores
54 dados_rec.replace("[","");
55 dados_rec.replace("]","");
56 dados_rec.replace(",","");
57 dados_rec.replace("}","");
58 dados_rec.replace("{","");
59 dados_rec.replace("\n"," ");
60 dados_rec.replace("''"," ");
61
62 Serial.print(dados_rec.substring(indice_valor+8)); // Mostra no Serial apenas os
˓→ valores apos "values".
63
64 cl.stop();//Encerramos a conexao com o servidor.
65 }
66 else
67 {
68 Serial.println("Erro ao se conectar");
69 }
70 delay(10000); // Aguarda 10 segundos para ler novamente.
71
72 }
3. Quando testar o código, verá que não tem permissão para acessar a planilha, como
mostra a figura 46 abaixo. Essa é uma proteção possível com as Planilhas do
Google. A chave de API deve estar com link público. É possível adicionar mais
segurança utilizando recursos de autenticidade por e-mail. Porém, vamos utilizar
algo mais simples.
Figura 46 – Saída do monitor serial mostrando o acesso negado
Agora você poderá ler os valores escritos nas células definidas no seu programa!
DESAFIO: Aumente a segurança do seu programa colocando credenciais para
e-mails e não mais link público.
Referências
Vida de Silicio. Banco de dados com Google planilhas – ESP. 2017. Disponível em:
<https://portal.vidadesilicio.com.br/banco-de-dados-com-google-planilhas-com-esp>.
Citado na página 26.
59