Uma das maiores vantagens da Raspberry Pi é, na grande maioria de seus modelos, possuir conectividade com ou sem fio à Internet. Isso expande a aplicabilidade e surgimento de novos projetos de forma significativa. Frequentemente, os projetos atuais que envolvem telemetria ou IoT necessitam gravar / enviar dados para outros servidores ou serviços via Internet, tornando assim as placas da linha Raspberry Pi ótimas (senão ideais) para esta aplicação. Este post irá abordar isso na forma do seguinte projeto: envio de temperatura e umidade para uma planilha do Google Sheets através da Raspberry Pi, de modo que você consiga usar o Google Sheets como seu data logger / banco de dados, sendo o projeto programado em linguagem Python.
Material necessário
Para fazer este projeto, em termos de hardware, você precisará de:
- Uma placa Raspberry Pi (qualquer modelo, desde que haja conectividade à Internet) operante, ou seja, já com Raspbian instalado, conectividade à Internet configurada e funcionando e acesso local (com monitor, teclado e mouse) ou remoto (SSH ou VNC) operante.
- Uma fonte DC chaveada 5V/3A micro-USB
- Um sensor de temperatura e umidade DHT22
- Um resistor 10k 1/4W
- Um protoboard de 400 pontos
- Jumpers macho-fêmea
Google Sheets – o que é?
O Google Sheets (ou Google Planilhas, no nome em Português) é uma ferramenta online da Google para criação e edição de planilhas, totalmente grátis. O Google Sheets é, na verdade, parte de uma suite de aplicações de escritório, que atualmente conta com Google Docs (para criação e edição de textos, muito similar ao Word) e Google Presentation (para criação e edição de apresentações, muito simular ao Power Point).
A operação do Google Sheets é muito similar ao já consagrado Excel, inclusive com funções, menus e recursos com mesmo nome, incluindo a possibilidade de importar planilhas no formato do Excel. Por ser online e gratuita, seu uso é muito recomendado já que a partir de um navegador e de uma conexão à Internet já é possível trabalhar com planilhas, sendo 100% indiferente o sistema operacional utilizado (Windows, MacOS ou Linux). O armazenamento das planilhas é feito no Google Drive, espaço em disco virtual que todo usuário Google possui. Ainda, é permitido o compartilhamento das planilhas com outros usuários Google e permite a edição por mais de uma pessoa de forma simultânea.
Ainda, para empresas, há planos comerciais com preços muito convidativos. Toda essa versatilidade tem contribuído para grande aceitação e uso do Google Sheets nas empresas, com algumas delas inclusive substituindo o uso do Microsoft Office pela suite da Google.
Para utilizar o Google Planilhas, basta ter uma conta google (um e-mail GMail) e acessar.
Outro grande ponto forte do Google Sheets é a possibilidade de aplicações externas lerem e escrevem em planilhas através de APIs do Google. Isso torna possível que dispositivos conectados à Internet tenham interação com planilhas de forma simples e rápida. É justamente esse ponto que o projeto deste post explora.
Circuito esquemático
Monte o circuito esquemático do projeto conforme mostra a figura 1:
Obtenção das credenciais para uso da API do Google
Para utilizar o google sheets através da Raspberry Pi, é necessário obter as credenciais para uso da API do Google necessária neste projeto, siga os passos abaixo:
- Primeiramente, faça login na sua conta Google
- Uma vez logado, acesse a criação de um novo projeto no site de bibliotecas de APIs do Google. Link: https://console.developers.google.com/projectcreate
- Na tela de criação do projeto, preencha o nome do projeto (no caso deste post, será “TesteGoogleSheets”) e clique no botão “Criar”. Aguarde alguns segundos enquanto o projeto é criado.
- Você será automaticamente direcionado à tela de informações do seu projeto. Na sessão “API”, clique sobre “Ir para a visão geral de APIs”. Na tela que abrir, localize no lado esquerdo o botão “Biblioteca” e clique nele.
- Você será direcionado ao site da biblioteca de APIs Google. No campi de busca, digite “Google Drive API” e clique sobre a primeira ocorrência (chamada “Google Drive API”, com o símbolo do Google Drive)
- Você serpa direcionado à tela de informações da API do Google Drive. Clique no botão “Ativar” e aguarde alguns segundos até a ativação ser concluída.
- Após a ativação, você será direcionado para a tela de APIs e serviços de seu projeto. Clicando novamente em “Bibliotecas”, procure pela API “Google Sheets API”, clique sobre ela e a ative.
- Após a ativação, você será direcionado para a tela de APIs e serviços de seu projeto. Nela, localize o botão “Criar credenciais” no lado direito da tela.
- Na pergunta “Qual API você usa?”, selecione “Google Drive API”
- Na pergunta “De onde você chamará a API?”, selecione “Servidor da web (por exemplo, node.js, Tomcat)”
- Na pergunta “Que dados você acessará?”, selecione “Dados do aplicativo”
- Na pergunta “Você planeja usar essa API com o App Engine ou o Compute Engine?”, selecione “Não, nenhum” e clique no botão “Preciso de quais credenciais?”
- Uma nova tela irá surgir. Nela, preencha o campo “Nome da conta de serviço” com o nome da conta de serviço da API que deseja. Nesse post, utilizei “ServicoTesteGoogleSheets” como nome de serviço.
- Ainda na mesma tela, em “papel”, selecione “Projeto” e depois “Editor”
- Em “Tipo de chave”, selecione “JSON” e clique no botão “Continuar”
- Será feito automaticamente o download de um arquivo JSON contendo as credenciais para o acesso à API do Google pelo seu projeto. Mude o nome do arquivo para “credenciais.json” e salve-o em local seguro.
- Envie o arquivo JSON para a Raspberry PI, no diretório em que ficará seu projeto. Para esse post, coloquei no diretório home do usuário padrão pi (/home/pi)
- Vá até o Google Sheets (www.google.com/intl/pt-BR/sheets/about/) e crie uma nova planilha chamada “Planilha teste”. Esta será a planilha a qual a Raspberry PI enviará as informações.
- Abra o arquivo JSON de credenciais obtido no passo 16 e busque pela informação “client_email”. Copie (sem as aspas) o e-mail que fica na frente desta informação.
- Na planilha criada no passo 18, localize no lado superior direito o botão “Compartilhar” e clique nele. No campo de texto, insira o e-mail copiado no passo 19 e clique no botão “Enviar”. Aguarde alguns segundos para que o compartilhamento seja concluído.
Preparação da Raspberry Pi para utilizar a API do Google e o sensor de temperatura e umidade
Uma vez obtidas as credenciais para as APIs do Google, é hora de preparar a Raspberry Pi para utilizá-las. Para isso, é preciso instalar duas bibliotecas Python através do pip: gspread e oauth2client. Faça isso utilizando os comandos abaixo no terminal da Raspberry Pi:
sudo pip install gspread sudo pip install pyasn1-modules sudo pip install oauth2client
Para preparar a Raspberry Pi para ler o sensor de umidade e temperatura, faça o procedimento abaixo:
- No terminal da Raspberry Pi, execute os comandos abaixo:
cd ~ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
- Após o downlaod terminar, execute os comandos abaixo:
cd Adafruit_Python_DHT sudo apt-get update sudo apt-get install build-essential python-dev sudo python setup.py install
- Aguarde o fim da instalação da biblioteca do sensor de umidade e temperatura.
Preparação da planilha
Antes de prosseguirmos para o código-fonte do projeto, é necessário preparar a planilha. Esta preparação consiste em inserir os cabeçalhos, para podermos distinguir na hora da leitura da planilha o que é cada informação. Para isso, preencha as células da planilha conforme abaixo:
Célula | Texto a preencher |
A1 | Data/Hora |
B1 | Temperatura |
C1 | Umidade |
O Google Sheets salvará automaticamente a planilha após cada edição.
Código-fonte
O código-fonte do projeto está abaixo. Copie-o e salve-o como google_sheets_sensor.py na pasta da Raspberry Pi em que você colocou o arquivo JSON com as credenciais. Leia atentamente os comentários para maior compreensão do código-fonte.
import Adafruit_DHT import RPi.GPIO as GPIO import gspread from oauth2client.service_account import ServiceAccountCredentials from datetime import datetime import time # Define o tipo de sensor #sensor = Adafruit_DHT.DHT11 sensor = Adafruit_DHT.DHT22 #configura GPIO GPIO.setmode(GPIO.BOARD) # Define a GPIO conectada ao pino de dados do sensor pino_sensor = 25 #carrega as credenciais para uso das APIs do Google scope = ["https://spreadsheets.google.com/feeds","https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name('credenciais.json', scope) client = gspread.authorize(creds) #Informa a planilha do Google Sheets a ser acessada #Sera considerado que todas as informacoes serao escritas somente na primeira aba da planilha sheet = client.open('Planilha teste').sheet1 #Por tempo indeterminado,faz: #- leitura do sensor #- envio das informacoes do sensor (juntamente com a data e hora da medicao) para a planilha do Google Sheets #- aguarda um minuto para a proxima medicao while True: #obtem a data e hora atuais now = datetime.now() datahora = now.strftime("%d/%m/%Y %H:%M:%S") #faz leitura do sensor umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor) if umid is not None and temp is not None: #envia data, hora e informacoes do sensor para Google Sheets linha_a_ser_adicionada = [datahora, str(temp), str(umid)] sheet.append_row(linha_a_ser_adicionada) #aguarda um minuto time.sleep(60)
Exportando dados para o Google Sheets através da Raspberry Pi
Para rodar o projeto, utilize o comando abaixo:
python google_sheets_sensor.py
Feito isso, no seu computador ou smartphone abra o a planilha do Google Sheets usada no projeto e veja as informações sendo enviadas de minuto em minuto, conforme mostra a figura 2.
Gostou deste post sobre como enviar temperatura e umidade para uma planilha do Google Sheets através da Raspberry Pi? Deixe seu comentário logo abaixo.
Por favor atualize. pois nao esta funcionando os passos, de instalação da biblioteca gspread e aout client….
e o link do git hub está vazio
Primeiramente parabéns pelo post!
Mas tentei fazer em um rasp Zero W e apresentou o erro:
Python 3.5.3 (/usr/bin/python3)
>>> %Run google_sheets_sensor.py
File “/home/pi/google_sheets_sensor.py”, line 65
now = datetime.now()
^
SyntaxError: expected an indented block
>>>
Achei engraçado que o erro ocorreu já que no inicio foi importado as bibliotecas sobre tempo e data!
Consegue me dar uma força?
Desde já agradeço!
Giovane, muito obrigado!
O erro é de identação, ou seja, nessa linha tem algum(ns) espaços a mais ou a menos antes de “now = datetime.now()” no seu codigo. Basta deixar no mesmo alinhamento que a linha anterior ou posterior que vai funcionar.
Boa tarde
Ótimo tutorial. Existe a possibilidade de se fazer o mesmo procedimento com com um arduino? (No caso o ESP8266)
Att,
Edson
Edson, boa tarde.
Primeiramente, muito obrigado pela leitura e elogio.
Sim, é possível fazer isso com um ESP8266 ou ESP32, porém pelo que sei é algo meio “indireto” (você envia dados pra um form do Google e, este por sua vez, envia para uma planilha do Google Sheets).
Atenciosamente,
Pedro Bertoleti