Como usar um leitor RFID com um Raspberry Pi Pico

Cartões e tags RFID estão por toda parte! Nós os usamos em edifícios para controle de acesso. Impressoras e fotocopiadoras podem usá -las para identificar os funcionários. Tags de marcação de gado e identificação de animais de estimação usam uma forma de RFID. A tecnologia para ler um dispositivo RFID é barato, por cerca de US $ 5, você pode obter o leitor e, por US $ 4, um Raspberry Pi Pico pode ler os IDs dos cartões / tags.
Nisso, aprenderemos a ler tags e cartões RFID usando um leitor MFRC522 e um Raspberry Pi Pico, o objetivo será criar um sistema fictício de controle de acesso RFID que permitirá que os usuários entrem em um edifício ou alertem a segurança para removê -los. Antes que possamos fazer isso, precisamos identificar o ID de nossos cartões / tags. A primeira seção disso como fará exatamente isso e, em seguida, inseriremos algum código para controlar dois LEDs para simular o mecanismo de travamento.
Para isso como você precisará
- Raspberry Pi Pico em execução Micropython
- MFRC522 RFID Reader
- Pão grande
- 11 x fios de saltador masculino para masculino
- LED verde
- LED vermelho
- Resistores de 2 x 100 ohm (marrom – preto – marrom – ouro)
Construindo o hardware
A construção de hardware é dividida em duas seções. Primeiro, a fiação do leitor RFID MFRC522. O leitor usa o SPI para se comunicar com o Raspberry Pi Pico e exige sete pinos para fazê -lo. Dois são para poder (3,3V e GND) e o restante são para SPI.
MFRC522 | Raspberry Pi Pico | Cor de fio |
---|---|---|
SDA | Gp1 | Azul |
Sck | Gp2 | Laranja |
Mosi | Gp3 | Roxo |
Miso | GP4 | Azul |
Gnd | Qualquer gnd | Preto |
RST | GP0 | Branco |
3.3 | 3v3 out (pino físico 36) | Vermelho |
Segundo, são nossas saídas. Para ver se o cartão correto foi apresentado, precisamos adicionar dois LEDs. Vermelho para um cartão RFID incorreto, verde para um cartão correto. Os LEDs se conectam a um pino GPIO que controlamos para ativar/desativar o LED e qualquer pino GND disponível através de um resistor de 100 ohm. Você pode usar um resistor de 220 ou 330 ohm, eu tinha cerca de 100 ohm resistores na minha mesa. Precisa descobrir o resistor correto? Nós temos Tenho um guia para você!
CELE DE CABELAR – COLUNA 0 | Raspberry Pi Pico | Cor de fio |
---|---|---|
Ânodo LED vermelho (+) | Gp14 | Vermelho |
Catodo LED vermelho (-) | Qualquer gnd | Preto |
Ânodo LED verde (+) | Gp15 | Verde |
Catodo LED verde (-) | Qualquer gnd | Preto |
Antes de seguir em frente, verifique se sua fiação está correta.
Instalando o software RFID Reader
O MFRC522 é um leitor RFID simples e, para simplificar ainda mais, estamos usando um módulo Micropython que fará um pouco de trabalho em usar o leitor. O módulo, pico-rfid é de amigo do hardware de Tom, Kevin Mcaleer, e é baseado no trabalho de Danjperron.
1. Conecte o seu Raspberry Pi Pico ao seu computador e abra Thonny. Assumimos que você já sabe como configurar seu Raspberry Pi Pico. Se não, Temos este guia útil.
2. Crie um novo arquivo em branco e copie o conteúdo deste link no arquivo em branco. Em seguida, salve -o no Raspberry Pi Pico como mfrc522.py. Este é o módulo / biblioteca Python que permitirá que nosso código converse com o leitor RFID.
Escrevendo o código do projeto
Com toda a configuração completa, agora começamos a codificar o projeto. Para isso, usaremos novamente Thonny e escreveremos o código para verificar o ID de qualquer cartão RFID apresentado ao leitor. Para esta primeira parte, precisaremos anotar o ID, pois mais tarde o usaremos com um teste condicional que verifique se o ID corresponde a um valor codificado, então ele permitirá a entrada. Caso contrário, teremos uma mensagem de acesso negado.
1. Crie um novo arquivo em branco em Thonny.
2. Importe três módulos (bibliotecas) para o uso do leitor RFID MFRC522, controlando o ritmo do código e para usar o GPIO.
from mfrc522 import MFRC522
import utime
from machine import Pin
3. Crie um objeto, leitor, para informar o código em que o leitor RFID está conectado.
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
4. Crie dois objetos para os LEDs vermelhos e verdesinformando o código onde os LEDs estão conectados e que são dispositivos de saída para os quais desejamos enviar corrente.
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
5. Escreva uma mensagem curta para o usuário, instruindo -os a apresentar o cartão ao leitor. O “\ n” é a sintaxe do Python para introduzir uma nova linha no final da função print ().
print("Present the card to the reader\n")
6. Crie uma lista chamada “Anteriorcard” e armazene o valor zero dentro dela. Usaremos esta lista mais tarde para armazenar o ID do cartão atual.
PreviousCard = (0)
7. Crie um pouco o verdadeiro loop para executar continuamente o código nele.
while True:
8. Inicialize o leitor para que esteja pronto para uso.
reader.init()
9. Crie uma tupla para armazenar o status do leitor e o tipo de tag RFID.
(stat, tag_type) = reader.request(reader.REQIDL)
10. Um condicional se lerá o conteúdo do cartão se o leitor estiver pronto. Em seguida, atualizará os objetos Stat e UID com detalhes do cartão.
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
11. Se o UID do cartão for o mesmo que o valor armazenado no objeto anterior, o código continuará. Isso acontecerá quando o mesmo cartão for mostrado repetidamente ao leitor.
if uid == PreviousCard:
continue
12. Crie uma declaração se condicional para verificar se a leitura do cartão estava OK.
if stat == reader.OK:
13. Imprima uma mensagem para o usuário e, em seguida, armazene o UID do cartão em um objeto chamado “cartão”. Em seguida, imprima os detalhes do cartão no shell python.
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
14. Atualize o objeto anterior com o UID do cartão apresentado.
PreviousCard = uid
15. Crie uma condição else que seja executada quando nenhum cartão for apresentado. Atualizando o objeto anterior. Em seguida, adicione uma pausa de 50ms ao código antes que o loop principal se rependa.
else:
PreviousCard=(0)
utime.sleep_ms(50)
16. Salve o código no Raspberry Pi Pico como leitor.py e clique em Executar >> Executar script atual (ou pressione o botão Green Play). Siga as instruções e apresente o cartão / tag RFID ao leitor.
17. Copie os detalhes do cartão inteiro, este é o UID do cartão RFID e precisaremos disso para a próxima parte disso. O UID se parece com isso, o seu será diferente.
(0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80)
Listagem completa de código
from mfrc522 import MFRC522
import utime
from machine import Pin
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
print("Present the card to the reader\n")
PreviousCard = (0)
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if uid == PreviousCard:
continue
if stat == reader.OK:
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
PreviousCard = uid
else:
PreviousCard=(0)
utime.sleep_ms(50)
Temos o código, agora precisamos dizer ao código do projeto que queremos usar esse código para nos dar acesso e iluminar o LED verde. Se outro cartão / tag for apresentado ao leitor, o LED vermelho acenderá.
1. Entre essas duas linhas, crie novas linhas de código.
print(card)
NEWCODE GOES HERE
PreviousCard = uid
2. Crie uma condição IF que verifique o UID do seu cartão. Observe que parece uma lista de Python, mas, na realidade, é armazenada como uma string, por isso precisamos envolver o valor em “”. Não se esqueça dos () colchetes.
if card == "(0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80)":
3. Se o valor armazenado no objeto do cartão corresponder ao valor codificado, imprima “acesso concedido” ao shell python.
print("ACCESS GRANTED")
4. Crie um loop para alternar o LED verde / desativado dez vezes., Com uma lacuna de 0,1 segundo entre cada mudança de estado. Desligue o verde liderado no final do loop for.
for i in range(10):
green.toggle()
utime.sleep(0.1)
green.off()
5. Use uma condição else para quando um cartão / tag não reconhecido for apresentado ao leitor. Isso atingirá o LED vermelho e desligado, assim como o LED verde.
else:
print("ACCESS DENIED")
for i in range(10):
red.toggle()
utime.sleep(0.1)
red.off()
6.Salve o código como leitor.py no Raspberry Pi Pico. Clique em Executar >> Execute o script atual (ou pressione o botão Green Play). Siga as instruções e apresente o cartão / tag RFID ao leitor. Se o cartão estiver correto, o LED verde piscará e o shell python imprimirá “Acesso concedido”. Experimente outro cartão / tag RFID, isso deve fazer o LED vermelho acender e o shell python imprimirá “Acesso negado”
Listagem completa de código
from mfrc522 import MFRC522
import utime
from machine import Pin
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
print("Present the card to the reader\n")
PreviousCard = (0)
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if uid == PreviousCard:
continue
if stat == reader.OK:
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
if card == "(0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80)":
print("ACCESS GRANTED")
for i in range(10):
green.toggle()
utime.sleep(0.1)
green.off()
else:
print("ACCESS DENIED")
for i in range(10):
red.toggle()
utime.sleep(0.1)
red.off()
PreviousCard = uid
else:
PreviousCard=(0)
utime.sleep_ms(50)