IoT Alarm System
Dependencies: ESP8266NodeMCUInterface JPEGCamera SDFileSystem IoT_Security xbee_lib
Fork of HUZZAHESP8266-web-control-LPC1768 by
main.cpp@6:bcbe1be26da5, 2016-04-29 (annotated)
- Committer:
- kbrahmbhatt6
- Date:
- Fri Apr 29 07:04:08 2016 +0000
- Revision:
- 6:bcbe1be26da5
- Parent:
- 5:bc0296a5ad8a
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
star297 | 0:e2a155f50119 | 1 | // ESP8266 Static page WEB server to control Mbed |
star297 | 0:e2a155f50119 | 2 | |
star297 | 0:e2a155f50119 | 3 | #include "mbed.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 4 | #include "JPEGCamera.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 5 | #include "xbee.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 6 | #include "ESP8266Interface.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 7 | #include "TCPSocketConnection.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 8 | #include "SDFileSystem.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 9 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 10 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board |
kbrahmbhatt6 | 6:bcbe1be26da5 | 11 | //#include "rtos.h" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 12 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 13 | //Print temperature from TMP36 analog temperature sensor |
kbrahmbhatt6 | 6:bcbe1be26da5 | 14 | /////////////////////////////////////////////////////////////////////////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 15 | //Setup a new class for TMP36 sensor |
kbrahmbhatt6 | 6:bcbe1be26da5 | 16 | class TMP36 |
kbrahmbhatt6 | 6:bcbe1be26da5 | 17 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 18 | public: |
kbrahmbhatt6 | 6:bcbe1be26da5 | 19 | TMP36(PinName pin); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 20 | TMP36(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 21 | operator float (); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 22 | float read(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 23 | private: |
kbrahmbhatt6 | 6:bcbe1be26da5 | 24 | //class sets up the AnalogIn pin |
kbrahmbhatt6 | 6:bcbe1be26da5 | 25 | AnalogIn _pin; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 26 | }; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 27 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 28 | TMP36::TMP36(PinName pin) : _pin(pin) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 29 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 30 | // _pin(pin) means pass pin to the AnalogIn constructor |
kbrahmbhatt6 | 6:bcbe1be26da5 | 31 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 32 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 33 | float TMP36::read() |
kbrahmbhatt6 | 6:bcbe1be26da5 | 34 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 35 | //convert sensor reading to temperature in degrees C |
kbrahmbhatt6 | 6:bcbe1be26da5 | 36 | return ((_pin.read()*3.3)-0.500)*100.0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 37 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 38 | //overload of float conversion (avoids needing to type .read() in equations) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 39 | TMP36::operator float () |
kbrahmbhatt6 | 6:bcbe1be26da5 | 40 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 41 | //convert sensor reading to temperature in degrees C |
kbrahmbhatt6 | 6:bcbe1be26da5 | 42 | return ((_pin.read()*3.3)-0.500)*100.0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 43 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 44 | /////////////////////////////////////////////////////////////////////////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 45 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 46 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 47 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 48 | |
star297 | 0:e2a155f50119 | 49 | |
star297 | 0:e2a155f50119 | 50 | Serial pc(USBTX, USBRX); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 51 | //Serial esp(p28, p27); // tx, rx |
kbrahmbhatt6 | 6:bcbe1be26da5 | 52 | LocalFileSystem local("local"); //save images on mbed |
star297 | 2:d4c6bc0f2dc4 | 53 | |
star297 | 0:e2a155f50119 | 54 | // Standard Mbed LED definitions |
ausdong | 5:bc0296a5ad8a | 55 | DigitalOut led1(LED1); |
ausdong | 5:bc0296a5ad8a | 56 | DigitalOut led2(LED2); |
ausdong | 5:bc0296a5ad8a | 57 | DigitalOut led3(LED3); |
ausdong | 5:bc0296a5ad8a | 58 | DigitalOut led4(LED4); |
star297 | 0:e2a155f50119 | 59 | |
ausdong | 5:bc0296a5ad8a | 60 | // some test values to show on web page |
4180_1 | 4:40dd020463ea | 61 | AnalogIn Ain1(p18); |
4180_1 | 4:40dd020463ea | 62 | AnalogIn Ain2(p19); |
star297 | 0:e2a155f50119 | 63 | |
ausdong | 5:bc0296a5ad8a | 64 | /* |
ausdong | 5:bc0296a5ad8a | 65 | char ssid[32] = "hsd"; // enter WiFi router ssid inside the quotes |
ausdong | 5:bc0296a5ad8a | 66 | char pwd [32] = "austin123"; // enter WiFi router password inside the quotes |
ausdong | 5:bc0296a5ad8a | 67 | */ |
4180_1 | 4:40dd020463ea | 68 | float temperature, AdcIn, Ht; |
star297 | 0:e2a155f50119 | 69 | float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage |
star297 | 0:e2a155f50119 | 70 | char Vcc[10]; |
star297 | 0:e2a155f50119 | 71 | char Temp[10]; |
ausdong | 5:bc0296a5ad8a | 72 | |
ausdong | 5:bc0296a5ad8a | 73 | // things for sending/receiving data over serial |
ausdong | 5:bc0296a5ad8a | 74 | volatile int tx_in=0; |
ausdong | 5:bc0296a5ad8a | 75 | volatile int tx_out=0; |
ausdong | 5:bc0296a5ad8a | 76 | volatile int rx_in=0; |
ausdong | 5:bc0296a5ad8a | 77 | volatile int rx_out=0; |
ausdong | 5:bc0296a5ad8a | 78 | const int buffer_size = 4095; |
ausdong | 5:bc0296a5ad8a | 79 | char tx_buffer[buffer_size+1]; |
ausdong | 5:bc0296a5ad8a | 80 | char rx_buffer[buffer_size+1]; |
ausdong | 5:bc0296a5ad8a | 81 | void Tx_interrupt(); |
ausdong | 5:bc0296a5ad8a | 82 | void Rx_interrupt(); |
ausdong | 5:bc0296a5ad8a | 83 | void send_line(); |
ausdong | 5:bc0296a5ad8a | 84 | void read_line(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 85 | void alarmPhoto(int); |
ausdong | 5:bc0296a5ad8a | 86 | |
ausdong | 5:bc0296a5ad8a | 87 | int DataRX; |
ausdong | 5:bc0296a5ad8a | 88 | int update; |
ausdong | 5:bc0296a5ad8a | 89 | int count; |
ausdong | 5:bc0296a5ad8a | 90 | char cmdbuff[1024]; |
ausdong | 5:bc0296a5ad8a | 91 | char replybuff[4096]; |
ausdong | 5:bc0296a5ad8a | 92 | char webdata[4096]; // This may need to be bigger depending on WEB browser used |
ausdong | 5:bc0296a5ad8a | 93 | char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added |
star297 | 0:e2a155f50119 | 94 | char timebuf[30]; |
ausdong | 5:bc0296a5ad8a | 95 | void SendCMD(),getreply(),ReadWebData(),startserver(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 96 | void gettime(),setRTC(),getTemperature(); |
ausdong | 5:bc0296a5ad8a | 97 | char rx_line[1024]; |
ausdong | 5:bc0296a5ad8a | 98 | int port =80; // set server port |
ausdong | 5:bc0296a5ad8a | 99 | int SERVtimeout =5; // set server timeout in seconds in case link breaks. |
ausdong | 5:bc0296a5ad8a | 100 | struct tm t; |
star297 | 1:71ed1afbf344 | 101 | // manual set RTC values |
4180_1 | 4:40dd020463ea | 102 | int minute =00; // 0-59 |
4180_1 | 4:40dd020463ea | 103 | int hour =12; // 2-23 |
4180_1 | 4:40dd020463ea | 104 | int dayofmonth =26; // 1-31 |
4180_1 | 4:40dd020463ea | 105 | int month =8; // 1-12 |
star297 | 1:71ed1afbf344 | 106 | int year =15; // last 2 digits |
star297 | 2:d4c6bc0f2dc4 | 107 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 108 | PwmOut Alarm(p21); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 109 | JPEGCamera camera(p13, p14); //Camera |
kbrahmbhatt6 | 6:bcbe1be26da5 | 110 | TMP36 myTMP36(p15); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 111 | DigitalOut P16(p16); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 112 | DigitalOut P17(p17); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 113 | DigitalOut P19(p19); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 114 | DigitalOut P20(p20); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 115 | float tempC; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 116 | xbee xbee2(p9,p10,p11); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 117 | char read_data[202]; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 118 | Serial esp(p28, p27); // tx, rx |
kbrahmbhatt6 | 6:bcbe1be26da5 | 119 | void Email(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 120 | //ESP8266Interface esp1(p28, p27, p26, 9600, 3000); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 121 | //EthernetInterface eth; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 122 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 123 | //////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 124 | //tempC = myTMP36; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 125 | ///printf(" T=%5.2F C \n\r", tempC);//for testing |
kbrahmbhatt6 | 6:bcbe1be26da5 | 126 | //if(tempC>45) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 127 | //add code |
kbrahmbhatt6 | 6:bcbe1be26da5 | 128 | //} |
kbrahmbhatt6 | 6:bcbe1be26da5 | 129 | /////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 130 | |
4180_1 | 4:40dd020463ea | 131 | int main() |
4180_1 | 4:40dd020463ea | 132 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 133 | camera.setPictureSize(JPEGCamera::SIZE320x240); |
ausdong | 5:bc0296a5ad8a | 134 | pc.baud(9600); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 135 | ////////////////////////////////xbee2.RecieveData(read_data,0); //ADD THIS BACK!!! |
kbrahmbhatt6 | 6:bcbe1be26da5 | 136 | // led3 = 1; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 137 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 138 | // ///////////Emailing the user |
kbrahmbhatt6 | 6:bcbe1be26da5 | 139 | // Email(); |
ausdong | 5:bc0296a5ad8a | 140 | esp.baud(9600); |
ausdong | 5:bc0296a5ad8a | 141 | led1=1,led2=0,led3=0, led4=0; |
ausdong | 5:bc0296a5ad8a | 142 | // Setup a serial interrupt function to receive data |
ausdong | 5:bc0296a5ad8a | 143 | esp.attach(&Rx_interrupt, Serial::RxIrq); |
ausdong | 5:bc0296a5ad8a | 144 | // Setup a serial interrupt function to transmit data |
ausdong | 5:bc0296a5ad8a | 145 | esp.attach(&Tx_interrupt, Serial::TxIrq); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 146 | Alarm.period(1.0/100); |
4180_1 | 4:40dd020463ea | 147 | if (time(NULL) < 1420070400) { |
4180_1 | 4:40dd020463ea | 148 | setRTC(); |
4180_1 | 4:40dd020463ea | 149 | } |
star297 | 0:e2a155f50119 | 150 | startserver(); |
ausdong | 5:bc0296a5ad8a | 151 | DataRX=0; |
ausdong | 5:bc0296a5ad8a | 152 | count=0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 153 | xbee2.RecieveData(read_data,0); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 154 | led3 = 1; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 155 | Alarm = 0.5; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 156 | //Take photo |
kbrahmbhatt6 | 6:bcbe1be26da5 | 157 | alarmPhoto(5); //will be saved as PICT005.jpg |
kbrahmbhatt6 | 6:bcbe1be26da5 | 158 | //FILE *fp = fopen("/local/pict005.jpg", "w"); // Open "out.txt" on the local file system for writing |
kbrahmbhatt6 | 6:bcbe1be26da5 | 159 | // if (fp != NULL) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 160 | // pc.printf("File opens\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 161 | // } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 162 | // mkdir("/sd/mydir", 0777); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 163 | // FILE *fp1 = fopen("/sd/mydir/sdtest.jpg", "w"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 164 | // //fprintf(fp1, fp); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 165 | // fclose(fp1); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 166 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 167 | // email the user |
kbrahmbhatt6 | 6:bcbe1be26da5 | 168 | // Can turn-off the alarm |
kbrahmbhatt6 | 6:bcbe1be26da5 | 169 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 170 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 171 | ///////////Emailing the user |
kbrahmbhatt6 | 6:bcbe1be26da5 | 172 | //Email(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 173 | // ESP8266Interface esp1(p28, p27, p26, 9600, 3000); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 174 | // esp1.init(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 175 | // esp1.connect("ssid", "password"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 176 | // printf("IP Address is %s\n", esp1.getIPAddress()); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 177 | // TCPSocketConnection sock; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 178 | // //delete esp1; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 179 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 180 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 181 | // sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 182 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 183 | // char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt |
kbrahmbhatt6 | 6:bcbe1be26da5 | 184 | // sock.send_all(http_cmd, sizeof(http_cmd)-1); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 185 | // char buffer[300]; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 186 | // int ret; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 187 | // while (true) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 188 | // ret = sock.receive(buffer, sizeof(buffer)-1); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 189 | // if (ret <= 0) break; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 190 | // buffer[ret] = '\0'; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 191 | // printf("Received %d chars from server:\n%s\n", ret, buffer); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 192 | // } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 193 | // sock.close(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 194 | // esp1.disconnect(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 195 | // ////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 196 | //if (time(NULL) < 1420070400) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 197 | // setRTC(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 198 | // } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 199 | // startserver(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 200 | //eth.init(); //Use DHCP |
kbrahmbhatt6 | 6:bcbe1be26da5 | 201 | //eth.connect(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 202 | //printf("IP Address is %s\n", eth.getIPAddress()); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 203 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 204 | //TCPSocketConnection sock; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 205 | //sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 206 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 207 | //char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt |
kbrahmbhatt6 | 6:bcbe1be26da5 | 208 | //sock.send_all(http_cmd, sizeof(http_cmd)-1); |
4180_1 | 4:40dd020463ea | 209 | while(1) { |
4180_1 | 4:40dd020463ea | 210 | if(DataRX==1) { |
star297 | 0:e2a155f50119 | 211 | ReadWebData(); |
ausdong | 5:bc0296a5ad8a | 212 | esp.attach(&Rx_interrupt, Serial::RxIrq); |
ausdong | 5:bc0296a5ad8a | 213 | } |
ausdong | 5:bc0296a5ad8a | 214 | if(update==1) // update time, hit count, and analog levels in the HUZZAH chip |
ausdong | 5:bc0296a5ad8a | 215 | { |
ausdong | 5:bc0296a5ad8a | 216 | // get new values |
ausdong | 5:bc0296a5ad8a | 217 | gettime(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 218 | //gettemp(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 219 | //getbattery(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 220 | getTemperature(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 221 | //if (tempC > 27) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 222 | // Alarm = 0.5; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 223 | // } |
ausdong | 5:bc0296a5ad8a | 224 | count++; |
ausdong | 5:bc0296a5ad8a | 225 | // send new values |
kbrahmbhatt6 | 6:bcbe1be26da5 | 226 | //sprintf(cmdbuff, "count,time,analog1,analog2=%d,\"%s\",\"%s\",\"%s\"\r\n",count,timebuf,Temp,Vcc); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 227 | sprintf(cmdbuff, "count,time,tempC=%d,\"%s\",\"%f\"\r\n",count,timebuf,tempC); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 228 | //esp1.send(cmdbuff, 1024); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 229 | //esp1.recv(replybuff, sizeof(replybuff)); |
ausdong | 5:bc0296a5ad8a | 230 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 231 | getreply(); |
ausdong | 5:bc0296a5ad8a | 232 | update=0; |
4180_1 | 4:40dd020463ea | 233 | } |
star297 | 0:e2a155f50119 | 234 | } |
4180_1 | 4:40dd020463ea | 235 | } |
star297 | 0:e2a155f50119 | 236 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 237 | void Email() { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 238 | /////////Emailing the user |
kbrahmbhatt6 | 6:bcbe1be26da5 | 239 | ESP8266Interface esp1(p28, p27, p26, 9600, 3000); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 240 | esp1.init(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 241 | esp1.connect("ssid", "password"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 242 | printf("IP Address is %s\n", esp1.getIPAddress()); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 243 | TCPSocketConnection sock; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 244 | //delete esp1; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 245 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 246 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 247 | sock.connect("blahblahmbed.comlu.com", 80); //http://blahblahmbed.comlu.com/ "mbed.org" |
kbrahmbhatt6 | 6:bcbe1be26da5 | 248 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 249 | char http_cmd[] = "GET http://blahblahmbed.comlu.com/index.php HTTP/1.0\n\n"; // /media/uploads/mbed_official/hello.txt |
kbrahmbhatt6 | 6:bcbe1be26da5 | 250 | sock.send_all(http_cmd, sizeof(http_cmd)-1); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 251 | char buffer[300]; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 252 | int ret; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 253 | while (true) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 254 | ret = sock.receive(buffer, sizeof(buffer)-1); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 255 | if (ret <= 0) break; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 256 | buffer[ret] = '\0'; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 257 | printf("Received %d chars from server:\n%s\n", ret, buffer); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 258 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 259 | sock.close(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 260 | esp1.disconnect(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 261 | ////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 262 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 263 | |
4180_1 | 4:40dd020463ea | 264 | // Reads and processes GET and POST web data |
star297 | 0:e2a155f50119 | 265 | void ReadWebData() |
4180_1 | 4:40dd020463ea | 266 | { |
4180_1 | 4:40dd020463ea | 267 | wait_ms(200); |
ausdong | 5:bc0296a5ad8a | 268 | esp.attach(NULL,Serial::RxIrq); |
4180_1 | 4:40dd020463ea | 269 | DataRX=0; |
4180_1 | 4:40dd020463ea | 270 | memset(webdata, '\0', sizeof(webdata)); |
ausdong | 5:bc0296a5ad8a | 271 | strcpy(webdata, rx_buffer); |
ausdong | 5:bc0296a5ad8a | 272 | memset(rx_buffer, '\0', sizeof(rx_buffer)); |
ausdong | 5:bc0296a5ad8a | 273 | rx_in = 0; |
ausdong | 5:bc0296a5ad8a | 274 | rx_out = 0; |
ausdong | 5:bc0296a5ad8a | 275 | // check web data for form information |
ausdong | 5:bc0296a5ad8a | 276 | if( strstr(webdata, "check=led1v") != NULL ) { |
ausdong | 5:bc0296a5ad8a | 277 | led1=!led1; |
ausdong | 5:bc0296a5ad8a | 278 | } |
ausdong | 5:bc0296a5ad8a | 279 | if( strstr(webdata, "check=led2v") != NULL ) { |
ausdong | 5:bc0296a5ad8a | 280 | led2=!led2; |
ausdong | 5:bc0296a5ad8a | 281 | } |
ausdong | 5:bc0296a5ad8a | 282 | if( strstr(webdata, "check=led3v") != NULL ) { |
ausdong | 5:bc0296a5ad8a | 283 | led3=!led3; |
ausdong | 5:bc0296a5ad8a | 284 | } |
ausdong | 5:bc0296a5ad8a | 285 | if( strstr(webdata, "check=led4v") != NULL ) { |
ausdong | 5:bc0296a5ad8a | 286 | led4=!led4; |
ausdong | 5:bc0296a5ad8a | 287 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 288 | if( strstr(webdata, "check=speakeron") != NULL ) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 289 | if (Alarm == 0.5){Alarm=0.0;} |
kbrahmbhatt6 | 6:bcbe1be26da5 | 290 | else Alarm=0.5; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 291 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 292 | if( strstr(webdata, "check=photo") != NULL ) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 293 | alarmPhoto(count); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 294 | FILE *fp = fopen("/local/pict003.jpg", "w"); // Open "out.txt" on the local file system for writing |
kbrahmbhatt6 | 6:bcbe1be26da5 | 295 | if (fp != NULL) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 296 | pc.printf("File opens\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 297 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 298 | fclose(fp); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 299 | } |
ausdong | 5:bc0296a5ad8a | 300 | if( strstr(webdata, "POST") != NULL ) { // set update flag if POST request |
ausdong | 5:bc0296a5ad8a | 301 | update=1; |
ausdong | 5:bc0296a5ad8a | 302 | } |
ausdong | 5:bc0296a5ad8a | 303 | if( strstr(webdata, "GET") != NULL && strstr(webdata, "favicon") == NULL ) { // set update flag for GET request but do not want to update for favicon requests |
ausdong | 5:bc0296a5ad8a | 304 | update=1; |
4180_1 | 4:40dd020463ea | 305 | } |
star297 | 0:e2a155f50119 | 306 | } |
ausdong | 5:bc0296a5ad8a | 307 | // Starts webserver |
star297 | 0:e2a155f50119 | 308 | void startserver() |
star297 | 0:e2a155f50119 | 309 | { |
ausdong | 5:bc0296a5ad8a | 310 | gettime(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 311 | //gettemp(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 312 | //getbattery(); |
4180_1 | 4:40dd020463ea | 313 | pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); |
ausdong | 5:bc0296a5ad8a | 314 | strcpy(cmdbuff,"node.restart()\r\n"); |
ausdong | 5:bc0296a5ad8a | 315 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 316 | wait(2); |
ausdong | 5:bc0296a5ad8a | 317 | getreply(); |
ausdong | 5:bc0296a5ad8a | 318 | |
ausdong | 5:bc0296a5ad8a | 319 | pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> "); |
ausdong | 5:bc0296a5ad8a | 320 | |
ausdong | 5:bc0296a5ad8a | 321 | // initial values |
ausdong | 5:bc0296a5ad8a | 322 | sprintf(cmdbuff, "count,time,analog1,analog2=0,\"%s\",\"%s\",\"%s\"\r\n",timebuf,Temp,Vcc); |
ausdong | 5:bc0296a5ad8a | 323 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 324 | getreply(); |
ausdong | 5:bc0296a5ad8a | 325 | wait(0.5); |
ausdong | 5:bc0296a5ad8a | 326 | |
ausdong | 5:bc0296a5ad8a | 327 | //create server |
ausdong | 5:bc0296a5ad8a | 328 | sprintf(cmdbuff, "srv=net.createServer(net.TCP,%d)\r\n",SERVtimeout); |
ausdong | 5:bc0296a5ad8a | 329 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 330 | getreply(); |
ausdong | 5:bc0296a5ad8a | 331 | wait(0.5); |
ausdong | 5:bc0296a5ad8a | 332 | strcpy(cmdbuff,"srv:listen(80,function(conn)\r\n"); |
star297 | 0:e2a155f50119 | 333 | SendCMD(); |
star297 | 1:71ed1afbf344 | 334 | getreply(); |
ausdong | 5:bc0296a5ad8a | 335 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 336 | strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n"); |
ausdong | 5:bc0296a5ad8a | 337 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 338 | getreply(); |
ausdong | 5:bc0296a5ad8a | 339 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 340 | |
ausdong | 5:bc0296a5ad8a | 341 | //print data to mbed |
ausdong | 5:bc0296a5ad8a | 342 | strcpy(cmdbuff,"print(payload)\r\n"); |
ausdong | 5:bc0296a5ad8a | 343 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 344 | getreply(); |
ausdong | 5:bc0296a5ad8a | 345 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 346 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 347 | strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1>IoT Alarm System</h1>')\r\n"); |
ausdong | 5:bc0296a5ad8a | 348 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 349 | getreply(); |
ausdong | 5:bc0296a5ad8a | 350 | wait(0.4); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 351 | // strcpy(cmdbuff,"conn:send('<body style=\"background-color:#FF0000;>')\r\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 352 | // SendCMD(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 353 | // getreply(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 354 | // wait(0.4); |
ausdong | 5:bc0296a5ad8a | 355 | strcpy(cmdbuff,"conn:send('Hit count: '..count..'')\r\n"); |
star297 | 1:71ed1afbf344 | 356 | SendCMD(); |
star297 | 2:d4c6bc0f2dc4 | 357 | getreply(); |
ausdong | 5:bc0296a5ad8a | 358 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 359 | strcpy(cmdbuff,"conn:send('<br>Last hit (based on mbed RTC time): '..time..'<br><hr>')\r\n"); |
ausdong | 5:bc0296a5ad8a | 360 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 361 | getreply(); |
ausdong | 5:bc0296a5ad8a | 362 | wait(0.4); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 363 | //strcpy(cmdbuff,"conn:send('Analog 1: '..analog1..' V<br>Analog 2: '..analog2..' V<br><hr>')\r\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 364 | // SendCMD(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 365 | // getreply(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 366 | // wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 367 | strcpy(cmdbuff,"conn:send('Temperature: '..tempC..'')\r\n"); |
star297 | 1:71ed1afbf344 | 368 | SendCMD(); |
star297 | 3:f7febfa77784 | 369 | getreply(); |
ausdong | 5:bc0296a5ad8a | 370 | wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 371 | |
ausdong | 5:bc0296a5ad8a | 372 | strcpy(cmdbuff,"conn:send('<form method=\"POST\"')\r\n"); |
ausdong | 5:bc0296a5ad8a | 373 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 374 | getreply(); |
ausdong | 5:bc0296a5ad8a | 375 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 376 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led1v\"> flip LED1')\r\n"); |
ausdong | 5:bc0296a5ad8a | 377 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 378 | getreply(); |
ausdong | 5:bc0296a5ad8a | 379 | wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 380 | ///////////////////////////////////////////////////////////////////////////////////////////////////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 381 | // strcpy(cmdbuff, "conn:send('<p><input type=\"image\" src=\"/PICT002.jpg\" alt=\"Submit\"> blah')\r\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 382 | // SendCMD(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 383 | // getreply(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 384 | // wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 385 | ///////////////////////////////////////////////////////////////////////////////////////////////////////// |
kbrahmbhatt6 | 6:bcbe1be26da5 | 386 | |
ausdong | 5:bc0296a5ad8a | 387 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led2v\"> flip LED2')\r\n"); |
ausdong | 5:bc0296a5ad8a | 388 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 389 | getreply(); |
ausdong | 5:bc0296a5ad8a | 390 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 391 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led3v\"> flip LED3')\r\n"); |
star297 | 3:f7febfa77784 | 392 | SendCMD(); |
star297 | 2:d4c6bc0f2dc4 | 393 | getreply(); |
ausdong | 5:bc0296a5ad8a | 394 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 395 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led4v\"> flip LED4')\r\n"); |
ausdong | 5:bc0296a5ad8a | 396 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 397 | getreply(); |
ausdong | 5:bc0296a5ad8a | 398 | wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 399 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 400 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"speakeron\"> Alarm')\r\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 401 | SendCMD(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 402 | getreply(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 403 | wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 404 | strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"photo\"> Take Photo')\r\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 405 | SendCMD(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 406 | getreply(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 407 | wait(0.3); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 408 | |
ausdong | 5:bc0296a5ad8a | 409 | strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"send-refresh\"></form>')\r\n"); |
ausdong | 5:bc0296a5ad8a | 410 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 411 | getreply(); |
ausdong | 5:bc0296a5ad8a | 412 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 413 | strcpy(cmdbuff, "conn:send('<p><h2>How to use:</h2><ul><li>Select a checkbox to flip on/off</li><li>Click Send-Refresh to send data and refresh values</li></ul></body></html>')\r\n"); |
ausdong | 5:bc0296a5ad8a | 414 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 415 | getreply(); |
ausdong | 5:bc0296a5ad8a | 416 | wait(0.5); |
ausdong | 5:bc0296a5ad8a | 417 | // end web page data |
ausdong | 5:bc0296a5ad8a | 418 | strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection |
ausdong | 5:bc0296a5ad8a | 419 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 420 | getreply(); |
ausdong | 5:bc0296a5ad8a | 421 | wait(0.3); |
ausdong | 5:bc0296a5ad8a | 422 | strcpy(cmdbuff, "end)\r\n"); |
ausdong | 5:bc0296a5ad8a | 423 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 424 | getreply(); |
ausdong | 5:bc0296a5ad8a | 425 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 426 | strcpy(cmdbuff, "end)\r\n"); |
ausdong | 5:bc0296a5ad8a | 427 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 428 | getreply(); |
ausdong | 5:bc0296a5ad8a | 429 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 430 | |
ausdong | 5:bc0296a5ad8a | 431 | strcpy(cmdbuff, "tmr.alarm(0, 1000, 1, function()\r\n"); |
ausdong | 5:bc0296a5ad8a | 432 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 433 | getreply(); |
ausdong | 5:bc0296a5ad8a | 434 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 435 | strcpy(cmdbuff, "if wifi.sta.getip() == nil then\r\n"); |
ausdong | 5:bc0296a5ad8a | 436 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 437 | getreply(); |
ausdong | 5:bc0296a5ad8a | 438 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 439 | strcpy(cmdbuff, "print(\"Connecting to AP...\\n\")\r\n"); |
ausdong | 5:bc0296a5ad8a | 440 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 441 | getreply(); |
ausdong | 5:bc0296a5ad8a | 442 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 443 | strcpy(cmdbuff, "else\r\n"); |
ausdong | 5:bc0296a5ad8a | 444 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 445 | getreply(); |
ausdong | 5:bc0296a5ad8a | 446 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 447 | strcpy(cmdbuff, "ip, nm, gw=wifi.sta.getip()\r\n"); |
ausdong | 5:bc0296a5ad8a | 448 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 449 | getreply(); |
ausdong | 5:bc0296a5ad8a | 450 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 451 | strcpy(cmdbuff,"print(\"IP Address: \",ip)\r\n"); |
ausdong | 5:bc0296a5ad8a | 452 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 453 | getreply(); |
ausdong | 5:bc0296a5ad8a | 454 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 455 | strcpy(cmdbuff,"tmr.stop(0)\r\n"); |
ausdong | 5:bc0296a5ad8a | 456 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 457 | getreply(); |
ausdong | 5:bc0296a5ad8a | 458 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 459 | strcpy(cmdbuff,"end\r\n"); |
ausdong | 5:bc0296a5ad8a | 460 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 461 | getreply(); |
ausdong | 5:bc0296a5ad8a | 462 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 463 | strcpy(cmdbuff,"end)\r\n"); |
ausdong | 5:bc0296a5ad8a | 464 | SendCMD(); |
ausdong | 5:bc0296a5ad8a | 465 | getreply(); |
ausdong | 5:bc0296a5ad8a | 466 | wait(0.2); |
ausdong | 5:bc0296a5ad8a | 467 | |
ausdong | 5:bc0296a5ad8a | 468 | pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n"); |
4180_1 | 4:40dd020463ea | 469 | } |
ausdong | 5:bc0296a5ad8a | 470 | |
ausdong | 5:bc0296a5ad8a | 471 | |
star297 | 0:e2a155f50119 | 472 | // ESP Command data send |
star297 | 0:e2a155f50119 | 473 | void SendCMD() |
star297 | 0:e2a155f50119 | 474 | { |
ausdong | 5:bc0296a5ad8a | 475 | int i; |
ausdong | 5:bc0296a5ad8a | 476 | char temp_char; |
ausdong | 5:bc0296a5ad8a | 477 | bool empty; |
ausdong | 5:bc0296a5ad8a | 478 | i = 0; |
ausdong | 5:bc0296a5ad8a | 479 | // Start Critical Section - don't interrupt while changing global buffer variables |
ausdong | 5:bc0296a5ad8a | 480 | NVIC_DisableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 481 | empty = (tx_in == tx_out); |
ausdong | 5:bc0296a5ad8a | 482 | while ((i==0) || (cmdbuff[i-1] != '\n')) { |
ausdong | 5:bc0296a5ad8a | 483 | // Wait if buffer full |
ausdong | 5:bc0296a5ad8a | 484 | if (((tx_in + 1) % buffer_size) == tx_out) { |
ausdong | 5:bc0296a5ad8a | 485 | // End Critical Section - need to let interrupt routine empty buffer by sending |
ausdong | 5:bc0296a5ad8a | 486 | NVIC_EnableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 487 | while (((tx_in + 1) % buffer_size) == tx_out) { |
ausdong | 5:bc0296a5ad8a | 488 | } |
ausdong | 5:bc0296a5ad8a | 489 | // Start Critical Section - don't interrupt while changing global buffer variables |
ausdong | 5:bc0296a5ad8a | 490 | NVIC_DisableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 491 | } |
ausdong | 5:bc0296a5ad8a | 492 | tx_buffer[tx_in] = cmdbuff[i]; |
ausdong | 5:bc0296a5ad8a | 493 | i++; |
ausdong | 5:bc0296a5ad8a | 494 | tx_in = (tx_in + 1) % buffer_size; |
ausdong | 5:bc0296a5ad8a | 495 | } |
ausdong | 5:bc0296a5ad8a | 496 | if (esp.writeable() && (empty)) { |
ausdong | 5:bc0296a5ad8a | 497 | temp_char = tx_buffer[tx_out]; |
ausdong | 5:bc0296a5ad8a | 498 | tx_out = (tx_out + 1) % buffer_size; |
ausdong | 5:bc0296a5ad8a | 499 | // Send first character to start tx interrupts, if stopped |
ausdong | 5:bc0296a5ad8a | 500 | esp.putc(temp_char); |
ausdong | 5:bc0296a5ad8a | 501 | } |
ausdong | 5:bc0296a5ad8a | 502 | // End Critical Section |
ausdong | 5:bc0296a5ad8a | 503 | NVIC_EnableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 504 | return; |
4180_1 | 4:40dd020463ea | 505 | } |
ausdong | 5:bc0296a5ad8a | 506 | |
4180_1 | 4:40dd020463ea | 507 | // Get Command and ESP status replies |
star297 | 0:e2a155f50119 | 508 | void getreply() |
4180_1 | 4:40dd020463ea | 509 | { |
ausdong | 5:bc0296a5ad8a | 510 | read_line(); |
ausdong | 5:bc0296a5ad8a | 511 | sscanf(rx_line,replybuff); |
ausdong | 5:bc0296a5ad8a | 512 | } |
ausdong | 5:bc0296a5ad8a | 513 | |
ausdong | 5:bc0296a5ad8a | 514 | // Read a line from the large rx buffer from rx interrupt routine |
ausdong | 5:bc0296a5ad8a | 515 | void read_line() { |
ausdong | 5:bc0296a5ad8a | 516 | int i; |
ausdong | 5:bc0296a5ad8a | 517 | i = 0; |
ausdong | 5:bc0296a5ad8a | 518 | // Start Critical Section - don't interrupt while changing global buffer variables |
ausdong | 5:bc0296a5ad8a | 519 | NVIC_DisableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 520 | // Loop reading rx buffer characters until end of line character |
ausdong | 5:bc0296a5ad8a | 521 | while ((i==0) || (rx_line[i-1] != '\r')) { |
ausdong | 5:bc0296a5ad8a | 522 | // Wait if buffer empty |
ausdong | 5:bc0296a5ad8a | 523 | if (rx_in == rx_out) { |
ausdong | 5:bc0296a5ad8a | 524 | // End Critical Section - need to allow rx interrupt to get new characters for buffer |
ausdong | 5:bc0296a5ad8a | 525 | NVIC_EnableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 526 | while (rx_in == rx_out) { |
ausdong | 5:bc0296a5ad8a | 527 | } |
ausdong | 5:bc0296a5ad8a | 528 | // Start Critical Section - don't interrupt while changing global buffer variables |
ausdong | 5:bc0296a5ad8a | 529 | NVIC_DisableIRQ(UART1_IRQn); |
star297 | 2:d4c6bc0f2dc4 | 530 | } |
ausdong | 5:bc0296a5ad8a | 531 | rx_line[i] = rx_buffer[rx_out]; |
ausdong | 5:bc0296a5ad8a | 532 | i++; |
ausdong | 5:bc0296a5ad8a | 533 | rx_out = (rx_out + 1) % buffer_size; |
4180_1 | 4:40dd020463ea | 534 | } |
ausdong | 5:bc0296a5ad8a | 535 | // End Critical Section |
ausdong | 5:bc0296a5ad8a | 536 | NVIC_EnableIRQ(UART1_IRQn); |
ausdong | 5:bc0296a5ad8a | 537 | rx_line[i-1] = 0; |
ausdong | 5:bc0296a5ad8a | 538 | return; |
ausdong | 5:bc0296a5ad8a | 539 | } |
ausdong | 5:bc0296a5ad8a | 540 | |
ausdong | 5:bc0296a5ad8a | 541 | |
ausdong | 5:bc0296a5ad8a | 542 | // Interupt Routine to read in data from serial port |
ausdong | 5:bc0296a5ad8a | 543 | void Rx_interrupt() { |
ausdong | 5:bc0296a5ad8a | 544 | DataRX=1; |
ausdong | 5:bc0296a5ad8a | 545 | //led3=1; |
ausdong | 5:bc0296a5ad8a | 546 | // Loop just in case more than one character is in UART's receive FIFO buffer |
ausdong | 5:bc0296a5ad8a | 547 | // Stop if buffer full |
ausdong | 5:bc0296a5ad8a | 548 | while ((esp.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) { |
ausdong | 5:bc0296a5ad8a | 549 | rx_buffer[rx_in] = esp.getc(); |
ausdong | 5:bc0296a5ad8a | 550 | // Uncomment to Echo to USB serial to watch data flow |
ausdong | 5:bc0296a5ad8a | 551 | pc.putc(rx_buffer[rx_in]); |
ausdong | 5:bc0296a5ad8a | 552 | rx_in = (rx_in + 1) % buffer_size; |
ausdong | 5:bc0296a5ad8a | 553 | } |
ausdong | 5:bc0296a5ad8a | 554 | //led3=0; |
ausdong | 5:bc0296a5ad8a | 555 | return; |
ausdong | 5:bc0296a5ad8a | 556 | } |
ausdong | 5:bc0296a5ad8a | 557 | |
ausdong | 5:bc0296a5ad8a | 558 | |
ausdong | 5:bc0296a5ad8a | 559 | // Interupt Routine to write out data to serial port |
ausdong | 5:bc0296a5ad8a | 560 | void Tx_interrupt() { |
ausdong | 5:bc0296a5ad8a | 561 | //led2=1; |
ausdong | 5:bc0296a5ad8a | 562 | // Loop to fill more than one character in UART's transmit FIFO buffer |
ausdong | 5:bc0296a5ad8a | 563 | // Stop if buffer empty |
ausdong | 5:bc0296a5ad8a | 564 | while ((esp.writeable()) && (tx_in != tx_out)) { |
ausdong | 5:bc0296a5ad8a | 565 | esp.putc(tx_buffer[tx_out]); |
ausdong | 5:bc0296a5ad8a | 566 | tx_out = (tx_out + 1) % buffer_size; |
ausdong | 5:bc0296a5ad8a | 567 | } |
ausdong | 5:bc0296a5ad8a | 568 | //led2=0; |
ausdong | 5:bc0296a5ad8a | 569 | return; |
ausdong | 5:bc0296a5ad8a | 570 | } |
ausdong | 5:bc0296a5ad8a | 571 | |
ausdong | 5:bc0296a5ad8a | 572 | void gettime() |
ausdong | 5:bc0296a5ad8a | 573 | { |
ausdong | 5:bc0296a5ad8a | 574 | time_t seconds = time(NULL); |
ausdong | 5:bc0296a5ad8a | 575 | strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds)); |
ausdong | 5:bc0296a5ad8a | 576 | } |
ausdong | 5:bc0296a5ad8a | 577 | |
ausdong | 5:bc0296a5ad8a | 578 | void setRTC() |
ausdong | 5:bc0296a5ad8a | 579 | { |
ausdong | 5:bc0296a5ad8a | 580 | t.tm_sec = (0); // 0-59 |
ausdong | 5:bc0296a5ad8a | 581 | t.tm_min = (minute); // 0-59 |
ausdong | 5:bc0296a5ad8a | 582 | t.tm_hour = (hour); // 0-23 |
ausdong | 5:bc0296a5ad8a | 583 | t.tm_mday = (dayofmonth); // 1-31 |
ausdong | 5:bc0296a5ad8a | 584 | t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format |
ausdong | 5:bc0296a5ad8a | 585 | t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year |
ausdong | 5:bc0296a5ad8a | 586 | set_time(mktime(&t)); // set RTC clock |
star297 | 0:e2a155f50119 | 587 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 588 | |
star297 | 0:e2a155f50119 | 589 | // Analog in example |
kbrahmbhatt6 | 6:bcbe1be26da5 | 590 | void getTemperature() |
star297 | 0:e2a155f50119 | 591 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 592 | tempC=myTMP36; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 593 | //Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy |
kbrahmbhatt6 | 6:bcbe1be26da5 | 594 | //tempC = 5.0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 595 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 596 | if (tempC > 30.0) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 597 | //then alarm goes off (speaker) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 598 | //Message sent to webpage (maybe email or text) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 599 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 600 | //Take input from webpage to turn it off |
kbrahmbhatt6 | 6:bcbe1be26da5 | 601 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 602 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 603 | //sprintf(Vcc,"%2.3f",tempC); |
star297 | 0:e2a155f50119 | 604 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 605 | void alarmPhoto(int i) |
4180_1 | 4:40dd020463ea | 606 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 607 | if (camera.isReady()) { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 608 | char filename[32]; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 609 | sprintf(filename, "/local/pict%03d.jpg", i); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 610 | //string a = string(filename); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 611 | pc.printf("Picture: %s ", filename); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 612 | if (camera.takePicture(filename)) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 613 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 614 | while (camera.isProcessing()) |
kbrahmbhatt6 | 6:bcbe1be26da5 | 615 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 616 | camera.processPicture(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 617 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 618 | led1 = 1; //show successful picture was taken |
kbrahmbhatt6 | 6:bcbe1be26da5 | 619 | wait(2.0); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 620 | led1 = 0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 621 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 622 | else |
kbrahmbhatt6 | 6:bcbe1be26da5 | 623 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 624 | pc.printf("take picture failed\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 625 | led3 = 1; //show picture take failed |
kbrahmbhatt6 | 6:bcbe1be26da5 | 626 | wait(2.0); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 627 | led3 = 0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 628 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 629 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 630 | else |
kbrahmbhatt6 | 6:bcbe1be26da5 | 631 | { |
kbrahmbhatt6 | 6:bcbe1be26da5 | 632 | pc.printf("camera is not ready\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 633 | led4 = 1; //show camera is not ready |
kbrahmbhatt6 | 6:bcbe1be26da5 | 634 | wait(2.0); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 635 | led4 = 0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 636 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 637 | led2 = 1; //show end of sequence |
kbrahmbhatt6 | 6:bcbe1be26da5 | 638 | wait(2.0); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 639 | led2 = 0; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 640 | pc.printf("Photo taken\n"); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 641 | //return filename; |
kbrahmbhatt6 | 6:bcbe1be26da5 | 642 | } |
kbrahmbhatt6 | 6:bcbe1be26da5 | 643 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 644 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 645 | |
kbrahmbhatt6 | 6:bcbe1be26da5 | 646 | // Analog in example |
kbrahmbhatt6 | 6:bcbe1be26da5 | 647 | //void getbattery() |
kbrahmbhatt6 | 6:bcbe1be26da5 | 648 | //{ |
kbrahmbhatt6 | 6:bcbe1be26da5 | 649 | // AdcIn=Ain1.read(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 650 | // Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy |
kbrahmbhatt6 | 6:bcbe1be26da5 | 651 | // sprintf(Vcc,"%2.3f",Ht); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 652 | //} |
kbrahmbhatt6 | 6:bcbe1be26da5 | 653 | //// Temperature example |
kbrahmbhatt6 | 6:bcbe1be26da5 | 654 | //void gettemp() |
kbrahmbhatt6 | 6:bcbe1be26da5 | 655 | //{ |
kbrahmbhatt6 | 6:bcbe1be26da5 | 656 | // |
kbrahmbhatt6 | 6:bcbe1be26da5 | 657 | // AdcIn=Ain2.read(); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 658 | // Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy |
kbrahmbhatt6 | 6:bcbe1be26da5 | 659 | // sprintf(Temp,"%2.3f",Ht); |
kbrahmbhatt6 | 6:bcbe1be26da5 | 660 | //} |