Свободно программируемый контроллер

vganin
Offline
Зарегистрирован: 03.07.2019

Наконец то вчера были прикручены-припаены последние элементы и включены в розетку. Все заработало сразу, проверена периферия, вроде все правильно реагирует. И вот хочу поделиться этой радостью с уважаемыми форумчанами. Может тема покажется интересной. Представляю практически законченное устройство для домашней автоматизации котеджа, дома. У меня будет установлена в двух местах, плюс подарил уже две платы. Это точно не умный дом и позициционируется как устройство для управления разными устройствами в отсутствие человека, причем для разных нужд и не слишком технически грамотных людей. Поэтому большая плата для удобства присоединения периферии и пайки элементов.

vganin
Offline
Зарегистрирован: 03.07.2019

Вот картинки

b707
Offline
Зарегистрирован: 26.05.2017

а что такое "свободно программируемый" контроллер? - на картинках я вижу Ардуино-Мега, разве он не "свободно программируемый"?

vganin
Offline
Зарегистрирован: 03.07.2019

Не является умным домом. Вообще: занимаясь 30 лет системами для зданий и сооружений не могу определится- что это такое.

Новизной данной штуки считаю универсальность использования для разных целей и некоторые разработки , которые вылезли рядом.

 И Так.

Это свободнопрограммируемый контроллер имеющий на борту: 8 релейных выходов(просто валялся этот блочек); 8 аналоговых выходов 0-10 вольт; 8 температурных входов NTC20; 8 аналоговых входов; 16 цифровых входов. Последние 8 и 16 могут быть запрограммированы как угодно.

Имеется так же модуль реального времени, модуль для TCP/IP, модуль microSD, блок питания +5 вольт 3 ампера. Питается от постоянного напряжения от +12 до +36. Есть 4 строчный дисплей и 6 кнопок для управления и записи напрямую всяких уставок и параметров. Кому как заблагорассудится.

Поскольку вещь универсальная, то и скетча не будет. Но разработаны некоторые базовые программные модули:

1. Простенький сервер для вывода данных в сеть. Если есть выделенный IP,то и в интернете посмотреть можно.

2. PI - регулятор по образу и подобию алгоритма HONEYWELL CARE

3. Датчик температуры NTC20

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Позволю себе повторить вопрос коллеги, т.к. ответа не увидел. Как Вы определяете "свободнопрограммируемый контроллер" и чем он отличается от несвободно программируемого?

vganin
Offline
Зарегистрирован: 03.07.2019

Готовый можно увидеть на предыдущей. Работает отлично. На бухте кабеля 50 метров ни наводок ни сбоев. лед показывает с точностью до 0,2 градусов, так же как и кипяток. Но все равно буду тестировать. Аналог HONEYWELL- 54 ЕВРО. (просто у меня сейчас хоневел, и я занимаюсь этим профессионально)

vganin
Offline
Зарегистрирован: 03.07.2019

Извините, не увидел ответов. Свободно- имеется ввиду под разные объекты. Несвободно- это под определенное оборудование, оно параметризуется, в основном линейки типа лого у сименса, сарель- контроллеры для приточек, у шнайдера  и хоневеллтоже есть.

vganin
Offline
Зарегистрирован: 03.07.2019

К теме свободно-программируемый. Проект не альтруистический. Абсолютно разных 2 здания. В одном 6 VAV модулей (аналоговые выходы и аналоговые входы). Импульсные счетчики воды и электроэнергии ну и всякие общедомовые( вода горячая, насосы, архитектурная подсветка) Важно постоянное хранение данных со счетчиков.

Другое: Скважина, подпитка отопления, контуры ГВС, теплые полы 4 контура с комнатными датчиками, насосы разные, подогрев воды бассейна, погодозависимый газовый котел(не касается автоматики котла). Уличное освещение.

Я уже подарил 2 платы. И судя по вопросам (далек от программирования человек) концепция моей железки имеет место под солнцем.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vganin пишет:
концепция моей железки имеет место под солнцем.
Отлично!

Araris
Araris аватар
Offline
Зарегистрирован: 09.11.2012

Если это не самореклама, то в данном подфоруме кроме слов и фотографий желательна подробная информация для желающих повторить проект.

Если самореклама, то для чего она здесь ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Это там чего, ENC28J60 стоит штоли...

vganin
Offline
Зарегистрирован: 03.07.2019

Да, это ENC28J60.

