20.05.2011, 09:44
Wurd gestern leider nichts, dafür aber jetzt
Sieht schlimmer aus als es ist, immerhin ist das ein kompletter Webserver, der fünf simple Webseiten (rot.html, gruen.html, gelb.html, blau.html und index.html) ausliefern kann.
Einfach Dinge wie z.B. die serielle Schnittstelle abfragen, oder einen Port anschalten, sind deutlich einfacher...
Code:
#include <Ethernet.h>
#include <EthernetDHCP.h>
#include <Flash.h>
#include <Fat16util.h> // for FreeRam()
#include <TinyWebServer.h>
#include "Wire.h"
#include "BlinkM_funcs.h"
boolean index_handler(TinyWebServer& web_server);
boolean rot_handler(TinyWebServer& web_server);
boolean gelb_handler(TinyWebServer& web_server);
boolean gruen_handler(TinyWebServer& web_server);
boolean blau_handler(TinyWebServer& web_server);
// I2C-Adresse der Blink-LED
int blinkm_addr = 9; // default address of a blinkm
// Mac Adresse setzen
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Definition der einzelnen Webseiten
TinyWebServer::PathHandler handlers[] = {
{"/", TinyWebServer::GET, &index_handler },
{"/rot.html", TinyWebServer::GET, &rot_handler },
{"/gelb.html", TinyWebServer::GET, &gelb_handler },
{"/gruen.html", TinyWebServer::GET, &gruen_handler },
{"/blau.html", TinyWebServer::GET, &blau_handler },
{NULL},
};
// Code der ersten Webseite, Plus LED ausschalten
boolean index_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Nagios-Ampel...</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0x00 );
return true;
}
// Code Seite ROT, und LED auf rot
boolean rot_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel rot</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0xFF, 0x00, 0x00 );
return true;
}
// Seite GELB
boolean gelb_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel gelb</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0xFF, 0xFF, 0x00 );
return true;
}
// Seite GRUEN
boolean gruen_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel gruen!</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x99, 0x00 );
return true;
}
// Seite BLAU
boolean blau_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel blau</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0xFF );
return true;
}
boolean has_ip_address = false;
TinyWebServer web = TinyWebServer(handlers, NULL);
const char* ip_to_str(const uint8_t* ipAddr)
{
static char buf[16];
sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
return buf;
}
void setup() {
Serial.begin(115200);
BlinkM_beginWithPower();
BlinkM_stopScript( blinkm_addr ); // stop startup light script
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0x00 );
Serial << F("Free RAM: ") << FreeRam() << "\n";
// Initiate a DHCP session.
Serial << F("Getting an IP address...");
if (!EthernetDHCP.begin(mac)) {
Serial << F("\nCould not get an IP address");
return;
}
has_ip_address = true;
const byte* ip_addr = EthernetDHCP.ipAddress();
// DHCP-Adresse seriell ausgeben
Serial << F("\nMy IP address: ");
Serial.println(ip_to_str(ip_addr));
// Start the web server.
web.begin();
Serial << F("Ready to accept HTTP requests.\n\n");
}
void loop() {
if (has_ip_address) {
EthernetDHCP.maintain();
web.process();
}
}
Sieht schlimmer aus als es ist, immerhin ist das ein kompletter Webserver, der fünf simple Webseiten (rot.html, gruen.html, gelb.html, blau.html und index.html) ausliefern kann.
Einfach Dinge wie z.B. die serielle Schnittstelle abfragen, oder einen Port anschalten, sind deutlich einfacher...