Raspberry Pi Zero W e Google Firebase: salvando TAGs RFID no banco de dados 9

Hoje em dia, plataformas Cloud exercem um importante papel nos sistemas de automação. Afinal, utilizar bem uma plataforma Cloud pode significar maior escalabilidade do projeto, menores custos e maior eficiência do que se está automatizando. Sendo assim, este post irá ensinar os primeiros passos na utilização da plataforma Cloud do Google Firebase, através de um projeto que irá registrar em um banco de dados da plataforma todas as TAGs RFID lidas em uma Raspberry Pi Zero W.

Material necessário

Para fazer este projeto, você precisará de:

Google Firebase: o que é?

O Google Firebase, em resumo, é uma plataforma Cloud do tipo BaaS (Backend as a Service). Em termos de funcionalidades, ela é completa, permitindo fazer desde um banco de dados em tempo real (No SQL) até aplicações e sistemas completos em nuvem. Ou seja, o Google Firebase objetiva deixar o backend de qualquer sistema / produto por conta dele, fazendo com que o desenvolvedor possa utilizar seu tempo e esforço somente no produto a ser desenvolvido.

 

Google Firebase
Figura 1 – logo do Google Firebase

A utilização do Google Firebase pode ser grátis ou paga, dependendo dos recursos que você precisará em seu projeto.

Criação de conta / projeto e realtime database no Google Firebase

Para criar uma conta / projeto no Google Firebase, siga o procedimento abaixo. Antes, certifique-se de possuir uma conta G-Mail.

  1. Faça login na conta G-Mail desejada (a qual será vinculada à conta do Firebase)
  2. Acesse o site do console do Google Firebase: https://console.firebase.google.com/
  3. Pode ser que seja solicitado novamente o login na sua conta G-Mail e uma verificação de autenticidade. Siga as instruções da tela até que sua autenticidade seja confirmada
  4. Clique no botão Adicionar Projeto
  5. Na janela que surgir, preencha seu Nome de Projeto (coloque algum nome familiar, ele fará parte posteriormente da URL de seu projeto), clique nos dois check boxes sobre os termos de uso e clique no botão Criar Projeto
  6. Aguarde alguns segundos até que seu projeto seja criado. Após a criação, clique no botão Continuar

Para criar um realtime database (banco de dados em tempo-real no Google Firebase, do tipo No SQL), siga as instruções abaixo:

  1. Uma vez no console do seu projeto no Google Firebase, na parte sobre database, clique sobre o botão Começar. Observe a figura 2.
    Iniciar com o Firebase
    Figura 2 – Google Firebase console

     

  2. Na tela que surgir, clique no botão Criar banco de dados na parte Realtime database. Observe a figura 3.
    Criar banco de dados
    Figura 3 – criação de banco de dados no Google Firebase

     

  3. Na tela que surgir, escolha a opção Iniciar no Modo de Teste (observe a figura 4). Esta opção irá ignorar autenticações ao gravar e/ou ler dados do banco de dados.
    IMPORTANTE: isto foi feito somente para simplificar o aprendizado e para fins de exemplo, logo em projetos reais que serão utilizados no dia-a-dia, é altamente recomendável aplicar a autenticação.

    Autenticação do Firebase
    Figura 4 – seleção do modo teste no banco de dados

    Após a seleção do modo de teste, clique no botão Ativar.

  4. Irá surgir a página de gerenciamento de seu realtime database. É recomendável você adicionar esta página aos favoritos, já que há chances de você acessá-la muitas vezes.
    Nesta tela, é possível visualizar todos os dados de seu banco de dados e obter a URL de seu projeto. Copie a URL do projeto e guarde-a em um lugar de fácil acesso para você. A URL de projeto fica localizada conforme indicação na figura 5.

    URL do Projeto no Firebase
    Figura 5 – tela de gerenciamento do realtime database

     

  5. Pronto! Agora você está pronto para enviar informações para o seu realtime database!

Circuito esquemático do projeto

O circuito esquemático do projeto pode ser visualizado na figura 6.

 

Circuito do Projeto
Figura 6 – circuito esquemático

 

Configuração da interface SPI e instalação de bibliotecas 

Para a configuração da interface SPI da Raspberry Pi e instalação das bibliotecas necessárias, leia atentamente este artigo aqui do blog.

Além destas, será necessário a instalação da biblioteca para interagir com o Google Firebase via Python. Para instalar esta biblioteca, execute o comando abaixo:

sudo pip install python-firebase

Preparação do diretório do projeto para o código-fonte

Antes de partir para o código-fonte propriamente dito, é preciso popular o diretório em que você deseja colocar o projeto com um arquivo Python relativo a comunicação com o leitor RFID. Para isso, acesse o diretório que deseja que seu projeto esteja e digite os comandos abaixo:

