BLE Mesh Light Sensor output to FRDMK64f

Fork of Hexi_Blinky_Example by Hexiwear

Revision:
18:293c2885af81
Parent:
17:690d692b29cb
Child:
19:ffd78d964d9f
--- a/main.cpp	Sun Apr 23 05:09:47 2017 +0000
+++ b/main.cpp	Thu Apr 27 15:10:13 2017 +0000
@@ -3,12 +3,14 @@
 #include "ESP8266.h"               // Include header file from Author: Antonio Quevedo
 #include "math.h"
 #include "DHT.h"
+#include "GT511C3.hpp"
 #include <string>
 
 #define APIKEY JJAOBK32WOINKT00    //Put "Write key" of your channel in thingspeak.com 
 #define IP "184.106.153.149"       // IP Address of "api.thingspeak.com\"
-#define WIFI_SSID "Batman2G"
-#define WIFI_PASS "Alien12345"
+#define WIFI_SSID "Redmi"
+#define WIFI_PASS "akash12345"
+#define FPS_ENROLL_PASS "Rags\n"
 
 Serial FRDM_UART_Debug(USBTX,USBRX);
 
@@ -27,6 +29,8 @@
 
 DHT DHT_Temp_Hum(PTC4,DHT22); //DHT Sensor
 
+GT511C3 FPS(PTC17, PTC16);
+
 const int Light_I2C_Addr = 0x88;
 
 char ESP_8266_CMD_Send[255],ESP_8266_CMD_Recv[1000];           //ESP_8266_CMD_Send = string used to send command to ESP8266 &  ESP_8266_CMD_Recv = string used to receive response from ESP8266
@@ -40,10 +44,13 @@
 int Motion_Out = 0;
 int Finger_Out = 0;
 float Pres_Out = 0;
+bool FPS_Auth = false;
 
 
 void ESP_8266_Init(void); // Function used to initialize ESP8266 wifi module 
 void ESP_8266_TX_Data(void);       // Function used to connect with thingspeak.com and update channel using ESP8266 wifi module 
