基于STM32的物联网智能停车系统设计(RC522刷卡出入库 + 自动计费 + 闸道控制)

小区停车场的传统管理模式全靠人工发卡收费,出入口排长队、账目对不上、车位找不到,都是老大难。本文带来一套基于 STM32F103C8T6 的物联网智能停车系统:车主在出入口刷一下 IC 卡,闸道自动抬起、时间自动记录,出库时系统按停车时长自动算费,剩余车位数、出入库记录全部通过 ESP8266 同步到手机 APP。整套方案刷卡识别、计时计费、闸道控制、无线上云一气呵成,是单片机综合应用非常典型的练手项目。

一、系统功能总览

功能模块具体说明
刷卡识别RC522 读取 IC 卡唯一卡号,识别车主身份
入库管理首次刷卡记录入库时间,开闸放行
出库计费再次刷卡读取时间差,按时长自动计算停车费用
闸道控制ULN2003 驱动步进电机,正转开闸、反转关闸
实时时钟DS1302 提供精准计时,断电后纽扣电池维持走时
信息显示OLED 显示卡片信息、出入库时间、停车费用
车位同步剩余车位数、出入库记录经 ESP8266 实时上传 APP

二、核心模块选型对比

2.1 主控芯片:STM32F103C8T6 vs LPC1768

对比项方案一:STM32F103C8T6方案二:LPC1768
内核Cortex-M3 @72MHzCortex-M3 @100MHz
Flash/RAM64KB / 20KB512KB / 64KB
片上外设SPI、USART、定时器齐全资源更多但本系统用不上
生态资料例程丰富、教程极多资料相对较少
价格约 10 元约 35 元

选择方案一(STM32F103C8T6)。系统所需的 SPI、USART、GPIO 数量不多,C8T6 资源绰绰有余,且开发资料最全、成本最低,是中小型控制系统的稳妥之选。

2.2 射频刷卡模块:RC522 vs ST25R3911B

对比项方案一:RC522方案二:ST25R3911B
协议ISO14443-AISO14443-A/B、NFC 多协议
接口SPI,驱动成熟SPI/I2C
读卡距离0~5cm0~5cm
读写功能支持扇区读写与密钥加密同样支持且安全性更高
价格约 8 元约 45 元

选择方案一(RC522)。停车场身份识别只需读取 M1 卡的唯一序列号,RC522 的功能完全覆盖,SPI 驱动代码公开成熟,价格优势明显。

2.3 时钟芯片:DS1302 vs PCF8563

对比项方案一:DS1302方案二:PCF8563
接口三线同步串行I2C
备用电源VBAT 外接纽扣电池同样支持
计时精度±2s/天(晶振决定)精度相当
价格约 3 元约 5 元

选择方案一(DS1302)。计费业务以秒级时间差为依据,DS1302 的精度足够;三线接口代码简单、芯片价格低、后备电池方案成熟,够用且可靠。

2.4 显示模块:OLED12864 vs LCD1602

对比项方案一:OLED12864方案二:LCD1602
分辨率128×64 点阵16×2 字符
显示内容中文、曲线、多行信息仅两行字符,无中文
接口I2C 两线并口 6~11 线
对比度自发光,无需调节需电位器调对比度

选择方案一(OLED12864)。出入库时间、车牌/卡号、费用金额需要多行信息同时显示,OLED 点阵屏可以自定义中文字库,显示内容直观,I2C 接口还节省了 GPIO。

2.5 无线模块:ESP8266 vs nRF24L01

对比项方案一:ESP8266方案二:nRF24L01
联网方式WiFi 入网直连云平台2.4G 私有协议,需网关
覆盖范围随路由器覆盖空旷百米级
上云能力TCP 透传即插即用无法独立上云
价格约 10 元约 8 元

选择方案一(ESP8266-01S)。停车记录与剩余车位必须同步到手机端,数据要经云平台转发,ESP8266 独立即可完成入网上云,nRF24L01 还需额外部署接收网关,整体成本反升。

2.7 电机驱动:ULN2003 vs DRV8825

对比项方案一:ULN2003 + 28BYJ-48方案二:DRV8825
适配电机四相五线步进电机双极步进/直流电机
驱动方式达林顿管阵列,灌电流驱动H 桥,支持细分
控制方式四路 IO 按拍序翻转脉冲+方向信号
转矩低速大转矩,适合闸杆缓动需配套电机,成本高
价格约 5 元(含电机常见套餐)约 15 元(不含电机)

选择方案一(ULN2003)。闸道模型使用 28BYJ-48 步进电机即可带动,ULN2003 四路输入直接由 GPIO 按四相八拍时序驱动,控制逻辑直观、成本最低。

三、系统接线总表

模块引脚连接 STM32 引脚备注
RC522SDA(NSS)PA4片选,与 3.3V 间接 4.7kΩ 上拉
RC522SCKPA5SPI1 时钟
RC522MISOPA6主入从出
RC522MOSIPA7主出从入
RC522RSTPB0模块复位
DS1302SCLKPB1时钟线
DS1302IOPB2双向数据线
DS1302CEPB10片选使能,VBAT 接纽扣电池
OLED12864SCL/SDAPB6/PB7I2C 接口,SSD1306 驱动
ESP8266TXD/RXDPA3/PA2USART2,波特率 115200,交叉相连
ESP8266RSTPA8复位控制
ULN2003IN1~IN4PB12/PB13/PB14/PB15四相八拍驱动 28BYJ-48 步进电机

接线说明:RC522 与 DS1302 均为 3.3V 供电,与 STM32 电平直接兼容;28BYJ-48 电机经 ULN2003 驱动板独立供电,避免电机电流冲击主控电源。

四、系统软件设计

