You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WiFi/以太网将Arduino RFID考勤系统连接至MySQL数据库?

简化版Arduino RFID考勤系统连MySQL步骤

嘿,我来帮你梳理下把Arduino+RFID考勤系统连到MySQL的简化步骤,亲测靠谱!

一、先把硬件凑齐

  • Arduino主板(Uno/Nano都能用,Uno稳定性更好)
  • MFRC522 RFID阅读器模块(最常用的入门款,性价比拉满)
  • WiFi扩展板(比如ESP8266 WiFi Shield,嫌麻烦直接用ESP32代替Arduino更省心)
  • 可选:以太网扩展板(如果有有线网络环境)
  • 几张RFID卡片/标签

二、MySQL数据库端配置

  1. 先在本地电脑或云服务器上装好MySQL,创建一个考勤专用数据库,比如叫attendance_db
  2. 建一张考勤记录表records,字段不用太复杂,够用就行:
CREATE TABLE records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    rfid_uid VARCHAR(20) NOT NULL,
    student_name VARCHAR(50),
    attendance_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
  1. 别用root用户连接Arduino!专门建一个权限受限的用户,只给INSERT和SELECT权限,安全第一:
CREATE USER 'arduino_attend'@'%' IDENTIFIED BY '你的安全密码';
GRANT INSERT, SELECT ON attendance_db.* TO 'arduino_attend'@'%';
FLUSH PRIVILEGES;

小提示:如果是本地测试,把%换成localhost;如果是远程服务器,要确保服务器开放3306端口,并且允许该用户远程连接。

三、Arduino端代码编写

这里以ESP8266 WiFi扩展板为例(换成ESP32逻辑完全一致):

  1. 先在Arduino IDE里装必要的库:
    • MFRC522:用来读取RFID标签的UID
    • ESP8266WiFi:处理WiFi连接
    • MySQL_Connector_Arduino:负责和MySQL通信(或者用MySQL_MariaDB_Generic,兼容性更强)
  2. 核心代码框架,直接改参数就能用:
#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

// RFID模块引脚定义(根据你的接线改)
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

// WiFi账号密码
const char* ssid = "家里的WiFi名称";
const char* password = "WiFi密码";

// MySQL服务器信息
IPAddress server_addr(192,168,1,100); // 你的MySQL服务器IP
char user[] = "arduino_attend";
char db_password[] = "刚才设置的数据库用户密码";
char db_name[] = "attendance_db";

WiFiClient client;
MySQL_Connection conn((Client *)&client);
MySQL_Cursor *cursor;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  
  // 连接WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功!");

  // 连接MySQL数据库
  if (conn.connect(server_addr, 3306, user, db_password)) {
    Serial.println("数据库连接成功!");
    cursor = new MySQL_Cursor(&conn);
  } else {
    Serial.println("数据库连接失败!检查IP/密码/权限!");
    while(1); // 卡住等你排查问题
  }
}

void loop() {
  // 检查有没有RFID卡靠近
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    // 把UID转成字符串格式
    String uidStr = "";
    for (byte i = 0; i < mfrc522.uid.size; i++) {
      uidStr += String(mfrc522.uid.uidByte[i], HEX);
    }
    uidStr.toUpperCase(); // 统一转大写,避免大小写问题

    // 插入考勤记录到数据库
    char insert_sql[120];
    sprintf(insert_sql, "INSERT INTO records(rfid_uid) VALUES('%s')", uidStr.c_str());
    cursor->execute(insert_sql);
    Serial.print("已打卡:UID=");
    Serial.println(uidStr);

    // 延迟一下,避免重复读取同一张卡
    delay(2000);
    mfrc522.PICC_HaltA();
    mfrc522.PCD_StopCrypto1();
  }
}

补充:如果用以太网扩展板,把WiFi相关代码换成Ethernet库的连接逻辑就行,数据库通信部分完全一样。

四、测试与调试

  1. 把代码上传到Arduino,打开串口监视器(波特率9600),看是否成功连接WiFi和数据库
  2. 拿RFID卡靠近阅读器,看串口是否输出“已打卡”的提示
  3. 登录MySQL,执行SELECT * FROM records;,检查是否有新的考勤记录插入

五、可选优化建议

  • 可以加一张students表,把RFID UID和学生姓名绑定,查询时直接显示姓名
  • 增加重复打卡判断,比如10分钟内同一UID不重复记录
  • 用PHP写个简单的本地中转接口,让Arduino先请求接口,再由接口操作数据库,更安全也更灵活

内容的提问来源于stack exchange,提问作者DK1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:39