Pages: [1] 2 3   Go Down
Author Topic: My Arduino Web Server v2.0  (Read 24974 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 2
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I share with you my Arduino Web Server V2.0 (Closed)
    [url removed]



I first debuted my Arduino web server in January of 2011, its been serving you all for months and gained thousands of hits over the course of its service.
Sadly, I retired it after 5 months, it was getting a little old.

Thanks to everyone who provided me with help when I needed it and also to the many people who left comments on the site. smiley-lol

Here is the latest code from the site:
Code:
/*
 * This is a web server that allows you to host a fully functional html
 *  webpage on the World Wide Web.
 * Initial coding was done with the help from the many people in the Arduino community.
 *  Thanks guys!!
 *
 * Arduino Setup: You need an Ethernet Shield SD, and and Arduino.
 *  Optionally pins 8 and 9 can be used for two LEDs that can indicate traffic.
 *
 * SD Card Setup: On the SD card, which must be formated as fat, you must have
 *  an HTML file with the file name of 'index.htm'. All file names on this card
 *  must be written in the old 8.3 file format. In other words, all files must be
 *  named with no more then 8 characters for the name, and 3 for the extension.
 *
 * Note: If you don't know HTML, a good place that I found useful was w3schools
 *  http://www.w3schools.com/html/html_examples.asp
 *
 */

#include <LiquidCrystal.h>
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#define BUFSIZ 128
#define greenLEDandBEEP 2
#define redLEDpin 3
boolean led2 = true;
int hits = 0; // Set the number of hits the hit counter will start at.
int units = 0;
int count = 0;
int photocellPin = 2;
int photocellReading;
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

//Local ethernet setup
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x00, 0x1C, 0x0E };
byte ip[] = {
  192, 168, 1, 80 };
char rootFileName[] = "index.htm";
Server server(8080);

//SD card stuff
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup() {
  lcd.begin(16, 2);
  lcd.print("Web Server v2.00");
  lcd.setCursor(0, 1);
  lcd.print("Hits:");

  Serial.begin(9600);

  pinMode(greenLEDandBEEP, OUTPUT);
  pinMode(redLEDpin, OUTPUT);

  PgmPrint("Free RAM: ");
  Serial.println(FreeRam());  

  pinMode(10, OUTPUT);              
  digitalWrite(10, HIGH);              

  if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");

  if (!volume.init(&card)) error("vol.init failed!");

  PgmPrint("Volume is FAT");
  Serial.println(volume.fatType(),DEC);
  Serial.println();

  if (!root.openRoot(&volume)) error("openRoot failed");

  PgmPrintln("Files found in root:");
  root.ls(LS_DATE | LS_SIZE);
  Serial.println();

  PgmPrintln("Files found in all dirs:");
  root.ls(LS_R);

  Serial.println();
  PgmPrintln("Done");

  Ethernet.begin(mac, ip);
  server.begin();
}


void loop()
{
  if(count >=500)
  {  
    led2 = !led2;
    digitalWrite(redLEDpin, led2);
    count = 0;
  }
  count +=1;

  char clientline[BUFSIZ];
  char *filename;
  int image = 0;
  int index = 0;

  Client client = server.available();
  if (client) {
    boolean current_line_is_blank = true;

    index = 0;

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (c != '\n' && c != '\r') {
          clientline[index] = c;
          index++;
          if (index >= BUFSIZ)
            index = BUFSIZ -1;

          continue;
        }

        clientline[index] = 0;
        filename = 0;

        Serial.println(clientline);

        if (strstr(clientline, "GET / ") != 0) {
          filename = rootFileName;

        }
        if (strstr(clientline, "GET /") != 0) {
          if (!filename) filename = clientline + 5;

          (strstr(clientline, " HTTP"))[0] = 0;

          Serial.println(filename);

          if (! file.open(&root, filename, O_READ)) {
            client.println("HTTP/1.1 404 Not Found");
            client.println("Content-Type: text/html");
            client.println();
            client.println("<h2>Error 404</h2>");
            client.println("<s2>The file does not exist.<s2>");
            client.println("");
            break;
          }

          Serial.println("Opened!");
          //File types
          client.println("HTTP/1.1 200 OK");
          if (strstr(filename, ".htm") != 0)
            client.println("Content-Type: text/html");
          else if (strstr(filename, ".css") != 0)
            client.println("Content-Type: text/css");
          else if (strstr(filename, ".png") != 0)
            client.println("Content-Type: image/png");
          else if (strstr(filename, ".jpg") != 0)
            client.println("Content-Type: image/jpeg");
          else if (strstr(filename, ".gif") != 0)
            client.println("Content-Type: image/gif");
          else if (strstr(filename, ".3gp") != 0)
            client.println("Content-Type: video/mpeg");
          else if (strstr(filename, ".pdf") != 0)
            client.println("Content-Type: application/pdf");
          else if (strstr(filename, ".js") != 0)
            client.println("Content-Type: application/x-javascript");
          else if (strstr(filename, ".xml") != 0)
            client.println("Content-Type: application/xml");
          else
            client.println("Content-Type: text");
          client.println();

          int16_t c;
          while ((c = file.read()) >= 0) {
            //Serial.print((char)c); //Prints all HTML code to serial (For debuging)
            client.print((char)c); //Prints all HTML code for web page
          }

          //Hit counter math
          if(units >= 2)
          {
            hits ++;
            units = 0;
          }
          units +=1;
          //End hit counter math

          //Print the hit counters and light value
          lcd.setCursor(6, 1);
          lcd.print(hits); //Print hits for LCD hit counter

          client.print("<html><body>"); //HTML code starts here
          client.print("<P align=\"center\">");
          client.print("Hits since reset: <b>");  
          client.print(hits); //Print hits to client
          client.print("</b><br>");

          photocellReading = analogRead(photocellPin);
          client.print("Light reading: ");
          client.print(photocellReading); //Prints light reading to client

          // A few threshholds
          if (photocellReading < 10) {
            client.print(" - Dark");
          }
          else if (photocellReading < 200) {
            client.print(" - Dim");
          }
          else if (photocellReading < 500) {
            client.print(" - Light");
          }
          else if (photocellReading < 800) {
            client.print(" - Bright");
          }
          else {
            client.print(" - Very bright");
          }

          client.print("</p></body></html>"); //HTML code ends here
          //End hit counter and light value

          file.close();

        }
        else {
          client.println("HTTP/1.1 404 Not Found");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<h2>Error 404</h2>");
          client.println("");
        }
        break;
      }
    }
    digitalWrite(greenLEDandBEEP, HIGH);
    delay(1);
    digitalWrite(greenLEDandBEEP, LOW);
    client.stop();
  }

}

