// SmartLock 仿真接线图 - 核心部分
#include <Arduino.h>
#include <WiFi.h>
#include <WebServer.h>
#include <MFRC522.h>
#include <Keypad.h>
// 引脚定义
const int relayPin = 32; // 继电器控制门锁
const int rfidSDA = 5; // RFID的SDA引脚
const int rfidRST = 2; // RFID的RST引脚
// 4x3矩阵键盘
byte rowPins[4] = {13, 12, 14, 27}; // 行引脚
byte colPins[3] = {26, 25, 33}; // 列引脚
char keys[4][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// 外设初始化
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, 4, 3);
MFRC522 rfid(rfidSDA, rfidRST);
WebServer server(80);
void setup() {
Serial.begin(115200);
// 初始化各模块
SPI.begin();
rfid.PCD_Init();
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
// WiFi热点
WiFi.softAP("SmartLockAP", "11223344");
Serial.print("AP IP: ");
Serial.println(WiFi.softAPIP());
// Web服务器
server.on("/", HTTP_GET, [](){
server.send(200, "text/html",
"<form action='/open' method='POST'><button>开门</button></form>");
});
server.on("/open", HTTP_POST, [](){
digitalWrite(relayPin, HIGH);
delay(2000);
digitalWrite(relayPin, LOW);
server.send(200, "text/plain", "门已打开");
});
server.begin();
}
void loop() {
// 检查键盘输入
char key = keypad.getKey();
if (key) Serial.println("按键: " + String(key));
// 检查RFID卡
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.println("检测到RFID卡");
rfid.PICC_HaltA();
}
// 处理Web请求
server.handleClient();
}