本項目為RT-Thread嵌入式大賽獲獎作品,基于恩智浦MCXA156系列微控制器構建了一款多功能智能門鎖控制系統(tǒng)。目前,恩智浦已有多款產(chǎn)品對RT-Thread完成了適配。近期,MCX A 系列產(chǎn)品的重要成員,FRDM-MCXA346也完成了適配,并在社區(qū)開發(fā)者的協(xié)作下完成了電子書《恩智浦FRDM-MCX A346開發(fā)實踐指南》
(https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/MCX-A346/%E6%81%A9%E6%99%BA%E6%B5%A6FRDM-MCXA346%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97)
(文末查看貢獻名單以及開發(fā)板詳情↓)
目錄
項目概述
硬件選型與連接
軟件架構設計
核心模塊實現(xiàn)
多開鎖模式擴展
項目優(yōu)化與改進方向
項目源碼
1 項目概述
本項目基于MCXA156系列微控制器構建了一款多功能智能門鎖控制系統(tǒng),整合了密碼、指紋、射頻卡三種開鎖方式,配備 OLED 本地顯示與聲光反饋機制,通過 EEPROM 實現(xiàn)密鑰持久化存儲,構成了一套兼顧安全性與便捷性的嵌入式解決方案。系統(tǒng)支持本地密鑰修改、開鎖狀態(tài)實時反饋、錯誤報警等核心功能,可廣泛應用于家庭、辦公場所等場景的門禁控制。
設計思路方案

系統(tǒng)運行流程圖

項目核心功能
多模式開鎖:支持 6 位數(shù)字密碼、FPM383C 指紋識別、RC522 射頻卡三種開鎖方式,滿足不同使用場景需求。
密鑰管理:通過 24CXX 系列 EEPROM 實現(xiàn)開鎖密鑰的持久化存儲,支持本地按鍵修改密鑰,修改后自動同步存儲。
狀態(tài)可視化:借助 SSD1306 OLED 顯示屏實時顯示當前界面狀態(tài)、輸入密碼位數(shù)、開鎖結(jié)果等信息;
聲光反饋:開鎖成功時 LED 點亮 + 圖標提示,密碼錯誤時蜂鳴器報警 + 圖標閃爍,提升用戶交互體驗;
多任務并發(fā):基于裸機編程實現(xiàn)傳感器掃描、按鍵處理、顯示更新、報警控制等任務的并發(fā)執(zhí)行,確保系統(tǒng)響應實時性。
本文將詳細拆解系統(tǒng)的硬件選型、軟件架構、核心邏輯實現(xiàn)及開發(fā)過程中的關鍵細節(jié),為嵌入式門禁系統(tǒng)開發(fā)提供實踐參考。
視頻演示:[智能門鎖演示視頻]【智能門鎖MCXA156】
2 硬件選型與連接
核心控制器:FRDM-MCXA156
選用 FRDM-MCXA156微控制器作為核心控制單元,其優(yōu)勢如下:
性能:搭載ARM Cortex-M 系列內(nèi)核,具備高效的指令執(zhí)行能力,可滿足多外設并發(fā)控制與算法處理需求,豐富的I2C、SPI、UART、PWM、GPIO 等接口,無需擴展板即可直接連接所有功能模塊。
各模塊功能

各協(xié)議通信流程圖

硬件連接詳情

