指紋辨識-正式篇(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

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 便宜那麼多

留言

熱門文章