4.1 主程序流程

系统上电后初始化各外设并从 DS1302 读取当前时间,随后进入主循环轮询刷卡事件:RC522 检测到卡片 → 读出卡号并在本地记录中查询 → 未查到则记录卡号与入库时间、开闸、剩余车位减一 → 查到记录则计算停车时长与费用、关闸、剩余车位加一 → OLED 刷新显示,并将出入库信息经 ESP8266 同步 APP。主程序骨架如下:

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    System_Init();                       // GPIO/SPI1/USART2/I2C/定时器初始化

    OLED_Init();
    OLED_ShowString(0, 0, "Smart Parking");
    DS1302_Init();
    DS1302_Read_Time();                  // 读取当前时间

    ESP8266_Rst();
    ESP8266_Net_Config();                // 入网 + 透传 + TCP 连接

    while (1)
    {
        if (RC522_Request() == CARD_FOUND)      // 寻到卡
        {
            RC522_Read_UID(card_uid);           // 读取卡号(防冲撞+选卡)
            if (!Find_Record(card_uid))         // 库中无记录 → 入库
            {
                In_Time = Get_Current_Time();   // DS1302 记录入库时间
                Add_Record(card_uid, In_Time);
                Motor_Forward();                // 正转开闸
                Park_Count--;
                OLED_ShowIn(card_uid, In_Time);
            }
            else                                // 库中有记录 → 出库
            {
                Out_Time  = Get_Current_Time();
                fee = Calc_Fee(In_Time, Out_Time);   // 按时长计费
                Del_Record(card_uid);
                Motor_Reverse();               // 反转后复位关闸
                Park_Count++;
                OLED_ShowOut(Out_Time, fee);
            }
            ESP8266_Sync(card_uid, Park_Count, fee); // 同步 APP
        }
        delay_ms(100);
    }
}

4.2 RC522 刷卡识别流程

RC522 遵循 ISO14443-A 协议,一次完整读卡分六步:① 天线寻卡(Request,获得卡类型);② 防冲撞(Anticollision,多张卡同场时提取唯一序列号);③ 选卡(Select);④ 密钥验证(Authentication,两级密钥加密,防数据被篡改);⑤ 读写扇区数据;⑥ CRC 校验保证传输正确。本系统用防冲撞得到的序列号作为车主唯一标识,配合 EEPROM 中的密钥验证,防止复制卡冒用。

4.3 计时计费流程

DS1302 以三线时序读写 time_buf 数组(年月日时分秒),出入库各取一次时间快照,费用按"分钟差 × 单价"计算,不足一分钟按一分钟计。OLED 出库页面同步显示入库时间、出库时间与应付金额,交易信息一并上传云端留档。

4.4 步进电机闸道控制流程

28BYJ-48 为四相八拍工作方式,正转按 A→AB→B→BC→C→CD→D→DA 的拍序依次给四相通电,反转按逆序执行,停止时四相全部置低:

const u8 Phase[8] = {0x01, 0x03, 0x02, 0x06,
                     0x04, 0x0C, 0x08, 0x09};   // 八拍拍序

void Motor_Forward(void)      // 开闸:正转 512 拍(约一圈)
{
    for (u16 i = 0; i < 512; i++)
        for (u8 j = 0; j < 8; j++)
        {
            GPIO_Write_Phase(Phase[j]);
            delay_ms(2);                       // 拍间延时决定转速
        }
    Motor_Stop();
}

void Motor_Reverse(void)      // 关闸:反序执行
{
    for (u16 i = 0; i < 512; i++)
        for (u8 j = 0; j < 8; j++)
        {
            GPIO_Write_Phase(Phase[7 - j]);
            delay_ms(2);
        }
    Motor_Stop();
}

拍间延时约 2ms,闸杆起落平缓无冲击。

4.5 ESP8266 数据同步流程

模块按标准 AT 序列配置:复位 500ms → AT+CWMODE=1 → AT+CWJAP 入网 → AT+CIPMUX=0 → AT+CIPMODE=1 透传 → AT+CIPSEND 建立数据通道。出入库事件触发时,系统把卡号、剩余车位、出入库时间与费用打包上传;APP 端也可下发校时指令,用网络时间校准 DS1302,保证计费基准精准。

五、系统实现与测试

系统硬件联调后,围绕自动控制与无线通信两大功能展开测试。

5.1 自动控制功能测试

测试项操作系统动作结果
刷卡识别入口处刷 IC 卡OLED 显示卡号,识别 <1s通过
闸道开闭刷卡入库/出库电机正转开闸、放行后关闭通过
计时计费停放 35 分钟后刷卡出库OLED 显示时长与费用,数值准确通过
车位统计连续多车出入库剩余车位数随动增减无误通过

5.2 无线通信功能测试

APP 端可实时查看剩余车位数与最新出入库记录;下发校时指令后,OLED 时间在下一刷新周期内与网络时间对齐。多次连续刷卡压力测试中,数据上传无丢包、无串扰,通信链路稳定。

六、总结

本文实现了一套完整的物联网智能停车系统:以 STM32F103C8T6 为核心,RC522 完成秒级刷卡识别,DS1302 支撑精准计时计费,ULN2003 驱动步进电机完成闸道起落,ESP8266 将车位与交易数据实时同步云端。测试表明系统刷卡识别、自动计费、闸道控制与无线通信各环节运行稳定,具备实际部署的雏形。后续可扩展 LED 车位引导屏、车牌识别摄像头或微信小程序支付,把"一张卡管到底"升级为"无感通行",项目延展空间充足,非常适合作为物联网方向的综合实践课题。

七、资料内容完整工程资料(原理图、PCB、代码、元件清单)

八、资料获取方式

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