通过ESP32开发板,实现NFC卡片控制继电器通断,从而实现多种物联网中设备的通电
通过ESP32开发板,实现NFC卡片控制继电器通断,从而实现多种设备的通电,从而可以开发出智能的物联网、家电等多种设备
ESP32与RFID-RC522的接线方法
RC522 引脚 | ESP32 引脚(示例) | 说明 |
---|---|---|
SDA/CS | GPIO5 | SPI 片选(CS) |
SCK | GPIO18 | SPI 时钟(SCK) |
MOSI | GPIO23 | 主出从入(Master Out) |
MISO | GPIO19 | 主入从出(Master In) |
RST | GPIO22 | 模块复位信号 |
3.3V | 3.3V | 必须使用 3.3V 供电(5V 会烧毁) |
GND | GND | 接地 |
注意:RFID-RC522模块只能链接ESP32开发板上的3.3V供电,不能选择5v的,很容易烧坏RFID-RC522板子
ESP32与继电器的接线方式,就很简单了。
下面是代码部分—mfrc522.py的代码:
from machine import Pin, SPI
from os import uname
emptyRecv = b""
class MFRC522:
GAIN_REG = 0x26
MAX_GAIN = 0x07
OK = 0
NOTAGERR = 1
ERR = 2
REQIDL = 0x26
REQALL = 0x52
AUTHENT1A = 0x60
AUTHENT1B = 0x61
def __init__(self, spi=None, gpioRst=None, gpioCs=None):
if gpioRst is not None:
self.rst = Pin(gpioRst, Pin.OUT)
else:
self.rst = None
assert(gpioCs is not None, "Needs gpioCs") # TODO fails without cableSelect
if gpioCs is not None:
self.cs = Pin(gpioCs, Pin.OUT)
else:
self.cs = None
# TODO CH rationalise which of these are referenced, which can be identical
self.regBuf = bytearray(4)
self.blockWriteBuf = bytearray(18)
self.authBuf = bytearray(12)
self.wregBuf = bytearray(2)
self.rregBuf = bytearray(1)
self.recvBuf = bytearray(16)
self.recvMv = memoryview(self.recvBuf)
if self.rst is not None:
self.rst.value(0)
if self.cs is not None:
self.cs.value(1)
if spi is not None:
self.spi = spi
else:
sck = Pin(14, Pin.OUT)
mosi = Pin(13, Pin.OUT)
miso = Pin(12, Pin.IN)
if uname()[0] == 'WiPy':
self.spi = SPI(0)
self.spi.init(SPI.MASTER, baudrate=1000000, pins=(sck, mosi, miso))
elif uname()[0] == 'esp8266': # TODO update to match https://github.com/