IoT Alarm System
Dependencies: ESP8266NodeMCUInterface JPEGCamera SDFileSystem IoT_Security xbee_lib
Fork of HUZZAHESP8266-web-control-LPC1768 by
Revision 6:bcbe1be26da5, committed 2016-04-29
- Comitter:
- kbrahmbhatt6
- Date:
- Fri Apr 29 07:04:08 2016 +0000
- Parent:
- 5:bc0296a5ad8a
- Commit message:
- 1
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ESP8266NodeMCUInterface.lib Fri Apr 29 07:04:08 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/ESP8266/code/ESP8266NodeMCUInterface/#6031f70e3914
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JPEGCamera.lib Fri Apr 29 07:04:08 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/yamaguch/code/JPEGCamera/#27417b6a951d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Fri Apr 29 07:04:08 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
--- a/main.cpp Fri Mar 18 19:10:19 2016 +0000 +++ b/main.cpp Fri Apr 29 07:04:08 2016 +0000 @@ -1,10 +1,55 @@ // ESP8266 Static page WEB server to control Mbed #include "mbed.h" +#include "JPEGCamera.h" +#include "xbee.h" +#include "ESP8266Interface.h" +#include "TCPSocketConnection.h" +#include "SDFileSystem.h" + +SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board +//#include "rtos.h" + +//Print temperature from TMP36 analog temperature sensor +/////////////////////////////////////////////////////////////////////////////// +//Setup a new class for TMP36 sensor +class TMP36 +{ +public: +TMP36(PinName pin); +TMP36(); +operator float (); +float read(); +private: +//class sets up the AnalogIn pin +AnalogIn _pin; +}; + +TMP36::TMP36(PinName pin) : _pin(pin) +{ +// _pin(pin) means pass pin to the AnalogIn constructor +} + +float TMP36::read() +{ +//convert sensor reading to temperature in degrees C +return ((_pin.read()*3.3)-0.500)*100.0; +} +//overload of float conversion (avoids needing to type .read() in equations) +TMP36::operator float () +{ +//convert sensor reading to temperature in degrees C +return ((_pin.read()*3.3)-0.500)*100.0; +} +/////////////////////////////////////////////////////////////////////////////// + + + + Serial pc(USBTX, USBRX); -Serial esp(p28, p27); // tx, rx - +//Serial esp(p28, p27); // tx, rx +LocalFileSystem local("local"); //save images on mbed // Standard Mbed LED definitions DigitalOut led1(LED1); @@ -37,6 +82,7 @@ void Rx_interrupt(); void send_line(); void read_line(); +void alarmPhoto(int); int DataRX; int update; @@ -47,7 +93,7 @@ char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added char timebuf[30]; void SendCMD(),getreply(),ReadWebData(),startserver(); -void gettime(),setRTC(),gettemp(),getbattery(); +void gettime(),setRTC(),getTemperature(); char rx_line[1024]; int port =80; // set server port int SERVtimeout =5; // set server timeout in seconds in case link breaks. @@ -59,21 +105,107 @@ int month =8; // 1-12 int year =15; // last 2 digits +PwmOut Alarm(p21); +JPEGCamera camera(p13, p14); //Camera +TMP36 myTMP36(p15); +DigitalOut P16(p16); +DigitalOut P17(p17); +DigitalOut P19(p19); +DigitalOut P20(p20); +float tempC; +xbee xbee2(p9,p10,p11); +char read_data[202]; +Serial esp(p28, p27); // tx, rx +void Email(); +//ESP8266Interface esp1(p28, p27, p26, 9600, 3000); +//EthernetInterface eth; + +//////// +//tempC = myTMP36; +///printf(" T=%5.2F C \n\r", tempC);//for testing +//if(tempC>45) { +//add code +//} +/////// + int main() { + camera.setPictureSize(JPEGCamera::SIZE320x240); pc.baud(9600); + ////////////////////////////////xbee2.RecieveData(read_data,0); //ADD THIS BACK!!! +// led3 = 1; +// +// ///////////Emailing the user +// Email(); esp.baud(9600); led1=1,led2=0,led3=0, led4=0; // Setup a serial interrupt function to receive data esp.attach(&Rx_interrupt, Serial::RxIrq); // Setup a serial interrupt function to transmit data esp.attach(&Tx_interrupt, Serial::TxIrq); + Alarm.period(1.0/100); if (time(NULL) < 1420070400) { setRTC(); } startserver(); DataRX=0; count=0; + xbee2.RecieveData(read_data,0); + led3 = 1; + Alarm = 0.5; + //Take photo + alarmPhoto(5); //will be saved as PICT005.jpg + //FILE *fp = fopen("/local/pict005.jpg", "w"); // Open "out.txt" on the local file system for writing +// if (fp != NULL) { +// pc.printf("File opens\n"); +// } +// mkdir("/sd/mydir", 0777); +// FILE *fp1 = fopen("/sd/mydir/sdtest.jpg", "w"); +// //fprintf(fp1, fp); +// fclose(fp1); + + // email the user + // Can turn-off the alarm + +// + ///////////Emailing the user + //Email(); +// ESP8266Interface esp1(p28, p27, p26, 9600, 3000); +// esp1.init(); +// esp1.connect("ssid", "password"); +// printf("IP Address is %s\n", esp1.getIPAddress()); +// TCPSocketConnection sock; +// //delete esp1; +// +// +// sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" +// +// char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt +// sock.send_all(http_cmd, sizeof(http_cmd)-1); +// char buffer[300]; +// int ret; +// while (true) { +// ret = sock.receive(buffer, sizeof(buffer)-1); +// if (ret <= 0) break; +// buffer[ret] = '\0'; +// printf("Received %d chars from server:\n%s\n", ret, buffer); +// } +// sock.close(); +// esp1.disconnect(); +// ////////// + //if (time(NULL) < 1420070400) { +// setRTC(); +// } +// startserver(); + //eth.init(); //Use DHCP + //eth.connect(); + //printf("IP Address is %s\n", eth.getIPAddress()); + + //TCPSocketConnection sock; + //sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" + + //char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt + //sock.send_all(http_cmd, sizeof(http_cmd)-1); while(1) { if(DataRX==1) { ReadWebData(); @@ -83,11 +215,18 @@ { // get new values gettime(); - gettemp(); - getbattery(); + //gettemp(); + //getbattery(); + getTemperature(); + //if (tempC > 27) { +// Alarm = 0.5; +// } count++; // send new values - sprintf(cmdbuff, "count,time,analog1,analog2=%d,\"%s\",\"%s\",\"%s\"\r\n",count,timebuf,Temp,Vcc); + //sprintf(cmdbuff, "count,time,analog1,analog2=%d,\"%s\",\"%s\",\"%s\"\r\n",count,timebuf,Temp,Vcc); + sprintf(cmdbuff, "count,time,tempC=%d,\"%s\",\"%f\"\r\n",count,timebuf,tempC); + //esp1.send(cmdbuff, 1024); + //esp1.recv(replybuff, sizeof(replybuff)); SendCMD(); getreply(); update=0; @@ -95,6 +234,33 @@ } } +void Email() { + /////////Emailing the user + ESP8266Interface esp1(p28, p27, p26, 9600, 3000); + esp1.init(); + esp1.connect("ssid", "password"); + printf("IP Address is %s\n", esp1.getIPAddress()); + TCPSocketConnection sock; + //delete esp1; + + + sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" + + char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt + sock.send_all(http_cmd, sizeof(http_cmd)-1); + char buffer[300]; + int ret; + while (true) { + ret = sock.receive(buffer, sizeof(buffer)-1); + if (ret <= 0) break; + buffer[ret] = '\0'; + printf("Received %d chars from server:\n%s\n", ret, buffer); + } + sock.close(); + esp1.disconnect(); + ////////// +} + // Reads and processes GET and POST web data void ReadWebData() { @@ -119,6 +285,18 @@ if( strstr(webdata, "check=led4v") != NULL ) { led4=!led4; } + if( strstr(webdata, "check=speakeron") != NULL ) { + if (Alarm == 0.5){Alarm=0.0;} + else Alarm=0.5; + } + if( strstr(webdata, "check=photo") != NULL ) { + alarmPhoto(count); + FILE *fp = fopen("/local/pict003.jpg", "w"); // Open "out.txt" on the local file system for writing + if (fp != NULL) { + pc.printf("File opens\n"); + } + fclose(fp); + } if( strstr(webdata, "POST") != NULL ) { // set update flag if POST request update=1; } @@ -130,8 +308,8 @@ void startserver() { gettime(); - gettemp(); - getbattery(); + //gettemp(); + //getbattery(); pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); strcpy(cmdbuff,"node.restart()\r\n"); SendCMD(); @@ -166,11 +344,14 @@ getreply(); wait(0.2); - //web page data - strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1>ESP8266 Mbed IoT Web Controller</h1>')\r\n"); + strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1>IoT Alarm System</h1>')\r\n"); SendCMD(); getreply(); wait(0.4); +// strcpy(cmdbuff,"conn:send('<body style=\"background-color:#FF0000;>')\r\n"); +// SendCMD(); +// getreply(); +// wait(0.4); strcpy(cmdbuff,"conn:send('Hit count: '..count..'')\r\n"); SendCMD(); getreply(); @@ -179,10 +360,15 @@ SendCMD(); getreply(); wait(0.4); - strcpy(cmdbuff,"conn:send('Analog 1: '..analog1..' V<br>Analog 2: '..analog2..' V<br><hr>')\r\n"); + //strcpy(cmdbuff,"conn:send('Analog 1: '..analog1..' V<br>Analog 2: '..analog2..' V<br><hr>')\r\n"); +// SendCMD(); +// getreply(); +// wait(0.3); + strcpy(cmdbuff,"conn:send('Temperature: '..tempC..'')\r\n"); SendCMD(); getreply(); wait(0.3); + strcpy(cmdbuff,"conn:send('<form method=\"POST\"')\r\n"); SendCMD(); getreply(); @@ -191,6 +377,13 @@ SendCMD(); getreply(); wait(0.3); + ///////////////////////////////////////////////////////////////////////////////////////////////////////// +// strcpy(cmdbuff, "conn:send('<p><input type=\"image\" src=\"/PICT002.jpg\" alt=\"Submit\"> blah')\r\n"); +// SendCMD(); +// getreply(); +// wait(0.3); + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led2v\"> flip LED2')\r\n"); SendCMD(); getreply(); @@ -203,6 +396,16 @@ SendCMD(); getreply(); wait(0.3); + + strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"speakeron\"> Alarm')\r\n"); + SendCMD(); + getreply(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"photo\"> Take Photo')\r\n"); + SendCMD(); + getreply(); + wait(0.3); + strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"send-refresh\"></form>')\r\n"); SendCMD(); getreply(); @@ -382,18 +585,76 @@ t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year set_time(mktime(&t)); // set RTC clock } + // Analog in example -void getbattery() +void getTemperature() { - AdcIn=Ain1.read(); - Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy - sprintf(Vcc,"%2.3f",Ht); + tempC=myTMP36; + //Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy + //tempC = 5.0; + + if (tempC > 30.0) { + //then alarm goes off (speaker) + //Message sent to webpage (maybe email or text) + + //Take input from webpage to turn it off + } + + //sprintf(Vcc,"%2.3f",tempC); } -// Temperature example -void gettemp() +void alarmPhoto(int i) { - - AdcIn=Ain2.read(); - Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy - sprintf(Temp,"%2.3f",Ht); -} \ No newline at end of file + if (camera.isReady()) { + char filename[32]; + sprintf(filename, "/local/pict%03d.jpg", i); + //string a = string(filename); + pc.printf("Picture: %s ", filename); + if (camera.takePicture(filename)) + { + while (camera.isProcessing()) + { + camera.processPicture(); + } + led1 = 1; //show successful picture was taken + wait(2.0); + led1 = 0; + } + else + { + pc.printf("take picture failed\n"); + led3 = 1; //show picture take failed + wait(2.0); + led3 = 0; + } + } + else + { + pc.printf("camera is not ready\n"); + led4 = 1; //show camera is not ready + wait(2.0); + led4 = 0; + } + led2 = 1; //show end of sequence + wait(2.0); + led2 = 0; + pc.printf("Photo taken\n"); + //return filename; +} + + + +// Analog in example +//void getbattery() +//{ +// AdcIn=Ain1.read(); +// Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy +// sprintf(Vcc,"%2.3f",Ht); +//} +//// Temperature example +//void gettemp() +//{ +// +// AdcIn=Ain2.read(); +// Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy +// sprintf(Temp,"%2.3f",Ht); +//} \ No newline at end of file
--- a/mbed.bld Fri Mar 18 19:10:19 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/8ed44a420e5c \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.lib Fri Apr 29 07:04:08 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/kbrahmbhatt6/code/IoT_Security/#2f388b030837
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xbee_lib.lib Fri Apr 29 07:04:08 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/tristanjph/code/xbee_lib/#6455a079bdb3