Wireless Home Security System

Dependencies:   ESP8266 mbed-rtos mbed

Fork of Home_Secuity by Waiel Haj Elnur

Files at this revision

API Documentation at this revision

Comitter:
shabach
Date:
Wed Dec 13 15:44:24 2017 +0000
Parent:
2:3f45a93a19e5
Commit message:
This is my program for a wireless connected embedded system using wifi.

Changed in this revision

ESP8266.lib Show annotated file Show diff for this revision Revisions of this file
EthernetInterface.lib Show diff for this revision Revisions of this file
M2XStreamClient.lib Show diff for this revision Revisions of this file
jsonlite.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/ESP8266.lib	Wed Dec 13 15:44:24 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/quevedo/code/ESP8266/#77388e8f0697
--- a/EthernetInterface.lib	Wed Mar 22 22:54:08 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://developer.mbed.org/users/mbed_official/code/EthernetInterface/#2fc406e2553f
--- a/M2XStreamClient.lib	Wed Mar 22 22:54:08 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://developer.mbed.org/teams/ATT-M2X-team/code/M2XStreamClient/#2610823f7f2e
--- a/jsonlite.lib	Wed Mar 22 22:54:08 2017 +0000
+++ b/jsonlite.lib	Wed Dec 13 15:44:24 2017 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/citrusbyte/code/jsonlite/#807034181e02
+https://os.mbed.com/users/shabach/code/jsonlite/#a60dce88c862
--- a/main.cpp	Wed Mar 22 22:54:08 2017 +0000
+++ b/main.cpp	Wed Dec 13 15:44:24 2017 +0000
@@ -1,57 +1,57 @@
 #include "mbed.h"
-#include "M2XStreamClient.h"
-#include "EthernetInterface.h"
+#include "ESP8266.h"
+#include <string>
+
+#define APIKEY V5N1NKKKH5T51D48    //Put "Write key" of your channel in thingspeak.com 
+#define IP "184.106.153.149"       // IP Address of "api.thingspeak.com\"
+#define WIFI_SSID "Jeremy"
+#define WIFI_PASS "mbedproject"
+
+Serial pc(USBTX, USBRX); // tx, rx
+ESP8266 WiFi (D1, D0, 115200);
 
 AnalogIn temp(A0);
 DigitalOut test(D3, 0);
 InterruptIn motion(D2);
-Serial pc(USBTX, USBRX); // tx, rx
+
+void WiFi_Init (void);
+void WiFi_Send (void);
 
+char snd[255];
+char rcv[1000];
+
+int motion_cnt = 0;
 int motion_detected = 0;
-char deviceId[] = "db9efa47cfb6502a21e51cdc97a3cdb4"; // Device you want to push to
-char streamTemp[] = "Temprature"; // Stream you want to push to
-char streamInt[] = "Intruder";
-char streamInts[] = "Intruders";
-char m2xKey[] = "d647418357fc21e8ab3672210493efe6"; // Your M2X API Key or Master API Key
-
-
+double tempC;
+double tempF;
+    
 void irq_handler(void)
 {
     motion_detected = 1;
 }
 
-
 int main(void)
 {
-    int motion_cnt = 0;
+    pc.baud(115200);
+    pc.printf("Program Started \r\n");
+    
+    WiFi_Init();
+    
+    pc.printf("WiFi Connected! \r\n");
     
     //time_t is used to store the calender time format
     time_t rawtime;
     struct tm *timeinfo;
     
-    double tempC, tempF;
-    
-    pc.printf("Started\r\n");
-    
     motion.rise(&irq_handler);
     
-    // Intialize Ethernet connection
-    EthernetInterface eth;
-    eth.init();
-    eth.connect();
-    printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress());
- 
-    // Initialize the M2X client
-    Client client;
-    M2XStreamClient m2xClient(&client, m2xKey);
-        
     while(1)
     {
-        tempC = (temp*330);
+        tempC = (temp*300);
         tempF = (9.0*tempC)/5.0 + 32.0;
         
-        m2xClient.updateStreamValue(deviceId, streamTemp, tempF);
-    
+        pc.printf("Temperature is %.2f C %.2f F\n\r", tempC, tempF);
+        
         wait(1);
         
         if(motion_detected)
@@ -63,20 +63,105 @@
             motion_cnt++;
             motion_detected = 0;
             pc.printf("Motion %d Detected at %d:%d:%d \n\r", motion_cnt, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
-            m2xClient.updateStreamValue(deviceId, streamInt, motion_cnt);
-            m2xClient.updateStreamValue(deviceId, streamInts, motion_cnt);
         }
         
-        if(tempC > 25)
+        if(tempF > 90)
         {
-            pc.printf("Temperature is %.2f C %.2f F\n\r", tempC, tempF);
             DigitalOut test(D3,1);
             
         }
         else
         {
          DigitalOut test(D3,0);
-        
         }
+        WiFi_Send();
     }
 }
