【物联网】ESP32-C3 门禁系统方案

一、方案概述

核心特性

  • 低成本开源:完全自主可控,无供应商锁定
  • 断电安全:电控锁断电自动锁闭,机械钥匙备份
  • 三重控制:Wi-Fi MQTT + 蓝牙备用 + 机械钥匙应急
  • 极简部署:3个门可在2-3天内完成部署

技术架构

复制代码
设备层:ESP32-C3继电器一体板 ×3
通信层:MQTT协议(轻量级物联网协议)
控制层:手机APP直接控制(无网页界面)
物理层:1073断电闭锁电控锁 + 机械钥匙

二、硬件配置

2.1 核心组件清单

  1. 控制器:ESP32-C3一体板 ×3

    • RISC-V单核160MHz,Wi-Fi + 蓝牙5.0
    • 5-24V宽电压输入,USB-C接口
    • 内置继电器,可直接控制电锁
  2. 电锁:1073断电闭锁型 ×3

    • DC 12V供电,工作电流300-500mA
    • 通电开门(≤10秒),断电自动锁闭
    • 带钥匙孔和内部紧急旋钮
  3. 电源系统

    • 12V集中供电电源(根据总电流需求选择)
    • 建议配置小型UPS保障短暂停电
  4. 网络设备

    • 家用路由器(已有)
    • 旧电脑(运行MQTT服务器)

2.2 接线方案(单门)

复制代码
[12V电源+] → [ESP32-C3 VIN+]
[12V电源+] → [继电器NO端子]
[继电器COM] → [1073电锁+]
[1073电锁-] → [12V电源-]
[ESP32-C3 GND] → [12V电源-]

三、软件配置

3.1 MQTT服务器部署(旧电脑)

bash 复制代码
# 使用Docker快速部署
docker run -d --name mosquitto \
  -p 1883:1883 \
  -v /mosquitto/data:/mosquitto/data \
  eclipse-mosquitto

# 验证运行
mosquitto_sub -h localhost -t "test" &
mosquitto_pub -h localhost -t "test" -m "hello"

3.2 ESP32-C3固件核心

cpp 复制代码
#include <WiFi.h>
#include <PubSubClient.h>

// 配置区(每个门不同)
const char* ssid = "WiFi名称";
const char* mqtt_server = "192.168.1.100"; // 旧电脑IP
const char* client_id = "door_1";          // 唯一ID
const int RELAY_PIN = 2;                   // 继电器控制引脚

// 主题定义
const char* control_topic = "door/1/control";
const char* status_topic = "door/1/status";

WiFiClient espClient;
PubSubClient client(espClient);

// 开门函数(控制1073锁)
void openDoor(int duration = 3000) {
  digitalWrite(RELAY_PIN, HIGH);  // 通电开门
  delay(duration);                // 保持3秒
  digitalWrite(RELAY_PIN, LOW);   // 断电锁门
  client.publish(status_topic, "opened");
}

// MQTT消息处理
void callback(char* topic, byte* payload, unsigned int length) {
  String msg = "";
  for(int i=0; i<length; i++) msg += (char)payload[i];
  
  if(msg == "OPEN") openDoor();
  else if(msg == "STATUS") reportStatus();
}

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);  // 初始锁门状态
  
  WiFi.begin(ssid, password);
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  
  // 连接MQTT
  while(!client.connected()) {
    client.connect(client_id);
    client.subscribe(control_topic);
  }
}

void loop() {
  if(!client.connected()) reconnect();
  client.loop();
}

3.3 主题命名规范

复制代码
控制指令:door/{门编号}/control
状态上报:door/{门编号}/status
系统监控:system/{设备ID}/heartbeat

示例:
门1:door/1/control → 接收开门指令
门2:door/2/status  → 上报状态信息

四、手机控制方案

4.1 MQTT Dashboard APP(推荐)

配置步骤:

  1. 安装APP(支持Android/iOS)
  2. 添加MQTT服务器:
    • 地址:旧电脑IP(如192.168.1.100)
    • 端口:1883
    • 无认证(开发环境)
  3. 创建控制面板:
    • 按钮1:发布到 door/1/control,消息:"OPEN"
    • 按钮2:发布到 door/2/control,消息:"OPEN"
    • 按钮3:发布到 door/3/control,消息:"OPEN"

优势:

  • 无需开发,立即使用
  • 支持按钮、开关、滑块等多种控件
  • 可保存多个服务器配置
  • 完全离线使用,无云依赖

4.2 蓝牙备用控制(Wi-Fi故障时)

cpp 复制代码
// ESP32-C3蓝牙支持
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;

void setup() {
  SerialBT.begin("DoorLock-1");  // 蓝牙设备名称
}

void handleBluetooth() {
  if(SerialBT.available()) {
    String cmd = SerialBT.readString();
    if(cmd == "OPEN") openDoor();
  }
}

使用方式:

  1. 手机蓝牙连接"DoorLock-1"
  2. 发送"OPEN"指令开门
  3. 无需网络,直连控制

五、安全与可靠性设计

5.1 断电安全策略

1073电控锁特性:

  • 类型:断电闭锁(Fail-Secure)
  • 行为:断电时锁舌自动弹出锁门
  • 优势:停电时不会被非法进入
  • 备份:机械钥匙 + 内部旋钮

5.2 网络容错设计

复制代码
主通道:Wi-Fi MQTT → 正常使用
备用通道:蓝牙直连 → Wi-Fi故障时
应急通道:机械钥匙 → 完全断电时

5.3 自动恢复机制

cpp 复制代码
// 网络自动重连
void reconnect() {
  while(!client.connected()) {
    if(client.connect(client_id)) {
      client.subscribe(control_topic);
      client.publish(status_topic, "reconnected");
    } else {
      delay(5000);  // 5秒后重试
    }
  }
}

// 定期状态上报
void reportStatus() {
  String status = "{";
  status += "\"rssi\":" + String(WiFi.RSSI()) + ",";
  status += "\"heap\":" + String(ESP.getFreeHeap()) + ",";
  status += "\"uptime\":" + String(millis()/1000);
  status += "}";
  client.publish(status_topic, status.c_str());
}

六、部署实施

6.1 实施时间线

第一天:准备与采购

  • 采购所有硬件组件
  • 准备安装工具
  • 规划安装位置

第二天:软件部署

  • 旧电脑安装MQTT服务器
  • 刷写3个ESP32-C3固件
  • 手机安装配置MQTT Dashboard

第三天:硬件安装

  • 安装1073电控锁(3个门)
  • 接线和固定ESP32-C3板
  • 通电测试和网络配置

第四天:测试验收

  • 全面功能测试
  • 停电应急测试
  • 用户培训和文档

6.2 电锁安装要点

  1. 测量确认:确认门厚和原有锁孔尺寸
  2. 拆除旧锁:完整拆除原有机械锁
  3. 安装新锁:放入1073锁体,固定螺丝
  4. 调整对位:精确调整锁扣板位置
  5. 功能测试:测试钥匙、旋钮、电子控制

6.3 控制器安装位置

  • 室内侧:避免户外环境干扰
  • 通风干燥:防止潮湿影响
  • 隐蔽安全:防止人为破坏
  • 信号良好:确保Wi-Fi连接稳定

七、运维与维护

7.1 日常监控

  • MQTT服务器状态:定期检查服务运行
  • 设备连接状态:通过心跳包监控
  • 电源状态:监控电压电流是否正常
  • 网络状态:确保Wi-Fi连接稳定

7.2 定期维护

  • 每月:检查接线是否松动
  • 每季度:清洁锁体和润滑锁舌
  • 每半年:更新ESP32固件(如有改进)
  • 每年:全面检查和压力测试

7.3 故障处理流程

复制代码
1. 门无响应
   → 检查电源是否正常
   → 测试继电器是否动作
   → 使用机械钥匙应急

2. Wi-Fi连接失败
   → 检查路由器状态
   → 重启ESP32-C3
   → 使用蓝牙备用控制

3. MQTT通信异常
   → 检查旧电脑MQTT服务
   → 检查网络连接
   → 重启相关服务

八、扩展功能(可选)

8.1 门状态监控

cpp 复制代码
// 添加门磁传感器
const int DOOR_SENSOR_PIN = 3;

