嚴正聲明:本文僅限于技術討論與分享,嚴禁用于非法用途
當代社會,我們進公司需要門禁卡,出入小區需要門禁卡,門禁系統又稱出入管理控制系統(ACCESS CONTROL SYSTEM), 是一種管理人員進出的智能化管理系統,它集微機自動識別技術和現代安全管理措施為一體,它涉及電子,機械,光學,計算機技術,通訊技術,生物技術等諸多新技術。它是解決重要部門出入口實現安全防范管理的有效措施。適用各種機要部門,如銀行、賓館、機房、軍械庫、機要室、辦公間、智能化小區、工廠等。

最近發現一個新好玩的Micropython開發板-蘿卜狗(TurnipDog),比TPYBoard v102更牛掰,可能是個升級版吧,然后果斷買了一個抓緊玩玩,發現這個的魅力在于支持遠程控制,這個Micropython開發板,不是利用Wifi遠程控制,而是利用紅外線控制的,控制距離大約在15米左右,于是就想用它來做個遠程的門禁控制系統。
材料準備
蘿卜狗(TurnipDog)開發板 1個
12864液晶顯示屏 1個
MF RC522射頻IC卡 1個
中文文字轉語音播報模塊 1個
杜邦線若干
實驗的器件都是一些通用的東西,很多地方都能買的到,我就不一一介紹啦,不過它的核心是我們的蘿卜狗-TurnipDog

蘿卜狗
MF RC522是應用于13.56MHz非接觸式通信中高集成度的讀寫卡芯片,是一款低電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜式手持設備研發的較好選擇。 MF RC522利用了先進的調制和解調概念,完全集成了在13.56MHz下所有類型的被動非接觸式通信方式和協議。支持14443A兼容應答器信號。數字部分處理ISO14443A幀和錯誤檢測。此外,還支持快速CRYPTO1加密算法,用語驗證MIFARE系列產品。MFRC522支持MIFARE系列更高速的非接觸式通信,雙向數據傳輸速率高達424kbit/s。作為13.56MHz高集成度讀寫卡系列芯片家族的新成員,MF RC522與MF RC500和MF RC530有不少相似之處,同時也具備許多特點和差異。它與蘿卜狗之間通信采用SPI模式,蘿卜狗通過SPI接口來讀取傳輸數據,以前用的是C語言,現在我們用的Micropython語言。

MF RC522射頻IC卡
硬件接線方法
下面我們將蘿卜狗和12864液晶顯示屏、MF RC522射頻卡和語音播報模塊接起來,實物圖我就不拍了,太丑了,大家根據下面的列表就可以接起來
12864液晶顯示屏
蘿卜狗
MF RC522射頻卡
語音播報模塊
GND
GND
VCC
VIN
RS
X11
R/W
GND
E
X18
DB0
X1
DB1
X2
DB2
X3
DB3
X4
DB4
X5
DB5
X6
DB6
X7
DB7
X8
PSB
3V3
RST
3V3
BLA
3V3
BLK
3V3
Y4
SDA
Y6
SCK
Y8
MOSI
Y7
MISO
GND
GND
Y3
RST
3V3
3.3V
Y2
TXD
Y1
RXD
+5V
VDD
GND
GND
程序編程
下面是main.py的主程序代碼,可以直接復制使用 ,這個類庫太多了,我就不一一粘貼了,有需要的留下郵箱告訴我,我發給大家 (*  ̄3)(ε ̄ *)
# main.py -- put your code here!import pybimport LCD12864import mfrc522import syn6288from pyb import UARTfrom necir import NecIrfrom bm import necbmfrom bm import nec_csfrom bm import nec_cbled=pyb.Pin('X10',pyb.Pin.OUT_PP)lcd=LCD12864.lcd12864()lcd.init_12864()led.value(1)SPI=pyb.SPI(2) RC522_SDA='Y4'RC522_RST='Y3'rc52=mfrc522.MFRC522()rc52.init_spi(SPI,RC522_RST,RC522_SDA)tab_id=[45,162,222,43,122]buf=[0xFD,0x00,0x07,0x01,0x01,0x5B,0x74,0x35,0x5D,0xBD]u6=UART(6,9600)u6.write(bytearray(buf))def lcdsleep(): led.value(1) lcd.qp_12864() def pdlcd(ok): lcd.qp_12864() if ok: lcd.lcd_write_string(0x89,"Allow entry",0) lcd.lcd_write_string(0x92,"允許進入",4) else : lcd.lcd_write_string(0x89,"Access Denied",0) lcd.lcd_write_string(0x92,"拒絕進入",4) def lcdsd(): lcd.lcd_write_string(0x92,"請稍后",3) def pdcard(id): for i in range(5): if(id[i]!=tab_id[i]): return 0 return 1def main(): while True: (status,backBits)=rc52.SeekCard(0x52) if(status==0): (status,id,)=rc52.Anticoll() led.value(0) if pdcard(id): syn6288.sendspeak(6,9600,'張三來訪'.encode('utf-16')) else : syn6288.sendspeak(6,9600,'陌生人來訪'.encode('utf-16')) lcdsd() pyb.Pin('X4',pyb.Pin.IN) nec = NecIr() while True: nec.callback(nec_cb) if necbm()==0xa0: pdlcd(1) syn6288.sendspeak(6,9600,'門已打開'.encode('utf-16')) break if necbm()==0xa1: pdlcd(0) syn6288.sendspeak(6,9600,'拒絕訪問'.encode('utf-16')) break pyb.delay(3000) nec_cs() lcd.init_12864() lcdsleep() if __name__ == '__main__': main()
|