Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Web Server
- * based on the original webserver example.
- * processes the GET command from the http client.
- * supports two pages, one readable for humans /info.html other in CSV for computers /csv.html
- */
- /*
- *==== Typical HTTP request ====
- *GET / HTTP/1.0[CRLF]
- *Host: www.google.com[CRLF]
- *Connection: close[CRLF]
- *User-Agent: Web-sniffer/1.0.29 (+http://web-sniffer.net/)[CRLF]
- *Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
- *Cache-Control: no[CRLF]
- *Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
- *Referer: http://web-sniffer.net/[CRLF]
- *[CRLF]
- *==== Typical HTTP request ====
- */
- //#define DEBUG
- #include <Ethernet.h>
- #include <Sensirion.h>
- byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
- byte ip[] = { 192, 168, 2, 253 };
- //These were not needed, i.e. without them the ethernet shield works ok with my router
- //byte gateway[] = { 192, 168, 2, 254 };
- //byte subnet[] = { 255, 255, 255, 0 };
- Server server(80); /* instance of server */
- Sensirion tempSensor = Sensirion(5,6); /* instance of sensor */
- // Sensor Variables
- float temperature;
- float humidity;
- float dewpoint;
- // integer values of temperature, humidity and light
- int tmprtr,hmdty,lght;
- char cmmnd; /* received command = {G|P} for GET or PUT */
- char args[20]; /* requested file,arguments */
- char host[20]; /* host ip address*/
- void setup()
- {
- Ethernet.begin(mac, ip);
- server.begin();
- pinMode(7, OUTPUT);
- pinMode(4, OUTPUT);
- pinMode(3, OUTPUT);
- pinMode(2, OUTPUT);
- digitalWrite(4,LOW);
- digitalWrite(7,HIGH); // could shut down between conversions...
- #ifdef DEBUG
- Serial.begin(9600); // serial port for debug
- #endif
- }
- //
- // Get and convert analog input values
- //
- void get_values(void)
- {
- tempSensor.measure(&temperature, &humidity, &dewpoint);
- tmprtr=int(temperature * 10.0);
- hmdty=int(humidity * 10.0);
- lght = analogRead(0);
- }
- //
- // Get and convert analog input values
- //
- void beep(void)
- {
- for (int i=0;i<10;i++){
- digitalWrite(2,LOW);
- digitalWrite(3,HIGH);
- delay(1);
- digitalWrite(3,LOW);
- digitalWrite(2,HIGH);
- delay(1);
- }
- digitalWrite(2,LOW);
- }
- //
- // Begin of HTML page, fixed page title
- //
- void http_head(Client & client)
- {
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println();
- client.println("<html>");
- client.println("<title>Arduino Home monitor</title>");
- client.println("<body>");
- }
- //
- // End of HTML page
- //
- void http_end(Client & client)
- {
- client.println("</html>");
- client.println("</body>");
- }
- //
- // reply to root request or /info.html
- //
- void http_root(Client & client)
- {
- http_head(client);
- client.print("Temperature is ");
- client.print(tmprtr / 10);
- client.print(".");
- client.print(tmprtr % 10);
- client.print("° C");
- client.println("<br />");
- client.print("Relative Humidity is ");
- client.print(hmdty / 10);
- client.print(".");
- client.print(hmdty % 10);
- client.print("%");
- client.println("<br />");
- client.print("Light is ");
- client.print(lght);
- client.println("<br />");
- http_end(client);
- }
- //
- // reply to /csv.html
- //
- void http_csv(Client & client)
- {
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/csv");
- client.println();
- client.print(tmprtr / 10);
- client.print(".");
- client.print(tmprtr % 10);
- client.print(",");
- client.print(hmdty / 10);
- client.print(".");
- client.print(hmdty % 10);
- client.print(",");
- client.print(lght);
- client.println();
- }
- //
- // Work on a http reply, check request file, produce output
- //
- void http_reply(Client & client)
- {
- #ifdef DEBUG
- Serial.println("==== debug out ===");
- Serial.println(cmmnd);
- Serial.println(args);
- Serial.println(host);
- Serial.println("==== debug eot ===");
- #endif
- get_values();
- beep();
- if ((args[1]=='c') && (args[2]=='s') && (args[3]=='v')) http_csv(client);
- else http_root(client);
- }
- void loop()
- {
- Client client = server.available();
- #define LN_BUF 40
- char inp_ln[LN_BUF]; /* input line, crop at 40 chars */
- char chr; /* input char */
- byte inp_ln_ptr,i;
- if (client) {
- inp_ln_ptr=0; /* line is empty */
- while (client.connected()) { /* while client is connected process lines */
- if (client.available()) { /* is there a char available */
- chr = client.read(); /* get it */
- if (chr == '\n' && inp_ln_ptr<2) {
- http_reply(client); /* received a blank line, create return page */
- break; /* exit while, !! find a more logical way to do this */
- }
- if (chr == '\n') { /* end of line */
- inp_ln[inp_ln_ptr]=0; /* end of line */
- Serial.println(inp_ln);
- if ((inp_ln[0]=='G') && (inp_ln[1]=='E') && (inp_ln[2]=='T')) {
- cmmnd='G';
- // get arguments
- for (i=0;i<sizeof(args);i++) {
- args[i]=inp_ln[4+i];
- if (args[i] == ' ') break;
- }
- }
- if ((inp_ln[0]=='P') && (inp_ln[1]=='U') && (inp_ln[2]=='T')) {
- cmmnd='P';
- // get arguments
- for (i=0;i<sizeof(args);i++) {
- args[i]=inp_ln[4+i];
- if (args[i] == ' ') break;
- }
- }
- if ((inp_ln[0]=='H') && (inp_ln[1]=='o') && (inp_ln[2]=='s') && (inp_ln[3]=='t')) {
- // get arguments
- for (i=0;i<sizeof(host);i++) {
- host[i]=inp_ln[5+i];
- if ((host[i] == ' ') || (host[i] =='\n') ||(host[i] =='\r')) {
- host[i]='\0';
- break;
- }
- }
- }
- inp_ln_ptr=0; /* ptr ready for next line */
- }
- else if (inp_ln_ptr<LN_BUF-1) inp_ln[inp_ln_ptr++]=chr;
- }
- }
- // give the web browser time to receive the data
- delay(1);
- client.stop();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement