DIY Raspberry pi com base na escola e sistema de atendimento ao escritório

Tempo de leitura: 13 minutes

Oi hoje vamos fazer o sistema de atendimento raspberry pi.

O QUE VOCÊ PRECISA:

Raspberry Pi
Leitor RFID RC522
Visor LCD 16×2
Potenciômetro de 10k
ProtoBoard
Fios de ligação
Cartão micro SD
Cabo Ethernet
Fonte de energia

 

Preparando o Raspbian para o seu sistema de atendimento RFID

1. Para começar, vamos primeiro garantir que tudo esteja atualizado em nossa instalação do Raspbian executando os dois comandos a seguir no Raspberry Pi.

sudo apt-get update
sudo apt-get upgrade

2. Instalaremos agora todos os pacotes com os quais contaremos nas próximas seções.

Vamos começar instalando build-essential, git, python3-dev, python3-pip e python3-smbus executando o comando abaixo.

sudo apt-get install build-essential git python3-dev python3-pip python3-smbus

 

Construindo o circuito de display LCD 16×2

1. Para iniciar nosso tutorial, começaremos primeiro a configurar o LCD 16×2. Estaremos executando rapidamente o processo de configuração de tudo isso. Se você quiser saber mais, consulte nosso tutorial sobre a tela LCD 16×2.

Para esta seção do tutorial, certifique-se de ter o seguinte pronto para usar.

8 peças de Fio para ProtoBoarde macho para macho
8 peças de Fio para ProtoBoarde macho para fêmea
Visor LCD 16×2
Potenciômetro de 10k Ohm
ProtoBoard

2. Depois de ter todas as peças necessárias, você pode começar a montar o circuito observando os diagramas e as etapas abaixo.

Conectar o LCD ao seu Raspberry Pi é um processo bastante simples se você seguir nosso guia. Incluímos o número PIN físico para cada conexão que você precisa fazer.

Para começar, vamos conectar nossos vários componentes ao ProtoBoard.

5V (pino físico 2) para trilho positivo do ProtoBoard
Aterramento (pino físico 6) ao trilho de aterramento do ProtoBoard
Coloque o visor LCD 16×2 no lado direito do ProtoBoard
Coloque o potenciômetro no lado esquerdo do ProtoBoard ao lado do visor LCD.
Conecte o pino esquerdo do potenciômetro ao trilho de aterramento
Conecte o pino direito do potenciômetro ao trilho positivo

3. Agora comece a conectar o display LCD ao seu Raspberry Pi.

Pino 1 do LCD (aterrado) ao trilho de aterramento do ProtoBoard
Pino 2 do LCD (VCC / 5V) para o trilho positivo do ProtoBoard
Pino 3 do LCD (V0) ao fio do meio do potenciômetro
Pino 4 do LCD (RS) para GPIO4 (pino físico 7)
Pino 5 do LCD (RW) para o trilho de fundo do ProtoBoard
Pino 6 do LCD (EN) para GPIO24 (pino físico 18)
Pino 11 do LCD (D4) para GPIO23 (pino físico 16)
Pino 12 do LCD (D5) para GPIO17 (pino físico 11)
Pino 13 do LCD (D6) para GPIO18 (pino físico 12)
Pino 14 do LCD (D7) para GPIO22 (pino físico 15)
Pino 15 do LCD (LED +) no trilho positivo do ProtoBoard
Pino 16 do LCD (LED -) ao trilho de aterramento do ProtoBoard

 

Testando a tela LCD 16×2

1. Agora que o circuito foi configurado, vamos em frente e testá-lo para garantir que tudo foi conectado corretamente.

Para começar, clone a biblioteca Adafruit CharLCD que iremos utilizar neste projeto. Se a sua placa de vídeo usa o controlador HD44780, ela funcionará sem problemas.

Para clonar a biblioteca para o Raspberry Pi, execute o seguinte comando nela.

git clone https://github.com/pimylifeup/Adafruit_Python_CharLCD.git

2. Agora, com a biblioteca clonada em nosso Raspberry Pi, precisamos executar o script de configuração. Este script instalará a biblioteca para que qualquer script Python possa utilizá-la.

Execute os dois comandos a seguir para mover para o diretório recém-clonado e execute o script setup.py.

cd ./Adafruit_Python_CharLCD
sudo python3 setup.py install

3. Com a biblioteca instalada no Raspberry Pi, precisamos prosseguir e editar um arquivo de exemplo. Precisamos fazer isso para testar o circuito, pois estamos usando pinos diferentes do que o exemplo utiliza.