Для ARARIS: При чем здесь самореклама. Я и так знаю что я молодец.  Если есть интерес, то конечно буду выкладывать. Может у меня не лучший вариант (а так оно и есть) и коллеги помогут.  Уже готовлю материал.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

vganin пишет:
... концепция моей железки имеет место под солнцем.

Да. Вы самостоятельно создали заготовку аппаратной части системы управления "умным домом" в бюджетном сегменте. Предположу, что Ваша разработка может быть востребована индивидуальными автоматизаторами, для которых покупать фирменное решение дорого, а каждый раз "паять с нуля" хлопотно и долго.

vganin пишет:
... и не слишком технически грамотных людей.

Ну что Вы... :))) Свободно-программируемый контроллер это как раз для специалистов. :)) Для специалистов, но "не программистов" идет FBD, а для "не слишком технически грамотных людей", как Вы и указывали, используется параметрическое программирование заранее заданных объектов и их свойств.

vganin
Offline
Зарегистрирован: 03.07.2019

vganin
Offline
Зарегистрирован: 03.07.2019

Это эл. схема из протеуса

vganin
Offline
Зарегистрирован: 03.07.2019

Уважаемый DUINO A.R.  Вы лучше меня уловили концепцию. Именно по этой причине и создавалось. Раньше не думал о деньгах, а теперь другие времена и цена была главным двигателем проекта

vganin
Offline
Зарегистрирован: 03.07.2019

Ну а человек(мой друг) кот попросил плату сейчас с удовольствием разбирается с IDE (к подарку еще NANO приложилось) думаю он быстро продвинется, судя по его вопролсам.

-NMi-
Offline
Зарегистрирован: 20.08.2018

vganin пишет:

Это эл. схема из протеуса


Прекрасно.
А можно с Вами посотрудничать ? Имею интерес к таким девайсам.
PS: ничего просить не буду, просто пообщаться голосом.

vganin
Offline
Зарегистрирован: 03.07.2019

-NMi- пишет:
vganin пишет:

Это эл. схема из протеуса

Прекрасно. А можно с Вами посотрудничать ? Имею интерес к таким девайсам. PS: ничего просить не буду, просто пообщаться голосом.

На предмет чего? Делать я ничего не буду, нету времени. А консультации пожалуйста. Я все же 3 месяц потратил на это. напишите почту если стесняетесь

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

vganin пишет:
Уважаемый DUINO A.R.  Вы лучше меня уловили концепцию. Именно по этой причине и создавалось. Раньше не думал о деньгах, а теперь другие времена и цена была главным двигателем проекта

На рубеже веков организация, где я работаю, разработала ПЛК для ЖКХ "все в одном" с подключением поля непосредственно к ПЛК для экономии кросса. Причем температурные входы были физического уровня (ТП, ТС) и занимали бОльшую часть аналоговых входов. На вопрос "почему ТП, ТС?", их же неудобно вести, муторно расключать и невозможно на монтаже проверить сигнал без спецтехники, ответ был такой: "В ЖКХ настолько бедные заказчики, что не могут позволить себе преобразователь "физика в 4 - 20 мА", а мы идем им навстречу". Пока запустили ПЛК в серию, владельцы в ЖКХ поменялись и приказали выкинуть "зоопарк" и сделать "как у людей" весь аналог 4 - 20 мА. А мы с серийным изделием на руках: "Здрас-с-с-те, бабаньки..." А кросс в шкафу управления всё одно пришлось ставить, т.к. без него монтажники просто "творили чудеса".

В развитие Вашей разработки могу порекомендовать подумать над идеей "мезонинного контроллера". Когда при сохранении вычислительного ядра на общей плате есть места куда по мере необходимости можно ставить небольшие модули АЦП, ЦАП, конвертеров, расширения входов/выходов, ... Связь с МК ядра, например, по I2C. Но это так, на будущее, если будут свободны "длинные зимние вечера". :)))

vganin
Offline
Зарегистрирован: 03.07.2019

Duino A.R. пишет:

vganin пишет:
Уважаемый DUINO A.R.  Вы лучше меня уловили концепцию. Именно по этой причине и создавалось. Раньше не думал о деньгах, а теперь другие времена и цена была главным двигателем проекта

На рубеже веков организация, где я работаю, разработала ПЛК для ЖКХ "все в одном" с подключением поля непосредственно к ПЛК для экономии кросса. Причем температурные входы были физического уровня (ТП, ТС) и занимали бОльшую часть аналоговых входов. На вопрос "почему ТП, ТС

 

