基于STM32和ESP8266的智慧考勤系统设计与实现【免费开源】

基于STM32和ESP8266的智慧考勤系统设计与实现

源码见文末

一、前言

随着智能硬件与物联网技术的快速发展,传统的考勤方式(如纸质登记、简单IC卡刷卡机)已无法满足企业、学校等场景对效率与智能化的需求。本文介绍了一种基于 STM32F103ZET6 微控制器ESP8266 WiFi 模块 的智慧考勤系统。该系统支持 刷卡指纹识别 两种验证方式,能够通过 ESP8266 Mesh 组网 与服务器通讯,实现 人员信息管理考勤数据自动导出(Excel 表格),大幅提升了管理效率与系统智能化水平。


在这里插入图片描述

二、系统总体设计

在这里插入图片描述

智慧考勤系统主要由三部分组成:

  1. 终端考勤设备(STM32F103ZET6 + RFID + 指纹识别模块 + ESP8266)
  2. 无线网络通讯层(ESP8266 Mesh 组网)
  3. 服务器管理平台(人员管理 + 数据存储 + Excel导出)

系统架构图

[RFID / 指纹模块] → [STM32F103ZET6 控制器] → [ESP8266 Mesh节点] 
       ↘------------------------------------------↗
                          [服务器端(Web + 数据库 + Excel导出)]

在此架构下,STM32F103 负责底层硬件控制与身份验证,ESP8266 提供可靠的无线组网通信,服务器端则实现业务逻辑、数据存储与可视化。


三、硬件设计

在这里插入图片描述

1. 控制器:STM32F103ZET6

  • 主频 72MHz,资源丰富(512KB Flash, 64KB RAM)。
  • 提供多个 UART、SPI、I²C 接口,便于连接指纹模块、RFID、ESP8266。
  • 低功耗,稳定可靠,适合嵌入式考勤设备。

2. 身份验证模块

  • RFID 模块:用于刷卡(IC 卡/ID 卡),通过 UART 与 STM32 通讯。
  • 指纹识别模块:采用 UART 接口,提供指纹采集、比对功能。

3. 网络通讯模块:ESP8266

  • 支持 2.4GHz WiFi,内置 TCP/IP 协议栈。
  • 通过 ESP-MESH 技术 实现多节点网络覆盖,避免单点连接压力。
  • 使用 UART 与 STM32F103 通讯,协议采用 AT 指令自定义串口协议

4. 电源与其他模块

  • 5V 适配器供电,LDO 转换 3.3V 给 ESP8266。
  • LCD 显示屏(用于显示考勤结果、系统提示)。
  • 蜂鸣器 / LED 指示灯,提示打卡成功与否。

在这里插入图片描述

四、软件架构设计

系统软件分为三层:

  1. 设备端(STM32F103)

    • 串口驱动:与 RFID / 指纹模块 / ESP8266 通讯。
    • 数据采集:刷卡/指纹比对结果 → 上传至服务器。
    • 状态显示:LCD 显示考勤结果。
  2. 通讯层(ESP8266 Mesh)

    • Mesh 节点自动组网,确保大范围考勤设备无缝互联。
    • 提供 TCP 客户端,定期上传考勤数据至服务器。
  3. 服务器端(Web + 数据库)

    • 用户管理(添加、删除、修改人员信息)。
    • 考勤数据管理(存储、查询、统计)。
    • Excel 导出功能(批量导出考勤报表)。

五、ESP8266 Mesh组网原理

传统 WiFi 模式下,多个终端需要直接连接路由器,当节点数量过多时会造成 拥塞与掉线。ESP8266 Mesh 通过 分布式网络 架构,让节点之间可以 自动转发数据,实现 多节点覆盖 + 动态路由

  • 根节点:连接外部服务器,作为网关。
  • 子节点:分布在各个考勤点,自动连接到上级节点。
  • 数据转发:若子节点无法直连网关,会通过邻近节点中继。

这种方式特别适合 考勤系统多点分布 的应用场景(如学校、企业园区)。


六、服务器端实现

服务器采用 Python + Flask + MySQL 搭建,提供 Web 管理界面与数据存储功能。

1. 数据库设计(MySQL)

-- 人员表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(20) UNIQUE,
    name VARCHAR(50),
    department VARCHAR(50)
);

-- 考勤记录表
CREATE TABLE attendance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(20),
    time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status VARCHAR(20)
);

2. 后端接口示例(Flask)

from flask import Flask, request, jsonify
import pymysql

app = Flask(__name__)

# 数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="attendance")
cursor = db.cursor()

@app.route('/upload', methods=['POST'])
def upload_data():
    data = request.json
    user_id = data['user_id']
    status = data['status']
    cursor.execute("INSERT INTO attendance(user_id, status) VALUES (%s, %s)", (user_id, status))
    db.commit()
    return jsonify({"msg": "考勤数据上传成功"})

@app.route('/users/add', methods=['POST'])
def add_user():
    data = request.json
    cursor.execute("INSERT INTO users(user_id, name, department) VALUES (%s, %s, %s)", 
                   (data['user_id'], data['name'], data['department']))
    db.commit()
    return jsonify({"msg": "用户添加成功"})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3. Excel导出功能

借助 pandas + openpyxl,可以快速将考勤数据导出为 Excel:

import pandas as pd
import pymysql

def export_excel():
    conn = pymysql.connect(host="localhost", user="root", password="123456", database="attendance")
    df = pd.read_sql("SELECT * FROM attendance", conn)
    df.to_excel("考勤数据.xlsx", index=False)
    print("考勤数据已导出为 Excel 文件")

在这里插入图片描述

七、系统运行流程

  1. 用户刷卡或录入指纹 → STM32F103 验证身份。
  2. STM32F103 通过 UART 将用户 ID 与考勤状态传递给 ESP8266。
  3. ESP8266 作为 Mesh 节点,将数据上传至服务器。
  4. 服务器接收数据,存入 MySQL 数据库。
  5. 管理员可通过 Web 界面进行用户管理与数据查询。
  6. 支持一键导出 Excel,形成考勤报表。

八、功能扩展与优化

  • 人脸识别模块:可进一步引入摄像头与 AI 模型,提升安全性。
  • 断网缓存:STM32F103 本地存储未上传数据,联网后自动补传。
  • 数据可视化:利用 ECharts/Matplotlib 生成考勤统计图。
  • 移动端管理:通过小程序或APP进行实时考勤查看。

九、总结

本文介绍了一个基于 STM32F103ZET6 + ESP8266 Mesh 的智慧考勤系统,涵盖了硬件架构、软件设计、网络组网、服务器端实现与数据导出。该系统不仅实现了考勤自动化,还支持多点分布式部署,具有良好的扩展性与应用价值。

在企业、校园、工厂等场景中,该系统能够有效替代传统考勤模式,助力 智能办公智慧校园 的发展。

完整源码开源分享:https://blog.csdn.net/weixin_52908342/article/details/150591980

posted @ 2025-08-21 22:09  申公豹本豹  阅读(25)  评论(0)    收藏  举报