3 軟件架構設計
本項目軟件基于RT-Thread-5.2.1官方demo開發(fā),將系統(tǒng)功能拆解為多個獨立模塊,通過全局變量實現(xiàn)模塊間數(shù)據(jù)交互,確保代碼的可維護性與擴展性。
整體架構
系統(tǒng)軟件主要包含五大核心模塊,各模塊功能獨立、協(xié)同工作:
外設驅(qū)動模塊:負責各硬件外設的初始化與底層操作(如UART、I2C、SPI、PWM、GPIO 等)。
核心控制模塊:實現(xiàn)開鎖邏輯判斷、密鑰驗證、狀態(tài)管理等核心功能。
輸入處理模塊:處理按鍵輸入、指紋識別結(jié)果、射頻卡讀取數(shù)據(jù)。
顯示控制模塊:管理 OLED 屏幕的界面刷新與信息顯示。
反饋模塊:通過 LED、蜂鳴器實現(xiàn)開鎖成功、錯誤報警等狀態(tài)反饋。
工作流程詳解
系統(tǒng)初始化階段:
啟動后依次完成中斷優(yōu)先級配置、串口初始化、各外設(指紋模塊、RC522、OLED、按鍵EEPROM、PWM)初始化。
檢測 EEPROM 是否正常工作,若異常則通過 LED 閃爍提示,從 EEPROM 中讀取預存儲的 6 位開鎖密鑰,存入全局變量open_lock_key。
主循環(huán)任務(無限循環(huán)執(zhí)行):
傳感器掃描:持續(xù)調(diào)用fpm383c_Scan()(指紋掃描)、RC522_Scan()(射頻卡掃描),等待識別結(jié)果,通過key_Scan()檢測按鍵輸入,處理數(shù)字輸入、密碼確認、刪除、界面切換等操作,輸入 6 位密碼后,與存儲的開鎖密鑰比對,匹配則觸發(fā)開鎖,不匹配則啟動報警,根據(jù)開鎖結(jié)果、錯誤狀態(tài),控制 LED 亮滅與蜂鳴器發(fā)聲,同步更新 OLED 顯示。
線程間通信:通過全局變量(如open_door_type開鎖狀態(tài)、open_door_alert報警狀態(tài)、interface_num界面標識)實現(xiàn)各模塊間數(shù)據(jù)交互,簡化通信邏輯,確保系統(tǒng)響應實時性。
4 核心模塊實現(xiàn)
EEPROM 密鑰存儲與讀取
采用 24CXX EEPROM 實現(xiàn)密鑰的持久化存儲,確保掉電后密鑰不丟失。
初始化:調(diào)用AT24CXX_Init()初始化 I2C 總線與 EEPROM 設備,通過AT24CXX_Check()檢測設備是否正常。
密鑰讀取:系統(tǒng)啟動時,通過循環(huán)讀取 EEPROM 的 0-5 地址數(shù)據(jù),存入open_lock_key數(shù)組。
密鑰修改:在修改界面(interface_num=2)確認后,將臨時密鑰open_lock_key_temp寫入 EEPROM 對應地址,并重新讀取同步至open_lock_key。
// 初始化EEPROM并讀取密鑰AT24CXX_Init();while(AT24CXX_Check()){ // EEPROM異常,LED閃爍提示 LED_ON= !LED_ON; Delay1_ms(100);}for(i=0;i<6;i++){? ? open_lock_key[i] =?AT24CXX_ReadOneByte(i);?// 讀取密鑰}// 修改密鑰并寫入EEPROMfor(i=0;i<6;i++){? ? AT24CXX_WriteOneByte(i, open_lock_key_temp[i]);?// 寫入新密鑰}
開鎖與報警反饋
開鎖邏輯:密鑰驗證通過(或指紋 / 射頻卡識別成功)時,open_door_type置 1,LED 點亮,OLED 顯示開鎖成功圖標(BMP4),2 秒后自動關鎖(LED 熄滅,圖標恢復);
報警邏輯:密鑰不匹配或操作錯誤時,open_door_alert置 1,蜂鳴器發(fā)出報警音(time2_Pwm_Alert),OLED 錯誤圖標(BMP2)閃爍 4 次后恢復。
// 開鎖反饋if(open_door_type){ LED_ON; OLED_DrawBMP(12,5,28,7,BMP4);// 顯示開鎖成功圖標 Delay1_ms(2000); LED_OFF; OLED_DrawBMP(12,5,28,7,BMP3);// 恢復默認圖標 open_door_type =0;}// 錯誤報警反饋if(open_door_alert){ for(i=0;i<4;i++){? ? ? ? OLED_DrawBMP(12,5,28,7,BMP2);?// 顯示錯誤圖標? ? ? ? time2_Pwm_Alert(150,1000);?// 蜂鳴器報警? ? ? ? OLED_DrawBMP(12,5,28,7,BMP3);?// 恢復默認圖標? ? ? ? rt_thread_mdelay(100);? ? }? ? open_door_alert =?0;}
OLED 界面顯示
OLED 屏幕用于實時顯示系統(tǒng)狀態(tài),主要包含:
界面標識:顯示當前界面(默認界面 / 修改界面),通過interface_Oled_Flushed()刷新;
密碼輸入位數(shù):通過位圖 BMP2 標識已輸入的密碼位數(shù);
狀態(tài)圖標:默認狀態(tài)(BMP3)、錯誤狀態(tài)(BMP2)、開鎖成功狀態(tài)(BMP4);
按鍵值顯示:實時顯示當前按下的按鍵數(shù)字。
// 刷新界面標識voidinterface_Oled_Flushed(){ OLED_DrawBMP(72,5,86,7,BMP6); OLED_ShowNum(72,5,interface_num,1,16);// 顯示當前界面編號}// 顯示按鍵值OLED_ShowNum(100,5,key_vel,a,16);
5 多開鎖模式擴展
本系統(tǒng)預留了指紋識別(FPM383C)與射頻卡識別(RC522)的擴展接口,核心實現(xiàn)思路如下:
指紋識別:通過fpm383c_Scan()持續(xù)掃描指紋,識別成功后返回匹配結(jié)果,直接置位open_door_type觸發(fā)開鎖。
射頻卡識別:通過RC522_Scan()讀取射頻卡 ID,與預存儲的合法 ID 比對,匹配則觸發(fā)開鎖。
目前代碼已完成模塊初始化與掃描函數(shù)調(diào)用,只需擴展指紋 / 射頻卡的合法數(shù)據(jù)存儲與比對邏輯,即可實現(xiàn)多模式開鎖功能。
用3D打印做了一件小衣服給它穿上