Похоже примерно в одной каше варились. Снимаете у меня с языка. Следующей проект- сетевой контроллер. пока продумываю концепцию. периферийные модули ввода-вывода и скорее всего витая пара(че за протокол пока не понимаю) и головной с алгоритмами и логикой. Основной двигатель-дешевизна. Может 2,4 ГГЦ радио.всетаки это хобби, буду растягивать удовольствие. Всех приглашаю, буду очень признателен за любой креатив.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Вот, уже есть робкие попытки на маштабируемость. Это радует.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не могу сказать, что ENC28J60 - сетевой модуль для "не слишком технически грамотных людей".

b707
Offline
Зарегистрирован: 26.05.2017

vganin пишет:

 Следующей проект- сетевой контроллер. пока продумываю концепцию. периферийные модули ввода-вывода и скорее всего витая пара(че за протокол пока не понимаю) и головной с алгоритмами и логикой. Основной двигатель-дешевизна.

честно говоря, не въезжаю, нафига это нужно. Программировать-то все равно пользователям самим придется - а значит идея "для далеких от техники людей" как-то не просматривается. А что касается готовых дешевых ПЛК с уже встроенными выходами - у китайцев на Али. насколько я видел - их немало

vganin
Offline
Зарегистрирован: 03.07.2019

-NMi- пишет:
Вот, уже есть робкие попытки на маштабируемость. Это радует.

Не знаю как прикрепить архив для заказа плат Сейчас разберусь и прикреплю. Посылаете в китай и вам поцене 300- 600 руб за плату изготавливают. Элементы стоят до 200 руб, самое дорогое- клеммники и процессор. Несколько вечеров и вы счастливый обладатель железки. В китае можно заказать готовую плату вместе с элементами, но это не мой случай.

vganin
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

честно говоря, не въезжаю, нафига это нужно. Программировать-то все равно пользователям самим придется - а значит идея "для далеких от техники людей" как-то не просматривается. А что касается готовых дешевых ПЛК с уже встроенными выходами - у китайцев на Али. насколько я видел - их немало

Где Вы раньше были, дайте ссылочку. Может я бы ничего делать не стал

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

честно говоря, не въезжаю, нафига это нужно. 

Наверное это следует читать как "для далёких от ЛУТа людей, которые умеют писать на Си и хотят сделать какую-то автоматизацию на даче".

vganin
Offline
Зарегистрирован: 03.07.2019

sadman41 пишет:

Не могу сказать, что ENC28J60 - сетевой модуль для "не слишком технически грамотных людей".

ДЛя этой штуки я написал (вернее сдул, позаимствовал, подшаманил) готовый модуль. Он легко маштабируется. Просто копируешь строки и добавляешь. Там где тексты и переменные заменяешь на свое. Я тоже не особо в этом.

sadman41
Offline
Зарегистрирован: 19.10.2016

vganin пишет:

sadman41 пишет:

Не могу сказать, что ENC28J60 - сетевой модуль для "не слишком технически грамотных людей".

ДЛя этой штуки я написал (вернее сдул, позаимствовал, подшаманил) готовый модуль. Он легко маштабируется. Просто копируешь строки и добавляешь. Там где тексты и переменные заменяешь на свое. Я тоже не особо в этом.

Не понимаю, что за "модуль" и куда он масштабируется. Предпочёл бы глянуть код.

Но то, что ENC капризный - это факт. И расположен он не очень удачно.

b707
Offline
Зарегистрирован: 26.05.2017

vganin пишет:

Где Вы раньше были, дайте ссылочку. Может я бы ничего делать не стал

https://aliexpress.ru/item/4000030424495.html

https://aliexpress.ru/item/4000030448534.html

даже дешевле тысячи

https://aliexpress.ru/item/4000473689213.html

хотя, конечно, может с ними что-то не так - я с ПЛК не работаю.

 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Наверное это следует читать как "для далёких от ЛУТа людей, которые умеют писать на Си и хотят сделать какую-то автоматизацию на даче".

