Como exportar dados para Google Sheets através da Raspberry Pi 5

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:

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:

Conexão Raspberry Pi e sensor de temperatura
Figura 1 – circuito esquemático do projeto

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:

  1. Primeiramente, faça login na sua conta Google
  2. 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
  3. 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.
  4. 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.
  5. 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)
  6. 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.
  7. 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.
  8. 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.
  9. Na pergunta “Qual API você usa?”, selecione “Google Drive API”
  10. Na pergunta “De onde você chamará a API?”, selecione “Servidor da web (por exemplo, node.js, Tomcat)”
  11. Na pergunta “Que dados você acessará?”, selecione “Dados do aplicativo”
  12. 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?”
  13. 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.
  14. Ainda na mesma tela, em “papel”, selecione “Projeto” e depois “Editor”
  15. Em “Tipo de chave”, selecione “JSON” e clique no botão “Continuar”
  16. 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.
  17. 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)
  18. 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.
  19. 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.
  20. 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.

Google sheets através da Raspberry Pi
Figura 2 – Planilha do Google Sheets com informações lidas e enviadas pela Raspberry Pi

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.

Faça seu comentário

Acesse sua conta e participe

5 Comentários

  1. 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

  2. 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!

    1. 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.

  3. Boa tarde

    Ótimo tutorial. Existe a possibilidade de se fazer o mesmo procedimento com com um arduino? (No caso o ESP8266)

    Att,

    Edson

    1. 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