+void FPS_Func(void);
+int FPS_Wait_Time(int press,bool Det_Mot, unsigned long *ms_time);
 
 int main() 
 {
@@ -54,8 +61,16 @@
     int Temp_i_1 = 0;
     int Temp_i_2 = 0;
     int Temp_i_3 = 0;
+    int Temp_i_4 = 0;
     char I2C_Cmd[3];
     int loop_count = 0;
+    int FPS_Ret = 0;
+    int FPS_Attempt = 1;
+    int FPS_Enroll_ID = 0;
+    unsigned long FPS_Param = 0;
+    unsigned short FPS_Resp = 0;
+    char FPS_Enroll_Pass[20];
+    unsigned long FPS_Delay = 0;
     
     FRDM_UART_Debug.baud(115200);           // Baud rate used for communicating with Tera-term on PC
     
@@ -66,8 +81,38 @@
     
     I2C_Bus.frequency(100000); // set required i2c frequency
     
+    FPS_Ret = FPS.Open();
+    if(FPS_Ret == -1)
+    {
+        FRDM_UART_Debug.printf("FPS NACK Open\r\n");  
+    }
+    else
+    {
+        FRDM_UART_Debug.printf("FPS Init\r\n");  
+        FRDM_UART_Debug.printf("FPS F/W = %d , ISO_Size = %d , Serial Num = %s\r\n",FPS.FirmwareVersion,FPS.IsoAreaMaxSize,FPS.DeviceSerialNumber);  
+    }      
+    
+    FPS_Ret = FPS.CmosLed(1);
+    if(FPS_Ret == -1)
+    {
+        FRDM_UART_Debug.printf("FPS NACK LED Set\r\n");  
+    }
+
+    wait(1);
+    
+    if(DG_Motion == 1)
+    {
+        FRDM_UART_Debug.printf("Motion detected, press Finger within 5 seconds to Start\r\n");  
+        
+        FPS_Delay = 5000;
+        FPS_Ret = FPS_Wait_Time(1,false,&FPS_Delay);
+        if(FPS_Ret == 1)
+        {
+            FPS_Func();
+        }
+    }
     FRDM_UART_Debug.printf("Start sampling data\r\n");  // Starting point
-    wait(1);
+    
     while (1) 
     {
         Amm_Out = 0;
@@ -109,7 +154,8 @@
         
         Amm_Out = (float)(( Temp_f_2 - 0.50 ) * 1000.00);
         
-        FRDM_UART_Debug.printf("Current value = %f mA\r\n", Amm_Out);
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Current value = %f mA\r\n", Amm_Out);
         wait_ms(100);
         
         // Voltmeter
@@ -139,7 +185,8 @@
         
         Volt_Out = (float)(Temp_f_2 - 16.5);
         
-        FRDM_UART_Debug.printf("Voltage value = %f V\r\n", Volt_Out);
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Voltage value = %f V\r\n", Volt_Out);
         wait_ms(100);
         
          //ambient light 
@@ -177,7 +224,8 @@
         
         Light_Out= (Temp_i_2 * Temp_i_3) / 100;
         
-        FRDM_UART_Debug.printf("Lux = %.2f\n\r", Light_Out);  
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Lux = %.2f\n\r", Light_Out);  
         wait_ms(100); 
         
         // Thermocouple
@@ -200,7 +248,8 @@
         
         Thermo_Out = Temp_f_1;
         
-        FRDM_UART_Debug.printf("Thermocouple volt diff = %.2f C\r\n",Thermo_Out);
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Thermocouple volt diff = %.2f C\r\n",Thermo_Out);
         wait_ms(100); 
         
         // Temp and Humidity
@@ -233,17 +282,339 @@
         Temp_Out = Temp_f_1;
         Hum_Out = Temp_f_2;
         
-        FRDM_UART_Debug.printf("Temperature = %4.2f F ,  Humidity = %4.2f \r\n",Temp_Out,Hum_Out);
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Temperature = %4.2f F ,  Humidity = %4.2f \r\n",Temp_Out,Hum_Out);
         wait_ms(100); 
         
-        FRDM_UART_Debug.printf("Sending this information to thingspeak.com\r\n");
+        //if(FPS_Auth)
+        FRDM_UART_Debug.printf("Sending Data to Server\r\n");
         ESP_8266_TX_Data(); 
         
-        wait(15);
+        FPS_Delay = 15000;
+        
+FPS_Check_Again:        
+        FPS_Ret = FPS_Wait_Time(1,true,&FPS_Delay);
+        if(FPS_Ret == 1)
+        {
+            FRDM_UART_Debug.printf("Motion detected, press Finger within %d seconds to Authenticate and display data\r\n",FPS_Delay);  
+            FPS_Ret = FPS_Wait_Time(1,false,&FPS_Delay);
+            if(FPS_Ret == 1)
+            {
+                FPS_Func();
+                goto FPS_Check_Again;
+            }
+            else if(FPS_Delay > 99)
+            {
+                FRDM_UART_Debug.printf("Remaining delay is %d\r\n",FPS_Delay);
+                goto FPS_Check_Again;
+            }
+        }
+        else if(FPS_Delay > 99)
+        {
+            FRDM_UART_Debug.printf("Remaining delay is %d\r\n",FPS_Delay);
+            goto FPS_Check_Again;
+        }
+
+        //wait(15);
         
     }
 }
 