Comece a editar o arquivo executando o seguinte comando.

nano ~/Adafruit_Python_CharLCD/examples/char_lcd.py

4. Neste arquivo, encontre a seção “# Raspberry Pi pin configuration:” e altere-a para que os valores correspondam aos que temos abaixo.

# Raspberry Pi pin configuration:
lcd_rs        = 4
lcd_en        = 24
lcd_d4        = 23
lcd_d5        = 17
lcd_d6        = 18
lcd_d7        = 22

Depois de fazer as alterações, salve o arquivo pressionando CTRL + X, Y e ENTER.

5. Agora, antes de prosseguir e executar nosso novo exemplo modificado, precisaremos instalar a biblioteca GPIO Python do Raspberry Pi.

Para instalar a biblioteca necessária, execute o seguinte comando.

sudo pip3 install RPi.GPIO

6. Para testar se tudo está funcionando, vamos agora executar o script Python executando o comando abaixo. Se tudo estiver funcionando como deveria, agora você deve ver o texto exibido em seu LCD.

python3 ~/Adafruit_Python_CharLCD/examples/char_lcd.py

 

Construindo o circuito do leitor RFID RC522

1. Agora que você configurou o display LCD de 16 × 2, iremos agora adicionar o leitor RFID a este circuito.

Para esta seção sobre a fiação do RFID RC522 ao circuito, você precisará dos seguintes equipamentos prontos.

1 peça de Fio para ProtoBoard macho para macho
6 peças de Fio para ProtoBoard macho para fêmea
Leitor/Escritor RFID RC522
ProtoBoard

2. Depois de ter tudo o que você precisa para o circuito RFID, podemos prosseguir com a fiação de tudo, isso será um pouco mais complicado, pois o circuito LCD já está configurado.

Observe que este diagrama de circuito pressupõe que você seguiu as etapas da seção anterior para o visor LCD. Se você não estiver utilizando o LCD, certifique-se de conectar o pino físico 6 do Raspberry Pi ao trilho de aterramento do ProtoBoard.

Siga os diagramas e etapas abaixo para conectar o circuito RFID ao Raspberry Pi.

SDA se conecta ao GPIO8 (pino físico 24)
SCK se conecta ao GPIO11 (pino físico 23)
MOSI se conecta ao GPIO10 (pino físico 19)
MISO se conecta ao GPIO9 (pino físico 21)
O GND se conecta ao trilho de aterramento do ProtoBoard.
RST se conecta ao GPIO25 (pino físico 22)
3.3v conecta-se a 3v3 (pino físico 1)

 

Habilitando a interface SPI

1. Com o RFID agora conectado ao nosso Raspberry Pi, precisaremos acessar o raspi-configtool para ativar a interface SPI. Esta interface é necessária para que possamos nos comunicar com o módulo RC522.

Para fazer isso, você precisa primeiro iniciar a ferramenta raspi-config executando o seguinte comando.

sudo raspi-config

2. Ao executar o comando, você verá uma tela mostrando várias opções que você pode configurar.

Por enquanto, estamos interessados ​​apenas em ativar a interface SPI. Se quiser saber mais, você pode verificar o  guia definitivo para a ferramenta Raspi-Config.

Nesta tela, use as teclas de seta para descer e selecione “5 Interfacing Options” e pressione ENTER.

3. Na próxima tela, você desejará usar as teclas de seta para selecionar a opção “P4 SPI”, uma vez selecionada pressione ENTER.

4. Agora você precisará confirmar se deseja habilitar a SPI Interface. Para isso, você vai querer usar as teclas de seta para selecionar “Yes” e, em seguida, pressionar ENTER quando estiver selecionado.

5. A interface SPI agora deve ser habilitada com êxito e você deve ver o texto “The SPI interface is enabled” aparecer na tela.

Agora, antes que a interface SPI esteja totalmente habilitada, precisaremos reiniciar o Raspberry Pi. Podemos fazer isso voltando ao terminal pressionando ENTER e ESC.

Digite o seguinte comando para reiniciar o Raspberry Pi.

sudo reboot

6. Assim que o Raspberry Pi terminar de reinicializar, você pode verificar se a interface SPI foi habilitada executando o seguinte comando.

Este comando irá recuperar a lista de módulos do kernel habilitados e pegar qualquer coisa dessa lista que contenha o texto “spi“.

lsmod | grep spi

