Ammeter_Voltmeter_PIR_Motion_Sensor_ESP8266_Finger_print_DHT_Thermocouple_light_sensor_combined_code

Dependencies:   DHT ESP8266 GT511C3 mbed

Revision:
1:8384e8b0fc22
Parent:
0:2bd9a67332c0
Child:
2:de62e3947c87
--- a/main.cpp	Thu Apr 27 17:28:37 2017 +0000
+++ b/main.cpp	Thu Apr 27 17:31:13 2017 +0000
@@ -0,0 +1,739 @@
+
+#include "mbed.h"
+#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 "Redmi"
+#define WIFI_PASS "akash12345"
+#define FPS_ENROLL_PASS "Rags\n"
+
+Serial FRDM_UART_Debug(USBTX,USBRX);
+
+ESP8266 ESP_8266_UART(PTC15, PTC14, 115200); // UART for ESP8266 Wifi module
+// Options are TX-RX - PTB11 - PTB10 , PTC17 - PTC16 , PTC15 - PTC14
+
+SPI SPI_Bus(PTD2,PTD3,PTD1); // (MOSI MISO CLK)setup SPI interface
+DigitalOut SPI_CS_AMM(PTA2);
+DigitalOut SPI_CS_VOLT(PTB9);
+
+I2C I2C_Bus(PTE25,PTE24);
+
+AnalogIn AN_Thermo(PTB2); // Thermocouple Analog Input
+
+DigitalIn DG_Motion(PTC2); // Motion module Digital Input
+
+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
+
+float Amm_Out = 0;
+float Volt_Out = 0;
+float Light_Out = 0;
+float Thermo_Out = 0;
+float Temp_Out = 0;
+float Hum_Out = 0;
+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() 
+{
+    int SPI_High_byte = 0;
+    int SPI_Low_byte = 0; 
+    float Temp_f_1 = 0.00;
+    float Temp_f_2 = 0.00;
+    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
+    
+    ESP_8266_Init();
+    
+    SPI_Bus.format(8,0);
+    SPI_Bus.frequency(1000000);
+    
+    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
+    
+    while (1) 
+    {
+        Amm_Out = 0;
+        Volt_Out = 0;
+        Light_Out = 0;
+        Thermo_Out = 0;
+        Temp_Out = 0;
+        Hum_Out = 0;
+        Motion_Out = 0;
+        
+        // Copy Motion values
+        
+        Motion_Out = DG_Motion;
+        
+        // Ammeter
+        
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+        loop_count = 0;
+        
+        SPI_CS_AMM = 0;
+        
+        SPI_High_byte = SPI_Bus.write(0);
+        SPI_Low_byte = SPI_Bus.write(0);
+        
+        SPI_CS_AMM = 1;
+        
+        Temp_f_1 = (( SPI_High_byte & 0x1F ) << 7 ) | (( SPI_Low_byte >> 1 ));
+            
+        Temp_f_2= (float)(( Temp_f_1 * 1.00 ) / 4096.00 ); // Converting to volts
+        
+        Amm_Out = (float)(( Temp_f_2 - 0.50 ) * 1000.00);
+        
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Current value = %f mA\r\n", Amm_Out);
+        wait_ms(100);
+        
+        // Voltmeter
+        
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+        loop_count = 0;  
+        
+        SPI_CS_VOLT = 0;
+
+        SPI_High_byte = SPI_Bus.write(0);
+        SPI_Low_byte = SPI_Bus.write(0);
+        
+        SPI_CS_VOLT = 1;
+        
+        Temp_f_1 = ((SPI_High_byte & 0x1f) << 7) | ((SPI_Low_byte >> 1));
+        
+        Temp_f_2 = (float)((Temp_f_1 * 33) / 4096); // show value in volts.
+        
+        Volt_Out = (float)(Temp_f_2 - 16.5);
+        
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Voltage value = %f V\r\n", Volt_Out);
+        wait_ms(100);
+        
+         //ambient light 
+         
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+        loop_count = 0;
+        
+        I2C_Cmd[0] = 0x01;   //configuration register
+        I2C_Cmd[1]= 0xCC;    //configuration data
+        I2C_Cmd[2]= 0x01;   //configuration data
+        
+        I2C_Bus.write(Light_I2C_Addr, I2C_Cmd, 3);
+        
+        I2C_Cmd[0] = 0x00; // data register
+        
+        I2C_Bus.write(Light_I2C_Addr, I2C_Cmd, 1);
+        
+        wait_ms(100);
+        
+        I2C_Bus.read(Light_I2C_Addr, I2C_Cmd, 2);
+     
+        Temp_i_1= I2C_Cmd[0]>>4;
+        Temp_i_2= (I2C_Cmd[0]-(Temp_i_1<<4))*256+I2C_Cmd[1];
+
+        for(loop_count = 0,Temp_i_3 = 1 ; loop_count < Temp_i_1 ; Temp_i_3 = Temp_i_3 * 2,loop_count++);
+        
+        Light_Out= (Temp_i_2 * Temp_i_3) / 100;
+        
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Lux = %.2f\n\r", Light_Out);  
+        wait_ms(100); 
+        
+        // Thermocouple
+        
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+        loop_count = 0;
+        
+        Temp_f_1 = AN_Thermo.read_u16();
+        
+        Temp_f_1 = (( Temp_f_1 / 65536 ) * 330);
+        
+        Thermo_Out = Temp_f_1;
+        
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Thermocouple volt diff = %.2f C\r\n",Thermo_Out);
+        wait_ms(100); 
+        
+        // Temp and Humidity
+        
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+        loop_count = 0;
+        
+        Temp_i_1 = DHT_Temp_Hum.readData();
+        if (Temp_i_1 == 0)  // Read success
+        {
+            //wait_ms(1000);
+            Temp_f_1 = DHT_Temp_Hum.ReadTemperature(FARENHEIT);
+            Temp_f_2 = DHT_Temp_Hum.ReadHumidity();
+        }
+        else // Read failure
+        {
+            Temp_f_1 = 0;
+            Temp_f_2 = 0;
+        }
+        
+        Temp_Out = Temp_f_1;
+        Hum_Out = Temp_f_2;
+        
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf("Temperature = %4.2f F ,  Humidity = %4.2f \r\n",Temp_Out,Hum_Out);
+        wait_ms(100); 
+        
+        //if(FPS_Auth)
+        FRDM_UART_Debug.printf("Sending Data to Server\r\n");
+        ESP_8266_TX_Data(); 
+        
+        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)
+{    
+    FRDM_UART_Debug.printf("Initializing and Reset ESP\r\n"); 
+      
+    ESP_8266_UART.Reset();                   //RESET ESP
+    ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);        //receive a response from ESP
+    //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);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    //wait(2);
+    ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);       
+    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);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    wait(2);
+    
+    
+    if(!strcmp(ESP_8266_CMD_Recv,"WIFI CONNECTED"))
+    {
+        strcpy(ESP_8266_CMD_Send,"AT+CWJAP=\"");
+        strcat(ESP_8266_CMD_Send,WIFI_SSID);
+        strcat(ESP_8266_CMD_Send,"\",\"");
+        strcat(ESP_8266_CMD_Send,WIFI_PASS);
+        strcat(ESP_8266_CMD_Send,"\"");
+    
+        ESP_8266_UART.SendCMD(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);       
+        if(FPS_Auth)
+            FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
+    }
+    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);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Send);
+    //wait(2);
+    ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 400);       
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf(ESP_8266_CMD_Recv); 
+
+}
+
+void ESP_8266_TX_Data(void)
+{
+   
+    //ESP updates the Status of Thingspeak channel//
+    
+    strcpy(ESP_8266_CMD_Send,"AT+CIPSTART=");
+    strcat(ESP_8266_CMD_Send,"\"TCP\",\"");
+    strcat(ESP_8266_CMD_Send,IP);
+    strcat(ESP_8266_CMD_Send,"\",80");
+    
+    ESP_8266_UART.SendCMD(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);
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
+    wait(1);
+    
+    /*
+        float Amm_Out = 0;
+        float Volt_Out = 0;
+        float Light_Out = 0;
+        float Thermo_Out = 0;
+        float Temp_Out = 0;
+        float Hum_Out = 0;
+        int Motion_Out = 0;
+    */
+    sprintf(ESP_8266_CMD_Send,"GET https://api.thingspeak.com/update?key=JJAOBK32WOINKT00&field1=%d&field2=%d&field3=%f&field4=%f&field5=%f&field6=%f&field7=%f&field8=%f\r\n"
+            ,Motion_Out,Finger_Out,Amm_Out,Volt_Out,Light_Out,Thermo_Out,Temp_Out,Hum_Out);
+    
+    int i=0;
+    for(i=0;ESP_8266_CMD_Send[i]!='\0';i++);
+    i++;
+    char cmd[255];
+    
+    sprintf(cmd,"AT+CIPSEND=%d",i);                                       //Send Number of open connection and Characters to send 
+    ESP_8266_UART.SendCMD(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++;
+    }
+    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
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("S\r\n%s",ESP_8266_CMD_Send);
+    
+    while(i<=20 || ESP_8266_CMD_Recv == "OK")
+    {
+        ESP_8266_UART.RcvReply(ESP_8266_CMD_Recv, 1000);
+        wait(100);
+        i++;
+    }
+    if(FPS_Auth)
+        FRDM_UART_Debug.printf("R\r\n%s",ESP_8266_CMD_Recv);
+    
+}
+