//The End /*

The display is a 16x2 LCD with blue EL back light, thats the HV driver board in the upper right corner. The SD card was rerouted out to the front for easy access. There was a later edition too, a photocell, cleverly hidden next to the LCD's glass frame.

Oh, and if you want to know how I made the case,
arduino.cc/forum/index.php/topic,51138.msg412259.html#msg412259

I have also included a basic HTML site template below.

* Sample Site.zip (7.96 KB - downloaded 153 times.)
« Last Edit: May 18, 2011, 01:56:50 pm by physics-dude » Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Any successful hacks yet ?
Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

Offline Offline
Jr. Member
**
Karma: 2
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Any successful hacks yet ?

Nope, not that I'm aware of...   
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 13
Tinkering in free time
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Physics-Dude,

There are multiple webpages and there is even a bitmap file in the webpage. But I don't see any of this code in the .pde. Maybe the code you placed on the website is for another page?

Cheers,
K
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Physics-Dude,

There are multiple webpages and there is even a bitmap file in the webpage. But I don't see any of this code in the .pde. Maybe the code you placed on the website is for another page?

Cheers,
K


I'm not sure whats wrong, try refreshing a few times, or try a different web browser like FireFox. Plenty of other people seem to be able access the site just fine, it looks just fine on my end.
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 711
a, b = b, a+b
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

website loads and as soon as is finished my firefox tells me "the connection to server was terminated"

hm... too tired to reset cookies and everything, but I usually dont have problems with firefox - maybe there is something on your end you can do, so that people like me, who quickly want to look at some arduino projects before they go to bed and are to lazy to actually think anymore can access the site?
Logged


Offline Offline
Jr. Member
**
Karma: 2
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

website loads and as soon as is finished my firefox tells me "the connection to server was terminated"

hm... too tired to reset cookies and everything, but I usually dont have problems with firefox - maybe there is something on your end you can do, so that people like me, who quickly want to look at some arduino projects before they go to bed and are to lazy to actually think anymore can access the site?

Its not on my end, I too use FireFox and it works just fine. Just refresh if it fails to load.
Logged

0
Offline Offline
Jr. Member
**
Karma: 2
Posts: 51
Arduino - I have become the revolution.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

fkeel >>>

Quote
hm... too tired to reset cookies and everything, but I usually dont have problems with firefox - maybe there is something on your end you can do, so that people like me, who quickly want to look at some arduino projects before they go to bed and are to lazy to actually think anymore can access the site?

Did you try ctrl-F5? Website works fine from my end.
Logged

First we ignore them, then we make fun of them, then we fight them and then they win so let's cut the crap and just expose them for the corrupt liars they are.

Offline Offline
God Member
*****
Karma: 2
Posts: 711
a, b = b, a+b
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset



dont know what it is. it loads fine, but as soon as everything loads i get an error, telling me the connection to server was terminated. ... reloading was the first (well, and only) thing I tried... anyway, I still get the error. I will try from my university network when I get around to it - maybe its an issue with the internet provider here.
Logged


Netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 132
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Really cool, nice job!
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 711
a, b = b, a+b
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

must have been the internet provider. I am now using a different service and it works fine... cool project :-)
Logged


Offline Offline
Jr. Member
**
Karma: 2
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Version 2 is up and running!!  smiley-lol
http://physicsdude.dyndns.tv/
Logged

Nowhere
Offline Offline
God Member
*****
Karma: 3
Posts: 852
|-\ |\|\
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Physics-Dude,

There are multiple webpages and there is even a bitmap file in the webpage. But I don't see any of this code in the .pde. Maybe the code you placed on the website is for another page?

Cheers,
K

I think that all the data for the website is on the sd card.  The code just reads the sd card and passes the data along to the client.
Logged

Soundcloud page: http://soundcloud.com/beefinator-2
Youtube channel: http://www.youtube.com/user/beefinator14
Old soundcloud page (ran out o

0
Offline Offline
Full Member
***
Karma: 0
Posts: 134
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I like the box, can you say a few words on how you made it?
Logged

Lancaster, England
Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote from: The Arduino
and a number (seen at bottom of the page) increments up on an LCD

I thought about it...

Then read...

Quote from: The Arduino
(Don't abuse it)

and refrained.

Very neat smiley
Logged

John

Pages: [1] 2 3   Go Up
Jump to: