Program for R306 fingerprint module interfaced with Wiz750SR S2E device
Dependencies: FPC_R306 MQTT WIZnetInterface mbed
Fork of GT511C3_TimeStamp_WIZwiki-W7500 by
Revision 13:b52299abb7e5, committed 2018-07-16
- Comitter:
- Albinarackal
- Date:
- Mon Jul 16 09:49:46 2018 +0000
- Parent:
- 12:0dbf1579a20f
- Commit message:
- Program for R306 fingerprint library interfaced with Wiz750SR S2E device
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FPC_R306.lib Mon Jul 16 09:49:46 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Albinarackal/code/FPC_R306/#00bf6d50bc74
--- a/GT511C3.lib Thu Jul 30 10:59:42 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/teams/WIZnet/code/GT511C3/#e53c3965131e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MQTT.lib Mon Jul 16 09:49:46 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Albinarackal/code/MQTT/#f409e1191fa1
--- a/NTPClient.lib Thu Jul 30 10:59:42 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/teams/WIZnet/code/NTPClient/#36be990f21be
--- a/SDFileSystem.lib Thu Jul 30 10:59:42 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/azsymaivan/code/SDFileSystem/#f242d7bdef28
--- a/WIZnetInterface.lib Thu Jul 30 10:59:42 2015 +0000 +++ b/WIZnetInterface.lib Mon Jul 16 09:49:46 2018 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#3b64df29662f +http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#c91884bd2713
--- a/main.cpp Thu Jul 30 10:59:42 2015 +0000
+++ b/main.cpp Mon Jul 16 09:49:46 2018 +0000
@@ -1,169 +1,445 @@
#include "mbed.h"
-#include "GT511C3.hpp"
-#include "SDFileSystem.h"
-#include "EthernetInterface.h"
-#include "NTPClient.h"
-
-#define MAX_ID_NUM 20
+#include "FPC_R306.hpp"
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
+#define ECHO_SERVER_PORT 7
-#ifdef TARGET_WIZWIKI_W7500
-GT511C3 finger(PA_13,PA_14);
-DigitalIn del_ID(D7);
-DigitalIn enroll_ID(D8);
-InterruptIn in(D9);
-SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // the pinout on the mbed
-uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab};
-#endif
+
+FPC_R306 finger(D1,D0);
Serial pc(USBTX,USBRX);
-EthernetInterface eth;
-NTPClient ntpClient;
+int myid=456;
FILE *fp;
+char userId[100];
+int p;
+int id =1;
+int choice;
+uint16_t deleteID;
+uint8_t sendData[16];
+uint8_t getImage(void);
+uint8_t image2Tz(uint8_t slot);
+int SendCommand();
+int RecvResponse();
-int progress(int status,char *msg)
+/*..........MQTT CALLBACK FUNCTION.........*/
+MQTTEthernet ipstack = MQTTEthernet();
+
+MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+MQTT::Message message;
+
+void messageArrived(MQTT::MessageData& md)
{
- pc.printf("%s",msg);
- return 0;
+ MQTT::Message &message = md.message;
+ printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
+ printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
}
-void close_file(void)
-{
- fclose(fp);
-}
-
+//....................................................MAIN Function.....................................................//
int main()
{
- int i;
- int sts = 0;
- int ID = 0;
- int cnt = 0;
- int EnrollID;
-
- char domainName[3][80] = {"kr.pool.ntp.org", "time.bora.net", "time.nuri.net"};//SET TO DOMAIN NAME OF SERVER GETTING TIME FROM
- char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA
- time_t sysTime;
-
- in.rise(&close_file);
+ wait_ms(500);
+ pc.baud(9600);
+ finger.baud(57600);
+
+ /*****************************MQTT CONFIGURATION START FROM HERE *****************************************/
+
+ printf("Wait a second...\r\n");
+ char* topic = "openhab/parents/command";
+
+
+ char* hostname = "172.16.73.4";
+ int port = 1883;
+
+ int rc = ipstack.connect(hostname, port);
+ if (rc != 0)
+ printf("rc from TCP connect is %d\n", rc);
+
+ printf("Topic: %s\r\n",topic);
+
+ MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+ data.MQTTVersion = 3;
+ data.clientID.cstring = "parents";
+
+ if ((rc = client.connect(data)) == 0)
+ printf("rc from MQTT connect is %d\n", rc);
+
+
+ /********************MQTT CONFIGURATION END FROM HERE********************/
+
+ pc.printf("..................................R306.............................................\n");
+
+ while(true) {
+ pc.printf("\n");
+ pc.printf("To Enroll ID----------------------------------- 1\n");
+
+ pc.printf("To get Template Count-------------------------- 2\n");
+
+ pc.printf("To Search for an ID---------------------------- 3\n");
+
+ pc.printf("To Delete an ID-------------------------------- 4\n");
+
+ pc.printf("To Empty the library--------------------------- 5\n");
+
+
+ choice = pc.getc();
+ choice -= '0';
+
+//.........................................ENROLLING FINGERPRINT........................................................//
+
+ switch(choice) {
+ case 1:
+
+ wait(1);
+ p=-1;
+ pc.printf("PLACE THE FINGER TO ENROLL\n");
+
+
+//.............Enrolling 1st time
+
+ while(p != FINGERPRINT_OK) {
+ pc.printf(".");
+ p = finger.CMD_GETIMG();;
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Taken\n");
+ break;
+
+ case FINGERPRINT_NOFINGER:
+ pc.printf(".");
+ wait(1);
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ //pc.printf("Communication error\n");
+ break;
+
+ case FINGERPRINT_IMAGEFAIL:
+ pc.printf("Imaging error\n");
+ break;
+
+ default:
+ pc.printf("Unknown Error\n");
+ break;
+ }
+ }
+
+ p= -1;
+ while(p!= FINGERPRINT_OK) {
+ p = finger.CMD_IMG2Tz1();
+
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Converted\n");
+ break;
+
+ case FINGERPRINT_IMAGEMESS:
+ pc.printf("Image too messy\n");
+ return p;
+
+ case FINGERPRINT_FEATUREFAIL:
+ pc.printf("Could not find fingerprint features\n");
+ return p;
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ pc.printf("Communication error\n");
+ return p;
+
+ default:
+ pc.printf("Unknown error\n");
+ return p;
+ }
+ }
+
+ //...........Enrolling 2nd time
+
+
+ pc.printf("Remove the finger\n");
+ wait(1);
+ p=0;
+
+ while(p!= FINGERPRINT_NOFINGER) { //Waiting for finger to remove
+ p= finger.CMD_GETIMG();
+ }
+ p =-1;
+ pc.printf("PLACE THE SAME FINGER AGAIN\n");
+
+ while(p!= FINGERPRINT_OK) {
+ pc.printf(".");
+ p = finger.CMD_GETIMG();;
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Taken\n");
+ break;
+
+ case FINGERPRINT_NOFINGER:
+ pc.printf(".");
+ wait(1);
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ //pc.printf("Communication error\n");
+ break;
+
+ case FINGERPRINT_IMAGEFAIL:
+ pc.printf("Imaging error\n");
+ break;
+
+ default:
+ pc.printf("Unknown Error\n");
+ break;
+ }
+ }
+
+ p=-1;
+ while(p!= FINGERPRINT_OK) {
+ p = finger.CMD_IMG2Tz2();
+
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Converted\n");
+ break;
+
+ case FINGERPRINT_IMAGEMESS:
+ pc.printf("Image too messy\n");
+ return p;
+
+ case FINGERPRINT_FEATUREFAIL:
+ pc.printf("Could not find fingerprint features\n");
+ return p;
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ pc.printf("Communication error\n");
+ return p;
+
+ default:
+ pc.printf("Unknown error\n");
+ return p;
+ }
+ }
+
+ //........Creating Model
+
+ pc.printf("Creating Model\n");
+
+ p = finger.createModel();
+
+ if(p == FINGERPRINT_OK) {
+ pc.printf("Prints Matched\n");
+ }
+
+ else if(p == FINGERPRINT_ENROLLMISMATCH) {
+ pc.printf("Fingerprints did not match\n");
+ break;
+ }
+
+ else if (p == FINGERPRINT_PACKETRECIEVEERR) {
+ pc.printf("Communication error\n");
+ break;
+ } else {
+ pc.printf("UNKNOWN ERROR\n");
+ break;
+ }
- pc.baud(115200);
-
- printf("File open...\r\n");
-
- if((fp = fopen("/sd/time.txt", "w")) == NULL)
- {
- printf("Cannot open file!!\r\n");
- return 0;
- }
-
- printf("GT511C3 open....\r\n");
-
- while(1)
- {
- sts = finger.Open();
- if(sts == -1)
- {
- printf("GT511C3 Open failed!!\r\n");
- cnt++;
- while(cnt > 5);
- }
- else
- {
- break;
- }
-
- wait(0.2);
- }
-
- if(del_ID == 1)
- {
- finger.DeleteID_All();
- printf("All ID are deleted!!\r\n");
- }
-
- cnt = 0;
- if(enroll_ID == 1)
- {
- while(1)
- {
- if(finger.CheckEnrolled(cnt) == -1)
- {
- EnrollID = cnt;
- printf("ID(%d) is empty\r\n", EnrollID);
+
+//.....Storing Model
+
+ //uint8_t test = (uint8_t)(id & 0xFF);
+ pc.printf("%d\n", id);
+ p = finger.STORE_MODEL(id);
+
+ if(p == FINGERPRINT_OK) {
+ pc.printf("Stored\n");
+ id++;
+ }
+
+ else if (p == FINGERPRINT_PACKETRECIEVEERR) {
+ pc.printf("Communication error\n");
+ break;
+ }
+
+ else if (p == FINGERPRINT_BADLOCATION) {
+ pc.printf("Could not store in that location\n");
+ break;
+ }
+
+ else if (p == FINGERPRINT_FLASHERR) {
+ pc.printf("Error writing to flash\n");
+ break;
+ } else {
+ pc.printf("Unknown error\n");
+ break;
+ }
+
+ break;
+
+
+//.............................................Get TEMPLATE Count.......................................................//
+ case 2:
+ pc.printf("Getting template count\n\n");
+ wait(1);
+ p = -1;
+ p = finger.TMPL_COUNT();
+
+ if(p==FINGERPRINT_OK) {
+ pc.printf("SENSOR CONTAINS %d TEMPLATES",finger.templatecount);
+ }
+
+ else
+ pc.printf("ERROR\n");
break;
- }
- cnt++;
- if(cnt > MAX_ID_NUM)
- {
- printf("\r\nERROR : ID number is fulled!!Delete ID first!!\r\n\r\n");
- while(1);
- }
- }
- finger.Enroll(EnrollID,progress);
- }
-
- eth.init(mac_addr); //Use DHCP
- printf("Check Ethernet Link\r\n");
- while(1) //Wait link up
- {
- if(eth.link() == true)
- break;
- }
- printf("Link up\r\n");
- printf("Getting IP address by DHCP...\r\n");
- eth.connect();
- printf("Server IP Address is %s\r\n", eth.getIPAddress());
-
- printf("Getting time information by using NTP...\r\n");
-
- cnt = 0;
- while(1)
- {
- if(ntpClient.setTime(domainName[cnt],123,0x00005000) != NTP_OK)
- {
- printf("Cannot get time information by NTP\r\n");
- cnt++;
- }
- else
- break;
-
- if(cnt > 3)
- {
- printf("All NTP servers are not resposed!!\r\n");
- return 1;
+
+//.................................................SEARCHING............................................................//
+
+ case 3:
+ p= -1;
+ while(p!= FINGERPRINT_OK) {
+ p= finger.CMD_GETIMG();
+
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Taken\n");
+ break;
+
+ case FINGERPRINT_NOFINGER:
+ pc.printf(".");
+ wait(1);
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ //pc.printf("Communication error\n");
+ break;
+
+ case FINGERPRINT_IMAGEFAIL:
+ pc.printf("Imaging error\n");
+ break;
+
+ default:
+ pc.printf("Unknown Error\n");
+ break;
+ }
+ }
+
+ p = finger.CMD_IMG2Tz1();
+
+ switch (p) {
+ case FINGERPRINT_OK:
+ pc.printf("Image Converted\n");
+ break;
+
+ case FINGERPRINT_IMAGEMESS:
+ pc.printf("Image too messy\n");
+ return p;
+
+ case FINGERPRINT_FEATUREFAIL:
+ pc.printf("Could not find fingerprint features\n");
+ return p;
+
+ case FINGERPRINT_PACKETRECIEVEERR:
+ pc.printf("Communication error\n");
+ return p;
+
+ default:
+ pc.printf("Unknown error\n");
+ return p;
+ }
+
+ p = finger.FAST_SEARCH();
+ if (p == FINGERPRINT_OK) {
+ pc.printf("Found a print match!\n");
+ pc.printf("FOUND ID #%d with confidence of %d\n", finger.fingerID, finger.MatchScore);
+ message.qos = MQTT::QOS0;
+ message.retained = false;
+ message.dup = false;
+
+ sprintf(userId, "%d", finger.fingerID);
+
+ pc.printf("User id over MQTT is : %s\n", userId);
+ message.payload =(void *)userId;
+ message.payloadlen = strlen(userId);
+ rc = client.publish("cdi/laxmi", message);
+ pc.printf("send via MQTT\n");
+
+ }
+
+ else if (p == FINGERPRINT_PACKETRECIEVEERR) {
+ pc.printf("Communication error\n");
+ break;
+ }
+
+ else if (p == FINGERPRINT_NOTFOUND) {
+ pc.printf("Did not find a match\n");
+ break;
+ }
+
+ else {
+ pc.printf("Unknown error");
+ break;
+ }
+
+ break;
+
+
+
+//............................................DELETE ID................................................................//
+
+ case 4:
+
+ pc.printf("Please, Enter the ID to be Deleted\n");
+ deleteID = pc.getc();
+ deleteID -='0';
+ pc.printf("Deleting the ID %d\n", deleteID);
+
+ p= -1;
+ p= finger.DELETE_ID(deleteID);
+
+ if (p == FINGERPRINT_OK) {
+ pc.printf("Deleted!\n");
+ }
+
+ else if (p == FINGERPRINT_PACKETRECIEVEERR) {
+ pc.printf("Communication error\n");
+ return p;
+ }
+
+ else if (p == FINGERPRINT_BADLOCATION) {
+ pc.printf("Could not delete in that location\n");
+ return p;
+ }
+
+ else if (p == FINGERPRINT_FLASHERR) {
+ pc.printf("Error writing to flash\n");
+ return p;
+ } else {
+ pc.printf("Unknown error\n");
+ }
+ break;
+
+//................................................EMPTY LIBRARY......................................................//
+
+ case 5:
+
+ p= -1;
+ p = finger.EMPTY_LIB();
+
+ if (p == FINGERPRINT_OK) {
+ pc.printf("Library Cleared!\n");
+ }
+
+ else if (p == FINGERPRINT_PACKETRECIEVEERR) {
+ pc.printf("Communication error\n");
+ return p;
+ }
+
+ else if (p == FINGERPRINT_DBCLEARFAIL) {
+ pc.printf("Could not clear the library\n");
+ return p;
+ }
+
+ else {
+ pc.printf("Unknown error\n");
+ }
+ break;
+
+
}
}
-
- printf("Completed Get and Set Time\r\n\r\n");
- eth.disconnect();
-
- //Start to capture fingerprint
- finger.CmosLed(1);
-
- while(1)
- {
- printf("Press finger for Identify\r\n");
- finger.WaitPress(1);
- if(finger.Capture(1) != 0)
- continue;
-
- ID = finger.Identify();
-
- if(ID == -1)
- printf("\r\nERROR : There is no ID!!Enroll first!!\r\n\r\n");
- else
- {
- printf("ID = %d\r\n",ID);
- sysTime = time(NULL)+(3600*9); //TIME with offset for eastern time KR
- //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER
- strftime(buffer,80,"%Y/%m/%d %p %I:%M:%S \r\n",localtime(&sysTime));
- fprintf(fp, "ID : %d\r\nTime : %s\r\n", ID, buffer);
- printf("Date and Time\r\n%s\r\n", buffer);
- }
-
- printf("Remove finger\r\n");
- finger.WaitPress(0);
- }
-}
-
+}
\ No newline at end of file
--- a/mbed-src.lib Thu Jul 30 10:59:42 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed-src/#2d5fc5624619
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Jul 16 09:49:46 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/a7c7b631e539 \ No newline at end of file
