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

二、系统总体设计

智慧考勤系统主要由三部分组成:
- 终端考勤设备(STM32F103ZET6 + RFID + 指纹识别模块 + ESP8266)
- 无线网络通讯层(ESP8266 Mesh 组网)
- 服务器管理平台(人员管理 + 数据存储 + 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 指示灯,提示打卡成功与否。

四、软件架构设计
系统软件分为三层:
-
设备端(STM32F103)
- 串口驱动:与 RFID / 指纹模块 / ESP8266 通讯。
- 数据采集:刷卡/指纹比对结果 → 上传至服务器。
- 状态显示:LCD 显示考勤结果。
-
通讯层(ESP8266 Mesh)
- Mesh 节点自动组网,确保大范围考勤设备无缝互联。
- 提供 TCP 客户端,定期上传考勤数据至服务器。
-
服务器端(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 文件")

七、系统运行流程
- 用户刷卡或录入指纹 → STM32F103 验证身份。
- STM32F103 通过 UART 将用户 ID 与考勤状态传递给 ESP8266。
- ESP8266 作为 Mesh 节点,将数据上传至服务器。
- 服务器接收数据,存入 MySQL 数据库。
- 管理员可通过 Web 界面进行用户管理与数据查询。
- 支持一键导出 Excel,形成考勤报表。
八、功能扩展与优化
- 人脸识别模块:可进一步引入摄像头与 AI 模型,提升安全性。
- 断网缓存:STM32F103 本地存储未上传数据,联网后自动补传。
- 数据可视化:利用 ECharts/Matplotlib 生成考勤统计图。
- 移动端管理:通过小程序或APP进行实时考勤查看。
九、总结
本文介绍了一个基于 STM32F103ZET6 + ESP8266 Mesh 的智慧考勤系统,涵盖了硬件架构、软件设计、网络组网、服务器端实现与数据导出。该系统不仅实现了考勤自动化,还支持多点分布式部署,具有良好的扩展性与应用价值。
在企业、校园、工厂等场景中,该系统能够有效替代传统考勤模式,助力 智能办公 与 智慧校园 的发展。
完整源码开源分享:https://blog.csdn.net/weixin_52908342/article/details/150591980

浙公网安备 33010602011771号