Печать
Категория: Arduino
Просмотров: 2097

Возникла потребность удаленно наживать на кнопку домофона. Собрал в эзернет розетке связку из ардуинки и сетевого контроллера и релюшки на 5 В.

Из двух готовых проектов собрал зомби-быдло-код

Сделал пассивный PoE адаптер, поставил на место.

Код под катом (компилировалось в IDE 1,8,5), необходима библиотека Ethercard

/* Подключение "ENC28J60 Module" к Arduino.

 VCC -   3.3V

 GND -    GND

 SCK - Pin 13

 SO  - Pin 12

 SI  - Pin 11

 CS  - Pin 10 Можна выбрать любой. */

 

#include <EtherCard.h>  // Необходима библиотека https://github.com/jcw/ethercard

 

// уникальный MAC Address 

static byte mymac[] = {0x5A,0x5A,0x5A,0x5A,0x5A,0x5A};

 

// IP адрес  

static byte myip[] = { 192,168,1,11 };

 

// Буфер

byte Ethernet::buffer[900];

BufferFiller bfill;

 

int LedPins = 4;

 

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>";

//------------

void homePage()

{

  bfill.emit_p(PSTR("$F"

    "<title>Arduino Door Open Webserver</title>" 

    "<p align='center'>"

    "<input type=submit value='OPEN DOOR' style=width:50%;height:200px onClick=location.href='http://192.168.1.11/?ArduinoPIN4=on'><br>"

    "</p>"),   

  http_OK);

}

 

 

void setup()

{

  Serial.begin(9600);

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);

 

  //получение адреса от DHCP

  //if (!ether.dhcpSetup()); 

  //ether.printIp("My Router IP: ", ether.myip); 

 

  //работа со статичным IP адресом 

  ether.staticSetup(myip);

  ether.printIp("My SET IP: ", ether.myip); 

  

    pinMode(LedPins,OUTPUT); 

    digitalWrite (LedPins,LOW);

}

 

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, 2) != 0) {

      bfill.emit_p(http_Unauthorized);

    }

    else {

      data += 5;

      if (data[0] == ' ') {       

        homePage(); // Return home page

      }

      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {

        //PinStatus = true;  

        digitalWrite(LedPins,HIGH);  

        delay (500);    

        digitalWrite(LedPins,LOW);  

        bfill.emit_p(http_Found);

      }

 

      else {

        // Page not found

        bfill.emit_p(http_Unauthorized);

      }

    }

    ether.httpServerReply(bfill.position());    // send http response

  }

}