ну то есть это не "свободно-программируемый контроллер", это просто очередной "шилд для ардуино", создатель которого попытался впихнуть в одну плату все полезные, с его точки зрения. модули ?

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

 Всего 3 месяца, шустро. Я свой уже третий год ваяю. На таких дисплеях и с кнопками лет 15 назад собирал. Есть же сенсорные кнопки и клавиатуры, есть Ne[tion. Значит я тоже сделал "свободно программируемый" контроллер :) Надо его тоже здесь повесить. Только делать один, универсальный контроллер и пихать всё в него тупиковый путь, на один раз. Модульная конструкция куда интереснее, т.к. в дальнейшем  можно легче расширять. Да и если исполнительный модуль, особенно с реле, будет дальше от центрального мозга, ему легче будет.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

vganin пишет:
  Следующей проект- сетевой контроллер. ...  Основной двигатель-дешевизна. ...

Если Вы правильно попали с набором каналов ввода-вывода в знакомой Вам нише проектов, то теперешнее решение - самое дешевое. Всё остальное будет заметно дороже и очень сильно увеличиться трудоемкость, особенно в части программирования.

vganin пишет:
Следующей проект- сетевой контроллер. пока продумываю концепцию. периферийные модули ввода-вывода и скорее всего витая пара(че за протокол пока не понимаю) и головной с алгоритмами и логикой.

Мезонинная архитектура позволит затратить минимальные усилия на организацию модулей ввода-вывода (программирование, помехозащищенность, аппаратные затраты на сеть). Все модули близко к друг другу на одной плате, общее и хорошее питание, микросхемы ввода-вывода (ВВ) понимают I2C сразу на встроенном уровне.

Как только Вы уходите на классическую распределенку по витой паре, то в каждом модуле ВВ свой МК для поддержки сети и масса труда по освоению и реализации протоколов. Хоть того же Modbus. Придумывать что-то совсем свое будет еще затратней. На такое можно идти только по "прямым врачебным показаниям", когда без самодельной распределенки ну совсем никак.

Хотя... всё реализуемо. Вопрос окупаемости затрат при правильной постановке задачи.

vganin
Offline
Зарегистрирован: 03.07.2019

sadman41 пишет:

Не понимаю, что за "модуль" и куда он масштабируется. Предпочёл бы глянуть код.

Но то, что ENC капризный - это факт. И расположен он не очень удачно.

Есть рабочий скетч, который был написан в протеусе, потом многократно правился, дописывался, переписывался, там куча всего лишнего. В общем мой позор. Если я его выложу, то меня порвут здешние старожилы. Это уже было, когда я здесь прописался. Народ тут крайне недружелюбный. Я постараюсь обгрызть лишнее и выложить

vganin
Offline
Зарегистрирован: 03.07.2019

для b707:  немного расстроился, идея похожа, конечно у меня точек поболе, но в общем имеет место быть и цена преемлема. Но это завод. Если бы у меня был завод то было бы точно круче. и если бы я делал 1000 штук то точно намного дешевле. Но ни то, ни другое- не моя тема, то будем жить в предложенных обстоятельствах.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

vganin пишет:
Народ тут крайне недружелюбный.

- Мужчина! Проводите меня, а то уже ночь, а мне домой через кладбище идти.

- Пойдемте.

- Ой, мужчина, спасибо Вам, а то я так покойников боюсь.

- Да ладно, Вам, девушка. Чего нас бояться...

vganin
Offline
Зарегистрирован: 03.07.2019
[code]
#include <Wire.h>                                              //Контроллер
#include <LiquidCrystal_I2C_OLED.h>                            //Контроллер
LiquidCrystal_I2C OLED1(0x27,20,4);                           // Контроллер

#include <SPI.h>                                                    //Сервер
#include <UIPEthernet.h>                                            //Сервер

// определяем конфигурацию сети
byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};                    // MAC-адрес
byte ip[] = {192, 168, 1, 10};                                        // IP-адрес

EthernetServer server(80);                                            // создаем сервер, порт 80
EthernetClient client;                                                // объект клиент

boolean flagEmptyLine = true;                                         // признак строка пустая
char tempChar;
char urnFromRequest[51];                                              // строка URN из запроса
boolean urnReceived= false;                                           // признак URN принят
unsigned int indUrn;                                                  // адрес в строке URN

uint32_t myTimer, myTimer1, myTimer2,myTimer3,myTimer4, myTimer5;     //Счетчики
uint32_t  myTimer6,myTimer7,myTimer8, myTimer9, myTimer10;            //Счетчики
float RT0, VR0, ln, TX0,TX01,TX02,TX03,TX04,TX05,TX06,T0, VRT0,NTC0,DJ1,DJ2;
int i,j,k,DJSW,PLUS,MINUS;