6 項目優(yōu)化與改進方向
傳感器穩(wěn)定性:RC522 射頻卡模塊在強干擾環(huán)境下可能出現(xiàn)讀取失敗,可增加數(shù)據(jù)校驗與多次掃描機制提升穩(wěn)定性。
密碼安全性:當前密鑰以明文形式存儲于 EEPROM,可增加 AES 加密算法對密鑰進行加密存儲,提升安全性。
功能擴展:增加遠程開鎖(通過 SIM900A GSM 模塊)、開鎖記錄存儲、低功耗模式等功能。
交互體驗:優(yōu)化 OLED 顯示界面,增加密碼輸入隱藏(如顯示星號)、中文提示等,提升用戶體驗。
異常處理:增加指紋識別失敗、射頻卡讀取失敗的專門反饋機制,區(qū)分不同錯誤類型。
7 項目源碼
百度網(wǎng)盤地址:通過網(wǎng)盤分享的文件:frdm-mcxa156.zip
鏈接:https://pan.baidu.com/s/1SDYqULii2I0b2lkJM9ecrg?pwd=8888提取碼: 8888
代碼鏈接:https://gitee.com/yang-xianyi/exclusive
歡迎各位開發(fā)者提出寶貴意見與優(yōu)化建議,共同完善系統(tǒng)功能。
《恩智浦FRDM-MCX A346開發(fā)實踐指南》貢獻名單
RT-Thread社區(qū)攜手恩智浦半導體聯(lián)合發(fā)起FRDM-MCXA346 開發(fā)板評測活動,《恩智浦FRDM-MCX A346開發(fā)實踐指南》詳細列出了各個內(nèi)容板塊及其貢獻者。在此,衷心感謝所有小伙伴的支持與貢獻!

FRDM-MCXA346開發(fā)板介紹
FRDM-MCXA346是一款緊湊且可擴展的開發(fā)板,可讓您快速基于FRDM-MCXA346微控制器單元(MCU)開展原型設計。它們提供行業(yè)標準的接口,可輕松訪問MCU的I/O,配備集成的開放標準串行接口、外部閃存和板載MCU-Link調(diào)試器。

-
微控制器
+關注
關注
48文章
8375瀏覽量
164539 -
嵌入式
+關注
關注
5198文章
20442瀏覽量
333962 -
RT-Thread
+關注
關注
32文章
1613瀏覽量
44818 -
智能門鎖
+關注
關注
18文章
1929瀏覽量
45921
發(fā)布評論請先 登錄
風洞懸浮球:基于RT-Thread與MCXA156的簡單控制實踐 | 技術集結(jié)
RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術集結(jié)
基于RT-Thread與MCXA156的USB HID游戲手柄設計與實現(xiàn) | 技術集結(jié)
RT-Thread全球技術大會:使用RT-Thread開發(fā)大規(guī)模嵌入式軟件帶來的挑戰(zhàn)與好處
新書上架|嵌入式系統(tǒng)原理及應用——基于STM32和RT-Thread
2024 RT-Thread 全球技術大會演講議程發(fā)布!
新書發(fā)布——《RT-Thread嵌入式實時操作系統(tǒng)內(nèi)核、驅(qū)動和應用開發(fā)技術》
基于恩智浦FRDM-MCXA153開發(fā)板實現(xiàn)RT-Thread的ADC驅(qū)動
免費申請 | FRDM-MCXA156評測活動發(fā)布!
《恩智浦FRDM-MCXA156開發(fā)實踐指南》上線啦
基于RT-Thread的I2C(軟件) 實踐 | 技術集結(jié)
明晚!基于RT-Thread 的 PID 控制實踐,從驅(qū)動到算法到監(jiān)控,一次學會!| 問學直播
【好書推薦】RT-Thread第22本相關書籍!《嵌入式實時操作系統(tǒng)開發(fā)實踐》| 技術集結(jié)
NXP新品FRDM-MCXA346 RT-Thread 評測活動開放,下周四新品直播預約!| 社區(qū)活動
智能門鎖:基于RT-Thread與FRDM-MCXA156的多外設嵌入式實踐 | 技術集結(jié)
評論