指紋辨識-正式篇(1)
當然是參照 windgo大大 的
UART指紋模組FPC1020AM+ESP8266NodeMCU(或ESP32)導入HA開鎖功能方法
開啟他所提供 的 Arduino 1.8.5 + ESP8266_FINGER_MQTT_Control_OTA.ino
直接燒錄 我的 Mini D1 燒錄OK (線沒接 啥都沒改)
現在開始要走自己的路.....
開自己的 Arduino 1.8.5 編譯 PubSubClient.h 找不到 程式庫安裝OK
換 ArduinoOTA.h 錯誤 有個function 找不到.....後來發現更新 ESP8266 就OK了
( 要用 5V 供電才行 ) 接線如下:
FinGer Mini D1
2(Tx)(橘)---> D7 (Rx)
3(Rx)(橘)---> D8 (Tx)
4(GND)(橘)---> GND
5(3.3Vin)(橘)---> 3.3V( 要用 5V 供電才行 )
***************************
用大大的測試 是 OK的
事先當然要先接PC 用 QS808最新Demo.exe 將 指紋登入
FPC1021 只要押大力點 好像也還OK
**************************************
因為 Mini D1 應該是說 ESP8266 事實上只有一組 UART(RS232)
雖然接點上是有 TX RX 但是一但接到USB這就被佔用了
因為要上傳程式 還有重要的傳回訊息做 debug用 非常重要
所以只能用第2組跟 FPC 連接
雖然 D7(RX02) D8(TX02) 是第2組
還是跟 RX01 TX01 共用
所以才有 Serial.swap(); 這指令做切換 看是去看哪一組 TX RX.
所以程式內是 不斷切換 一邊切換02看指紋 一邊切回01從USB-TTL傳訊息回來
經過不斷測試,運氣不好...用到一片 AI 的ES2866晶片 不知是板子有問題還是是仿冒品
切換回來做 print 時會卡住 不show了,但按指紋看燈號又有動作,我就以為是我的問題
最後竟然會當...換片樂鑫Mark的晶片...一切正常.....
**************************************************
研究一下大大的程式後
就是
Serial.swap(); 切過去
送詢問命令
收回復資料
Serial.swap(); 切回來
檢查 回復資料
*****************
一直重複 所以我就將他寫成個 function
就是 在 loop 不斷問手指按了沒?
看主程式
後記:
我看其他家賣的指紋模組,所用的Demo程式不同,套用上去也不會動 認不出來這家模組
所以可能是每一家的命令格式不同,但道理應該是差不多..
FPC1020 不知是否心理作用 好像也需要大力壓了
換成FPC1021 之後,果然是心理作用
FPC1021 不僅要大力....更神奇的是
我用左手手指 食指中指無名指 大力按 都還可用
右手不管 哪根 用盡吃奶力氣 就是感測不到....
難道它只認識左手...不懂.......
我看花這 80人民幣 證實它為啥會比FPC1020 便宜那麼多
UART指紋模組FPC1020AM+ESP8266NodeMCU(或ESP32)導入HA開鎖功能方法
開啟他所提供 的 Arduino 1.8.5 + ESP8266_FINGER_MQTT_Control_OTA.ino
直接燒錄 我的 Mini D1 燒錄OK (線沒接 啥都沒改)
現在開始要走自己的路.....
開自己的 Arduino 1.8.5 編譯 PubSubClient.h 找不到 程式庫安裝OK
換 ArduinoOTA.h 錯誤 有個function 找不到.....後來發現更新 ESP8266 就OK了
( 要用 5V 供電才行 ) 接線如下:
FinGer Mini D1
2(Tx)(橘)---> D7 (Rx)
3(Rx)(橘)---> D8 (Tx)
4(GND)(橘)---> GND
5(3.3Vin)(橘)---> 3.3V( 要用 5V 供電才行 )
***************************
用大大的測試 是 OK的
事先當然要先接PC 用 QS808最新Demo.exe 將 指紋登入
FPC1021 只要押大力點 好像也還OK
**************************************
因為 Mini D1 應該是說 ESP8266 事實上只有一組 UART(RS232)
雖然接點上是有 TX RX 但是一但接到USB這就被佔用了
因為要上傳程式 還有重要的傳回訊息做 debug用 非常重要
所以只能用第2組跟 FPC 連接
雖然 D7(RX02) D8(TX02) 是第2組
還是跟 RX01 TX01 共用
所以才有 Serial.swap(); 這指令做切換 看是去看哪一組 TX RX.
所以程式內是 不斷切換 一邊切換02看指紋 一邊切回01從USB-TTL傳訊息回來
經過不斷測試,運氣不好...用到一片 AI 的ES2866晶片 不知是板子有問題還是是仿冒品
切換回來做 print 時會卡住 不show了,但按指紋看燈號又有動作,我就以為是我的問題
最後竟然會當...換片樂鑫Mark的晶片...一切正常.....
**************************************************
研究一下大大的程式後
就是
Serial.swap(); 切過去
送詢問命令
收回復資料
Serial.swap(); 切回來
檢查 回復資料
*****************
一直重複 所以我就將他寫成個 function
void SendComm(int comType) { //check command1 result Serial.swap();//切到2 delay(150); ClearSerial(); //Send command1 to check finger touch 檢查是否有放入手指 Serial.write(Fcommad[comType], sizeof(Fcommad[comType])); //delay for Serial.read() has data to read while (!Serial.available()) { //等資料送完 delay(5); } //檢查是否有資料可供讀取 Rdata_index = 0; while (Serial.available() > 0) { byte incomingByte = Serial.read(); inData[Rdata_index] = incomingByte; Rdata_index++; } //切回S01 Serial.swap(); delay(150); ClearSerial(); } void ClearSerial() { //clear useless output in Serial //清除Serial裏頭資料 while (Serial.available() > 0) { delay(1); Serial.read(); } }主程式 一開始 ("第一次跟指紋模組溝通" 這命令沒有無所謂 )
就是 在 loop 不斷問手指按了沒?
看主程式
#define led D4 //Finger Fcommad0 to connect finger device 第一次跟指紋模組溝通 //Finger Fcommad1 to check finger touch 檢查是否有放入手指 //Finger Fcommad2 to save finger pic to imagebuffer 將指紋掃描結果存入暫存檔 //Finger command3 to search imagebuff in finger database 將暫存檔與指紋資料庫做比對 const byte Fcommad[4][26] = { {0x55,0xAA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 }, { 0x55,0xAA,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x01 }, { 0x55,0xAA,0x00,0x00,0x60,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x01 }, { 0x55,0xAA,0x00,0x00,0x63,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0xF4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x02 } }; int Rdata_index = 0; byte inData[26]; void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.println("Find finger! Begin!"); //Send command to connect finger device 第一次跟指紋模組溝通 //沒切到 2 可以嗎? //Serial.swap(); //Serial.write(command, sizeof(command)); pinMode(led, OUTPUT); digitalWrite(led, LOW); ClearSerial(); //Serial.swap(); } void loop() { SendComm(1);//檢查是否有放入手指 if (index>0) { //My_PrintData() //Check finger doc to know the finger touch result 查看指紋模組用户使用手册來確定手指放入的結果 if (inData[8] == 0x00 && inData[24] == 0x22) { Serial.println("Find finger!"); SendComm(2); //將指紋掃描結果存入暫存檔 My_PrintData(); SendComm(3); //將暫存檔與指紋資料庫做比對 My_PrintData(); if (inData[4] == 0x63 && inData[6] == 0x05) { Serial.println("Your finger is in database! Open door! 已找到指紋!開門!"); //LED燈亮 digitalWrite(led, HIGH); delay(50); Serial.println("Wait 5 seconds for next one... 等待2秒後重新辨識指紋"); delay(1000); digitalWrite(led, LOW); delay(1000); } else { if (inData[6] == 0x02) { Serial.println("Your finger is not in database! 你的指紋不在資料庫內!"); } else { Serial.println("Check finger doc to know the finger not in database result 查看指紋模組用户使用手册來確定比對指紋不在資料庫的結果"); } digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(100); digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); } } } delay(200); }就是只有這樣
後記:
我看其他家賣的指紋模組,所用的Demo程式不同,套用上去也不會動 認不出來這家模組
所以可能是每一家的命令格式不同,但道理應該是差不多..
FPC1020 不知是否心理作用 好像也需要大力壓了
換成FPC1021 之後,果然是心理作用
FPC1021 不僅要大力....更神奇的是
我用左手手指 食指中指無名指 大力按 都還可用
右手不管 哪根 用盡吃奶力氣 就是感測不到....
難道它只認識左手...不懂.......
我看花這 80人民幣 證實它為啥會比FPC1020 便宜那麼多
留言
張貼留言