BLE Mesh Light Sensor output to FRDMK64f

Fork of Hexi_Blinky_Example by Hexiwear

Files at this revision

API Documentation at this revision

Comitter:
roborags
Date:
Thu Apr 27 15:10:13 2017 +0000
Parent:
17:690d692b29cb
Child:
19:ffd78d964d9f
Commit message:
Final commit

Changed in this revision

GT511C3.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GT511C3.lib	Thu Apr 27 15:10:13 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/tosihisa/code/GT511C3/#90c64cb9db58
--- 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);
     
 }