Se você vir o texto “spi_bcm2835” aparecer na linha de comando, então você está pronto para prosseguir e testar se o circuito está funcionando corretamente. Uma vez feito isso, podemos configurar nosso sistema de atendimento alimentado por RFID.

Se não aparecer, recomendamos que você verifique o guia sobre como configurar o RFID RC522 para outros métodos de habilitar o módulo de kernel correto.

 

Testando o RFID RC522

1. Vamos agora instalar a biblioteca spidev em nosso Raspberry Pi usando o seguinte comando “pip”.

Contamos com a biblioteca spidev para interagir com a interface do leitor RFID.

sudo pip3 install spidev

2. Agora que instalamos a biblioteca spidev em nosso Raspberry Pi, precisamos fazer o download da biblioteca MFRC522 usando o comando “pip”.

Esta biblioteca é o que fará o trabalho pesado para nosso sistema de atendimento RFID.

sudo pip3 install mfrc522

3. Agora que temos a biblioteca MFRC522 e a biblioteca spidev instaladas em nosso Raspberry Pi, vamos prosseguir e criar um diretório para manter nosso script de teste.

mkdir ~/pi-rfid

4. Agora precisaremos escrever um pequeno script para testar se nosso RC522 é, de fato, capaz de ler cartões RFID e se tudo está conectado corretamente.

Primeiro, vamos abrir nosso novo script executando o seguinte comando, isso criará um arquivo chamado “read.py” em nosso diretório criado recentemente.

nano ~/pi-rfid/read.py

5. Insira as seguintes linhas de código neste arquivo. Se você quiser uma explicação de tudo aqui, recomendamos verificar o guia completo sobre o RFID RC522.

#!/usr/bin/env python

import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522

reader = SimpleMFRC522()
try:
        id, text = reader.read()
        print(id)
        print(text)
finally:
        GPIO.cleanup()

Uma vez feito isso, salve o arquivo pressionando CTRL + X, em seguida, Y e ENTER.

6. Agora teste o RFID RC522 executando o seguinte script e tocando seu chip RFID no leitor.

python3 ~/pi-rfid/read.py

 

O circuito completo do sistema de atendimento RFID Raspberry Pi

1. Com os dois circuitos agora configurados, verifique se tudo está funcionando corretamente. Teste executando os scripts de teste que montamos rapidamente em algumas seções anteriores.

Se estiver tendo problemas, você pode comparar seu circuito final com os diagramas abaixo. Esses diagramas são projetados para dar uma ideia de como o circuito final deve ser.

 

Preparando o Banco de Dados do Sistema de Atendimento RFID

1. Agora, antes de prosseguirmos e programar nosso sistema de atendimento RFID, devemos primeiro preparar e configurar o banco de dados MYSQL. Este banco de dados é onde estaremos acompanhando o atendimento de cada cartão RFID e quem possui esse cartão RFID.

Você pode se aprofundar na configuração do MYSQL um pouco mais profundamente, seguindo o tutorial MySQL e guia PHPMyAdmin. O sistema de atendimento RFID irá guiá-lo através da maioria dos princípios básicos, mas o guia extra irá ensiná-lo a configurar ferramentas úteis como PHPMyAdmin.

Comece instalando o MYSQL em seu Raspberry Pi executando o seguinte comando em seu Pi.

sudo apt-get install mysql-server -y

2. Em seguida, precisaremos executar o script de “secure installation” que acompanha o MYSQL. Este script o conduzirá através de alguns processos para tornar seu servidor MYSQL mais seguro.

Execute este script executando o seguinte comando no terminal do Raspberry Pi.

sudo mysql_secure_installation

Quando solicitado, certifique-se de definir uma nova senha para o servidor MYSQL raiz. Além disso, você deve responder “y” à maioria dos prompts, como desabilitar o acesso de login root ao seu servidor MYSQL.

3. Agora vamos carregar na ferramenta de linha de comando MYSQL, executando o seguinte comando. Você será solicitado a inserir a senha definida na etapa anterior.

Como MariaDB quando instalado utiliza UNIX_SOCKET como método de autenticação por padrão, somos obrigados a fazer o login usando o superusuário, faça isso usando sudo.

sudo mysql -u root -p

4. Vamos começar criando um banco de dados onde iremos armazenar todos os dados que iremos utilizar para nosso sistema de atendimento RFID.

Estaremos batizando este banco de dados de  (attendancesystem) – “sistema de atendimento“. Para criar esse banco de dados, execute o seguinte comando.

CREATE DATABASE attendancesystem;

5. Com o nosso banco de dados criado, vamos agora criar um usuário chamado “Attendanceadmin”, vamos utilizar esse usuário em nossos scripts Python para ler nosso banco de dados recém-criado.

Certifique-se de definir a senha para isso como algo exclusivo e difícil de adivinhar. Para nosso exemplo, usaremos apenas “pimylifeup” como senha.

CREATE USER 'attendanceadmin'@'localhost' IDENTIFIED BY 'pimylifeup';

6. Agora que criamos nosso usuário, precisamos conceder a ele os direitos de acesso ao nosso banco de dados do “attendancesystem”.

Podemos fazer isso executando o seguinte comando. Este comando dará ao nosso usuário “attendanceadmin” privilégios completos em qualquer tabela de nosso banco de dados.

GRANT ALL PRIVILEGES ON attendancesystem.* TO 'attendanceadmin'@'localhost';

7. Antes de criarmos nossas tabelas, precisamos utilizar o comando “use” para interagirmos diretamente com o banco de dados do “attendancesystem”.

Comece a interagir com o banco de dados executando o seguinte comando.

use attendancesystem;

8. Agora que estamos lidando diretamente com o banco de dados que queremos utilizar, podemos agora começar a criar as tabelas onde todos os nossos dados serão armazenados.

Executar os dois comandos a seguir criará as tabelas nas quais contaremos para armazenar dados. Explicaremos os campos dessas tabelas depois de criá-los.

create table attendance(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
   user_id INT UNSIGNED NOT NULL,
   clock_in TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY ( id )
);

create table users(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
   rfid_uid VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY ( id )
);

Você pode sair da ferramenta MYSQL digitando exit;

Agora que criamos as tabelas, vamos dar uma olhada nos dados que iremos armazenar e como os usaremos em nosso script.

Para a mesa de presença, estamos mantendo três dados para cada torneira RFID registrada.

  • id – Este é um número inteiro usado para rastrear a linha atual e aumenta automaticamente.
  • user_id – Este é um número inteiro, e o utilizamos para vincular o atendimento a um usuário em nossa tabela users que possui o mesmo id.
  • clock_in – esta variável armazena um timestamp de data/hora SQL. Este timestamp de data/hora é usado para rastrear quando o usuário toca seu cartão RFID no leitor RFID.

Para a tabela users, temos quatro dados para cada usuário que adicionamos.

  • id – Este é um número inteiro usado para rastrear o usuário atual e aumenta automaticamente.
  • rfid_uid – Esta variável é usada para armazenar o UID que é capturado quando um cartão RFID é tocado no leitor RFID.
  • name – Esta variável armazena o nome da pessoa que possui o cartão RFID.
  • created – usamos esta variável para controlar quando o usuário foi criado.

 

Gravando um usuário no sistema de atendimento

1. Antes de começar a escrever nossos scripts de sistema de atendimento, precisamos primeiro instalar o Python “MYSQL Connector” usando pip.

Instale a biblioteca de conectores executando o seguinte comando em seu Pi.

2. Agora vamos criar uma pasta para guardar tudo para este projeto.

mkdir ~/attendancesystem

3. É hora de começar a escrever nosso primeiro script Python para nosso sistema de atendimento. Este primeiro script permitirá que você crie um usuário com base em um cartão RFID tocado.

Ao tocar no cartão RFID, o script Python solicitará que você insira um nome de usuário para registrar este cartão para uma pessoa.

Comece a escrever a primeira parte do nosso sistema de atendimento executando o seguinte comando.

nano ~/attendancesystem/save_user.py

4. Nesse novo arquivo, escreva as seguintes linhas de código. Explicaremos o que cada seção do código faz à medida que avançamos e por que estamos utilizando esse código.

#!/usr/bin/env python

Adicionamos esta linha para que o sistema operacional saiba que este arquivo deve ser executado usando Python.

import time

Importamos a biblioteca de tempo para que possamos colocar o script para dormir, para que as coisas não ocorram instantaneamente.

import RPi.GPIO as GPIO

Exigimos a biblioteca GPIO para que possamos executar a função de limpeza quando o script terminar.

from mfrc522 import SimpleMFRC522

A biblioteca SimpleMFRC522 é usada para facilitar a comunicação com nosso leitor RFID.

import mysql.connector

Utilizamos o conector MySQL para que possamos conversar com o banco de dados que configuramos anteriormente.

import Adafruit_CharLCD as LCD

Por fim, carregamos a biblioteca Adafruit para falar com LCDs. Esta biblioteca simplifica significativamente o processo de comunicação com nosso monitor 16×2.

