詳細的介紹,請上露天賣場。
延續上一篇 "{ HZ1050 @ Arduino @ UART 模式 } 125KHz RFID 讀卡器使用說明",這篇網頁主要用來說明在 Arduino 開發環境 中,使用兩支 IO 接腳以中斷的方式接收來自來自 HZ-1050 125KHz RFID 讀卡器 ( 文中簡稱 HZ1050 ) 回傳 RFID 卡號 ( 因為 HZ1050 主要是針對 EM4100 以及 EM4001 RFID 卡,因此以下在文中簡稱 EM 卡 ),並且將卡號輸出到 Serial Monitor 中。
Wiegand ( 文中稱為韋根 ) 26 / 34 的格式說明,請參考 "{ HZ1050 } WIEGAND ( 韋根 ) 26 / 34 介紹";電路佈線請參考上一篇的電路圖。
本篇是 Arduino 控制 HZ1050 系列的第二篇,這三篇依其接收方式不同有:
- UART
- Wiegand 26 / 34
- UART + Wiegand 26 / 34
前兩篇會將結果直接回傳到 Arduino 的 Serial Monitor 中;最後一篇則是另外再將結果顯示在 { 5V0 } 整合型 LCD 上。
函式庫安裝:
在雲端硬碟 {HZ1050}/codes/Arduino/library/ 目錄下有一個 wiegand.zip 的壓縮檔,請將其解壓縮到 {Arduino}/libraries/ 目錄下 ( 若不清楚 Arduino 函式庫的安裝方法,看這網頁中的說明 )。
程式碼說明:
開啟 Arduino IDE, 點選 File -> Sketchbook -> HZ1050 -> Wiegand 打開 RFID_Demo_Wiegand.ino,完整的程式碼如下:
RFID_Demo_Wiegand.ino, line 7 - 47
7 //
8 #include <Wiegand.h>
9
10 WIEGAND wg;
11
12 // 要比對的 RFID Tag ID;可以更改為
13 long decTagID = 2262506; // 2262506 = 0x2285EA
14 long hexTagID = 0x2285EA;
15
16 void setup() {
17 Serial.begin(9600);
18 wg.begin();
19 }
20
21 void loop() {
22 if(wg.available())
23 {
24 Serial.print("Wiegand HEX = 0x");
25 Serial.print(wg.getCode(),HEX);
26 Serial.print(", DECIMAL = ");
27 Serial.print(wg.getCode());
28 Serial.print(", Type W");
29 Serial.println(wg.getWiegandType());
30 if( wg.getCode() == decTagID )
31 {
32 Serial.println( "DEC Compare OK !");
33 /*
34 增加比對成功的處理碼在這邊
35 ...
36 */
37 }
38 if( wg.getCode() == hexTagID )
39 {
40 Serial.println( "HEX Compare OK !");
41 /*
42 增加比對成功的處理碼在這邊
43 ...
44 */
45 }
46 }
47 }
wiegand 函式庫使用兩根中斷接腳作為接收 HZ1050 D0 與 D1 的位元 ( BIT ) 訊號,預設是使用 INT0 ( D2 ) 和 INT1 ( D3 ),不要接錯了 !!!
使用 wiegand 函式庫非常簡單 ! 先在檔案開頭處加入函式庫的標頭檔 ( line 8 ),接著宣告一個實體 ( line 10 ),再在 setup() 函式裡啟動它 ( line 18 )。
我在這邊將要比對的 EM 卡號以 10 進位與 16 進位整數宣告在 ( line 13, line 14 ),這有點多此一舉 ! 但這這邊是舉例,尤其當瞭解了 EM 卡號的換算之後,要怎麼做比對與換算都可以,目的都是一樣的。
WIEGAND 類別可讓使用者用到的函數只有下面這幾個。EM 卡號由 getCode() 函式傳回;韋根格式由 getWiegandType() 函式傳回;available() 函式,讓程式設計師可以知道資料接收是否已經完成?是否可以開始處理?
wiegand.h, line 12 - 21
12
13
14 class WIEGAND {
15
16 public:
17 WIEGAND();
18 void begin();
19 bool available();
20 unsigned long getCode();
21 int getWiegandType();
繼續回到 loop() 函式,就不難了解,就是直接使用剛剛所講的 WIEGAND 類別裡面的函式取得 EM 卡號以及韋根格式並輸出到 Serial Monitor 上。
不難吧 ! 很容易使用的 Arduino 函式庫,使用上也很直覺 !
測試結果:
測試之前,請先使用跳線帽在 HZ1050 板子的上方選擇好要使用的韋根碼格式 ( 這裡是選 Wiegand 26 )。開啟 Arduino 電源並開啟 Serial Monitor,使用套件中的鑰匙卡在線圈上面停一下,Serial Monitor 就會顯示出鑰匙卡的卡號以及韋根格式 ( W24 ),如下圖所示。
改一下跳線帽的位置到 W34 的位置,再用鑰匙卡在線圈上面停一下,這時韋根格式就會變成 W34,表示現在使用韋根 34 的格式編解碼 ,其他則維持不變。
HZ1050, Arduino Serial Monitor 輸出畫面 |
結論:
wiegand 函式庫使用 Arduino 中斷處理,因此也限定了必須使用 INT0 ( D2 ) 和 INT1 ( D3 ) 兩之接腳。不過 ATMega328 晶片還有一種中斷:PCINT,使用這方式產生的中斷可以多於兩個,所以可以利用這方式改掉 wiegand 函示庫並使用其他接腳作為中斷的需求;不過這部分我還未試過,如果有興趣嘗試這樣做的話,可以參考下面這連結中的說明進行修改。
PinChangeInt Library
而此同時,根據 Arduino 的 wiegand 函式庫裡的程式碼,我將其移植到樹莓派中做使用,所以在使用上幾乎與上面的 Arduino 程式碼幾乎相同,網頁連結在最下面。
同樣的電路,但是使用不同的編解碼方式來獲得 EM 卡的卡號,目的是為了讓使用者能循序漸進的了解 HZ1050 如何的使用。
接著最後一篇 Arduino 與 HZ1050 的使用說明,我們將結合 UART 以及 Wiegand 兩個程式碼,並且將原本輸出到 Serial Monitor 的文字,再另外顯示在 { 5V0 } 整合型 LCD 上。這也是我們第一次展示使用 Arduino 控制整合型 LCD 的程式碼,手邊有的不容錯過 !!!
<< 部落格 HZ-1050,125KHz RFID 讀卡器模組相關網頁連結 >>
- { HZ1050 } WIEGAND ( 韋根 ) 26 / 34 介紹
- { HZ1050 @ Arduino @ UART 模式 } 125KHz RFID 讀卡器使用說明
- { HZ1050 @ Raspberry Pi @ UART 模式 } 125KHz RFID 讀卡器使用說明
- { HZ1050 @ Arduino @ Wiegand 模式 } 125KHz RFID 讀卡器使用說明
- { HZ1050 @ Arduino + 整合型 LCD } 125KHz RFID 讀卡器使用說明
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !