ben er dolgelukkig mee. Er zijn veel voorbeeldprogramma'tjes te vinden en inmiddels
draait er een klein webservertje op die de meetwaardes doorgeeft via een
XML-Ajax request. Door via Ajax een XML file op te vragen vanaf de browser
worden alleen de waardes in de pagina ververst die door de browser netjes
in de pagina op de juiste plek worden ingevoegd. (klinkt wat gek in het Nederlands)
Mijn eerste opzetje: (Ajax, Meerdere pagina's en plaatjes werken nu)
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,20); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
File webFile; // the web page file on the SD card
String HTTP_req; // stores the HTTP request
String req_filename = "";
String req_filetype = "";
char req_filename_array[12]; //char array to copy the String into
void setup()
{
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
Serial.begin(9600); // for debugging
Serial.println("Starting webserver...");
// initialize SD card
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS - Found index.htm file.");
pinMode(7, INPUT); // switch is attached to Arduino pin 7
pinMode(8, INPUT); // switch is attached to Arduino pin 8
}
void loop()
{
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
HTTP_req += c; // save the HTTP request 1 char at a time
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
if (HTTP_req.indexOf("ajax_inputs") > -1) { // Ajax request - send XML file
// send rest of HTTP header
client.println("Content-Type: text/xml");
client.println("Connection: keep-alive");
client.println();
XML_response(client);
}
else { // web page request
req_filename = HTTP_req.substring(HTTP_req.indexOf('GET /')+1, HTTP_req.indexOf('HTTP')-4);
req_filetype = req_filename.substring(req_filename.indexOf('.')+1, req_filename.indexOf('.')+4);
req_filename.toCharArray(req_filename_array, req_filename.length() + 1);
//Serial.println(HTTP_req);
//Serial.println(req_filename);
//Serial.println(req_filetype);
if (req_filetype == "htm") {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
webFile = SD.open(req_filename_array); // open htm web file
}
else {
client.println("HTTP/1.1 200 OK");
client.println();
webFile = SD.open(req_filename_array); // open other web file
}
} // web page reques
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
HTTP_req = ""; // empty the string
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}
// send the XML file with switch statuses and analog value
void XML_response(EthernetClient cl)
{
int analog_val;
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");
cl.print("<button1>");
if (digitalRead(7)) {
cl.print("ON");
}
else {
cl.print("OFF");
}
cl.print("</button1>");
cl.print("<button2>");
if (digitalRead(8)) {
cl.print("ON");
}
else {
cl.print("OFF");
}
cl.print("</button2>");
// read analog pin A2
analog_val = analogRead(2);
cl.print("<analog1>");
cl.print(analog_val);
cl.print("</analog1>");
cl.print("</inputs>");
}
Echt leuk en leerzaam zo'n Arduino, lijkt een beetje op een C64,
één vd laatste computers die nog te "begrijpen" viel (voor mij dan)
