BLE Mesh Light Sensor output to FRDMK64f
Fork of Hexi_Blinky_Example by
Revision 18:293c2885af81, committed 2017-04-27
- 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);
}