+int FPS_Wait_Time(int press,bool Det_Mot, unsigned long *ms_time)
+{
+    for(;*ms_time>99;)
+    {
+        if((FPS.IsPress() == press) || ((Det_Mot == true) && (DG_Motion == 1)))
+            return 1;
+        else
+        {
+            *ms_time-=100;
+            wait_ms(100);
+        }
+    }
+    return 0;
+    /*
+    for(;(FPS.IsPress() != press);wait_ms(100),*ms_time-=100);
+    if(*ms_time >= 99)
+        return 1;
+    else
+        return 0;
+    */
+}
+
+void FPS_Func(void)
+{
+    int Temp_i_1 = 0;
+    int Temp_i_2 = 0;
+    int Temp_i_3 = 0;
+    int Temp_i_4 = 0;
+    int loop_count = 0;
+    int FPS_Ret = 0;
+    int FPS_Attempt = 1;
+    int FPS_Enroll_ID = 0;
+    unsigned long FPS_Param = 0;
+    unsigned short FPS_Resp = 0;
+    unsigned long FPS_Delay = 0;
+    char FPS_Enroll_Pass[20];
+    
+    FRDM_UART_Debug.printf("FPS Select Option:\r\n1. Verify ID \r\n2. Enroll ID\r\n3. Delete ID \r\n4. Quit \r\n"); 
+    FRDM_UART_Debug.scanf("%d",&Temp_i_4);
+    
+    switch(Temp_i_4)
+    {
+        case 1:
+        
+            FRDM_UART_Debug.printf("FPS VERIFICATION\r\n"); 
+            FRDM_UART_Debug.printf("FPS Press finger to start\r\n"); 
+            
+            FPS_Delay = 10000;
+            FPS_Wait_Time(1,false,&FPS_Delay);
+            
+            //Verify 
+            FPS_Ret = FPS.Capture(1);
+            if(FPS_Ret == -1)
+            {
+                FRDM_UART_Debug.printf("FPS Verification failed, place finger properly\r\n");  
+                FPS_Auth = false;
+                goto loop_end;
+            }
+            
+            FRDM_UART_Debug.printf("FPS Captured\r\n");  
+            
+            FPS_Ret = FPS.Identify();
+            if(FPS_Ret != -1)
+            {
+                FRDM_UART_Debug.printf("FPS Authentication PASSED with ID = %d \r\n",FPS_Ret); 
+                FPS_Auth = true;
+                goto loop_end;
+            }
+            else
+            {
+                FRDM_UART_Debug.printf("FPS Authentication FAILED \r\n"); 
+                FPS_Auth = false;
+                goto loop_end;    
+            }
+        break;
+        
+        case 2:
+            FRDM_UART_Debug.printf("FPS ENROLL\r\n"); 
+
+            for(FPS_Attempt = 3;FPS_Attempt >= 1;FPS_Attempt --)
+            {
+                FRDM_UART_Debug.printf("FPS Enter Enroll passoword\r\n"); 
+                FRDM_UART_Debug.scanf("%s",&FPS_Enroll_Pass[0]); 
+                
+                if(FPS_Enroll_Pass == FPS_ENROLL_PASS)
+                {
+                   FRDM_UART_Debug.printf("FPS Wrong Enroll passoword %d attempts left\r\n",FPS_Attempt);     
+                }
+                else
+                    break;
+            }
+
+            if(FPS_Attempt < 1)
+            {
+                FRDM_UART_Debug.printf("FPS Enroll Password authentication failed \r\n"); 
+                goto loop_end;
+            }
+
+            FRDM_UART_Debug.printf("FPS Enroll passoword Authenticated\r\n");
+            
+            for(FPS_Enroll_ID = 0; FPS_Enroll_ID <20 ;FPS_Enroll_ID++)
+            {
+                FPS_Ret = FPS.CheckEnrolled(FPS_Enroll_ID);
+                if(FPS_Ret == 0)      
+                    continue;
+                else
+                    break;
+            }
+
+            FRDM_UART_Debug.printf("FPS Enroll ID %d\r\n",FPS_Enroll_ID);
+
+            if(FPS_Enroll_ID < 20)
+            {
+                FRDM_UART_Debug.printf("FPS Starting enrolling, place finger on Sensor when LED glows\r\n");
+                
+                FPS_Ret = FPS.CmosLed(0);
+                if(FPS_Ret == -1)
+                {
+                    FRDM_UART_Debug.printf("FPS Enroll Failed try again\r\n"); 
+                    goto loop_end;
+                }
+                    
+                FPS_Param = FPS_Enroll_ID;
+                
+                FPS_Ret = FPS.SendRecv(FPS.CMD_EnrollStart,&FPS_Param,&FPS_Resp);
+                if((FPS_Ret != 0) || (FPS_Resp != FPS.CMD_Ack))
+                {
+                    FRDM_UART_Debug.printf("FPS Enroll Failed try again\r\n"); 
+                    goto loop_end;
+                }
+                
+                Temp_i_1 = 1;
+                
+                for(Temp_i_2 = 1;Temp_i_2 < 10 ; Temp_i_2++)
+                {
+                    for(;Temp_i_1 <= 3 ; Temp_i_1++,Temp_i_2 = 1)
+                    {
+                        FPS_Delay = 10000;
+                        FPS_Wait_Time(0,false,&FPS_Delay);
+                        
+                        FPS_Ret = FPS.CmosLed(1);
+                        if(FPS_Ret == -1)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enroll Failed trying again\r\n"); 
+                            continue;
+                        }
+                        
+                        for(Temp_i_3 = 1;Temp_i_3 <= 10;Temp_i_3++)
+                        {
+                        
+                            FRDM_UART_Debug.printf("FPS Place finger on Sensor NOW %d\r\n",Temp_i_1);
+                            FPS_Delay = 10000;
+                            FPS_Wait_Time(1,false,&FPS_Delay);
+                            
+                            if(FPS.Capture(1) == 0)
+                                break;
+                                
+                            wait_ms(500);
+                        }
+                        
+                        if(Temp_i_2 > 10)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enroll Failed trying again\r\n"); 
+                            continue;
+                        }   
+
+                        FPS_Ret = FPS.Enroll_N(Temp_i_1);
+                        if(FPS_Ret != 0)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enroll Failed trying again\r\n"); 
+                            continue;
+                        }
+                            
+                        FPS_Ret = FPS.CmosLed(0);
+                        if(FPS_Ret == -1)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enroll Failed trying again\r\n"); 
+                            continue;
+                        }
+                        
+                        FRDM_UART_Debug.printf("FPS REMOVE finger on Sensor NOW\r\n");      
+                    }
+                }
+                
+                FPS_Ret = FPS.CheckEnrolled(FPS_Enroll_ID);
+                if(FPS_Ret == 0)     
+                {
+                    FRDM_UART_Debug.printf("FPS Enroll PASSED\r\n");       
+                    goto loop_end;
+                }
+                else
+                {
+                    FRDM_UART_Debug.printf("FPS Enroll FAILED\r\n");       
+                    goto loop_end;                       
+                }
+            }
+            else
+            {
+                FRDM_UART_Debug.printf("FPS All ID's are full, swithcing to ID delete mode\r\n");
+                goto delete_fps_id;
+            }
+        break;
+        
+        case 3:
+            // Delete ID 
+delete_fps_id:                  
+            FRDM_UART_Debug.printf("FPS DELETE ID, enter option select\r\n1. Delete specific ID \r\n2. Delete All \r\n3. Quit\r\n");
+            FRDM_UART_Debug.scanf("%d",&Temp_i_1); 
+            
+            switch (Temp_i_1)
+            {
+                case 1:
+                case 2:
+                        for(FPS_Attempt = 3;FPS_Attempt >= 1;FPS_Attempt --)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enter Enroll passoword\r\n"); 
+                            FRDM_UART_Debug.scanf("%s",&FPS_Enroll_Pass[0]); 
+                            
+                            if(FPS_Enroll_Pass == FPS_ENROLL_PASS)
+                            {
+                               FRDM_UART_Debug.printf("FPS Wrong Enroll passoword %d attempts left\r\n",FPS_Attempt);     
+                            }
+                            else
+                                break;
+                        }
+                        
+                        FRDM_UART_Debug.printf("FPS Password Authenticated\r\n");
+                        
+                        if(Temp_i_1 == 1)
+                        {
+                            FRDM_UART_Debug.printf("FPS Enter ID to delete\r\n");
+                            FRDM_UART_Debug.scanf("%d",&Temp_i_2);
+                            
+                            
+                            FPS_Ret = FPS.DeleteID(Temp_i_2);
+                            if(FPS_Ret != 0)
+                            {
+                                FRDM_UART_Debug.printf("FPS Unable to delete ID %d\r\n",Temp_i_2); 
+                                break;
+                            }
+                            else
+                                FRDM_UART_Debug.printf("FPS ID %d has been deleted\r\n",Temp_i_2); 
+                        }
+                        else if(Temp_i_1 == 2)
+                        {
+                            for(FPS_Enroll_ID = 0; FPS_Enroll_ID <20 ;FPS_Enroll_ID++)
+                            {
+                                FPS_Ret = FPS.DeleteID(FPS_Enroll_ID);
+                            }
+                            
+                            for(FPS_Enroll_ID = 0; FPS_Enroll_ID <20 ;FPS_Enroll_ID++)
+                            {
+                                FPS_Ret = FPS.CheckEnrolled(FPS_Enroll_ID);
+                                if(FPS_Ret != 0)      
+                                    continue;
+                                else
+                                    break;
+                            }
+                
+                            if(FPS_Enroll_ID == 20)
+                            {
+                                FRDM_UART_Debug.printf("FPS All ID's deleted\r\n");
+                            }
+                            else
+                            {
+                                FRDM_UART_Debug.printf("FPS Delete ALL failed at ID %d\r\n",FPS_Enroll_ID); 
+                            }
+                        }
+                            
+                    break;
+                case 3:
+                default:
+                    goto loop_end;
+                    break;      
+            } 
+                
+        break;
+        
+        case 4:
+        default:
+                goto loop_end;
+    }   
+loop_end:
+    FRDM_UART_Debug.printf("FPS Loop End reached\r\n");    
+    
+    FPS_Ret = FPS.CmosLed(1);
+    if(FPS_Ret == -1)
+    {
+        FRDM_UART_Debug.printf("FPS LED ON Failed Loop End\r\n"); 
+        //continue;
+    }            
+ 
+}
+    
+
 
 void ESP_8266_Init(void)
 {    
@@ -251,24 +622,28 @@
       
     ESP_8266_UART.Reset();                   //RESET ESP
     ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);        //receive a response from ESP
-    //FRDM_UART_Debug.printf(ESP_8266_CMD_Recv);          //Print the response onscreen 
+    //if(FPS_Auth)
+        //FRDM_UART_Debug.printf(ESP_8266_CMD_Recv);          //Print the response onscreen 
     wait(2);
     
     strcpy(ESP_8266_CMD_Send,"AT");
     ESP_8266_UART.SendCMD(ESP_8266_CMD_Send);
-    FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
     //wait(2);
     ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);       
-    FRDM_UART_Debug.printf(ESP_8266_CMD_Recv);      
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Recv);      
     wait(0.1);
     
     strcpy(ESP_8266_CMD_Send,"AT+CWMODE=1");
     ESP_8266_UART.SendCMD(ESP_8266_CMD_Send);
-    FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
     wait(2);
     
     
-    //if(!strcmp(ESP_8266_CMD_Recv,"WIFI CONNECTED"))
+    if(!strcmp(ESP_8266_CMD_Recv,"WIFI CONNECTED"))
     {
         strcpy(ESP_8266_CMD_Send,"AT+CWJAP=\"");
         strcat(ESP_8266_CMD_Send,WIFI_SSID);
@@ -277,24 +652,27 @@
         strcat(ESP_8266_CMD_Send,"\"");
     
         ESP_8266_UART.SendCMD(ESP_8266_CMD_Send);
-        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
         wait(5);
         ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);       