//#define RT 20000                                  // Ом
#define B 3950                                     // K
#define VCC 5.0                                    //Напр-е питани
#define R 20000                                    //R=20 КОм

//переменные

//таблица для экранного меню
const char *menu[10][10]={
{"Temp C\337","Temp F\337","Pressure","Current","Napruga","Power"},
{"ROOM_Temp ","data12 ","data13 ","data14 ","data15 ","data16 "},
{"Smoosh1 ","data22 ","data23 ","data24 ","data25 ","data26 "},
{"Smoosh2 ","data32 ","data33 ","data34 ","data35 ","data36 "},
{"Smoosh3 ","data42 ","data43 ","data44 ","data45 ","data46 "},
{"Smoosh4 ","data52 ","data43 ","data54 ","data55 ","data56 "},
{"Smoosh5 ","data62 ","data63 ","data64 ","data65 ","data66 "},
{"Smoosh6   ","data72 ","data73 ","data74 ","data75 ","data76 "},
{"C\337","F\337","Bar","Amp","Volt","Watt"},
};

//Таблица вычисляемых переменных

float data[10][10]={
{NTC0,0,0,0,0,0},
{TX01,0,0,0,0,0},
{TX02,0,0,0,0,0},
{TX03,0,0,0,0,0},
{TX04,0,0,0,0,0},
{TX05,0,0,0,0,0},
{TX06,0,0,0,0,0},
};


void setup()
{ 
pinMode(22, OUTPUT); 
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);  
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);  
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);

pinMode(14, INPUT);                                               // кнопка "влево"
pinMode(15, INPUT);                                               // кнопка "вправо"
pinMode(16, INPUT);                                               // кнопка "вверх"
pinMode(17, INPUT);                                               // кнопка "внис"
pinMode(18, INPUT);                                               // кнопка "плюс"
pinMode(19, INPUT);                                               // кнопка "минус" 


 OLED1.backlight(); 

 OLED1.init();                     
  OLED1.clear();
  OLED1.print("Proba"); //вывод английского
  OLED1.setCursor(2, 1); //середина верхней строки
 
  Ethernet.begin(mac, ip);  // инициализация контроллера
  server.begin(); // включаем ожидание входящих соединений