db = mysql.connector.connect(
  host="localhost",
  user="attendanceadmin",
  passwd="pimylifeup",
  database="attendancesystem"
)

Nesta seção do código, criamos nossa conexão com nosso servidor MYSQL. Para esta função, passamos todas as informações necessárias para fazer a conexão como host, usuário, nome do banco de dados e senha.

O objeto criado pelo conector é armazenado na variável db para que possamos interagir com o banco de dados facilmente.

Ao inserir esse código, certifique-se de substituir a senha pela que você definiu anteriormente neste guia para o usuário SQL “attendanceadmin”.

cursor = db.cursor()

Aqui, instanciamos uma cópia do objeto cursor de nossa conexão de banco de dados. Utilizamos este objeto para interagir com o banco de dados e executar consultas SQL.

reader = SimpleMFRC522()

Agora preparamos a biblioteca SimpleMFRC522 instanciando-a em nosso objeto leitor. Essa biblioteca nos permitirá conversar facilmente com o RC522 posteriormente no script para ler a entrada do leitor.

lcd = LCD.Adafruit_CharLCD(4, 24, 23, 17, 18, 22, 16, 2, 4);

Nossa linha de configuração final, esta linha prepara a biblioteca CharLCD para lidar com a exibição de 16×2. Para esta função, passamos todos os números de pinos necessários, quantidade de linhas e muito mais.

try:
  while True:
    lcd.clear()
    lcd.message('Coloque o cartão para\nregistrar')
    id, text = reader.read()

Este bloco de código é o início de nossa lógica de criação de usuário. Estaremos resumindo toda a nossa lógica primeiro em uma instrução try:, explicaremos o porquê mais tarde neste guia.

Também envolvemos nossa lógica em um loop True while. Esse loop garantirá que o código a seguir seja executado indefinidamente para que o usuário final possa registrar vários usuários em sucessão.

Em seguida, limpamos o LCD em cada loop para garantir que estamos lidando com uma exibição limpa antes de escrever “Coloque o cartão para registrar” na tela. Este texto solicita que o usuário coloque seu cartão RFID no leitor.

Por fim, utilizamos nossa biblioteca SimpleMFRC522 para ler a entrada de nosso leitor. Esta função irá aguardar até que um usuário coloque seu leitor RFID antes de retornar a id do cartão e o texto armazenado nele.

cursor.execute("SELECT id FROM users WHERE rfid_uid="+str(id))

cursor.fetchone()

Nesta seção, usamos o cursor para executar nosso primeiro bit de SQL. Nesta instrução SQL, estamos simplesmente pesquisando nossa tabela de “usuários” para ver se alguma linha possui um UID RFID correspondente ao ID que recuperamos ao ler o cartão RFID.

Para pegar os dados que recuperamos, utilizamos outra função do objeto cursor, especificamente a função fetchone(). Esta função pegará uma linha dos resultados retornados.

if cursor.rowcount >= 1:
    lcd.clear()
    lcd.message("Substituir\nusuário existente?")
    overwrite = input("Overwite (Y/N)? ")

    if overwrite[0] == 'Y' or overwrite[0] == 'y':
      lcd.clear()
      lcd.message("Substituindo usuário.")
      time.sleep(1)
      sql_insert = "UPDATE users SET name = %s WHERE rfid_uid=%s"
    else:
      continue;
  else:
    sql_insert = "INSERT INTO users (name, rfid_uid) VALUES (%s, %s)"

Começamos nesta seção verificando quantas linhas foram retornadas por nossa última chamada SQL.

Se a chamada SQL retornar alguma linha, precisamos perguntar ao usuário se ele deseja sobrescrever o usuário já existente.

Dentro da instrução if, procedemos para limpar a tela LCD e exibir a mensagem “Substituir usuário existente?” e fornecer um prompt na linha de comando para que o usuário responda Y para substituir ou qualquer outra coisa para cancelar.

Uma vez que a função de entrada tenha recebido a entrada, nós então verificamos se o primeiro caractere dos dados retornados é igual a ‘Y’ ou ‘y’.

Se o primeiro caractere for igual ao que esperamos, limpamos o LCD novamente. Em seguida, exibimos a mensagem “Substituindo usuário” por um segundo.

Por último, construímos a consulta SQL para atualizar a entrada existente com o novo nome que especificamos na próxima etapa. Fazemos esse processo em vez de excluir a entrada antiga e adicioná-la novamente

