![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
BLE Mesh Light Sensor output to FRDMK64f
Fork of Hexi_Blinky_Example by
Diff: main.cpp
- Revision:
- 18:293c2885af81
- Parent:
- 17:690d692b29cb
- Child:
- 19:ffd78d964d9f
diff -r 690d692b29cb -r 293c2885af81 main.cpp --- 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); }