wget https://raw.githubusercontent.com/mxgxw/MFRC522-python/master/MFRC522.py

Código-fonte do projeto

No mesmo diretório do item anterior (diretório que você deseja que seu projeto fique), crie um arquivo chamado rfid_firebase.py e cole nele o código-fonte abaixo.
IMPORTANTE: não se esqueça de colocar a URL do seu projeto. Leia os comentários do código-fonte para maior compreensão.

from time import sleep
 import datetime
 from firebase import firebase
 import urllib2, urllib, httplib
 import json
 import os
 import RPi.GPIO as GPIO
 import MFRC522
 from functools import partial

#URL do seu Firebase. Substitua aqui a sua
 URL_Firebase = 'https://raspberry-pi-temp-51793.firebaseio.com/'

#'firebase' e o objeto que permitira interagir com seu real-time database do Firebase.
 firebase = firebase.FirebaseApplication(URL_Firebase, None)

#Funcao: envia a identificacao da TAG RFID lida para o Firebase
 #Parametros: tag lida (string)
 #Retorno: nenhum
 def envia_ID_TAG_RFID_firebase(tag_lida):
     global firebase

    data_hora = datetime.datetime.now()
     dados_firebase = {"TAG": tag_lida, "Data_Hora": data_hora}
     firebase.post('/rfid/id', dados_firebase)
     print 'TAG '+tag_lida+' enviada para o Firebase.'
     return

#############################
 # Programa principal #
 #############################
 GPIO.setwarnings(False)
 GPIO.cleanup()

#Inicia o modulo RC522.
 LeitorRFID = MFRC522.MFRC522()

while True:
     #Aguarda leitura de TAG pelo modulo
     status, tag_type = LeitorRFID.MFRC522_Request(LeitorRFID.PICC_REQIDL)

    #Se a leitura foi bem sucedida, envia a tag lida ao Firebase
     if (status == LeitorRFID.MI_OK):
         status, uid = LeitorRFID.MFRC522_Anticoll()

        if status == LeitorRFID.MI_OK:
             #compoe a string da tag com base na leitura da tag feita pelo RFID-RC522
             uid = ':'.join(['%X' % x for x in uid])
             print 'TAG detectada! ID: ', uid

            #Envia tag lida pro Firebase
             envia_ID_TAG_RFID_firebase(uid)

           #Aguarda dois segundos para aguardar uma nova leitura de TAG
            sleep(2)

Projeto em ação

Para rodar o projeto, basta executar o comando abaixo:

python rfid_firebase.py

Agora, aproxime uma TAG RFID (cartão ou chaveiro do kit) do leitor e aguarde ser escrito na tela que a TAG foi lida. Feito isso, vá até a sua página de gerenciamento do realtime database.
Você deverá ver cada TAG lida registrada conforme mostra a figura 7.

 

Registro das TAGs no Firebase
Figura 7 – leituras de TAGs RFID registradas no realtime database do Google Firebase

Gostou deste post sobre como enviar leituras de TAGs RFID para um banco de dados no Google Firebase? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

9 Comentários

  1. Olá Pedro!

    Gostaria de saber como devo proceder no caso de “Iniciar no modo bloqueado”, devo mudar alguma coisa no código do Raspberry Pi?

    Obrigado!

  2. Olá Pedro! Obrigado pelo tutorial! Está sendo bem útil para meu projeto de Faculdade, mas tenho um problema com o código do firebase, rodei ele pelo terminal e ele aparece esse erro:

    First argument must be a valid dictionary.: No such file or directory
    Abortado

    Você sabe o que poderia ser? Obrigado desde já!

  3. thanks bro it was very helpful in completing my BE project . Can u grive me your email for further contact purpose

    1. Olá,

      É muito bom saber que nosso trabalho pode te ajudar.

      Abraço!
      Rosana – Equipe MakerHero

  4. Gostaria de saber se tem Rfid para Arduino com longa distância ou se você de algo do tipo que possa ajudar.

    1. Olá Washington!

      Acredito que com uma antena apropriada seja possível ler RFID a distância. Mas são distâncias curtas, na faixa de 1 ou 2 metros, não sei se é possível mais que isso com arduino.

      Abraços!

      André – Equipe MakerHero

  5. Olá Pedro,
    Gostei muito deste tutorial!!!
    Eu tenho uma dúvida; gostaria de saber se esse módulo RFID consegue ler Tags ISO 15693.

    1. Filipe, boa tarde.

      Muito obrigado pelos elogios!
      Infelizmente, não sei responder sua pergunta (nunca trabalhei com tags ISO 15693).

      Atenciosamente,
      Pedro Bertoleti

  6. Olá Pedro,

    Gostei muito deste tutorial!!! De fato muito claro e fácil!
    Só não consegui identificar a URL do meu projeto…segui os passos, mas a figura 5 não bate com a minha tela.
    Poderia dar uma força?