RC522 là một Mô-đun RFID đa giao tiếp cho Arduino và Vi điều khiển. RC522 được gọi là MFRC-522 do vi điều khiển bán dẫn NFX của nó. Mô-đun cho phép các nhà phát triển giao tiếp nó với bất kỳ vi điều khiển dựa trên SPI, I2C và UART nào khác. Nó đi kèm với một thẻ thẻ RFID và fob khóa bao gồm 1KB bộ nhớ.
Mô-đun đọc RFID RC522
Thẻ RFID và chìa khóa fob
Mô-đun RC522 hoạt động trên tần số 13.56 MHz và nó có thể hoạt động như một đầu đọc và ghi cho thẻ UID / RFID. Các thẻ RFID giao tiếp với mô-đun ở khoảng cách ngắn với tần số vô tuyến do kỹ thuật cảm ứng lẫn nhau. Trong hầu hết các sản phẩm bảo mật và thương mại, mô-đun có hiệu quả vì nó có thể phát hiện được các lỗi và sự cố với Thẻ RFID.
Thẻ RFID là một thiết bị lưu trữ bộ nhớ có bộ nhớ trị giá 1KB. Bộ nhớ này được chia thành 16 cung (0-15), trong đó mỗi khu vực được chia thành 4 khối (0,1,2,3). Mỗi khối là 16 byte mỗi khối. Như vậy 4 khối x 16 byte x 16 cung = 1024 byte là 1KB
RFID RC522 sử dụng cảm ứng lẫn nhau để kích hoạt thẻ và 13.56MHz để truyền dữ liệu.
Thẻ RFID có thể sử dụng từ cả hai phía của mô-đun ở mức tối đa 5cm.
Cần 3.3V duy nhất để kích hoạt thiết bị.
Chế độ ngủ tự động của nó làm cho nó ít mô-đun tiêu thụ điện năng hơn.
Mô-đun có ba loại giao tiếp (UART, SPI, I2C). Do đó, nó có thể sử dụng được với hầu hết mọi bộ vi điều khiển hoặc thiết bị trên thị trường.
Thẻ và đầu đọc RFID (RC522) có thể truyền dữ liệu lên đến 10Mb / s.
RFID có hầu hết việc sử dụng như một thiết bị bảo mật.
Ở một số công ty, các thiết bị sử dụng với các mặt hàng mua sắm.
Một số sân bay cũng bắt đầu sử dụng RFID để xác định và theo dõi hành lý và các vật dụng khác.
Hệ thống chấm công hoặc đỗ xe cũng sử dụng RFID để giữ an toàn cho hệ thống.
Trong mô-đun này, chỉ có hai loại chân. Vì vậy, cái đầu tiên là sức mạnh và cái thứ hai là chân giao tiếp. Do đó, thiết bị có thể có chip vi điều khiển trên chính nó nhưng nó chỉ làm cho nó hoạt động như một RFID. Bộ vi điều khiển tích hợp sẽ không làm cho mô-đun trở thành một thiết bị độc lập.
Tất cả các chân của Đầu đọc thẻ RFID MFRC / RC522 là:
Bảng dưới đây cho thấy tám chân được tìm thấy trên mô-đun RFID RC522. Bạn cũng có thể xem mô tả của họ.
Ghim |
Mô tả:__________ |
VCC |
Các chân nguồn là VCC. Trong một số phiên bản của RC522, chân này được ký hiệu là 3V3 trên mô-đun thay vì VCC. |
RST |
Đây là chân đặt lại cho mô-đun. Do đó, nó sẽ đặt lại thiết bị trong trường hợp có lỗi khi thiết bị không đưa ra bất kỳ phản hồi nào. |
GND · |
Ground giúp tạo ra điểm chung với mọi thiết bị bên ngoài, ví dụ như Nguồn điện hoặc vi điều khiển. |
IRQ · |
Thiết bị có thể chuyển sang chế độ ngủ để tiết kiệm năng lượng. Vì vậy, IRQ giúp đánh thức nó. |
MISO |
Chân này kết nối với bộ vi điều khiển để giao tiếp SPI. Tuy nhiên, nó chuyển dữ liệu từ mô-đun sang vi điều khiển. |
MOSI · |
MOSI là chân nhập dữ liệu cho mô-đun RFID trong giao tiếp SPI |
SCK · |
Các chân SCK giúp gửi xung đồng hồ trong giao tiếp SPI. |
SS |
Chân SS là một con chip cho phép pin trong giao tiếp SPI. Do đó, nó nhận được tín hiệu khi Master (Raspberry Pi Pico) phải thực hiện giao tiếp SPI. |
RGB LED là một diode phát ra ánh sáng màu đỏ, xanh lá cây và xanh lam. Nó bao gồm ba đèn LED kín đáo: đỏ, xanh lá cây và xanh lam được đặt trong một gói duy nhất để bằng cách kết hợp ba màu này, chúng ta có thể tạo ra bất kỳ màu nào. Bất cứ khi nào điện áp được đặt vào cực màu đỏ, đèn đỏ sẽ phát ra và tương tự khi điện áp được đặt vào cực Xanh lục và xanh lam, đèn xanh lục và xanh lam sẽ phát ra tương ứng.
Đèn LED RGB có bốn chân. Các chân này được sử dụng để kiểm soát màu sắc của đèn LED. Chân dài nhất là cực dương hoặc cực âm tùy thuộc vào loại đèn LED RGB.
Có hai loại điốt phát sáng RGB có sẵn trên thị trường.
Loại Anode phổ biến: Trong loại Anode thông thường, Anode là phổ biến cho cả ba điốt phát sáng và Anode của tất cả các điốt phát sáng kết nối với nguồn điện dương. Các thiết bị đầu cuối khác kết nối với bộ vi điều khiển và chúng tôi bật và tắt các thiết bị đầu cuối này theo đèn LED mà chúng tôi muốn bật hoặc tắt.
Loại catốt thông thường: Trong loại Cathode thông thường, Cực âm của cả ba điốt phát sáng là phổ biến và đầu cuối catốt thông thường được kết nối với mặt đất của nguồn điện và các thiết bị đầu cuối khác của mỗi đèn LED nguồn được kết nối với vi điều khiển pic theo đó đèn LED chúng ta muốn bật hoặc tắt.
Hình ảnh của cả cực dương thông thường và các loại cực âm phổ biến RGB LED được hiển thị dưới đây:
Sơ đồ chân
Đèn LED RGB và sơ đồ chân của nó được hiển thị bên dưới.
Ghim |
Mô tả:__________ |
1 |
Đây là ghim chọn màu đỏ. Kết nối với chân đầu ra kỹ thuật số của vi điều khiển. |
2 |
Đây là chân nối đất cho loại catốt thông thường và chân Vdd 5 volt cho loại cực dương thông thường. |
3 |
Đây là ghim chọn màu Xanh lam. Kết nối với chân đầu ra kỹ thuật số của vi điều khiển. |
4 |
Đây là ghim chọn màu xanh lá cây. Kết nối với chân đầu ra kỹ thuật số của vi điều khiển. |
Điểm cần lưu ý:
Để hạn chế dòng điện sẽ chạy qua RGB LED , chúng ta sẽ cần sử dụng ba điện trở một cho mỗi chân màu. Nếu chúng ta không sử dụng điện trở hoặc nếu chúng ta sử dụng giá trị điện trở thấp, đèn LED sẽ bị phá hủy. Chúng ta cần sử dụng điện trở 220 ohm trở lên. Giá trị điện trở càng cao, độ sáng của đèn LED càng thấp.
Đèn LED RGB cũng đi kèm trong một mô-đun với các điện trở giới hạn hiện tại đã được gắn vào. Chúng cũng có sẵn trong hai loại: mô-đun catốt chung và mô-đun cực dương chung.
Mô-đun LED RGB đã đi kèm với các điện trở giới hạn hiện tại, vì vậy chúng tôi không thêm điện trở bên ngoài.
Dưới đây, bạn có thể xem hai mô-đun bằng mã pin của chúng.
Chúng tôi sẽ cần các thành phần sau để kết nối bảng Raspberry Pi Pico của chúng tôi với mô-đun RC522 và mô-đun LED RGB.
Raspberry Pi Pico
Mô-đun đầu đọc RFID RC522
Mô-đun LED RGB
Breadboard
Dây kết nối
Mô-đun RC522 có 8 thiết bị đầu cuối mà chúng tôi sẽ kết nối với Raspberry Pi Pico. Vì RC522 yêu cầu điện áp hoạt động trong phạm vi 2.5-3.3V, do đó đầu cuối VCC của mô-đun RC522 sẽ chung với chân 3.3V của bảng. Tương tự như vậy, tất cả các thiết bị sẽ có điểm chung.
Giao tiếp SPI giúp giao tiếp với mô-đun đầu đọc RFID, phổ biến trong mọi bộ vi điều khiển. Vì vậy, chúng tôi sẽ sử dụng giao diện SPI của Raspberry Pi Pico. Trước tiên chúng ta hãy tìm hiểu về giao diện Raspberry Pi Pico SPI.
Raspberry Pi Pico hỗ trợ hai thiết bị ngoại vi. Cả hai chân mô-đun SPI đều có thể truy cập được thông qua các chân GPIO của Raspberry Pi Pico. Bảng sau đây cho thấy kết nối của các chân GPIO với cả hai mô-đun SPI. Mỗi kết nối của chân điều khiển SPI có thể được cấu hình thông qua nhiều chân GPIO như trong hình. Nhưng trước khi sử dụng SPI, bạn nên định cấu hình trong phần mềm chân GPIO nào bạn muốn sử dụng với một thiết bị ngoại vi SP cụ thể.
Bộ điều khiển SPI |
Chân GPIO |
SPI0_RX |
GP0 / GP4 / GP16 |
SPI0_TX |
GP3 / GP7 / GP19 |
SPI0_SCK |
GP2 / GP6 / GP18 |
SPI0_CSn |
GP1 / GP5 / GP17 |
SPI1_RX |
GP8 / GP12 |
SPI1_TX |
GP11 / GP15 |
SPI1_SCK |
GP10 / GP14 |
SPI1_CSn |
GP9 / GP13 |
Hình dưới đây cho thấy các chân SPI của Raspberry Pi Pico.
Bảng dưới đây cho thấy các kết nối giữa các thiết bị mà chúng tôi sẽ sử dụng trong dự án của mình.
Mô-đun đọc RFID RC522 |
Raspberry Pi Pico |
VCC |
3.3V |
RST |
GP0 · |
GND · |
GND · |
IRQ · |
Không được kết nối |
MISO |
GP4 · |
MOSI · |
GP3 · |
SCK · |
GP2 · |
SDA |
GP1 · |
Chúng tôi đang sử dụng mô-đun LED RGB catốt phổ biến cho dự án này. Bảng dưới đây cho thấy các kết nối chúng tôi đang sử dụng giữa mô-đun LED và Raspberry Pi Pico.
Mô-đun LED RGB |
Raspberry Pi Pico |
R |
GP13 · |
G |
GP12 · |
B |
GP11 · |
– |
GND · |
Các chân màu đỏ, xanh lá cây và xanh lam của mô-đun LED RGB sẽ được kết nối với các chân GPIO của Raspberry Pi Pico. Chúng tôi sẽ sử dụng GP13, GP12 và GP11 để kết nối với từng chân màu. Bạn có thể sử dụng bất kỳ mã pin GPIO thích hợp nào.
Thực hiện theo sơ đồ bên dưới và kết nối ba thiết bị cho phù hợp.
Tất cả các kết nối giữa các thiết bị đều giống như chúng tôi đã liệt kê chúng trong các bảng trên.
Đối với dự án này, chúng tôi sẽ yêu cầu thư viện MicroPython MRRC522. Sao chép thư viện này và lưu nó trong Raspberry Pi Pico của bạn với tên tệp tương ứng (mfrc522.py)
Mở một tệp mới trong Thonny. Sao chép thư viện được cung cấp bên dưới hoặc từ liên kết được cung cấp ở trên. Lưu nó vào Raspberry Pi Pico với tên mfrc522.py trong thư mục lib.
mfrc522.py
from machine import Pin, SPI
from os import uname
class MFRC522:
DEBUG = False
OK = 0
NOTAGERR = 1
ERR = 2
REQIDL = 0x26
REQALL = 0x52
AUTHENT1A = 0x60
AUTHENT1B = 0x61
PICC_ANTICOLL1 = 0x93
PICC_ANTICOLL2 = 0x95
PICC_ANTICOLL3 = 0x97
def __init__(self, sck, mosi, miso, rst, cs,baudrate=1000000,spi_id=0):
self.sck = Pin(sck, Pin.OUT)
self.mosi = Pin(mosi, Pin.OUT)
self.miso = Pin(miso)
self.rst = Pin(rst, Pin.OUT)
self.cs = Pin(cs, Pin.OUT)
self.rst.value(0)
self.cs.value(1)
board = uname()[0]
if board == 'WiPy' or board == 'LoPy' or board == 'FiPy':
self.spi = SPI(0)
self.spi.init(SPI.MASTER, baudrate=1000000, pins=(self.sck, self.mosi, self.miso))
elif (board == 'esp8266') or (board == 'esp32'):
self.spi = SPI(baudrate=100000, polarity=0, phase=0, sck=self.sck, mosi=self.mosi, miso=self.miso)
self.spi.init()
elif board == 'rp2':
self.spi = SPI(spi_id,baudrate=baudrate,sck=self.sck, mosi= self.mosi, miso= self.miso)
else:
raise RuntimeError("Unsupported platform")
self.rst.value(1)
self.init()
def _wreg(self, reg, val):
self.cs.value(0)
self.spi.write(b'%c' % int(0xff & ((reg << 1) & 0x7e)))
self.spi.write(b'%c' % int(0xff & val))
self.cs.value(1)
def _rreg(self, reg):
self.cs.value(0)
self.spi.write(b'%c' % int(0xff & (((reg << 1) & 0x7e) | 0x80)))
val = self.spi.read(1)
self.cs.value(1)
return val[0]
def _sflags(self, reg, mask):
self._wreg(reg, self._rreg(reg) | mask)
def _cflags(self, reg, mask):
self._wreg(reg, self._rreg(reg) & (~mask))
def _tocard(self, cmd, send):
recv = []
bits = irq_en = wait_irq = n = 0
stat = self.ERR
if cmd == 0x0E:
irq_en = 0x12
wait_irq = 0x10
elif cmd == 0x0C:
irq_en = 0x77
wait_irq = 0x30
self._wreg(0x02, irq_en | 0x80)
self._cflags(0x04, 0x80)
self._sflags(0x0A, 0x80)
self._wreg(0x01, 0x00)
for c in send:
self._wreg(0x09, c)
self._wreg(0x01, cmd)
if cmd == 0x0C:
self._sflags(0x0D, 0x80)
i = 2000
while True:
n = self._rreg(0x04)
i -= 1
if ~((i != 0) and ~(n & 0x01) and ~(n & wait_irq)):
break
self._cflags(0x0D, 0x80)
if i:
if (self._rreg(0x06) & 0x1B) == 0x00:
stat = self.OK
if n & irq_en & 0x01:
stat = self.NOTAGERR
elif cmd == 0x0C:
n = self._rreg(0x0A)
lbits = self._rreg(0x0C) & 0x07
if lbits != 0:
bits = (n - 1) * 8 + lbits
else:
bits = n * 8
if n == 0:
n = 1
elif n > 16:
n = 16
for _ in range(n):
recv.append(self._rreg(0x09))
else:
stat = self.ERR
return stat, recv, bits
def _crc(self, data):
self._cflags(0x05, 0x04)
self._sflags(0x0A, 0x80)
for c in data:
self._wreg(0x09, c)
self._wreg(0x01, 0x03)
i = 0xFF
while True:
n = self._rreg(0x05)
i -= 1
if not ((i != 0) and not (n & 0x04)):
break
return [self._rreg(0x22), self._rreg(0x21)]
def init(self):
self.reset()
self._wreg(0x2A, 0x8D)
self._wreg(0x2B, 0x3E)
self._wreg(0x2D, 30)
self._wreg(0x2C, 0)
self._wreg(0x15, 0x40)
self._wreg(0x11, 0x3D)
self.antenna_on()
def reset(self):
self._wreg(0x01, 0x0F)
def antenna_on(self, on=True):
if on and ~(self._rreg(0x14) & 0x03):
self._sflags(0x14, 0x03)
else:
self._cflags(0x14, 0x03)
def request(self, mode):
self._wreg(0x0D, 0x07)
(stat, recv, bits) = self._tocard(0x0C, [mode])
if (stat != self.OK) | (bits != 0x10):
stat = self.ERR
return stat, bits
def anticoll(self,anticolN):
ser_chk = 0
ser = [anticolN, 0x20]
self._wreg(0x0D, 0x00)
(stat, recv, bits) = self._tocard(0x0C, ser)
if stat == self.OK:
if len(recv) == 5:
for i in range(4):
ser_chk = ser_chk ^ recv[i]
if ser_chk != recv[4]:
stat = self.ERR
else:
stat = self.ERR
return stat, recv
def PcdSelect(self, serNum,anticolN):
backData = []
buf = []
buf.append(anticolN)
buf.append(0x70)
#i = 0
###xorsum=0;
for i in serNum:
buf.append(i)
#while i<5:
# buf.append(serNum[i])
# i = i + 1
pOut = self._crc(buf)
buf.append(pOut[0])
buf.append(pOut[1])
(status, backData, backLen) = self._tocard( 0x0C, buf)
if (status == self.OK) and (backLen == 0x18):
return 1
else:
return 0
def SelectTag(self, uid):
byte5 = 0
#(status,puid)= self.anticoll(self.PICC_ANTICOLL1)
#print("uid",uid,"puid",puid)
for i in uid:
byte5 = byte5 ^ i
puid = uid + [byte5]
if self.PcdSelect(puid,self.PICC_ANTICOLL1) == 0:
return (self.ERR,[])
return (self.OK , uid)
def tohexstring(self,v):
s="["
for i in v:
if i != v[0]:
s = s+ ", "
s=s+ "0x{:02X}".format(i)
s= s+ "]"
return s
def SelectTagSN(self):
valid_uid=[]
(status,uid)= self.anticoll(self.PICC_ANTICOLL1)
#print("Select Tag 1:",self.tohexstring(uid))
if status != self.OK:
return (self.ERR,[])
if self.DEBUG: print("anticol(1) {}".format(uid))
if self.PcdSelect(uid,self.PICC_ANTICOLL1) == 0:
return (self.ERR,[])
if self.DEBUG: print("pcdSelect(1) {}".format(uid))
#check if first byte is 0x88
if uid[0] == 0x88 :
#ok we have another type of card
valid_uid.extend(uid[1:4])
(status,uid)=self.anticoll(self.PICC_ANTICOLL2)
#print("Select Tag 2:",self.tohexstring(uid))
if status != self.OK:
return (self.ERR,[])
if self.DEBUG: print("Anticol(2) {}".format(uid))
rtn = self.PcdSelect(uid,self.PICC_ANTICOLL2)
if self.DEBUG: print("pcdSelect(2) return={} uid={}".format(rtn,uid))
if rtn == 0:
return (self.ERR,[])
if self.DEBUG: print("PcdSelect2() {}".format(uid))
#now check again if uid[0] is 0x88
if uid[0] == 0x88 :
valid_uid.extend(uid[1:4])
(status , uid) = self.anticoll(self.PICC_ANTICOLL3)
#print("Select Tag 3:",self.tohexstring(uid))
if status != self.OK:
return (self.ERR,[])
if self.DEBUG: print("Anticol(3) {}".format(uid))
if self.MFRC522_PcdSelect(uid,self.PICC_ANTICOLL3) == 0:
return (self.ERR,[])
if self.DEBUG: print("PcdSelect(3) {}".format(uid))
valid_uid.extend(uid[0:5])
# if we are here than the uid is ok
# let's remove the last BYTE whic is the XOR sum
return (self.OK , valid_uid[:len(valid_uid)-1])
#return (self.OK , valid_uid)
def auth(self, mode, addr, sect, ser):
return self._tocard(0x0E, [mode, addr] + sect + ser[:4])[0]
def authKeys(self,uid,addr,keyA=None, keyB=None):
status = self.ERR
if keyA is not None:
status = self.auth(self.AUTHENT1A, addr, keyA, uid)
elif keyB is not None:
status = self.auth(self.AUTHENT1B, addr, keyB, uid)
return status
def stop_crypto1(self):
self._cflags(0x08, 0x08)
def read(self, addr):
data = [0x30, addr]
data += self._crc(data)
(stat, recv, _) = self._tocard(0x0C, data)
return stat, recv
def write(self, addr, data):
buf = [0xA0, addr]
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
if not (stat == self.OK) or not (bits == 4) or not ((recv[0] & 0x0F) == 0x0A):
stat = self.ERR
else:
buf = []
for i in range(16):
buf.append(data[i])
buf += self._crc(buf)
(stat, recv, bits) = self._tocard(0x0C, buf)
if not (stat == self.OK) or not (bits == 4) or not ((recv[0] & 0x0F) == 0x0A):
stat = self.ERR
return stat
def writeSectorBlock(self,uid, sector, block, data, keyA=None, keyB = None):
absoluteBlock = sector * 4 + (block % 4)
if absoluteBlock > 63 :
return self.ERR
if len(data) != 16:
return self.ERR
if self.authKeys(uid,absoluteBlock,keyA,keyB) != self.ERR :
return self.write(absoluteBlock, data)
return self.ERR
def readSectorBlock(self,uid ,sector, block, keyA=None, keyB = None):
absoluteBlock = sector * 4 + (block % 4)
if absoluteBlock > 63 :
return self.ERR, None
if self.authKeys(uid,absoluteBlock,keyA,keyB) != self.ERR :
return self.read(absoluteBlock)
return self.ERR, None
def MFRC522_DumpClassic1K(self,uid, Start=0, End=64, keyA=None, keyB=None):
for absoluteBlock in range(Start,End):
status = self.authKeys(uid,absoluteBlock,keyA,keyB)
# Check if authenticated
print("{:02d} S{:02d} B{:1d}: ".format(absoluteBlock, absoluteBlock//4 , absoluteBlock % 4),end="")
if status == self.OK:
status, block = self.read(absoluteBlock)
if status == self.ERR:
break
else:
for value in block:
print("{:02X} ".format(value),end="")
print(" ",end="")
for value in block:
if (value > 0x20) and (value < 0x7f):
print(chr(value),end="")
else:
print('.',end="")
print("")
else:
break
if status == self.ERR:
print("Authentication error")
return self.ERR
return self.OK
Điều khiển LED RFID RC522 RGB
Chúng tôi sẽ sử dụng Raspberry Pi Pico với nó và cho bạn thấy một dự án MicroPython sẽ sử dụng các thẻ RFID khác nhau để làm sáng đèn LED RGB với ba màu khác nhau. Một thẻ sẽ làm cho đèn LED sáng lên màu xanh lá cây trong khi một thẻ khác sẽ sáng lên bằng màu xanh lam. Bất kỳ thẻ không xác định nào cũng sẽ đặt ánh sáng RGB thành màu đỏ. Người dùng mang thẻ / thẻ RFID đến gần đầu đọc RFID và đèn RGB được đặt thành màu thích hợp cùng với các thông báo liên quan trong Thonny Shell.
Raspberry Pi Pico MicroPython: Đọc thẻ RFID
Mở Thonny IDE của bạn và đi tới Tệp > Mới để mở tệp mới. Sao chép đoạn mã sau trong tệp đó. Bản phác thảo này sẽ xác định ID thẻ / thẻ RFID. Khi người dùng mang thẻ / thẻ RFID đến gần mô-đun RC522, nó sẽ phát hiện thẻ và đọc giá trị của nó.
from mfrc522 import MFRC522
import utime
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
print("Bring TAG closer...")
print("")
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
card = int.from_bytes(bytes(uid),"little",False)
print("CARD ID: "+str(card))
utime.sleep_ms(500)
Mã hoạt động như thế nào?
Bước đầu tiên là bao gồm tất cả các thư viện cần thiết cho dự án này. Chúng tôi sẽ nhập mô-đun utime để tạo độ trễ và lớp MFRC522 từ mô-đun mfrc522 để hoạt động với đầu đọc RC522 cho tác vụ này.
from mfrc522 import MFRC522
import utime
Sau đó, chúng tôi sẽ xác định kết nối RFID RC522 bằng cách tạo một đối tượng 'đầu đọc'. Bằng cách sử dụng MFRC522 (), chúng tôi đã chỉ định số kênh SPI làm tham số đầu tiên và chân SPI là phần còn lại của các tham số.
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
Thông báo sau được in trong Thonny Shell cho biết người dùng mang thẻ / thẻ RFID của họ đến gần mô-đun RFID hơn.
print("Bring TAG closer...")
print("")
Bên trong vòng lặp vô hạn, trước tiên chúng ta sẽ khởi tạo đầu đọc RFID bằng phương thức init() trên đối tượng reader. Sau đó, chúng tôi sẽ có được trạng thái từ người đọc. Nếu trạng thái là hợp lệ thì chúng tôi sẽ tiếp tục với chương trình của mình. Chúng ta sẽ tạo một 'thẻ' đối tượng khác có chứa ID thẻ RFID. Chúng tôi sẽ lấy ID thẻ duy nhất được liên kết với thẻ bất cứ khi nào nó được phát hiện. Điều này được in trong bảng điều khiển vỏ Thonny.
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
card = int.from_bytes(bytes(uid),"little",False)
print("CARD ID: "+str(card))
utime.sleep_ms(500)
Sau khi bạn đã sao chép mã sau vào một tệp mới, hãy nhấp vào biểu tượng 'Lưu' để lưu mã chương trình trên PC của bạn.
Sau khi bạn đã lưu mã, hãy nhấn nút Run để tải mã lên mô-đun Raspberry Pi Pico của bạn. Trước khi tải mã lên, hãy đảm bảo rằng bảng chính xác được chọn.
Bây giờ hãy mang theo thẻ / thẻ RFID gần đầu đọc RC522. Ngay lập tức ID thẻ của nó sẽ được in trong thiết bị đầu cuối shell. Ở đây chúng tôi đã quét hai thẻ khác nhau và lấy được ID của chúng.
Chúng tôi sẽ sử dụng hai ID này để chiếu sáng đèn LED RGB một cách thích hợp. Nếu đầu đọc quét ID đầu tiên thì đèn LED RGB sẽ được đặt thành đèn xanh lục và nếu ID thứ hai được quét thì đèn LED RGB sẽ được đặt thành ánh sáng xanh lam. Đối với bất kỳ thẻ RFID nào khác được quét, sẽ đặt đèn LED RGB thành màu đỏ.
Khi người dùng mang thẻ / thẻ RFID đến gần RC522, nó sẽ phát hiện thẻ và đọc giá trị của nó. Nếu giá trị giống như được xác định trong mã cho màu xanh lá cây thì thông báo 'PASS: Green Light Activated' được hiển thị trong thiết bị đầu cuối shell. Nếu giá trị giống như được xác định trong mã cho màu xanh lam thì thông báo 'PASS: Blue Light Activated' sẽ được hiển thị trong thiết bị đầu cuối shell. Nếu không thì 'THẺ KHÔNG XÁC ĐỊNH! Thay vào đó, thông báo của Red Light Activated được hiển thị. Đèn LED RGB sẽ được đặt thành các màu xanh lá cây, xanh dương hoặc đỏ trong quá trình này. Quá trình này xảy ra mỗi khi người dùng đưa thẻ RFID đến gần mô-đun hơn.
from machine import Pin
from mfrc522 import MFRC522
import utime
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
red = Pin(13, Pin.OUT)
green = Pin(12, Pin.OUT)
blue = Pin(11, Pin.OUT)
print("Bring RFID TAG Closer...")
print("")
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
card = int.from_bytes(bytes(uid),"little",False)
if card == 612121286:
print("Card ID: "+ str(card)+" PASS: Green Light Activated")
red.value(0)
green.value(1)
blue.value(0)
elif card == 1002696326:
print("Card ID: "+ str(card)+" PASS: Blue Light Activated")
red.value(0)
green.value(0)
blue.value(1)
else:
print("Card ID: "+ str(card)+" UNKNOWN CARD! Red Light Activated")
red.value(1)
green.value(0)
blue.value(0)
Hầu hết các mã tương tự như mã ở trên mà chúng tôi đang lấy ID thẻ RFID. Sau khi nhận được ID thẻ, chúng tôi sẽ kiểm tra xem ID có phải là một trong hai ID mà chúng tôi đã thiết lập cho thẻ xanh lá cây và xanh lam hay không, sau đó đặt đèn LED RGB thành màu cụ thể đó.
Vì chúng tôi đang sử dụng mô-đun RGB catốt thông thường, do đó để đặt màu thành màu xanh lá cây, chúng tôi sẽ phải đảm bảo GPIO được kết nối với chân màu xanh lá cây ở trạng thái cao và phần còn lại của cả hai ở trạng thái thấp.
red.value(0)
green.value(1)
blue.value(0)
Để đặt màu thành màu xanh lam, chúng tôi sẽ phải đảm bảo GPIO được kết nối với chân màu xanh lam ở trạng thái cao và phần còn lại của cả hai ở trạng thái thấp.
red.value(0)
green.value(0)
blue.value(1)
Tương tự như vậy, để đặt màu thành màu đỏ, chúng ta sẽ phải đảm bảo GPIO được kết nối với chân màu đỏ ở trạng thái cao và phần còn lại của cả hai ở trạng thái thấp.
red.value(1)
green.value(0)
blue.value(0)
Sau khi bạn đã sao chép mã sau vào một tệp mới, hãy nhấp vào biểu tượng 'Lưu' để lưu mã chương trình trên PC của bạn.
Sau khi bạn đã lưu mã, hãy nhấn nút Run để tải mã lên mô-đun Raspberry Pi Pico của bạn.
Đưa thẻ / thẻ RFID đến gần đầu đọc RC522 và ngay lập tức đèn LED RGB sẽ sáng lên thành màu xanh lá cây, xanh dương hoặc đỏ.
Thiết bị đầu cuối Thonny Shell cũng sẽ in các thông điệp có liên quan khi mỗi thẻ được quét.
>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op
>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j