Final Edit
Dependencies: 4DGL-uLCD-SE LSM9DS1_Library_cal SDFileSystem mbed wave_player
Fork of 4180Lab_4 by
Webpage.cpp@3:6714b95437b0, 2016-11-02 (annotated)
- Committer:
- Priunsh_N
- Date:
- Wed Nov 02 21:50:44 2016 +0000
- Revision:
- 3:6714b95437b0
- Parent:
- 2:c7779da25bdb
Final Edit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Priunsh_N | 1:bbd83a3a8372 | 1 | #include "Webpage.h" |
Priunsh_N | 2:c7779da25bdb | 2 | #include "mbed.h" |
Priunsh_N | 2:c7779da25bdb | 3 | |
Priunsh_N | 2:c7779da25bdb | 4 | DigitalOut led1(LED1); |
Priunsh_N | 2:c7779da25bdb | 5 | DigitalOut led2(LED2); |
Priunsh_N | 2:c7779da25bdb | 6 | DigitalOut led3(LED3); |
Priunsh_N | 2:c7779da25bdb | 7 | DigitalOut led4(LED4); |
Priunsh_N | 2:c7779da25bdb | 8 | |
Priunsh_N | 2:c7779da25bdb | 9 | Serial _pc(USBTX, USBRX); |
Priunsh_N | 2:c7779da25bdb | 10 | // some test values to show on web page |
Priunsh_N | 2:c7779da25bdb | 11 | AnalogIn Ain1(p18); |
Priunsh_N | 2:c7779da25bdb | 12 | AnalogIn Ain2(p19); |
Priunsh_N | 2:c7779da25bdb | 13 | |
Priunsh_N | 2:c7779da25bdb | 14 | char ssid[32] = "GTother"; // enter WiFi router ssid inside the quotes |
Priunsh_N | 2:c7779da25bdb | 15 | char pwd [32] = "GeorgeP@1927"; // enter WiFi router password inside the quotes |
Priunsh_N | 2:c7779da25bdb | 16 | float temperature, AdcIn, Ht; |
Priunsh_N | 2:c7779da25bdb | 17 | float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage |
Priunsh_N | 2:c7779da25bdb | 18 | char Vcc[10]; |
Priunsh_N | 2:c7779da25bdb | 19 | char Temp[10]; |
Priunsh_N | 2:c7779da25bdb | 20 | // things for sending/receiving data over serial |
Priunsh_N | 2:c7779da25bdb | 21 | volatile int tx_in=0; |
Priunsh_N | 2:c7779da25bdb | 22 | volatile int tx_out=0; |
Priunsh_N | 2:c7779da25bdb | 23 | volatile int rx_in=0; |
Priunsh_N | 2:c7779da25bdb | 24 | volatile int rx_out=0; |
Priunsh_N | 2:c7779da25bdb | 25 | const int buffer_size = 4095; |
Priunsh_N | 2:c7779da25bdb | 26 | char tx_buffer[buffer_size+1]; |
Priunsh_N | 2:c7779da25bdb | 27 | char rx_buffer[buffer_size+1]; |
Priunsh_N | 2:c7779da25bdb | 28 | |
Priunsh_N | 2:c7779da25bdb | 29 | bool playSong = false; |
Priunsh_N | 2:c7779da25bdb | 30 | |
Priunsh_N | 2:c7779da25bdb | 31 | int DataRX; |
Priunsh_N | 2:c7779da25bdb | 32 | int updateFlag; |
Priunsh_N | 2:c7779da25bdb | 33 | int count = 0; |
Priunsh_N | 2:c7779da25bdb | 34 | int activity = 0; |
Priunsh_N | 2:c7779da25bdb | 35 | char cmdbuff[1024]; |
Priunsh_N | 2:c7779da25bdb | 36 | char replybuff[4096]; |
Priunsh_N | 2:c7779da25bdb | 37 | char webdata[4096]; // This may need to be bigger depending on WEB browser used |
Priunsh_N | 2:c7779da25bdb | 38 | char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added |
Priunsh_N | 2:c7779da25bdb | 39 | char timebuf[30]; |
Priunsh_N | 2:c7779da25bdb | 40 | void SendCMD(),getreply(),ReadWebData(),startserver(); |
Priunsh_N | 2:c7779da25bdb | 41 | void gettime(),setRTC(),gettemp(),getbattery(); |
Priunsh_N | 2:c7779da25bdb | 42 | char rx_line[1024]; |
Priunsh_N | 2:c7779da25bdb | 43 | int port =80; // set server port |
Priunsh_N | 2:c7779da25bdb | 44 | int SERVtimeout =5; // set server timeout in seconds in case link breaks. |
Priunsh_N | 2:c7779da25bdb | 45 | struct tm t; |
Priunsh_N | 2:c7779da25bdb | 46 | // manual set RTC values |
Priunsh_N | 2:c7779da25bdb | 47 | int minute =00; // 0-59 |
Priunsh_N | 2:c7779da25bdb | 48 | int hour =12; // 2-23 |
Priunsh_N | 2:c7779da25bdb | 49 | int dayofmonth =26; // 1-31 |
Priunsh_N | 2:c7779da25bdb | 50 | int month =8; // 1-12 |
Priunsh_N | 2:c7779da25bdb | 51 | int year =15; // last 2 digits |
Priunsh_N | 2:c7779da25bdb | 52 | |
Priunsh_N | 2:c7779da25bdb | 53 | |
Priunsh_N | 2:c7779da25bdb | 54 | Webpage::Webpage(PinName tx, PinName rx) |
Priunsh_N | 2:c7779da25bdb | 55 | : esp(tx, rx) {} |
Priunsh_N | 2:c7779da25bdb | 56 | |
Priunsh_N | 2:c7779da25bdb | 57 | bool Webpage::getPlay() { |
Priunsh_N | 2:c7779da25bdb | 58 | return playSong; |
Priunsh_N | 2:c7779da25bdb | 59 | } |
Priunsh_N | 1:bbd83a3a8372 | 60 | |
Priunsh_N | 2:c7779da25bdb | 61 | void Webpage::updateOutput(int activitylvl) { |
Priunsh_N | 2:c7779da25bdb | 62 | gettime(); |
Priunsh_N | 2:c7779da25bdb | 63 | gettemp(); |
Priunsh_N | 2:c7779da25bdb | 64 | getbattery(); |
Priunsh_N | 2:c7779da25bdb | 65 | count++; |
Priunsh_N | 2:c7779da25bdb | 66 | activity = activitylvl; |
Priunsh_N | 2:c7779da25bdb | 67 | // send new values |
Priunsh_N | 2:c7779da25bdb | 68 | sprintf(cmdbuff, "count,activity,time,analog1,analog2=%d,%d,\"%s\",\"%s\",\"%s\"\r\n",count, activity, timebuf,Temp,Vcc); |
Priunsh_N | 2:c7779da25bdb | 69 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 70 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 71 | updateFlag = 0; |
Priunsh_N | 2:c7779da25bdb | 72 | } |
Priunsh_N | 2:c7779da25bdb | 73 | |
Priunsh_N | 2:c7779da25bdb | 74 | void Webpage::update() { |
Priunsh_N | 2:c7779da25bdb | 75 | if(DataRX==1) { |
Priunsh_N | 2:c7779da25bdb | 76 | ReadWebData(); |
Priunsh_N | 2:c7779da25bdb | 77 | esp.attach(this, &Webpage::Rx_interrupt, Serial::RxIrq); |
Priunsh_N | 2:c7779da25bdb | 78 | } |
Priunsh_N | 2:c7779da25bdb | 79 | if (updateFlag == 1) { |
Priunsh_N | 2:c7779da25bdb | 80 | gettime(); |
Priunsh_N | 2:c7779da25bdb | 81 | gettemp(); |
Priunsh_N | 2:c7779da25bdb | 82 | getbattery(); |
Priunsh_N | 2:c7779da25bdb | 83 | count++; |
Priunsh_N | 2:c7779da25bdb | 84 | // send new values |
Priunsh_N | 2:c7779da25bdb | 85 | sprintf(cmdbuff, "count,activity,time,analog1,analog2=%d, %d,\"%s\",\"%s\",\"%s\"\r\n",count, activity, timebuf,Temp,Vcc); |
Priunsh_N | 2:c7779da25bdb | 86 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 87 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 88 | updateFlag = 0; |
Priunsh_N | 2:c7779da25bdb | 89 | } |
Priunsh_N | 2:c7779da25bdb | 90 | } |
Priunsh_N | 2:c7779da25bdb | 91 | |
Priunsh_N | 2:c7779da25bdb | 92 | void Webpage::init() { |
Priunsh_N | 2:c7779da25bdb | 93 | _pc.baud(9600); |
Priunsh_N | 2:c7779da25bdb | 94 | esp.baud(9600); |
Priunsh_N | 2:c7779da25bdb | 95 | led1=1,led2=0,led3=0, led4=0; |
Priunsh_N | 2:c7779da25bdb | 96 | // Setup a serial interrupt function to receive data |
Priunsh_N | 2:c7779da25bdb | 97 | esp.attach(this, &Webpage::Rx_interrupt, Serial::RxIrq); |
Priunsh_N | 2:c7779da25bdb | 98 | // Setup a serial interrupt function to transmit data |
Priunsh_N | 2:c7779da25bdb | 99 | esp.attach(this, &Webpage::Tx_interrupt, Serial::TxIrq); |
Priunsh_N | 2:c7779da25bdb | 100 | if (time(NULL) < 1420070400) { |
Priunsh_N | 2:c7779da25bdb | 101 | setRTC(); |
Priunsh_N | 2:c7779da25bdb | 102 | } |
Priunsh_N | 2:c7779da25bdb | 103 | startserver(); |
Priunsh_N | 2:c7779da25bdb | 104 | DataRX=0; |
Priunsh_N | 2:c7779da25bdb | 105 | count=0; |
Priunsh_N | 2:c7779da25bdb | 106 | } |
Priunsh_N | 2:c7779da25bdb | 107 | void Webpage::ReadWebData() |
Priunsh_N | 2:c7779da25bdb | 108 | { |
Priunsh_N | 2:c7779da25bdb | 109 | wait_ms(200); |
Priunsh_N | 2:c7779da25bdb | 110 | esp.attach(NULL,Serial::RxIrq); |
Priunsh_N | 2:c7779da25bdb | 111 | DataRX=0; |
Priunsh_N | 2:c7779da25bdb | 112 | memset(webdata, '\0', sizeof(webdata)); |
Priunsh_N | 2:c7779da25bdb | 113 | strcpy(webdata, rx_buffer); |
Priunsh_N | 2:c7779da25bdb | 114 | memset(rx_buffer, '\0', sizeof(rx_buffer)); |
Priunsh_N | 2:c7779da25bdb | 115 | rx_in = 0; |
Priunsh_N | 2:c7779da25bdb | 116 | rx_out = 0; |
Priunsh_N | 2:c7779da25bdb | 117 | // check web data for form information |
Priunsh_N | 2:c7779da25bdb | 118 | if( strstr(webdata, "check=playv") != NULL ) { |
Priunsh_N | 2:c7779da25bdb | 119 | led1=!led1; |
Priunsh_N | 2:c7779da25bdb | 120 | playSong = !playSong; |
Priunsh_N | 2:c7779da25bdb | 121 | } |
Priunsh_N | 2:c7779da25bdb | 122 | // if( strstr(webdata, "check=led2v") != NULL ) { |
Priunsh_N | 2:c7779da25bdb | 123 | // led2=!led2; |
Priunsh_N | 2:c7779da25bdb | 124 | // } |
Priunsh_N | 2:c7779da25bdb | 125 | // if( strstr(webdata, "check=led3v") != NULL ) { |
Priunsh_N | 2:c7779da25bdb | 126 | // led3=!led3; |
Priunsh_N | 2:c7779da25bdb | 127 | // } |
Priunsh_N | 2:c7779da25bdb | 128 | // if( strstr(webdata, "check=led4v") != NULL ) { |
Priunsh_N | 2:c7779da25bdb | 129 | // led4=!led4; |
Priunsh_N | 2:c7779da25bdb | 130 | // } |
Priunsh_N | 2:c7779da25bdb | 131 | if( strstr(webdata, "POST") != NULL ) { // set update flag if POST request |
Priunsh_N | 2:c7779da25bdb | 132 | updateFlag=1; |
Priunsh_N | 2:c7779da25bdb | 133 | } |
Priunsh_N | 2:c7779da25bdb | 134 | if( strstr(webdata, "GET") != NULL && strstr(webdata, "favicon") == NULL ) { // set update flag for GET request but do not want to update for favicon requests |
Priunsh_N | 2:c7779da25bdb | 135 | updateFlag=1; |
Priunsh_N | 2:c7779da25bdb | 136 | } |
Priunsh_N | 1:bbd83a3a8372 | 137 | } |
Priunsh_N | 2:c7779da25bdb | 138 | |
Priunsh_N | 2:c7779da25bdb | 139 | void Webpage::startserver() |
Priunsh_N | 1:bbd83a3a8372 | 140 | { |
Priunsh_N | 2:c7779da25bdb | 141 | gettime(); |
Priunsh_N | 2:c7779da25bdb | 142 | gettemp(); |
Priunsh_N | 2:c7779da25bdb | 143 | getbattery(); |
Priunsh_N | 2:c7779da25bdb | 144 | _pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); |
Priunsh_N | 2:c7779da25bdb | 145 | strcpy(cmdbuff,"node.restart()\r\n"); |
Priunsh_N | 2:c7779da25bdb | 146 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 147 | wait(2); |
Priunsh_N | 2:c7779da25bdb | 148 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 149 | |
Priunsh_N | 2:c7779da25bdb | 150 | _pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> "); |
Priunsh_N | 2:c7779da25bdb | 151 | |
Priunsh_N | 2:c7779da25bdb | 152 | // initial values |
Priunsh_N | 2:c7779da25bdb | 153 | sprintf(cmdbuff, "count,activity,time,analog1,analog2=0,0,\"%s\",\"%s\",\"%s\"\r\n",timebuf,Temp,Vcc); |
Priunsh_N | 2:c7779da25bdb | 154 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 155 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 156 | wait(0.5); |
Priunsh_N | 2:c7779da25bdb | 157 | |
Priunsh_N | 2:c7779da25bdb | 158 | //create server |
Priunsh_N | 2:c7779da25bdb | 159 | sprintf(cmdbuff, "srv=net.createServer(net.TCP,%d)\r\n",SERVtimeout); |
Priunsh_N | 2:c7779da25bdb | 160 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 161 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 162 | wait(0.5); |
Priunsh_N | 2:c7779da25bdb | 163 | strcpy(cmdbuff,"srv:listen(80,function(conn)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 164 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 165 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 166 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 167 | strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n"); |
Priunsh_N | 2:c7779da25bdb | 168 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 169 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 170 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 171 | |
Priunsh_N | 2:c7779da25bdb | 172 | //print data to mbed |
Priunsh_N | 2:c7779da25bdb | 173 | strcpy(cmdbuff,"print(payload)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 174 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 175 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 176 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 177 | |
Priunsh_N | 2:c7779da25bdb | 178 | //web page data |
Priunsh_N | 2:c7779da25bdb | 179 | strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1><center>Naptime!</center></h1>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 180 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 181 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 182 | wait(0.4); |
Priunsh_N | 2:c7779da25bdb | 183 | strcpy(cmdbuff,"conn:send('<p><center>~Keep track of baby\\'s activity at night, even play a soothing lullaby~</center></p><hr>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 184 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 185 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 186 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 187 | //strcpy(cmdbuff,"conn:send('Battery Voltage: '..analog1..' V<br>Analog 2: '..analog2..' V<br><hr>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 188 | // SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 189 | // getreply(); |
Priunsh_N | 2:c7779da25bdb | 190 | // wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 191 | strcpy(cmdbuff,"conn:send('<center>Activity Level: '..activity..'</center>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 192 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 193 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 194 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 195 | strcpy(cmdbuff,"conn:send('<form method=\"POST\"')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 196 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 197 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 198 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 199 | strcpy(cmdbuff, "conn:send('<p><center><input type=\"checkbox\" name=\"check\" value=\"playv\"> Toggle Music')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 200 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 201 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 202 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 203 | //strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led2v\"> flip LED2')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 204 | // SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 205 | // getreply(); |
Priunsh_N | 2:c7779da25bdb | 206 | // wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 207 | // strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led3v\"> flip LED3')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 208 | // SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 209 | // getreply(); |
Priunsh_N | 2:c7779da25bdb | 210 | // wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 211 | // strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led4v\"> flip LED4')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 212 | // SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 213 | // getreply(); |
Priunsh_N | 2:c7779da25bdb | 214 | // wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 215 | strcpy(cmdbuff,"conn:send('<p><center><input type=\"submit\" value=\"Send\"></form>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 216 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 217 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 218 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 219 | strcpy(cmdbuff, "conn:send('<p><h2>How to use:</h2>Select the checkbox and hit send to play music')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 220 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 221 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 222 | wait(0.5); |
Priunsh_N | 2:c7779da25bdb | 223 | strcpy(cmdbuff,"conn:send('<hr><center>Updates: '..count..'</center>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 224 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 225 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 226 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 227 | strcpy(cmdbuff,"conn:send('<center>Last update (based on mbed RTC time): '..time..'</center></body></html>')\r\n"); |
Priunsh_N | 2:c7779da25bdb | 228 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 229 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 230 | wait(0.4); |
Priunsh_N | 2:c7779da25bdb | 231 | //end web page data |
Priunsh_N | 2:c7779da25bdb | 232 | strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection |
Priunsh_N | 2:c7779da25bdb | 233 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 234 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 235 | wait(0.3); |
Priunsh_N | 2:c7779da25bdb | 236 | strcpy(cmdbuff, "end)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 237 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 238 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 239 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 240 | strcpy(cmdbuff, "end)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 241 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 242 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 243 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 244 | |
Priunsh_N | 2:c7779da25bdb | 245 | strcpy(cmdbuff, "tmr.alarm(0, 1000, 1, function()\r\n"); |
Priunsh_N | 2:c7779da25bdb | 246 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 247 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 248 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 249 | strcpy(cmdbuff, "if wifi.sta.getip() == nil then\r\n"); |
Priunsh_N | 2:c7779da25bdb | 250 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 251 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 252 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 253 | strcpy(cmdbuff, "print(\"Connecting to AP...\\n\")\r\n"); |
Priunsh_N | 2:c7779da25bdb | 254 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 255 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 256 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 257 | strcpy(cmdbuff, "else\r\n"); |
Priunsh_N | 2:c7779da25bdb | 258 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 259 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 260 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 261 | strcpy(cmdbuff, "ip, nm, gw=wifi.sta.getip()\r\n"); |
Priunsh_N | 2:c7779da25bdb | 262 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 263 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 264 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 265 | strcpy(cmdbuff,"print(\"IP Address: \",ip)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 266 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 267 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 268 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 269 | strcpy(cmdbuff,"tmr.stop(0)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 270 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 271 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 272 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 273 | strcpy(cmdbuff,"end\r\n"); |
Priunsh_N | 2:c7779da25bdb | 274 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 275 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 276 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 277 | strcpy(cmdbuff,"end)\r\n"); |
Priunsh_N | 2:c7779da25bdb | 278 | SendCMD(); |
Priunsh_N | 2:c7779da25bdb | 279 | getreply(); |
Priunsh_N | 2:c7779da25bdb | 280 | wait(0.2); |
Priunsh_N | 2:c7779da25bdb | 281 | |
Priunsh_N | 2:c7779da25bdb | 282 | _pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n"); |
Priunsh_N | 2:c7779da25bdb | 283 | } |
Priunsh_N | 2:c7779da25bdb | 284 | |
Priunsh_N | 2:c7779da25bdb | 285 | void Webpage::SendCMD() |
Priunsh_N | 2:c7779da25bdb | 286 | { |
Priunsh_N | 2:c7779da25bdb | 287 | int i; |
Priunsh_N | 2:c7779da25bdb | 288 | char temp_char; |
Priunsh_N | 2:c7779da25bdb | 289 | bool empty; |
Priunsh_N | 2:c7779da25bdb | 290 | i = 0; |
Priunsh_N | 2:c7779da25bdb | 291 | // Start Critical Section - don't interrupt while changing global buffer variables |
Priunsh_N | 2:c7779da25bdb | 292 | NVIC_DisableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 293 | empty = (tx_in == tx_out); |
Priunsh_N | 2:c7779da25bdb | 294 | while ((i==0) || (cmdbuff[i-1] != '\n')) { |
Priunsh_N | 2:c7779da25bdb | 295 | // Wait if buffer full |
Priunsh_N | 2:c7779da25bdb | 296 | if (((tx_in + 1) % buffer_size) == tx_out) { |
Priunsh_N | 2:c7779da25bdb | 297 | // End Critical Section - need to let interrupt routine empty buffer by sending |
Priunsh_N | 2:c7779da25bdb | 298 | NVIC_EnableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 299 | while (((tx_in + 1) % buffer_size) == tx_out) { |
Priunsh_N | 2:c7779da25bdb | 300 | } |
Priunsh_N | 2:c7779da25bdb | 301 | // Start Critical Section - don't interrupt while changing global buffer variables |
Priunsh_N | 2:c7779da25bdb | 302 | NVIC_DisableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 303 | } |
Priunsh_N | 2:c7779da25bdb | 304 | tx_buffer[tx_in] = cmdbuff[i]; |
Priunsh_N | 2:c7779da25bdb | 305 | i++; |
Priunsh_N | 2:c7779da25bdb | 306 | tx_in = (tx_in + 1) % buffer_size; |
Priunsh_N | 1:bbd83a3a8372 | 307 | } |
Priunsh_N | 2:c7779da25bdb | 308 | if (esp.writeable() && (empty)) { |
Priunsh_N | 2:c7779da25bdb | 309 | temp_char = tx_buffer[tx_out]; |
Priunsh_N | 2:c7779da25bdb | 310 | tx_out = (tx_out + 1) % buffer_size; |
Priunsh_N | 2:c7779da25bdb | 311 | // Send first character to start tx interrupts, if stopped |
Priunsh_N | 2:c7779da25bdb | 312 | esp.putc(temp_char); |
Priunsh_N | 2:c7779da25bdb | 313 | } |
Priunsh_N | 2:c7779da25bdb | 314 | // End Critical Section |
Priunsh_N | 2:c7779da25bdb | 315 | NVIC_EnableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 316 | return; |
Priunsh_N | 2:c7779da25bdb | 317 | } |
Priunsh_N | 2:c7779da25bdb | 318 | |
Priunsh_N | 2:c7779da25bdb | 319 | void Webpage::getreply() |
Priunsh_N | 2:c7779da25bdb | 320 | { |
Priunsh_N | 2:c7779da25bdb | 321 | read_line(); |
Priunsh_N | 2:c7779da25bdb | 322 | sscanf(rx_line,replybuff); |
Priunsh_N | 2:c7779da25bdb | 323 | } |
Priunsh_N | 2:c7779da25bdb | 324 | |
Priunsh_N | 2:c7779da25bdb | 325 | void Webpage::read_line() { |
Priunsh_N | 2:c7779da25bdb | 326 | int i; |
Priunsh_N | 2:c7779da25bdb | 327 | i = 0; |
Priunsh_N | 2:c7779da25bdb | 328 | // Start Critical Section - don't interrupt while changing global buffer variables |
Priunsh_N | 2:c7779da25bdb | 329 | NVIC_DisableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 330 | // Loop reading rx buffer characters until end of line character |
Priunsh_N | 2:c7779da25bdb | 331 | while ((i==0) || (rx_line[i-1] != '\r')) { |
Priunsh_N | 2:c7779da25bdb | 332 | // Wait if buffer empty |
Priunsh_N | 2:c7779da25bdb | 333 | if (rx_in == rx_out) { |
Priunsh_N | 2:c7779da25bdb | 334 | // End Critical Section - need to allow rx interrupt to get new characters for buffer |
Priunsh_N | 2:c7779da25bdb | 335 | NVIC_EnableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 336 | while (rx_in == rx_out) { |
Priunsh_N | 2:c7779da25bdb | 337 | } |
Priunsh_N | 2:c7779da25bdb | 338 | // Start Critical Section - don't interrupt while changing global buffer variables |
Priunsh_N | 2:c7779da25bdb | 339 | NVIC_DisableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 340 | } |
Priunsh_N | 2:c7779da25bdb | 341 | rx_line[i] = rx_buffer[rx_out]; |
Priunsh_N | 2:c7779da25bdb | 342 | i++; |
Priunsh_N | 2:c7779da25bdb | 343 | rx_out = (rx_out + 1) % buffer_size; |
Priunsh_N | 2:c7779da25bdb | 344 | } |
Priunsh_N | 2:c7779da25bdb | 345 | // End Critical Section |
Priunsh_N | 2:c7779da25bdb | 346 | NVIC_EnableIRQ(UART1_IRQn); |
Priunsh_N | 2:c7779da25bdb | 347 | rx_line[i-1] = 0; |
Priunsh_N | 2:c7779da25bdb | 348 | return; |
Priunsh_N | 1:bbd83a3a8372 | 349 | } |
Priunsh_N | 1:bbd83a3a8372 | 350 | |
Priunsh_N | 1:bbd83a3a8372 | 351 | |
Priunsh_N | 2:c7779da25bdb | 352 | // Interupt Routine to read in data from serial port |
Priunsh_N | 2:c7779da25bdb | 353 | void Webpage::Rx_interrupt() { |
Priunsh_N | 2:c7779da25bdb | 354 | DataRX=1; |
Priunsh_N | 2:c7779da25bdb | 355 | //led3=1; |
Priunsh_N | 2:c7779da25bdb | 356 | // Loop just in case more than one character is in UART's receive FIFO buffer |
Priunsh_N | 2:c7779da25bdb | 357 | // Stop if buffer full |
Priunsh_N | 2:c7779da25bdb | 358 | while ((esp.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) { |
Priunsh_N | 2:c7779da25bdb | 359 | rx_buffer[rx_in] = esp.getc(); |
Priunsh_N | 2:c7779da25bdb | 360 | // Uncomment to Echo to USB serial to watch data flow |
Priunsh_N | 2:c7779da25bdb | 361 | _pc.putc(rx_buffer[rx_in]); |
Priunsh_N | 2:c7779da25bdb | 362 | rx_in = (rx_in + 1) % buffer_size; |
Priunsh_N | 2:c7779da25bdb | 363 | } |
Priunsh_N | 2:c7779da25bdb | 364 | //led3=0; |
Priunsh_N | 2:c7779da25bdb | 365 | return; |
Priunsh_N | 2:c7779da25bdb | 366 | } |
Priunsh_N | 1:bbd83a3a8372 | 367 | |
Priunsh_N | 2:c7779da25bdb | 368 | |
Priunsh_N | 2:c7779da25bdb | 369 | // Interupt Routine to write out data to serial port |
Priunsh_N | 2:c7779da25bdb | 370 | void Webpage::Tx_interrupt() { |
Priunsh_N | 2:c7779da25bdb | 371 | //led2=1; |
Priunsh_N | 2:c7779da25bdb | 372 | // Loop to fill more than one character in UART's transmit FIFO buffer |
Priunsh_N | 2:c7779da25bdb | 373 | // Stop if buffer empty |
Priunsh_N | 2:c7779da25bdb | 374 | while ((esp.writeable()) && (tx_in != tx_out)) { |
Priunsh_N | 2:c7779da25bdb | 375 | esp.putc(tx_buffer[tx_out]); |
Priunsh_N | 2:c7779da25bdb | 376 | tx_out = (tx_out + 1) % buffer_size; |
Priunsh_N | 2:c7779da25bdb | 377 | } |
Priunsh_N | 2:c7779da25bdb | 378 | //led2=0; |
Priunsh_N | 2:c7779da25bdb | 379 | return; |
Priunsh_N | 1:bbd83a3a8372 | 380 | } |
Priunsh_N | 1:bbd83a3a8372 | 381 | |
Priunsh_N | 2:c7779da25bdb | 382 | void gettime() |
Priunsh_N | 2:c7779da25bdb | 383 | { |
Priunsh_N | 2:c7779da25bdb | 384 | time_t seconds = time(NULL); |
Priunsh_N | 2:c7779da25bdb | 385 | strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds)); |
Priunsh_N | 1:bbd83a3a8372 | 386 | } |
Priunsh_N | 1:bbd83a3a8372 | 387 | |
Priunsh_N | 2:c7779da25bdb | 388 | void setRTC() |
Priunsh_N | 2:c7779da25bdb | 389 | { |
Priunsh_N | 2:c7779da25bdb | 390 | t.tm_sec = (0); // 0-59 |
Priunsh_N | 2:c7779da25bdb | 391 | t.tm_min = (minute); // 0-59 |
Priunsh_N | 2:c7779da25bdb | 392 | t.tm_hour = (hour); // 0-23 |
Priunsh_N | 2:c7779da25bdb | 393 | t.tm_mday = (dayofmonth); // 1-31 |
Priunsh_N | 2:c7779da25bdb | 394 | t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format |
Priunsh_N | 2:c7779da25bdb | 395 | t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year |
Priunsh_N | 2:c7779da25bdb | 396 | set_time(mktime(&t)); // set RTC clock |
Priunsh_N | 2:c7779da25bdb | 397 | } |
Priunsh_N | 2:c7779da25bdb | 398 | // Analog in example |
Priunsh_N | 2:c7779da25bdb | 399 | void getbattery() |
Priunsh_N | 2:c7779da25bdb | 400 | { |
Priunsh_N | 2:c7779da25bdb | 401 | AdcIn=Ain1.read(); |
Priunsh_N | 2:c7779da25bdb | 402 | Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy |
Priunsh_N | 2:c7779da25bdb | 403 | sprintf(Vcc,"%2.3f",Ht); |
Priunsh_N | 2:c7779da25bdb | 404 | } |
Priunsh_N | 2:c7779da25bdb | 405 | // Temperature example |
Priunsh_N | 2:c7779da25bdb | 406 | void gettemp() |
Priunsh_N | 2:c7779da25bdb | 407 | { |
Priunsh_N | 2:c7779da25bdb | 408 | |
Priunsh_N | 2:c7779da25bdb | 409 | AdcIn=Ain2.read(); |
Priunsh_N | 2:c7779da25bdb | 410 | Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy |
Priunsh_N | 2:c7779da25bdb | 411 | sprintf(Temp,"%2.3f",Ht); |
Priunsh_N | 2:c7779da25bdb | 412 | } |