+
+void WiFi_Init (void)
+{
+    pc.printf("Initializing ESP \r\n");
+
+    pc.printf("Reset WiFi \r\n");
+    WiFi.Reset();                   //RESET ESP
+    WiFi.RcvReply(rcv, 400);        //receive a response from ESP
+    pc.printf("%s \r\n", rcv);
+    wait(2);
+
+    strcpy(snd, "AT");
+    WiFi.SendCMD(snd);
+    pc.printf("%s \r\n", snd);
+    WiFi.RcvReply(rcv, 400);
+    pc.printf("%s \r\n", rcv);
+    wait(2);
+
+    strcpy(snd, "AT+CWMODE=1");
+    WiFi.SendCMD(snd);
+    pc.printf("%s \r\n", snd);
+    WiFi.RcvReply(rcv, 400);
+    pc.printf("%s \r\n", rcv);
+    wait(2);
+
+    strcpy(snd, "AT+CWJAP=\"");
+    strcat(snd, WIFI_SSID);
+    strcat(snd, "\",\"");
+    strcat(snd, WIFI_PASS);
+    strcat(snd, "\"");
+
+    WiFi.SendCMD(snd);
+    pc.printf("%s \r\n", snd);
+    wait(2);
+    WiFi.RcvReply(rcv, 400);
+    pc.printf("%s \r\n", rcv);
+    wait(2);
+
+    strcpy(snd, "AT+CIPMUX=1");
+    WiFi.SendCMD(snd);
+    pc.printf("%s \r\n", snd);
+    WiFi.RcvReply(rcv, 400);
+    pc.printf("%s \r\n", rcv);
+    wait(2);
+}
+
+void WiFi_Send (void)
+{
+    //ESP updates the Status of Thingspeak channel//
+
+    strcpy(snd,"AT+CIPSTART=");
+    strcat(snd,"\"TCP\",\"");
+    strcat(snd,IP);
+    strcat(snd,"\",80");
+
+    WiFi.SendCMD(snd);
+    pc.printf("Send\r\n%s",snd);
+    WiFi.RcvReply(rcv, 1000);
+    pc.printf("Receive\r\n%s",rcv);
+    wait(1);
+
+    sprintf(snd,"GET https://api.thingspeak.com/update?api_key=V5N1NKKKH5T51D48&field1=%f&field2=%d\r\n", tempF, motion_cnt);
+
+    int i=0;
+    for(i=0; snd[i]!='\0'; i++);
+    i++;
+    char cmd[255];
+
+    sprintf(cmd,"AT+CIPSEND=%d",i);           //Send Number of open connection and Characters to send
+    WiFi.SendCMD(cmd);
+    pc.printf("Send\r\n%s",cmd);
+    while(i<=20 || rcv == ">") {
+        WiFi.RcvReply(rcv, 1000);
+        wait(100);
+        i++;
+    }
+    pc.printf("Receive\r\n%s",rcv);
+
+    WiFi.SendCMD(snd);       //Post value to thingspeak channel
+    pc.printf("Send\r\n%s",snd);
+
+    while(i<=20 || rcv == "OK") {
+        WiFi.RcvReply(rcv, 1000);
+        wait(100);
+        i++;
+    }
+    pc.printf("Receive\r\n%s",rcv);
+}
\ No newline at end of file