Se o usuário responder qualquer coisa, exceto ‘Y‘ e ‘y‘ para a função de entrada, então voltamos para o início do loop usando “continuar“.

Se esta não for uma entrada duplicada, construímos uma consulta SQL diferente para criar uma nova entrada em nossa tabela de “users”. Esta nova entrada conterá o novo nome que especificamos no próximo bloco de código e a ID RFID que obtivemos quando o usuário tocou seu cartão.

   lcd.clear()
    lcd.message('Digite o novo nome')
    new_name = input("Nome: ")

    cursor.execute(sql_insert, (new_name, id))

    db.commit()

    lcd.clear()
    lcd.message("Usuario " + new_name + "\nSalvo")
    time.sleep(2)
finally:
  GPIO.cleanup()

Nosso segmento final de código é bastante simples e envolve tudo. Começamos limpando o LCD novamente e solicitando ao usuário no LCD que ele insira um novo nome.

Enquanto isso, no console, o texto “Nome:” deve aparecer conforme utilizamos a entrada para aguardar a entrada do usuário.

Depois que um usuário insere um nome no console e pressiona Enter, passamos a utilizar o objeto cursor para executar a consulta que formamos na seção anterior do código.

.

Também criamos uma tupla que é passada para a função execute. Esta tupla contém o novo nome e a id do cartão RFID. Ambos os valores passarão automaticamente para nossas strings de consulta na execução.

Finalmente, confirmamos as alterações no banco de dados chamando o objeto db com a função .commit(). Se não chamarmos esta função, nossas consultas INSERT e UPDATE não ocorrerão.

Terminamos nossa lógica de código principal limpando o LCD novamente e exibindo uma mensagem que o novo usuário salvou. Executamos um sono rápido de 2 segundos para dar ao usuário tempo suficiente para ver a mensagem antes de reiniciar o loop.

Por último, temos nossa instrução finally:, esta é a outra parte de nossa instrução try:. Este trecho de código garante que não importa o que aconteça, executaremos a função GPIO.cleanup. Por exemplo, se pressionarmos CTRL + C enquanto o script estiver em execução, ele ainda deve limpar o status do GPIO.

6. Esperançosamente, neste ponto, você terá terminado de escrever o script no arquivo.

No entanto, se quiser verificar e garantir que tudo está correto, você pode encontrar a versão completa do código abaixo.

Quando estiver satisfeito com tudo, salve o arquivo pressionando CTRL + X, depois Y e finalmente ENTER.

#!/usr/bin/env python

import time
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
import mysql.connector
import Adafruit_CharLCD as LCD

db = mysql.connector.connect(
  host="localhost",
  user="attendanceadmin",
  passwd="pimylifeup",
  database="attendancesystem"
)

cursor = db.cursor()
reader = SimpleMFRC522()
lcd = LCD.Adafruit_CharLCD(4, 24, 23, 17, 18, 22, 16, 2, 4);

try:
  while True:
    lcd.clear()
    lcd.message('Coloque o cartão para\nregistrar')
    id, text = reader.read()
    cursor.execute("SELECT id FROM users WHERE rfid_uid="+str(id))
    cursor.fetchone()

    if cursor.rowcount >= 1:
      lcd.clear()
      lcd.message("Substituir\nusuário existente?")
      overwrite = input("Sobrescrever (Y/N)? ")
      if overwrite[0] == 'Y' or overwrite[0] == 'y':
        lcd.clear()
        lcd.message("Substituindo usuário.")
        time.sleep(1)
        sql_insert = "UPDATE users SET name = %s WHERE rfid_uid=%s"
      else:
        continue;
    else:
      sql_insert = "INSERT INTO users (name, rfid_uid) VALUES (%s, %s)"
    lcd.clear()
    lcd.message('Digite o novo nome')
    new_name = input("Nome: ")

    cursor.execute(sql_insert, (new_name, id))

    db.commit()

    lcd.clear()
    lcd.message("Usuario " + new_name + "\nSalvo")
    time.sleep(2)
finally:
  GPIO.cleanup()

7. Com nosso script save_user salvo, vamos prosseguir e dar uma olhada para garantir que tudo esteja funcionando como deveria e que não haja erros ao copiar o código.

Execute o script executando o seguinte comando.

python3 ~/attendancesystem/save_user.py

8. Toque em seu cartão RFID e veja se tudo está funcionando como planejado, caso não verifique seu código e fiação. Se você vir “Salvo pelo usuário”, tudo deve estar funcionando.

 

Fazer projetos eletrônicos é muito simples conosco.