首页 > 编程知识 正文

rfid传感器二维码(rfidrc522中文手册)

时间:2023-05-06 10:14:07 阅读:72526 作者:1772

传感器实验——RFID RC522 MR开发板RC522射频IC卡引脚说明示例代码:获取卡ID
门禁系统又称出入管理控制系统(ACCESS CONTROL SYSTEM), 是一种管理人员进出的智能化管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,光学,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施。

MR开发板

RC522射频IC卡

C522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片,是一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。

引脚说明 开发板RC5223.3v3.3vC4RST 可接可不接GNDGNDA6MISOA7MOSIA5SCKC0SDA示例代码:获取卡ID

main.py

import pybimport mfrc522from machine import SPI,Pindef main(): SPI=pyb.SPI(1) RC522_SDA='C0' RC522_RST='C4' #可接可不接 悬空即可 rc52=mfrc522.MFRC522() rc52.init_spi(SPI,RC522_RST,RC522_SDA) while True: (status,backBits)=rc52.SeekCard(0x26) if(status==0): (status,id,)=rc52.Anticoll() print("card_id=",id) if id==[41, 8, 181, 85, 193]: print("hi xianyu") else : print("NO_CARD") pyb.delay(1000)main()

mfrc522.py

import pybfrom pyb import SPI,Pinimport time#--------RC522寄存器定义---------#CommandReg= 0x01CommIEnReg= 0x02CommIrqReg= 0x04ErrorReg= 0x06Status2Reg= 0x08FIFODataReg= 0x09FIFOLevelReg= 0x0AControlReg= 0x0CBitFramingReg= 0x0DModeReg= 0x11TxControlReg= 0x14TxAutoReg= 0x15RxSelReg= 0x17RFCfgReg= 0x26TModeReg= 0x2ATPrescalerReg= 0x2BTReloadRegH= 0x2CTReloadRegL= 0x2Dclass MFRC522:#--------命令--------------------#PCD_IDLE= 0x00 #取消当前命令PICC_REQIDL= 0x26 #寻天线区域未休眠的卡PICC_REQALL= 0x52 #寻天线区所有的卡PCD_RESETPHASE= 0x0F #复位PCD_TRANSCEIVE= 0x0C #发送并接收数据PCD_AUTHENT= 0x0E #验证密钥PICC_ANTICOLL= 0x93 #防冲撞#--------状态值--------------#MI_OK= 0MI_NOTAGERR = 1MI_ERR= 2MAX_LEN = 18def init_spi(self,spi,rst,sda):spi.init(spi.MASTER,baudrate=1000000,polarity=0, phase=0,bits=8,firstbit=SPI.MSB)self.spi=spiself.rst=Pin(rst,Pin.OUT_PP)self.sda=Pin(sda,Pin.OUT_PP)self.Init()def Init(self):self.Reset()self.CloseAntenna()time.sleep_ms(2)self.OpenAntenna()time.sleep_ms(2)self.SetBitMask(0x08,0x08)self.WriteToRC(ModeReg, 0x3D)self.WriteToRC(0x17, 0x86)self.WriteToRC(0x26, 0x7f)self.WriteToRC(TReloadRegL,30)self.WriteToRC(TReloadRegH, 0)self.WriteToRC(TModeReg, 0x8D)self.WriteToRC(TPrescalerReg, 0x3E)time.sleep_ms(1)self.OpenAntenna()def Reset(self):self.rst.value(1)time.sleep_ms(1)self.rst.value(0)time.sleep_ms(1)self.rst.value(1)time.sleep_ms(1)self.WriteToRC(0x01, 0x0f)self.WriteToRC(ModeReg, 0x3D)self.WriteToRC(TReloadRegL,30)self.WriteToRC(TReloadRegH, 0)self.WriteToRC(TModeReg, 0x8D)self.WriteToRC(TPrescalerReg, 0x3E)self.WriteToRC(TxAutoReg, 0x40)#打开天线def OpenAntenna(self):temp=self.ReadRCData(TxControlReg)if (temp & 0x03)==0:self.SetBitMask(TxControlReg, 0x03)#关闭天线def CloseAntenna(self):self.ClearBitMask(TxControlReg, 0x03)def WriteToRC(self,add,cmd):self.sda.value(0)data=bytearray(2)self.spi.send(((add<<1)& 0x7E))self.spi.send(cmd)self.sda.value(1)def ReadRCData(self,add):self.sda.value(0)u_add=((add << 1) & 0x7E) | 0x80self.spi.send(u_add)ucResult=self.spi.recv(1)self.sda.value(1)# print('ucResult:',ucResult[0])return ucResult[0] def SetBitMask(self,add,mask):tmp = self.ReadRCData(add)self.WriteToRC(add, tmp | mask)def ClearBitMask(self,add,mask):tmp=self.ReadRCData(add)data=tmp & (~mask)self.WriteToRC(add,data)def SendToCard(self,cmd,sendData):backData = []backLen = 0status = self.MI_ERRirqEn = 0x77#PCD_TRANSCEIVEwaitIRq = 0x30lastBits = Nonen = 0i = 0if cmd == self.PCD_AUTHENT:irqEn = 0x12waitIRq = 0x10 self.WriteToRC(CommIEnReg, irqEn|0x80)self.ClearBitMask(CommIrqReg, 0x80)self.WriteToRC(CommandReg, self.PCD_IDLE)self.SetBitMask(FIFOLevelReg, 0x80)while(i<len(sendData)):self.WriteToRC(FIFODataReg, sendData[i])i = i+1self.WriteToRC(CommandReg, cmd) if cmd == self.PCD_TRANSCEIVE:self.SetBitMask(BitFramingReg, 0x80)time.sleep_ms(1)i = 2000while True:n = self.ReadRCData(CommIrqReg)i = i - 1if ((i!=0) and (n&0x01)==0 and (n&waitIRq)==0)==0:breakself.ClearBitMask(BitFramingReg, 0x80)if i != 0:if (self.ReadRCData(ErrorReg) & 0x1B)==0x00:status = self.MI_OKif n & irqEn & 0x01:status = self.MI_NOTAGERR if cmd == self.PCD_TRANSCEIVE:n = self.ReadRCData(FIFOLevelReg)lastBits = self.ReadRCData(ControlReg) & 0x07if lastBits :backLen = (n-1)*8 + lastBitselse:backLen = n*8 if n == 0:n = 1if n > self.MAX_LEN:n = self.MAX_LENi = 0while i<n:backData.append(self.ReadRCData(FIFODataReg))i = i + 1else:status = self.MI_ERRself.SetBitMask(ControlReg, 0x80)self.WriteToRC(CommandReg, self.PCD_IDLE)return (status,backData,backLen)#寻卡 def SeekCard(self,mode):self.ClearBitMask(Status2Reg, 0x08)self.WriteToRC(BitFramingReg, 0x07)self.SetBitMask(TxControlReg, 0x03)TagType=bytearray(1)TagType[0] = mode(status,backData,backBits) = self.SendToCard(self.PCD_TRANSCEIVE, TagType)if status == self.MI_OK and backBits==0x10 :card_l=backDataelse :status = self.MI_ERRreturn (status,backData)#防冲撞 筛选一个卡def Anticoll(self):backData = []Card_id = [0,0,0,0,0]serNumCheck = 0serNum = []self.ClearBitMask(Status2Reg, 0x08)self.WriteToRC(BitFramingReg, 0x00)self.ClearBitMask(0x0e, 0x08)serNum.append(self.PICC_ANTICOLL)serNum.append(0x20)(status,backData,backBits) = self.SendToCard(self.PCD_TRANSCEIVE,serNum)if(status == self.MI_OK):i = 0print("OK")while i<3:serNumCheck = serNumCheck ^ backData[i]i = i + 1if serNumCheck != backData[i]:status = self.MI_ERRself.SetBitMask(0x0e,0x80)return (status,backData)

效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。