通过ESP32开发板,实现NFC卡片控制继电器通断,从而实现多种物联网中设备的通电

发布于:2025-06-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

通过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/