| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- A simple RCSwitch/Ethernet/Webserver demo
-
- https://github.com/sui77/rc-switch/
- */
- #include <SPI.h>
- #include <Ethernet.h>
- #include <RCSwitch.h>
- // Ethernet configuration
- uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Address
- uint8_t ip[] = { 192,168,0, 2 }; // IP Address
- EthernetServer server(80); // Server Port 80
- // RCSwitch configuration
- RCSwitch mySwitch = RCSwitch();
- int RCTransmissionPin = 7;
- // More to do...
- // You should also modify the processCommand() and
- // httpResponseHome() functions to fit your needs.
- /**
- * Setup
- */
- void setup() {
- Ethernet.begin(mac, ip);
- server.begin();
- mySwitch.enableTransmit( RCTransmissionPin );
- }
- /**
- * Loop
- */
- void loop() {
- char* command = httpServer();
- }
- /**
- * Command dispatcher
- */
- void processCommand(char* command) {
- if (strcmp(command, "1-on") == 0) {
- mySwitch.switchOn(1,1);
- } else if (strcmp(command, "1-off") == 0) {
- mySwitch.switchOff(1,1);
- } else if (strcmp(command, "2-on") == 0) {
- mySwitch.switchOn(1,2);
- } else if (strcmp(command, "2-off") == 0) {
- mySwitch.switchOff(1,2);
- }
- }
- /**
- * HTTP Response with homepage
- */
- void httpResponseHome(EthernetClient c) {
- c.println("HTTP/1.1 200 OK");
- c.println("Content-Type: text/html");
- c.println();
- c.println("<html>");
- c.println("<head>");
- c.println( "<title>RCSwitch Webserver Demo</title>");
- c.println( "<style>");
- c.println( "body { font-family: Arial, sans-serif; font-size:12px; }");
- c.println( "</style>");
- c.println("</head>");
- c.println("<body>");
- c.println( "<h1>RCSwitch Webserver Demo</h1>");
- c.println( "<ul>");
- c.println( "<li><a href=\"./?1-on\">Switch #1 on</a></li>");
- c.println( "<li><a href=\"./?1-off\">Switch #1 off</a></li>");
- c.println( "</ul>");
- c.println( "<ul>");
- c.println( "<li><a href=\"./?2-on\">Switch #2 on</a></li>");
- c.println( "<li><a href=\"./?2-off\">Switch #2 off</a></li>");
- c.println( "</ul>");
- c.println( "<hr>");
- c.println( "<a href=\"https://github.com/sui77/rc-switch/\">https://github.com/sui77/rc-switch/</a>");
- c.println("</body>");
- c.println("</html>");
- }
- /**
- * HTTP Redirect to homepage
- */
- void httpResponseRedirect(EthernetClient c) {
- c.println("HTTP/1.1 301 Found");
- c.println("Location: /");
- c.println();
- }
- /**
- * HTTP Response 414 error
- * Command must not be longer than 30 characters
- **/
- void httpResponse414(EthernetClient c) {
- c.println("HTTP/1.1 414 Request URI too long");
- c.println("Content-Type: text/plain");
- c.println();
- c.println("414 Request URI too long");
- }
- /**
- * Process HTTP requests, parse first request header line and
- * call processCommand with GET query string (everything after
- * the ? question mark in the URL).
- */
- char* httpServer() {
- EthernetClient client = server.available();
- if (client) {
- char sReturnCommand[32];
- int nCommandPos=-1;
- sReturnCommand[0] = '\0';
- while (client.connected()) {
- if (client.available()) {
- char c = client.read();
- if ((c == '\n') || (c == ' ' && nCommandPos>-1)) {
- sReturnCommand[nCommandPos] = '\0';
- if (strcmp(sReturnCommand, "\0") == 0) {
- httpResponseHome(client);
- } else {
- processCommand(sReturnCommand);
- httpResponseRedirect(client);
- }
- break;
- }
- if (nCommandPos>-1) {
- sReturnCommand[nCommandPos++] = c;
- }
- if (c == '?' && nCommandPos == -1) {
- nCommandPos = 0;
- }
- }
- if (nCommandPos > 30) {
- httpResponse414(client);
- sReturnCommand[0] = '\0';
- break;
- }
- }
- if (nCommandPos!=-1) {
- sReturnCommand[nCommandPos] = '\0';
- }
- // give the web browser time to receive the data
- delay(1);
- client.stop();
-
- return sReturnCommand;
- }
- return '\0';
- }
|