//  Serial.begin(9600);    
//  Serial.print("Server address:");
//  Serial.println(Ethernet.localIP()); // выводим IP-адрес контроллера
//  Serial.print("");
 

 
}
void loop(){
if( digitalRead(18)== 1) digitalWrite(22,HIGH);
else digitalWrite(22,LOW); 

 
  VRT0 = analogRead(A0);             //Считываем аналоговое значение VRT
  VRT0 = (VCC / 1023.00) * VRT0;      //Преобразуем в напряжение
  VR0 = VCC - VRT0;
  RT0 = VRT0 / (VR0 / R);              //Сопротивление RT
  T0 = 25 + 273.15;                 //Температура T0 из даташита, преобразуем из цельсиев в кельвины 
  ln = log(R / RT0);
  TX0 = (1 / ((ln / B) + (1 / T0))); //Температура с термистора
  TX0 = TX0 - 273.15;                 //Преобразуем в цельсии

if (millis() - myTimer4 >= 10000) {
    myTimer4 = millis();TX01=TX0;};
if (millis() - myTimer5 >= 15000) {
    myTimer5 = millis();TX02=TX0;};
if (millis() - myTimer6 >= 25000) {
    myTimer6 = millis();TX03=TX0;};
if (millis() - myTimer7 >= 37000) {
    myTimer7 = millis();TX04=TX0;};
if (millis() - myTimer8 >= 48000) {
    myTimer8 = millis();TX05=TX0;};
if (millis() - myTimer9 >= 59000) {
    myTimer9 = millis();TX06=TX0;};

NTC0=(TX01+TX02+TX03+TX04+TX05+TX06)/6;


if (millis() - myTimer >= 1000) {                               //Обновление дисплея
myTimer = millis();
  OLED1.clear();
  OLED1.setCursor(0, 0); 
  OLED1.outStr(menu[0][0]);
  OLED1.setCursor(0, 1); 
  OLED1.outStr(menu[1][0]); 
  OLED1.setCursor(10, 1);
  OLED1.print(NTC0);OLED1.print(" C\337");
  OLED1.setCursor(0, 2);
  OLED1.print(PLUS);

  OLED1.setCursor(10, 2);
  OLED1.print(MINUS);
  OLED1.setCursor(0, 3);
  OLED1.print(NTC0);

  OLED1.setCursor(7, 3);
  OLED1.print(analogRead(A1) );
OLED1.setCursor(13, 3);
  OLED1.print(digitalRead(18) );

}

 

  client = server.available();                                               // ожидаем объект клиент
  if (client) {
    flagEmptyLine = true;
    urnReceived = false;
    indUrn=0xffff;
 //   Serial.println(F("New request from client:"));

    while (client.connected()) {
      if (client.available()) {
        tempChar = client.read();

        // прием URN
        if( urnReceived == false ) {
          
          if( indUrn == 0xffff ) {
            // пропуск метода
            if( tempChar == '/' ) indUrn=0;  
          }
          else {
            // запись строки
            if( tempChar == ' ' ) {
              // URN закончен
                urnFromRequest[indUrn]=0;
                urnReceived = true;              
            }
            else {
              // загрузка символа URN в строку
              urnFromRequest[indUrn] = tempChar;
              indUrn++;
              if( indUrn > 49 ) {
                // переполнение
                urnFromRequest[50]=0;
                urnReceived = true;
              }
            }            
          }          
        }
        
        if (tempChar == '\n' && flagEmptyLine) {

          // управление светодиодом
          if( strcmp(urnFromRequest, "ON") == 0) digitalWrite(2, HIGH);
          else if( strcmp(urnFromRequest, "OFF") == 0) digitalWrite(2, LOW);

          if( strcmp(urnFromRequest, "ON1") == 0) digitalWrite(6, HIGH);
          else if( strcmp(urnFromRequest, "OFF1") == 0) digitalWrite(6, LOW);
 
          if( strcmp(urnFromRequest, "Yes") == 0) digitalWrite(7, HIGH);
          else if( strcmp(urnFromRequest, "NO") == 0) digitalWrite(7, LOW);

            if( strcmp(urnFromRequest, "ON2") == 0) PLUS = 0;
          else if( strcmp(urnFromRequest, "OFF2") == 0) PLUS = 1; 

          if( strcmp(urnFromRequest, "ON3") == 0) MINUS = 0;
          else if( strcmp(urnFromRequest, "OFF3") == 0) MINUS = 1; 
          // пустая строка, ответ клиенту
          client.println(F("HTTP/1.1 200 OK"));  // стартовая строка
          client.println(F("Content-Type: text/html; charset=utf-8"));  // тело передается в коде HTML, кодировка UTF-8
          client.println(F("Connection: close"));  // закрыть сессию после ответа
          client.println(F("Refresh: 5")); 
          client.println(); // пустая строка отделяет тело сообщения
          client.println(F("<!DOCTYPE HTML>"));  // тело сообщения

          client.println(F("<html>"));
          client.println(F("<font size=\"5\">"));
          // состояние светодиода
          if( digitalRead(2) == HIGH ) client.println(F("<font color=\"#FF0000\" size=\"5\">Светодиод включен</font></div>"));            
          else client.println(F("<font color=\"#00FFFF\" size=\"5\">Светодиод выключен</font></div>"));            

          if( digitalRead(7) == HIGH ) client.println(F("<font color=\"#FF0000\" size=\"5\">ПОШЕЛ САМ</font></div>"));            
          else client.println(F("<font color=\"#00FFFF\" size=\"5\">И ТЫ ТОЖЕ</font></div>"));            
          
          
          client.println(F("</font><br><br><font size=\"4\"><a href=\"http://192.168.1.10/ON\"><button><font size=\"4\">Включить светодиод</font></button></font><font size=\"4\"><a href=\"http://192.168.1.10/OFF\"><button><font size=\"4\">Выключить светодиод</font></button></a></font>"));          
          client.println(F("</font><br><br><font size=\"4\"><a href=\"http://192.168.1.10/ON1\"><button><font size=\"4\">Включить светодиод1</font></button></a></font><font size=\"4\"><a href=\"http://192.168.1.10/OFF1\"><button><font size=\"4\">Выключить светодиод1</font></button></a></font>"));  

          client.println(F("</font><br><br><font size=\"4\"><a href=\"http://192.168.1.10/Yes\"><button><font size=\"4\">ХХХХХХХХХХХХХ</font></button></font><font size=\"4\"><a href=\"http://192.168.1.10/NO \"><button><font size=\"4\">ЧЕГО МОЛЧИШЬ</font></button></a></font>"));  
         
          client.println(F("</font><br><br><font size=\"4\"><a href=\"http://192.168.1.10/ON2\"><button><font size=\"4\">След Столбец</font></button></font><font size=\"4\"><a href=\"http://192.168.1.10/OFF2 \"><button><font size=\"4\">Остановить</font></button></a></font>"));
          client.println(F("</font><br><br><font size=\"4\"><a href=\"http://192.168.1.10/ON3\"><button><font size=\"4\">След Строка</font></button></font><font size=\"4\"><a href=\"http://192.168.1.10/OFF3 \"><button><font size=\"4\">Остановить</font></button></a></font>"));
          
          client.println(F("<div><font size=\"5\" face=\"Times\">Температура в помещении</font>&nbsp;&nbsp;&nbsp; <font size=\"5\" face=\"Times\">"));
          client.print(data[j][i] );
          client.println(F("</b></font><font size=\"4\" color=\"#0000ff\"> </font><font color=\"#FF0000\" size=\"5\">C°</font></div>")); 
          client.println("</html>");

         // Serial.println(urnFromRequest) ;          
          break;
        }
        if (tempChar == '\n') {
          // новая строка
          flagEmptyLine = true;
        } 
        else if (tempChar != '\r') {
          // в строке хотя бы один символ
          flagEmptyLine = false;
        }
      }
    }
    delay(1);
    // разрываем соединение
    client.stop();
  //  Serial.println(F("Break"));
  }
}
[/code]

 

vganin
Offline
Зарегистрирован: 03.07.2019

нашел один из вариантов, прошу не ругаться. Есть маленький кусочек "smoosh"- усреднение за время,тоже может понадобиться для климатических и погодозависимых алгоритмов.

Сам я сяду за написание своего скетча заново чуть позже. Зимой ничего менять в системе не буду, а то можно замерзнуть, так что уважаемым спецам программирования моя тушка не достанется( это шутка на всякий случай, а то тут с юмором туго, если посмотреть мою первую тему на форуме)

vganin
Offline
Зарегистрирован: 03.07.2019

Здесь можно скачать гербер- пакет для изготовления платы

ttps://cloud.mail.ru/public/3DLt/hQ1HjFmDz

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, хочу сказать, что работа с ENC в представленном исходнике стандартна и вполне себе может вести к "неожиданному" зависанию модуля. Я бы советовал заменить в следующей ревизии контроллера сетевой модуль на что-то из Wiznet (W5100, W5500).

Altcms
Altcms аватар
Offline
Зарегистрирован: 17.09.2017

Для дачи пойдёт простенькой теплицей управлять, только ENC28J60, картридер, кнопки убрать и поставить w5100 там и картридер есть (как sadman41 советует), а лучше esp8266 чтоб с витухой не париться, кнопки на энкодер поменять. А так аккуратно сделано.

vganin
Offline
Зарегистрирован: 03.07.2019

sadman41 пишет:

Ну, хочу сказать, что работа с ENC в представленном исходнике стандартна и вполне себе может вести к "неожиданному" зависанию модуля. Я бы советовал заменить в следующей ревизии контроллера сетевой модуль на что-то из Wiznet (W5100, W5500).

Возможно я так и сделаю. Поставлю WIFI или посмотрю что из предложенного, плата и эта подойдет. Главное чтоб на алгоритмы не влияло. В связи с этим вопрос: ардуино вообще виснет или нет и как это может выражаться. не разу не было, что бы входы-выходы алгоритмы не обрабатывали. А это главное.

MaksVV
Offline
Зарегистрирован: 06.08.2015

alex_r61 пишет:
Значит я тоже сделал "свободно программируемый" контроллер :) Надо его тоже здесь повесить.

и я в ваших рядах)), свой "повесил". 

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

MaksVV пишет:

и я в ваших рядах)), свой "повесил". 

 Ну я не стал делать такие "портянки". У меня размер скромнее. Сделал под корпус на дин рейку. Сбором информации с датчиков и релюхами занимаются другие модули. "Не царское это дело..." релюхами щёлкать. Да и после Nextion текстовые индикаторы убого смотрятся, особенно с моим зрением :) Сейчас вот импульсными реле заинтересовался. В модуле управления щита три поставил. И новые релейные модули на них буду делать.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

alex_r61 пишет:
У меня размер скромнее.
Ну, ты, это ..., не переживай! Не это главное!