/* ----------------------- Подключаємо піни "ENC28J60 Module" до Arduino Uno. VCC - 3.3V GND - GND SCK - Pin 13 SO - Pin 12 SI - Pin 11 CS - Pin 10 Можна вибрати будь-який. ------------------ */ #include // Подключаєм скачану бібліотеку. https://yadi.sk/d/R57sVoglbhTRN //#include // MAC Address має бути унікальним у вашій мережі. Можна змінити. static byte mymac[] = { 0x5A,0x5A,0x5A,0x5A,0x5A,0x5A }; // ip статичний static byte myip[] = { 192,168,1,210 }; // Буфер, чим більше даних на Web сторінці, тим більше потрібне значення буфера. byte Ethernet::buffer[900]; BufferFiller bfill; // Масив задіяних номерів пінів Arduino, для керування 4 реле. int LedPins[] = { 2,3}; // Масив для фіксації змін. boolean PinStatus[] = { 1,2}; //------------- 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" "

401 Unauthorized

"; //------------ // Робимо функцію для оформлення нашої Web сторінки. void homePage() { bfill.emit_p(PSTR("$F" "ArduinoPIN Webserver" "Comanda Open: $F
" "Comanda Close $F
"), http_OK, PinStatus[1]?PSTR("off"):PSTR("on"), PinStatus[1]?PSTR("ON"):PSTR("OFF"), PinStatus[2]?PSTR("off"):PSTR("on"), PinStatus[2]?PSTR("ON"):PSTR("OFF")); } //------------------------ void statusPage() { if(digitalRead(5)==LOW) PinStatus[2]=false; if(digitalRead(6)==LOW) PinStatus[2]=true; bfill.emit_p(PSTR("$F" "$F"), http_OK, PinStatus[2]?PSTR("on"):PSTR("off"), PinStatus[2]?PSTR("ON"):PSTR("OFF")); } void setup() { Serial.begin(9600); // По замовчуванню в бібліотеці "ethercard" (CS-pin) = № 8. // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0). // and change it to: Змінюємо (CS-pin) на 10. // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0). if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0); // if (!ether.dhcpSetup()); // Виводимо в Serial монітор IP адресу, яку нам автоматично присвоїв наш Router. // Динамічна IP адреса незручна, бо періодично змінюється. // Нам доведеться часто дізнаватися, яка адреса нашої Web сторінки. // ether.printIp("My Router IP: ", ether.myip); // Виводимо в Serial монітор IP адресу, яку нам присвоїв Router. //Також ми можемо встановити статичну IP адресу нашої сторінки і звертатися до Arduino по ній ether.staticSetup(myip); ether.printIp("My SET IP: ", ether.myip); // Виводимо в Serial монітор статичну IP адресу. //----- for(int i = 0; i <= 2; i++) { pinMode(LedPins[i],OUTPUT); digitalWrite (LedPins[i],HIGH); PinStatus[i]=false; } pinMode(4,INPUT); //кнопка pinMode(5,INPUT); // close pinMode(6,INPUT); //open } // -------------------------------------- void loop() { digitalWrite (2,LOW); delay(1); // Смикаєм мікроконтролер. if (digitalRead(4)==LOW) { digitalWrite (2,HIGH); PinStatus[1] = true; delay(500); PinStatus[1] = false; digitalWrite (2,LOW); } word len = ether.packetReceive(); // check for ethernet packet / перевірити ethernet пакети. word pos = ether.packetLoop(len); // check for tcp packet / перевірити TCP пакети. 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; if (data[0] == ' ') { homePage(); // Return home page Якщо виявлено зміни на сторінці, запускаємо функцію. for (int i = 0; i <= 2; i++)digitalWrite(LedPins[i],!PinStatus[i+1]); } // "16" = кількість символів "?ArduinoPIN1=on ". else if (strncmp("open ", data, 4) == 0) { digitalWrite (2,HIGH); PinStatus[1] = true; delay(500); PinStatus[1] = false; digitalWrite (2,LOW); bfill.emit_p(http_Found); } else if (strncmp("status ", data, 6) == 0) { statusPage(); } //------------------------------------------------------ //--------------------------- else { // Page not found bfill.emit_p(http_Unauthorized); } } ether.httpServerReply(bfill.position()); // send http response } }