Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ---------------------------------------------------------
- - Web control relay with Arduino -
- ---------------------------------------------------------
- Ethernet module "ENC28J60" is connected to the Arduino :
- VCC - 3.3V Arduino
- GND - GND Arduino
- SCK - Pin 13 Arduino
- SO - Pin 12 Arduino
- SI - Pin 11 Arduino
- CS - Pin 10 Arduino
- The relay is connected to the Arduino so:
- VCC - 5V Arduino
- In1 - Pin 2 Arduino
- In2 - Pin 3 Arduino
- ...
- In7 - Pin 8 Arduino
- In8 - Pin 9 Arduino
- GND - GND Arduino
- ---------------------------------------------------------
- */
- #include <EtherCard.h>
- // Define number of relays (MAX 8)
- #define NB_PINS 4
- // ethernet interface mac address, must be unique on the LAN
- static byte mymac[] = {0x00, 0x19, 0xCB, 0xF4, 0x03, 0x01};
- static byte myip[] = {192, 168, 0, 26};
- static byte gwip[] = {192, 168, 0, 1};
- static byte netmask[] = {255, 255, 255, 0};
- static byte dnsip[] = {181, 213, 132, 2,};//181.213.132.2
- // Declare PinStatus and LedPins before BufferFiller declaration
- boolean PinStatus[NB_PINS];
- int LedPins[NB_PINS];
- // buffer[500] for 4 relays
- // increase size buffer for more relays
- byte Ethernet::buffer[500];
- BufferFiller bfill;
- const char http_OK[] PROGMEM =
- "HTTP/1.0 200 OK\r\n"
- "Content-Type: text/html\r\n"
- "Pragma: no-cache\r\n\r\n";
- const char http_Found[] PROGMEM =
- "HTTP/1.0 302 Found\r\n"
- "Location: /\r\n\r\n";
- const char http_Unauthorized[] PROGMEM =
- "HTTP/1.0 401 Unauthorized\r\n"
- "Content-Type: text/html\r\n\r\n"
- "<h1>401 Unauthorized</h1>";
- //---------------------------------------------------------
- // Web page
- void homePage()
- {
- bfill.emit_p(PSTR("$F"
- "<title>ArduinoPIN Webserver</title>"
- "<p align=center><font size=10>"
- ),
- http_OK);
- for(int i = 0; i <= NB_PINS-1; i++)
- {
- bfill.emit_p(PSTR(
- "R$D: <a href='?P$D=$F' style=color:$F>$F</a><br />"
- ),
- i+1,
- i+1,
- PinStatus[i]?PSTR("off"):PSTR("on"),
- PinStatus[i]?PSTR("green"):PSTR("red"),
- PinStatus[i]?PSTR("ON"):PSTR("OFF"));
- }
- bfill.emit_p(PSTR(
- "</font></p>"
- ));
- }
- //---------------------------------------------------------
- void setup()
- {
- Serial.begin(9600);
- Serial.print("Setup ");
- for(int i = 0; i <= NB_PINS-1; i++)
- {
- // Pins on Arduino begin from PIN 2 to PIN 9
- LedPins[i] = i+2;
- }
- // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
- // and change it (CS-pin) to pin 10.
- Serial.println(F("\nConnecting..."));
- if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);
- Serial.println(F("Failed to access Ethernet controller"));
- if (!ether.dhcpSetup());
- Serial.println(F("DHCP failed"));
- Serial.print("Connected\n");
- ether.printIp("My Router IP: ", ether.myip);
- //ether.staticSetup(myip);
- ether.printIp("My SET IP: ", ether.myip);
- // Debug
- Serial.print("\n");
- Serial.print("|-------------------------------------------|\n");
- Serial.print("| Actions | LedPin / PinStatus |\n");
- Serial.print("|-------------------------------------------|\n");
- Serial.print("| Init | ");
- for(int i = 0; i <= NB_PINS-1; i++)
- {
- // Initialization of pin mode and pin status
- pinMode(LedPins[i],OUTPUT);
- digitalWrite (LedPins[i],HIGH);
- PinStatus[i]=false;
- // Debug
- Serial.print(LedPins[i]);
- Serial.print("/");
- Serial.print(PinStatus[i]);
- Serial.print(" ");
- }
- Serial.print("\n");
- }
- //---------------------------------------------------------
- void loop()
- {
- delay(1);
- word len = ether.packetReceive(); // check for ethernet packet
- word pos = ether.packetLoop(len); // check for tcp packet
- if (pos) {
- bfill = ether.tcpOffset();
- char *data = (char *) Ethernet::buffer + pos;
- if (strncmp("GET /", data, 5) != 0) {
- bfill.emit_p(http_Unauthorized);
- }
- else {
- data += 5;
- int relay=data[2] - 48; // ASCII code for the character '0' is decimal 48
- if (data[0] == ' ') {
- // If change on home page, execute function.
- homePage();
- //Debug
- for (int i = 0; i <= NB_PINS-1; i++)digitalWrite(LedPins[i],!PinStatus[i]);
- Serial.print("| F5 | ");
- } else if( relay>0 && relay<=NB_PINS ) {
- data += 4;
- if (strncmp("on ", data, 2) == 0) {
- PinStatus[relay-1] = true;
- bfill.emit_p(http_Found);
- // Debug
- Serial.print("| R");
- Serial.print(relay-1);
- Serial.print(" ON | ");
- } else if (strncmp("off ", data, 3) == 0) {
- PinStatus[relay-1] = false;
- bfill.emit_p(http_Found);
- // Debug
- Serial.print("| R");
- Serial.print(relay-1);
- Serial.print(" OFF | ");
- }
- }
- else {
- // Page not found
- bfill.emit_p(http_Unauthorized);
- }
- // Debug
- for(int i = 0; i <= NB_PINS-1; i++)
- {
- Serial.print(LedPins[i]);
- Serial.print("/");
- Serial.print(PinStatus[i]);
- Serial.print(" ");
- }
- Serial.print("\n");
- }
- ether.httpServerReply(bfill.position()); // send http response
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement