Arduino Классы / Методы....
Добавлено: Вт июн 28, 2016 8:03 am
Подскажите как организовать подключение Arduino UNO + Ethernet Shild W5100 к MajorDoMo на Windows. Не нашёл инфы как создать класс с методами и свойствами в которых будет храниться история температуры и другая информация с датчиков (пока в планах, т.к. жду датчики), но уже сделал управление 8 релюшками через Arduino, и хотелось бы их управление сделать через классы. В основном попадается инфа с тем, что нужно про ESP8266, но это не то... Выручайте пожалуйста.
P.S. HTTP команды для управления Реле включения и выключения сделал немного своеобразно: в конце ссылке на вкл./выкл. не 1 и 0 стоит, а на каждое реле из 8 шт. свои значения. Думаю будет понятнее, если посмотрите скетч:
P.S. HTTP команды для управления Реле включения и выключения сделал немного своеобразно: в конце ссылке на вкл./выкл. не 1 и 0 стоит, а на каждое реле из 8 шт. свои значения. Думаю будет понятнее, если посмотрите скетч:
СпойлерПоказать
Код: Выделить всё
/*
Ethernet Web Server на Шилде W5100.
Управление реле при нажатии кнопки on/off (при вводе URL адреса) в браузере
Пример:
Адрес для доступа к реле: | Для того, чтобы включить Реле №1:
http://192.168.1.74 | http://192.168.1.74/$1
Для того, чтобы выключить Реле №2:
http://192.168.1.74/$A
и так далее....
*/
#include <EEPROM.h> //библиотека энергонезависимой памяти
#include <SPI.h> //библиотека для работы с SPI
#include <Ethernet.h> //библиотека для работы с Ethernet
boolean newInfo = 0; //переменная для новой информации
//MAC адрес вашего Ethernet-модуля
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
//указываем IP адрес
IPAddress ip(192, 168, 1, 74); //пример МОЕГО IP адреса, вы вводите сюда СВОЙ
//инифиализация библиотеки Ethernet server library
//порт 80 по умолчанию для HTTP
EthernetServer server(80);
//адреса памяти для Реле в EEPROM
int address1 = 0;
int address2 = 0;
int address3 = 0;
int address4 = 0;
int address5 = 0;
int address6 = 0;
int address7 = 0;
int address8 = 0;
void setup()
{
//инициализируем 8 пинов как выходы для реле
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
// =============Проверка циклов считывания EEPROM=============================
//цикл считывания значения из EEPROM для реле №1
if ( EEPROM.read(address1) ) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}
//цикл считывания значения из EEPROM для реле №2
if ( EEPROM.read(address2) ) {
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
//цикл считывания значения из EEPROM для реле №3
if ( EEPROM.read(address3) ) {
digitalWrite(4, HIGH);
} else {
digitalWrite(4, LOW);
}
//цикл считывания значения из EEPROM для реле №4
if ( EEPROM.read(address4) ) {
digitalWrite(5, HIGH);
} else {
digitalWrite(5, LOW);
}
//цикл считывания значения из EEPROM для реле №5
if ( EEPROM.read(address5) ) {
digitalWrite(6, HIGH);
} else {
digitalWrite(6, LOW);
}
//цикл считывания значения из EEPROM для реле №6
if ( EEPROM.read(address6) ) {
digitalWrite(7, HIGH);
} else {
digitalWrite(7, LOW);
}
//цикл считывания значения из EEPROM для реле №7
if ( EEPROM.read(address7) ) {
digitalWrite(8, HIGH);
} else {
digitalWrite(8, LOW);
}
//цикл считывания значения из EEPROM для реле №8
if ( EEPROM.read(address8) ) {
digitalWrite(9, HIGH);
} else {
digitalWrite(9, LOW);
}
//запускаем сервер с указанными ранее MAC и вашим IP
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
}
void loop()
{
//принимаем данные, посылаемые клиентом
EthernetClient client = server.available();
if (client) { //если запрос оканчивается пустой строкой
boolean currentLineIsBlank = true; //ставим метку об окончании запроса (дословно: текущая линия чиста)
while (client.connected()) { //пока есть соединение с клиентом
if (client.available()) { //если клиент активен
char c = client.read(); //считываем посылаемую информацию в переменную "с"
if (newInfo && c == ' ') { //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
newInfo = 0; //то обнуляем переменную поступления новой информации
}
if (c == '$') { //если переменная "с", несущая отправленный нам запрос, содержит символ $
//(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
newInfo = 1; //то пришла новая информация, ставим метку новой информации в 1
}
/************************************************************************************************
Примечание:
Символ $ используется как обычный символ, который разделяет 1 от 2 и так далее...
На практике применяют символ &, который разделяет новые переменные от последующих
Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value);
как видите, знак & разделяет значение переменной - ID и переменную type
***************************************************************************************************/
//Проверяем содержание URL - присутствует $1 или $A Реле №1
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'A') { //и "с" содержит A
Serial.println("ON");
digitalWrite(2, HIGH); //гасим реле
EEPROM.write(address1, 1); //сохраняем как On
}
if (c == '1') { //если "с" содержит 1
Serial.println("OFF");
digitalWrite(2, LOW); //то зажигаем реле
EEPROM.write(address1, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $2 или $B Реле №2
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'B') { //и "с" содержит B
Serial.println("ON");
digitalWrite(3, HIGH); //гасим реле
EEPROM.write(address2, 1); //сохраняем как On
}
if (c == '2') { //если "с" содержит 2
Serial.println("OFF");
digitalWrite(3, LOW); //то зажигаем реле
EEPROM.write(address2, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $3 или $C Реле №3
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'C') { //и "с" содержит C
Serial.println("ON");
digitalWrite(4, HIGH); //гасим реле
EEPROM.write(address3, 1); //сохраняем как On
}
if (c == '3') { //если "с" содержит 3
Serial.println("OFF");
digitalWrite(4, LOW); //то зажигаем реле
EEPROM.write(address3, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $4 или $D Реле №4
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'D') { //и "с" содержит D
Serial.println("ON");
digitalWrite(5, HIGH); //гасим реле
EEPROM.write(address4, 1); //сохраняем как On
}
if (c == '4') { //если "с" содержит 4
Serial.println("OFF");
digitalWrite(5, LOW); //то зажигаем реле
EEPROM.write(address4, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $5 или $E Реле №5
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'E') { //и "с" содержит E
Serial.println("ON");
digitalWrite(6, HIGH); //гасим реле
EEPROM.write(address5, 1); //сохраняем как On
}
if (c == '5') { //если "с" содержит 5
Serial.println("OFF");
digitalWrite(6, LOW); //то зажигаем реле
EEPROM.write(address5, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $6 или $F Реле №6
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'F') { //и "с" содержит F
Serial.println("ON");
digitalWrite(7, HIGH); //гасим реле
EEPROM.write(address6, 1); //сохраняем как On
}
if (c == '6') { //если "с" содержит 6
Serial.println("OFF");
digitalWrite(7, LOW); //то зажигаем реле
EEPROM.write(address6, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $7 или $G Реле №7
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'G') { //и "с" содержит G
Serial.println("ON");
digitalWrite(8, HIGH); //гасим реле
EEPROM.write(address7, 1); //сохраняем как On
}
if (c == '7') { //если "с" содержит 7
Serial.println("OFF");
digitalWrite(8, LOW); //то зажигаем реле
EEPROM.write(address7, 0); //сохраняем как Off
}
}
//Проверяем содержание URL - присутствует $8 или $H Реле №8
if (newInfo == 1) { //если есть новая информация
Serial.println(c);
if (c == 'H') { //и "с" содержит H
Serial.println("ON");
digitalWrite(9, HIGH); //гасим реле
EEPROM.write(address8, 1); //сохраняем как On
}
if (c == '8') { //если "с" содержит 8
Serial.println("OFF");
digitalWrite(9, LOW); //то зажигаем реле
EEPROM.write(address8, 0); //сохраняем как Off
}
}
if (c == '\n') { //если "с" равен символу новой строки
currentLineIsBlank = true; //то начинаем новую строку
}
else if (c != '\r') { //иначе, если "с" не равен символу возврата курсора на начало строки
currentLineIsBlank = false; //то получаем символ на текущей строке
}
if (c == '\n' && currentLineIsBlank) { //выводим HTML страницу
// =============Формируем HTML-страницу=================================================
client.println("HTTP/1.1 200 OK"); //заголовочная информация
client.println("Content-Type: text/html; charset=utf-8"); //тип и кодировка страницы
client.println("Connection: close");
// client.println("Refresh: 30"); //автоматическое обновление каждые 30 сек
client.println();
client.println("<!DOCTYPE HTML>"); //HTML тип документа
//==============Вывод значений на Web-страницу============================
client.println("<html>"); //открытие тега HTML
client.print("<title>Arduino Web Server</title>"); //название страницы
client.print("<H1>Управление освещением через Реле</H1>"); //заголовк на странице
client.println("========================================="); //линия из символом =
client.println("<br />"); //Переходим на новую строку
// Далее идут кнопки управления...
client.print("<div>(Реле №1) Родительская спальня</div>"); //надпись над кнопкой
client.print("<a href=\"/$1\"><button>On</button></a>"); //кнопка включить №1
client.print("<a href=\"/$A\"><button>Off</button></a>"); //кнопка выключить №A
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №2) Спальня Риты</div>"); //надпись над кнопкой
client.print("<a href=\"/$2\"><button>On</button></a>"); //кнопка включить №2
client.print("<a href=\"/$B\"><button>Off</button></a>"); //кнопка выключить №B
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №3) Зал</div>"); //надпись над кнопкой
client.print("<a href=\"/$3\"><button>On</button></a>"); //кнопка включить №3
client.print("<a href=\"/$C\"><button>Off</button></a>"); //кнопка выключить №C
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №4) Моя комната</div>"); //надпись над кнопкой
client.print("<a href=\"/$4\"><button>On</button></a>"); //кнопка включить №4
client.print("<a href=\"/$D\"><button>Off</button></a>"); //кнопка выключить №D
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №5) Кухня</div>"); //надпись над кнопкой
client.print("<a href=\"/$5\"><button>On</button></a>"); //кнопка включить №5
client.print("<a href=\"/$E\"><button>Off</button></a>"); //кнопка выключить №E
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №6) Прихожая</div>"); //надпись над кнопкой
client.print("<a href=\"/$6\"><button>On</button></a>"); //кнопка включить №6
client.print("<a href=\"/$F\"><button>Off</button></a>"); //кнопка выключить №F
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №7) Ванна</div>"); //надпись над кнопкой
client.print("<a href=\"/$7\"><button>On</button></a>"); //кнопка включить №7
client.print("<a href=\"/$G\"><button>Off</button></a>"); //кнопка выключить №G
client.println("<br />"); //Переходим на новую строку
client.println("<br />"); //Переходим на новую строку
client.print("<div>(Реле №8) Складская</div>"); //надпись над кнопкой
client.print("<a href=\"/$8\"><button>On</button></a>"); //кнопка включить №8
client.print("<a href=\"/$H\"><button>Off</button></a>"); //кнопка выключить №H
client.println("<br />"); //Переходим на новую строку
client.println("</html>"); //закрываем тег HTML
break; //выход из цикла
}
}
}
delay(1); //время на получение новых данных
client.stop(); //закрываем соеднение
}
}