void checkDoorStatus() {
  bool isOpen = digitalRead(DOOR_SENSOR_PIN) == LOW;
  static bool lastState = false;
  
  if(isOpen != lastState) {
    String event = isOpen ? "door_opened" : "door_closed";
    client.publish(status_topic, event.c_str());
    lastState = isOpen;
  }
}

8.2 本地日志记录

cpp 复制代码
// 使用SPIFFS记录开门事件
#include <SPIFFS.h>

void logEvent(String event) {
  File file = SPIFFS.open("/events.log", FILE_APPEND);
  if(file) {
    file.println(String(millis()) + "," + event);
    file.close();
  }
}

8.3 多用户权限

cpp 复制代码
// 简单的权限验证
bool checkPermission(String user, int door) {
  // 定义权限矩阵
  bool permissions[3][3] = {
    {true, true, true},   // 管理员:所有门
    {true, true, false},  // 员工:前两个门
    {false, false, true}  // 访客:第三个门
  };
  
  return permissions[user][door];
}

九、方案优势总结

9.1 技术优势

  1. 完全自主:无云依赖,数据本地存储
  2. 开源透明:代码可审查,无后门风险
  3. 协议标准:MQTT为物联网标准协议
  4. 生态丰富:ESP32有庞大社区支持

9.2 成本优势

  • 硬件成本极低:远低于商业门禁系统
  • 无软件费用:全部开源,无授权费用
  • 无月租费用:无云服务订阅费用
  • 维护成本低:模块化设计,易于维修

9.3 安全优势

  • 断电安全:停电时自动锁闭
  • 机械备份:钥匙和旋钮双重保障
  • 网络隔离:内网运行,不外露
  • 访问控制:可实施精细权限管理

十、注意事项

10.1 关键确认事项

  1. 电锁类型:必须确认是"断电闭锁型"
  2. 电源功率:计算总功率需求并留有余量
  3. 网络规划:确保Wi-Fi覆盖所有门位置
  4. 安装位置:避免潮湿和高温环境

10.2 应急准备

  • 备用钥匙:准备至少两套完整钥匙
  • 技术文档:保存接线图和配置信息
  • 备用零件:准备常见易损件备用
  • 应急流程:制定明确的故障处理流程

10.3 用户培训重点

  1. 正常操作:手机APP开门流程
  2. 异常处理:Wi-Fi故障时蓝牙使用方法
  3. 应急操作:停电时钥匙使用方法
  4. 安全须知:钥匙保管和权限管理

最终建议

本方案针对3个门的小规模部署优化,具有以下特点:

适合场景:

  • 办公室、仓库、小型商铺
  • 家庭别墅、工作室
  • 需要低成本自主可控的场合

不推荐场景:

  • 超大规模部署(>20门)
  • 严格消防认证要求的公共场所
  • 无基本技术维护能力的用户

核心价值:

  • 以极低成本获得专业级门禁功能
  • 完全掌握控制权和数据所有权
  • 灵活的扩展和定制能力
  • 可靠的断电安全和机械备份

成功关键:

  1. 正确选购断电闭锁型电控锁
  2. 确保网络稳定和覆盖
  3. 做好应急备份和用户培训
  4. 定期维护和监控系统状态
相关推荐
BY组态2 小时前
【技术分析】Ricon组态系统的模块化架构设计
物联网·iot·web组态·组态
BY组态4 小时前
【教程】如何使用Ricon组态系统快速构建监控画面
物联网·iot·web组态·组态
BY组态6 小时前
【对比分析】Ricon组态系统 vs 传统组态软件
运维·物联网·web组态·组态
zhaoshuzhaoshu1 天前
BLE(蓝牙低功耗)连接过程详解
物联网·蓝牙·无线
搜佛说1 天前
下一代跨语言原生操作系统商业计划书
物联网·软件工程
BY组态1 天前
Ricon组态系统在实际项目中的应用案例分享
物联网·web组态·组态
Zevalin爱灰灰1 天前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(五)
单片机·物联网·嵌入式·esp8266
Web3_Daisy1 天前
Token 分红机制详解:实现逻辑、激励结构与风险分析
大数据·人工智能·物联网·web3·区块链
BY组态1 天前
从零开始:Ricon组态系统快速入门指南
运维·物联网·web组态·组态
次旅行的库1 天前
MQTT学习笔记
数据库·笔记·物联网·学习