中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 如何將RFID閱讀器與Raspberry Pi Pico一起使用

        如何將RFID閱讀器與Raspberry Pi Pico一起使用

        作者: 時間:2025-03-12 來源:Toms hardware 收藏

        卡和標簽無處不在!我們在建筑物中使用它們進行訪問控制。打印機和復印機可以使用它們來識別工作人員。牲畜標簽和寵物識別標簽都使用一種 形式。讀取 設備的技術很便宜,大約 5 美元就可以買到,而 4 美元, 可以從卡/標簽中讀取 ID。

        本文引用地址:http://www.antipu.com.cn/article/202503/467963.htm

        Pico NFC

        (圖片來源:Tom's Hardware)

        在此作方法中,我們將學習如何使用 MFRC522 讀取 RFID 標簽和卡,目標是創(chuàng)建一個虛構的 RFID 門禁系統(tǒng),該系統(tǒng)允許用戶進入建筑物,或提醒安全人員將其移除。在我們這樣做之前,我們需要識別我們的卡/標簽的 ID。本作指南的第一部分將執(zhí)行此作,然后我們將插入一些代碼來控制兩個 LED 以模擬鎖定機制。

        為此,您將需要

        • 運行 MicroPython 的

        • MFRC522 RFID

        • 大型面包板

        • 11 x 公對公跳線

        • 綠色 LED

        • 紅燈 LED

        • 2 x 100 歐姆電阻器(棕色 - 黑色 - 棕色 - 金色)

        構建硬件

        Pico NFC

        (圖片來源:Tom's Hardware)

        硬件構建分為兩個部分。首先是 MFRC522 RFID 閱讀器的接線。讀取器使用 SPI 與 Raspberry Pi Pico 通信,它需要 7 個引腳才能做到這一點。兩個用于電源(3.3V 和 GND),其余用于 SPI。

        MFRC522

        Raspberry Pi Pico

        Wire Color

        SDA

        GP1

        SCK

        GP2

        MOSI

        GP3

        紫色

        GP4

        接地

        任何 GND

        RST

        GP0

        3.3

        3V3 輸出(物理引腳 36)

        Pico NFC

        (圖片來源:Tom's Hardware)

        其次是我們的輸出。要查看是否顯示了正確的卡,我們需要添加兩個 LED。紅色表示 RFID 卡不正確,綠色表示卡正確。LED 連接到 GPIO 引腳,我們控制該引腳以打開/關閉 LED,并通過 100 歐姆電阻器連接到任何可用的 GND 引腳。您可以使用 220 或 330 歐姆的電阻器,我的辦公桌上恰好有一些 100 歐姆的電阻器。需要找出正確的電阻器嗎?我們?yōu)槟鷾蕚淞艘环葜改希?/p>

        標題單元格 - 列 0

        Raspberry Pi Pico

        Wire Color

        紅色 LED 陽極 (+)

        GP14

        紅色 LED 陰極 (-)

        任何 GND

        綠色 LED 陽極 (+)

        GP15 系列

        綠色 LED 陰極 (-)

        任何 GND

        Pico NFC

        (圖片來源:Tom's Hardware)

        在繼續(xù)之前,請檢查您的接線是否正確。

        安裝 RFID 讀取器軟件

        MFRC522 是一個簡單的 RFID 閱讀器,為了使其更簡單,我們使用了一個 MicroPython 模塊,該模塊將縮短使用閱讀器的工作。pico-rfid 模塊來自 Tom 的 Hardware 的朋友 Kevin McAleer,基于 Danjperron 的工作。

        1. 將 Raspberry Pi Pico 連接到計算機,然后打開 Thonny。我們假設您已經(jīng)知道如何設置 Raspberry Pi Pico。如果沒有,我們有方便的指南。

        2. 創(chuàng)建一個新的空白文件,并將此鏈接的內(nèi)容復制到空白文件中。然后將其作為 mfrc522.py 保存到 Raspberry Pi Pico。這是 Python 模塊/庫,它將使我們的代碼能夠與 RFID 閱讀器通信。

        編寫項目代碼

        完成所有設置后,我們現(xiàn)在開始對項目進行編碼。為此,我們將再次使用 Thonny,并編寫代碼來檢查提供給閱讀器的任何 RFID 卡的 ID。對于第一部分,我們需要記下 ID,因為稍后我們將將其與條件測試一起使用,該測試檢查 ID 是否與硬編碼值匹配,然后它將允許輸入。如果沒有,那么我們將收到 ACCESS DENIED 消息。

        1. 在 Thonny 中創(chuàng)建新的空白文件。

        2. 導入三個模塊(庫),用于使用 MFRC522 RFID 閱讀器、控制代碼的速度以及使用 GPIO。

        from mfrc522 import MFRC522
        import utime
        from machine import Pin

        3. 創(chuàng)建一個對象 reader 來告訴代碼 RFID reader 的連接位置。

        reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)

        4. 為紅色和綠色 LED 創(chuàng)建兩個對象,告訴代碼 LED 的連接位置以及它們是我們想要將電流發(fā)送到的輸出設備。

        red = Pin(14, Pin.OUT)
        green = Pin(15, Pin.OUT)

        5. 向用戶寫一條短消息,指示他們向讀者出示卡片。 “n” 是 Python 的語法,用于在 print() 函數(shù)的末尾引入新行。

        print("Present the card to the readern")

        6. 創(chuàng)建一個名為 “PreviousCard” 的列表,并在其中存儲值 0。我們稍后將使用此列表來存儲當前卡 ID。

        PreviousCard = [0]

        7. 創(chuàng)建一個 while True 循環(huán)以持續(xù)運行其中的代碼。

        while True:

        8. 初始化讀取器,使其可供使用。

           reader.init()

        9. 創(chuàng)建一個元組來存儲讀取器狀態(tài)和 RFID 標簽類型。

           (stat, tag_type) = reader.request(reader.REQIDL)

        10. 如果讀卡器準備好了,if 條件將讀取卡的內(nèi)容。然后,它將使用卡片中的詳細信息更新 stat 和 uid 對象。

           if stat == reader.OK:
                (stat, uid) = reader.SelectTagSN()

        11. 如果卡片的 uid 與 PreviousCard 對象中存儲的值相同,則代碼將繼續(xù)。當同一張卡重復顯示給讀者時,就會發(fā)生這種情況。

               if uid == PreviousCard:
                    continue

        12. 創(chuàng)建一個 if 條件語句以檢查卡讀取是否正常。

               if stat == reader.OK:

        13. 向用戶打印一條消息,然后將卡片的 UID 存儲到一個名為 “card” 的對象中。然后將卡詳細信息打印到 Python shell。

                     print("The card details are as follows")
                    card = reader.tohexstring(uid)
                    print(card)

        14. 使用顯示的卡的 uid 更新 PreviousCard 對象。

                    PreviousCard = uid

        15. 創(chuàng)建一個 else 條件,該條件將在沒有卡片時運行。更新 PreviousCard 對象。然后在 main 循環(huán)重復之前向代碼添加 50ms 的暫停。

           else:
                PreviousCard=[0]
            utime.sleep_ms(50)

        16. 將代碼作為 reader.py 保存到 Raspberry Pi Pico,然后單擊 Run >> Run Current Script(或按綠色的播放按鈕)。按照說明將 RFID 卡/標簽出示給讀卡器。

        17. 復制整個卡詳細信息,這是 RFID 卡的 uid,我們將在此作方法的下一部分需要它。 uid 看起來像這樣,你的 uid 會有所不同。

        [0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]

        完整代碼列表

        from mfrc522 import MFRC522
        import utime
        from machine import Pin
                      
        reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
        red = Pin(14, Pin.OUT)
        green = Pin(15, Pin.OUT)
        
        print("Present the card to the readern")
        PreviousCard = [0]
        
        while True:
            reader.init()
            (stat, tag_type) = reader.request(reader.REQIDL)
            if stat == reader.OK:
                (stat, uid) = reader.SelectTagSN()
                if uid == PreviousCard:
                    continue
                if stat == reader.OK:
                    print("The card details are as follows")
                    card = reader.tohexstring(uid)
                    print(card)
                    PreviousCard = uid
            else:
                PreviousCard=[0]
            utime.sleep_ms(50)

        我們已經(jīng)有了代碼,現(xiàn)在我們需要告訴項目代碼我們想要使用該代碼來授予我們訪問權限,并點亮綠色 LED。如果向讀卡器出示另一張卡/標簽,則紅色 LED 將亮起。

        1. 在這兩行之間,創(chuàng)建新的代碼行。

                    print(card)
        NEWCODE GOES HERE
                    	PreviousCard = uid

        2. 創(chuàng)建一個 if 條件來檢查卡的 uid。請注意,它看起來像一個 Python 列表,但實際上它是以字符串形式存儲的,因此我們需要將值包裝在 “ ” 中。不要忘記 [ ] 括號。

                   if card == "[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":

        3. 如果存儲在 card 對象中的值與硬編碼值匹配,則向 Python shell 打印“ACCESS GRANTED”。

                       print("ACCESS GRANTED")

        4. 創(chuàng)建一個 for 循環(huán)以打開/關閉綠色 LED 十次,每次狀態(tài)變化之間有 0.1 秒的間隔。在 for 循環(huán)結(jié)束時關閉綠色 LED。

                       for i in range(10):
                            green.toggle()
                            utime.sleep(0.1)
                        green.off()

        5. 當無法識別的卡片/標簽呈現(xiàn)給讀者時,請使用 else 條件。 這將像綠色 LED 一樣打開和關閉紅色 LED。

                   else:
                        print("ACCESS DENIED")
                        for i in range(10):
                            red.toggle()
                            utime.sleep(0.1)
                        red.off()

        6 .將代碼另存為 Raspberry Pi Pico reader.py。單擊 Run >> Run Current Script(或按綠色的播放按鈕)。按照說明將 RFID 卡/標簽出示給讀卡器。如果卡正確無誤,則綠色 LED 將閃爍,并且 Python shell 將打印 “ACCESS GRANTED”。嘗試另一個 RFID 卡/標簽,這應該會使紅色 LED 亮起,并且 Python shell 將打印“ACCESS DENIED”

        完整代碼列表

        from mfrc522 import MFRC522
        import utime
        from machine import Pin
                      
        reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
        red = Pin(14, Pin.OUT)
        green = Pin(15, Pin.OUT)
        
        print("Present the card to the readern")
        PreviousCard = [0]
        
        while True:
            reader.init()
            (stat, tag_type) = reader.request(reader.REQIDL)
            if stat == reader.OK:
                (stat, uid) = reader.SelectTagSN()
                if uid == PreviousCard:
                    continue
                if stat == reader.OK:
                    print("The card details are as follows")
                    card = reader.tohexstring(uid)
                    print(card)
                    if card == "[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":
                        print("ACCESS GRANTED")
                        for i in range(10):
                            green.toggle()
                            utime.sleep(0.1)
                        green.off()
                    else:
                        print("ACCESS DENIED")
                        for i in range(10):
                            red.toggle()
                            utime.sleep(0.1)
                        red.off()
                    PreviousCard = uid
            else:
                PreviousCard=[0]
            utime.sleep_ms(50)




        評論


        相關推薦

        技術專區(qū)

        關閉