-        FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
     }
-    //else 
-       // FRDM_UART_Debug.printf("Wifi was preconfigured\r\n"); 
+    else 
+       FRDM_UART_Debug.printf("Wifi was preconfigured\r\n"); 
         
     strcpy(ESP_8266_CMD_Send,"AT+CIPMUX=0");
     ESP_8266_UART.SendCMD(ESP_8266_CMD_Send);
-    FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
     //wait(2);
     ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);       
-    FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
 
 }
 
-
 void ESP_8266_TX_Data(void)
 {
    
@@ -306,10 +684,12 @@
     strcat(ESP_8266_CMD_Send,"\",80");
     
     ESP_8266_UART.SendCMD(ESP_8266_CMD_Send); 
-    FRDM_UART_Debug.printf("S\r\n%s",ESP_8266_CMD_Send);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("S\r\n%s",ESP_8266_CMD_Send);
     //wait(2);                                                    
     ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 1000);
-    FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
     wait(1);
     
     /*
@@ -331,17 +711,20 @@
     
     sprintf(cmd,"AT+CIPSEND=%d",i);                                       //Send Number of open connection and Characters to send 
     ESP_8266_UART.SendCMD(cmd);
-    FRDM_UART_Debug.printf("S\r\n%s",cmd);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("S\r\n%s",cmd);
     while(i<=20 || ESP_8266_CMD_Recv == ">")
     {
         ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 1000);
         wait(100);
         i++;
     }
-    FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
     
     ESP_8266_UART.SendCMD(ESP_8266_CMD_Send);                                                      //Post value to thingspeak channel
-    FRDM_UART_Debug.printf("S\r\n%s",ESP_8266_CMD_Send);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("S\r\n%s",ESP_8266_CMD_Send);
     
     while(i<=20 || ESP_8266_CMD_Recv == "OK")
     {
@@ -349,7 +732,8 @@
         wait(100);
         i++;
     }
-    FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
     
 }