Lendo dados do Google planilhas com ESP – Banco de dados
No tutorial Banco de dados com Google planilhas com ESP, aprendemos a enviar dados para o Google Planilhas. Entretanto, para fazer justo ao nome “banco de dados“, também precisamos recuperar dados da planilha para manipula-los ou até criar comandos de controle pela planilha, que permitirá, por exemplo, ativar atuadores ou ler dados que colocamos na planilha. Dessa forma, neste tutorial iremos aprender como ler os dados do Google Planilhas através de um ESP.
[toc]
Configurações iniciais – Requisitando dados do Google planilhas
O processo necessário para adquirir dados da planilha é quase o mesmo em relação ao método de envio (GET), entretanto para fazer isso, precisamos obter uma chave secreta. Esta chave faz o papel de “senha”, para que ninguém consiga ler seus dados sem ela.
Atenção: Há maneiras mais seguras, como restringir o acesso da chave ou usar autenticador. Será mostrado o método mais simples.
Passo 1-) Entre na plataforma de gerenciamento de API’s da Google: https://console.developers.google.com/apis , crie um novo projeto e de um nome qualquer.
Este projeto será apenas para “guardar” sua chave com a respectiva API, neste caso, Google planilhas.
Passo 2-) Vá em “Credenciais” e crie uma “Chave de API”
Feche a janela e a partir de agora, já temos nossa chave necessária para requisição de dados (e futuramente, altera-los).
Passo 3-) Volte para a página inicial do Google APIs, clique em “Biblioteca“, selecione “Google Sheets API” e “Ativar“
Terminamos de criar nossa chave e ativa-la, agora podemos manipular qualquer planilha que tenhamos salvo no Google Drive!
Mãos a obra – Lendo o Google planilhas
Componentes necessários
- 1x ESP8266 ou ESP32 (Usaremos o NodeMCU 8266)
Código do projeto
Atenção: é necessário que você use os dados da sua planilha e faça uma alteração na mesma, explicaremos logo abaixo.
#include <ESP8266WiFi.h> WiFiClientSecure cl;//Cria um cliente seguro (para ter acesso ao HTTPS) String textFix = "GET /v4/spreadsheets/12IYuWdV0aJa8mQPhsR5C6AVEwZufyC05wufTrTJsSg/values/"; String key = "?key=IzaSyDmot3XwHfsNhqeuKdINMYxpyFK4cY";//Chave de API //Essas Strings serao auxiliares, para nao precisar ficar re-escrevendo toda hora void setup() { Serial.begin(115200);//Inicia a comunicacao serial WiFi.mode(WIFI_STA);//Habilita o modo estaçao WiFi.begin("SUA REDE", "SUA SENHA");//Conecta na sua rede delay(3000);//Espera um tempo para se conectar no WiFi } void loop() { if (cl.connect("sheets.googleapis.com", 443) == true)//Tenta se conectar ao servidor do Google APIs na porta 443 (HTTPS) { String toSend = textFix;//Atribuimos a String auxiliar na nova String que sera enviada toSend += "C2:C4";//Os valores que queremos ler da planilha. Para uma única célula, use algo como "A2"; para ler varios, use algo como "A1:C4". toSend += key;//Adicionamos a chave na String toSend += " HTTP/1.1";//Completamos o metodo GET para nosso formulario. cl.println(toSend);//Enviamos o GET ao servidor- cl.println("Host: sheets.googleapis.com");//- cl.println();//- Serial.println("Dado recebido:\n");//Mostra no Serial Monitor todo o pacote recebido.- Serial.print(cl.readString());//- cl.stop();//Encerramos a conexao com o servidor. } else { Serial.println("Erro ao se conectar"); } delay(5000); }
Ajustando o código para sua planilha
Antes de testar, precisamos alterar os dados do código para os seus dados e também compartilhar o link da sua planilha. Sem isso não irá funcionar!
Lembrando: altere apenas os dados destacados, o restante é necessário para funcionamento correto.
Passo 1-) Vá no começo do código e altere a chave (destacada) por sua chave.
Passo 2-) Ainda nesta parte, altere o ID com o da planilha que você deseja obter os dados. Para isso vá em seu Google Drive, entre na planilha e pegue o ID:
Neste caso, vamos pegar a própria planilha criada na primeira parte do material.
Se você testar o código, verá que não temos permissão para acessar o banco de dados no Google planilhas. Isso acontece pois nossa “Chave de API” precisa estar com o link público (Qualquer pessoa com o link pode visualizar). Você pode contornar isso usando os Autenticadores ou adicionando Emails confiáveis ao sistema. Usaremos o mais simples para didática e fácil entendimento. Veja a saída do Serial monitor:
Passo 3-) Para deixar o link público, vá na sua planilha e siga os passos:
- 1-) Clique em “Compartilhar” no canto superior direito.
- 2-) Clique em “Avançado“.
- 3-) Clique em “Alterar…“.
- 4-) Clique em “Ativado: qualquer pessoa com link” e salve.
Colocando para funcionar
Agora podemos testar e já estará funcionando!
Veja que o pedido foi de um grupo de células, neste caso, C2:C4. Isso significa que iremos receber os dados das células C2,C3 e C4 em ordem da respectiva chamada.
Entendendo a fundo
Software
– String auxiliar (textFix)
String textFix = "GET /v4/spreadsheets/12IYuWdV0aJa8mQPhsR5C6AVEwZufyC05wufTrTJsSg/values/";
Basicamente é onde colocamos o ID da nossa planilha, você deve alterar para o ID de sua planilha!
– String auxiliar (key)
String key = "?key=IzaSyDmot3XwHfsNhqeuKdINMYxpyFK4cY";//Chave de API
Esta outra String, é onde atribuímos nossa Chave de API, você deve alterar para sua Chave de API.
– Obtenção dos dados
toSend += "C2:C4";
Aqui fica a grande jogada, onde conseguimos pegar células individuais, ou grupos de células. Vamos a um breve resumo.
Nossa planilha:
Célula individual: Imagine que você precisa do valor da célula C2(“Vida”).
toSend += "C2";
Grupo de células: Imagine que você precisa do valor de um grupo de células, neste caso C2, C3 e C4 (“Vida”, “De”, “Silicio”).
toSend += "C2:C4";
Podemos ver a resposta do Google ao pedido C2:C4 no Serial Monitor:
Você pode estar se perguntando: “Como vou usar essa String cheia de ‘lixo’ ?”
Este será o desafio de vocês! Futuramente criaremos um tutorial sobre manipulação de Strings. Mas aqui vai uma dica, procure sobre estes comandos em programação:
Com elas, você é capaz de pegar partes e caracteres específicos da String e ainda criar protocolos de mensagens para uma comunicação efetiva.
Desafio
Tente pegar apenas o valor que você queria da planilha. Você irá usar os dois comandos citados acima para “limpar” a String recebida pelo Google e assim tornando-a útil para o uso no microcontrolador.
Fechamento
Agora que você consegue obter valores da planilha, pode usar dados da planilha para algum processamento interno ou criar comandos de controle através da planilha! As possibilidades são muitas e depende de você. Boa sorte.
Referências
- https://developers.google.com/sheets/guides/concepts
- https://developers.google.com/sheets/guides/values
Estudante de Engenharia da Computação pela USC, pretende se aprimorar e fazer a diferença nesta imensa área da tecnologia. Apaixonado por IoT, sistemas embarcados, microcontroladores e integração da computação nos mais diversos fins práticos e didáticos.
21 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
para pegar o ultimo registro voce pode criar uma célula com o seguinte código “=INDEX(filter(B:B;B:B””);COUNTA(B:B);1)” este código por exemplo pega o ultimo registro da coluna B ou alterar para a coluna desejada, esta célula vai sempre conter o registro mais recente
Entao, funcionando esta, mesmo sem o cl.setInsecure() meu problema é trabalhar a string que recebe, fala que idexOf nao tem na biblioteca,
Meus sistemas estão funcionando perfeitamente apos a inclusão de cl.setInsecure();
sei que o posto ja é antigo , mas ja tentei de varias formas é so da erro, alguem ainda por aqui ?
qual erro?
Para quem esta recebendo a mensagem “Erro ao se conectar” adicionar o comando
cl.setInsecure();
Antes do if (cl.connect(“sheets.googleapis.com”, 443)…..
Para mim funcionou!
Parabéns pelo tutorial. Uso muito esse codigo em meus projetos com esp8266.
Porém o mesmo código não funcionou com o Esp32.
Mudei para biblioteca wifi.h e ela não aceitou o wificlientsecure, sem a qual o google não libera a planilha. Como fazer com o esp32.
Olá Boa noite, agradeço pela post muito didático.
Por gentileza poderia ajudar, desculpe pela ignorância, mas não consigo acesso ao servidor, consegue ajudar ?
Consegui criar a planilha, mas não estou conseguindo ler.
José Morais, Parabéns pelas iniciativa.
estou precisando de uma ajuda para programar em esp um projeto com pastilhas piezoeletro, você pode me ajudar?
Bom dia!
Segui as dicas mas mesmos assim não tive sucesso. Recebo a msg de “Erro ao se conectar”.
Imagino que meu problema está ao tentar se conectar a planilha “if (cl.connect(“sheets.googleapis.com”, 443) == true)”.
Alguém tem ideia do que seria? Como faço para testar essa conexão? Tenho certeza que o nodeMcu está conectado na internet.
Consigo apagar os dados da planilha?
Pelo ESP não sei, mas deve haver algum comando para isso, visto que há comandos para ler células individuais. Sempre que precisei apagar, fiz isso direto na planilha em vez do ESP fazer…
Jose; estoy teniendo el mismo problema que Julio, segui todos los pasos pero en el monitor Serial solo dice: Erro ao se conectar”. Sabes que puede estar pasando?. Desde ya muchas gracias!
José, estou com a mensagem “Erro ao se conectar”, porém o Serial Monitor não está detalhado como o seu.
José, veja se tem como, estou precisando criar uma área de busca no meu site, onde a pessoa vai digitar o nome dela e mandar pesquisar. A base de dados esta em uma planilha excel e tb numa planilha google docs. E caso o nome dela esteja nessa planilha tem que aparecer a mesagem “seu recadastramento é no mês de janeiro de 2019”, se não estiver na planilha deverá aparecer a msg “aguarde seu mês de aniversário”. Tem como criar uma ferramenta assim, usando a planilha do google docs como um banco de dados pesquisável?
Obrigada.
Sim, é possível ler várias células com apenas um único comando, o que viabiliza na questão de velocidade. Então basta você procurar na planilha e usar indexOf() para descobrir se o texto (nome da pessoa) se encontra na planilha.
Boa noite José Morais, tudo bem com voce?
Eu consegui fazer o seu codigo funcionar, porem realmente ele mostra um monte de lixo junto aos dados que preciso.
Eu estou fazendo meu tcc, e ja esta quase tudo pronto – GRAÇAS A DEUS – porem eu não consegui entender como eu posso limpar o lixo e pegar so a informação que eu necessito.
Eu gostaria de pegar essa informação da planilha, comparar com a UID de uma tag, se essa UID estiver cadastrada na planilha, um led, ou a porta, é acionado, e mostraria o nome ou a UID da tag no monitor LCD.
Isso é possivel? Tem como voce me dar uma dica de como fazer isso?
Desde já agradeço.
Esse é o “Desafio” do post hehe, você vai precisar usar o combo .indexOf() e .substring() para “limpar o lixo”.
Excelente, funcional, e simples o artigo!!! Meu parabéns! Eu gostaria de ver um artigo assim onde pudéssemos por esse mesmo método, também gravar dados.
Muito bom José, estou utilizando para o meu Projete de Graduação esse passo-a-passo. Só uma sugestão, acho que no momento que eu solicitei para criar a Chave API no Passo 2 ele pediu para criar um projeto, ou seja, voltou para o passo 1. Fora isso deu tudo certo!