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

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

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

MF RC522射頻IC卡
硬件接線方法
下面我們將蘿卜狗和12864液晶顯示屏、MF RC522射頻卡和語音播報(bào)模塊接起來,實(shí)物圖我就不拍了,太丑了,大家根據(jù)下面的列表就可以接起來
12864液晶顯示屏
蘿卜狗
MF RC522射頻卡
語音播報(bào)模塊
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的主程序代碼,可以直接復(fù)制使用 ,這個(gè)類庫太多了,我就不一一粘貼了,有需要的留下郵箱告訴我,我發(fā)給大家 (*  ̄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,"允許進(jìn)入",4) else : lcd.lcd_write_string(0x89,"Access Denied",0) lcd.lcd_write_string(0x92,"拒絕進(jìn)入",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()
|