/* (C)2020 ООО "ЛИК", http://lic.com.ua КОНТРОЛЛЕР ОСВЕЩЕНИЯ С WEB-ИНТЕРФЕЙСОМ НА ARDUINO UNO + ENC28J60 Схема: http://lic.com.ua/article19.htm Соединение Arduino Nano <-> ENC28J60 D2 <-> INT D3 <-> RESET D10 <-> CS D11 <-> SI (ST) D12 <-> SO D13 <-> SCK Входа для подключения выключателей: A0,A1,A2,A3,A4,A5 Выхода для подключения реле: 4,5,6,7,8,9 */ #include //Закомментируйте эту строку, если прошивка контроллера не поддерживает Watchdog #include const int LedPin = 13; const int pins_in_count=6; //Входа для подключения выключателей int pins_in[pins_in_count] = {A0,A1,A2,A3,A4,A5}; const int pins_out_count=6; //Выхода для подключения реле, управляющих группами света int pins_out[pins_out_count] = {4,5,6,7,8,9}; int pins_state[pins_in_count]; //Массив для хранения текщего состояния группы света int pins_old_state[pins_in_count]; //Массив для хранения предыдущего состояния группы света boolean myDebug = true; //Установите false для отключения вывода отладочной информации static uint8_t mac[6] = {0xBE, 0x9F, 0x18, 0x00, 0x00, 0x00}; //MAC-адрес static uint16_t port = 80; String result=""; IPAddress ip(192, 168, 100, 80); //Укажите подходящий адрес для контроллера в вашей сети EthernetServer server(80); const char server_ip[] PROGMEM = "http://192.168.100.125"; //Укажите IP-адрес WEB-сервера (OrangePi, RaspberryPi) const char page1[] PROGMEM = "\n\n\n\n" "УПРАВЛЕНИЕ ОСВЕЩЕНИЕМ\n" "\n" "
\n
\n" "

Нет соединения с WEB сервером по адресу: @!

\n" "\n" "\n" "\n" "\n"; const char page2[] PROGMEM = "HTTP/1.1 200 OK\n" "Content-Type: text/html\n" "Pragma: no-cache\n" "Connection: close\r\n\r\n"; //Отправляем в сеть данные, которые хранятся в PROGMEM void printProgStr(EthernetClient client, const char * str, const char * str1) { char c,c1; if (!str) return; while ((c = pgm_read_byte(str++))) { if (c=='@') { for (int k = 0; k < strlen_P(server_ip); k++) { c = pgm_read_byte_near(server_ip + k); client.print(c); } } else client.print(c); } } //Перезапускаем Ethernet модуль ENC28J60 void resetENC28J60() { digitalWrite(3, LOW); delay(200); digitalWrite(3, HIGH); delay(50); } //Опрашиваем состояния входов на предмет обнаружения нажатия клавиши выключателя void ReadInput() { unsigned long PressTime = 0; int d=0; for (int i=0; i0))+","; _return[_return.length()-1]=']'; return _return; } //Начальные установки void setup() { pinMode(LedPin, OUTPUT); digitalWrite(LedPin, HIGH); //Инициализация входов к которым подключены клавиши выключателей for (int i=0;i=0) { printProgStr(client, page1, server_ip); } else if (result.indexOf("GET /ctrl/")>=0) { for (int i=0; i=0) pins_state[i] = int(not pins_state[i]); printProgStr(client, page2, server_ip); client.println(StringInput()); } client.flush(); break; } } } delay(10); client.stop(); } } void loop() { ReadInput(); EthernetUpdate(); SetOutput(); //Закомментируйте строку ниже, если прошивка контроллера не поддерживает Watchdog wdt_reset(); }