Перейти к содержанию

Рекомендуемые сообщения

Микроконтроллеры в помощь аквариумисту и среда разработки Arduino IDE (ссылка на скачивание).

Есть разные контроллеры, но сейчас оптимальный выбор это ESP32 и ESP8266, которые имеют на борту Wi-Fi и Bluetooth интерфейсы.
Цена контроллеров доступна для любого желающего и, что не маловажно, эти контроллеры всё время совершенствуются и уменьшаются в размерах.

Для практического примера можно взять контроль температуры в аквариуме.

Возьмем простой и дешевый контроллер "ESP8266 WeMos D1 Mini" на алике его цена 150р с доставкой..
image.jpg.60fc9969bc2277ea967a6b2fa8bb68a8.jpg

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

Но начнем с простого. Измерить температуру.
В этом нам поможет цифровой датчик DS18B20 в водонепроницаемом исполнении и его цена с доставкой около 100р..
image.jpg.d2134948a243138d377cad0a99707aef.jpg

Т.к. тема не про ссылки на товары на алике, то оставляю возможность поиска нужных вещей участникам темы.

Небольшая остановка, чтоб Начать тему и продолжу.

Чтоб начать:
1. Скачать и установить среду разработки Arduino IDE
2. Настроить интерфейс и подключить библиотеки и репозитории менеджера плат.
3. Попробовать что-то сделать.

1. Наверняка со скачиванием проблем не возникло.

2. Настройка интерфейса сводится к выбору размера шрифта и указанию где программа будет искать информацию по платам ESP32|ESP8266
image.jpg.0123be056e897b948c5a215efbd23fa6.jpg
В поле "Дополнительные ссылки для Менеджера плат:"
Вставить:

http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Собственно это вся настройка, дальше творчество. =)

Т.к. начинаем мы с температуры, то понадобится библиотека и вот как ее установить: Инструменты - Управлять библиотеками
image.thumb.png.33411c40cc569a425ba05cc73230fecd.png

В открывшейся форме вбиваем в поиск "Dallas" и если библиотека еще не установлена, устанавливаем ее..
image.jpg.57d80eb0a75e750b0e0c0e974ba93100.jpg

В Примерах появится пункт "DallasTemperature", предоставленный самой библиотекой. Я Выбрал пример "oneWireSeach". Этот пример найдет подключенный датчик или датчики температуры, покажет их физические адреса и пины, на которых датчик/датчики сидят. Пин - это точка подключения, которая может быть и входом и выходом (как настроите).
image.thumb.png.8bee7d6bfe69966af5428456cb39650e.png

Дальше будем писать, если появится интерес к теме, а не просто писать. :ap:

Поделиться сообщением


Ссылка на сообщение

Не сказал про выбор плат, а это важно!
Чтоб выбрать нужную (имеющуюся) плату тыцкаем "Инструменты" - "Плата" и в списке находим нужную..
image.thumb.png.6e3af375d768b68aa7be21a045f745a3.png

Чтоб платы появились в списке, необходимо в менеджере плат установить собственно репозитории этих плат.
В поиск вбиваем ESP и устанавливаем нужное...
image.jpg.19cd6fa708eadce5ced28c9b43f0c9e4.jpg

Поделиться сообщением


Ссылка на сообщение

Так, хорошо. Заказать из Китая не проблема. Пока буду ждать товары, что-то нужно делать? Корпус там или что-то в этом роде.

Питание. Посмотрел пару товаров на Али. Про питание ни слова, но упоминается разъем: тип С. Значит от блока питания зарядки смартфона можно питать?

 

Поделиться сообщением


Ссылка на сообщение
4 часов назад, Haaans сказал(а):

Питание

Обычно на платах, типа той, в начеле темы, питание можно подать тремя способами.

Через USB, через пин VIN (7-10В) и напрямую на пин 3,3В.

Для контроллера разницы нет, но на разных этапах сборки конечного устройства, я использую разные варианты. В начале USB, т.к. через него производится запись скомпилированного кода в контроллер, а кода все готово и настроена "прошивка по воздуху", то питание делаю через внешний стабилизатор напряжения 3.3В. Например такой - //Мини-модуль понижающего преобразователя, 3 А, 5-30 в 3,3В, 5В, 12В за https://aliexpress.ru/item/1005003880321464.html

Да, на контроллерах есть свой стабилизатор (на пине VIN) но мне нравится концепция "каждый занимается своим делом, но хорошо". Стабилизатор контроллера всё равно будет понижать напряжение до 3.3В и при этом разницу выделять в виде тепла. По этому мне нравится подавать на контроллер именно то питание, которое ему нужно, а греется пусть тот, кто для этого создан.

Ток потребления контроллера ничтожен. На весь проект с обвесом, хватит вот такого БП на 5В - https://aliexpress.ru/item/1005003880321464.html

Прошу прощения, с телефона неудобно и ссылки и картинки и "нюансы" оформления сообщения, типа Интер, это не новая строка, а новый абзац... (не удобно).

Поделиться сообщением


Ссылка на сообщение
5 часов назад, Haaans сказал(а):

Корпус там или что-то в этом роде.

Для крайней самоделки для работы, брал корпус такой вот:
image.jpg.652b66b1fff53a607a4e9c2321832265.jpg

В него помещается контроллер, блок питания + стабилизатор напряжения,  розетка с выключателем и одноканальное твердотельное реле, для управления нагрузкой 220В.
Блок питания
image.jpg.907483d4f1d5b4a438bb4058a19fc6d0.jpg

Розетка с выключателем
image.jpg.391407ee3ae3b384b530ea0e6240d0f6.jpg

Твердотельное реле 220В 2А
image.jpg.fa7d7a0fe8ca86c84144ddf27c7c8d2e.jpg

Стабилизатор понижайка 5-30В до 3,3В
image.jpg.1fec990c6abb05fc90ba5bdb2994a032.jpg

Поделиться сообщением


Ссылка на сообщение
2 часов назад, VALKNUT сказал(а):

Для крайней самоделки для работы, брал корпус такой вот

Радует, что кто-то этой темой озаботился)) Я хотел взяться за это, но остановился...

Мне не прокатило, что если собирать нормальное самостоятельное устройство, то надо городить "этажерку" и непонятно на что хватит его памяти.

Если вы собрали, напишите все функции, которые выполняются.

Я хотел сделать управление светом, помпы ночью выключать в нескольких аквах и чтобы можно было отдельной кнопкой включть-выкл свет на каждой акве.

И подогревалку с отдельным термостабилизатором. 

....На ардуино есть сомнения, что получится, сейчас делаю управление на основании планшета или смартфона...

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, Lx671 сказал(а):

Если вы собрали, напишите все функции, которые выполняются.

Да собрал, разной степени сложности. Начинал с Arduino Uno, Arduino Mega... но вырастал быстро из плат и в итоге сейчас 2 акваса управляются платами ESP32. Один аквас на" ESP32 CH9102X", второй на " DOIT ESP32 DEVKIT V1 ".
В планах переделка второго на плавное включение освещения, как на первом. Понятное дело, что температура измеряется и регулируется на обоих аквасах.

Поделиться сообщением


Ссылка на сообщение
1 час назад, VALKNUT сказал(а):

Один аквас на" ESP32 CH9102X"

Ну правильно, что с ардуино сразу понял... У вас на этих устройствах дисплей, часы на нем и все управление кнопками есть или с компа текст кидаете?

Поделиться сообщением


Ссылка на сообщение
31 минут назад, Lx671 сказал(а):

У вас на этих устройствах дисплей, часы на нем и все управление кнопками есть или с компа текст кидаете?

Дисплей отдельно. Самостоятельное устройство, иногда беру его с собой в поездки.
image.thumb.png.070a3820a21477a3b4e9187e56c5d2f0.png

В одном устройстве часы RTC DS3231. в другом время берется с сервера.
Управление со смартфона.
Первое устройство - маленький аквас, но это устройство будет заменено новым*, с 5-ю канальной регулировкой света/цвета.
image.thumb.png.ec6749823b0acbe65e5b62f403531919.pngimage.thumb.png.d5e57e0d39e415b397192fe0f51cd407.pngimage.thumb.png.80363c56349a5ef1ebe1046cbb03ecba.pngimage.thumb.png.3bb18f29c3c61bf0b75f0211d2c3bc5a.pngimage.thumb.png.2ed7f6c2719c4302fc48287777dcb5a7.png

Второе устройство - большой аквас:
image.thumb.png.88696e2990eab4b73da4857f94a4ec6a.pngimage.thumb.png.03dbf43f9dcb53c6bcfd04b03cac5bac.pngimage.thumb.png.82560cab7e6f143c395689cc25fc6222.pngimage.thumb.png.e05b4e887e852a7e6b777518ea191a92.pngimage.thumb.png.5677f21026a58f8424eed955d3df2c93.pngimage.thumb.png.50b4b195aa924e9f769c8bf6f52ca45f.pngimage.thumb.png.7a71dec6c05c8f1a6ddfb1390fcb9c88.png

*Новое устройство для замены в маленьком аквариуме.. в разработке. Пока всё на коленке.. ходовые прошло. но надо садиться и доделывать. Жду скучные зимние вечера =)))
image.thumb.png.918d1ac19d81f021a3b815caf6a43286.pngimage.thumb.png.e87ee8aec94304f9eda96aa38184d514.pngimage.thumb.png.509ea71d6cbecc5617d8b6f2616ae0f7.png

Поделиться сообщением


Ссылка на сообщение
1 час назад, VALKNUT сказал(а):

Самостоятельное устройство, иногда беру его с собой в поездки

Оно по интернету данные получает через смартфон?

1 час назад, VALKNUT сказал(а):

будет заменено новым*, с 5-ю канальной регулировкой света/цвета

Этот софт от чего? Светильника ? Светильник фирменный и коннектится с ESP32?  Или софт для ESP32 дается?

И почему нельзя на 1-м ESP32 сделать все?

Поделиться сообщением


Ссылка на сообщение

24 минут назад, Lx671 сказал(а):

Оно по интернету данные получает через смартфон?

Да, по Wi-Fi устройства подключаются к серверу,по "как угодно" срамофон тоже подключается к серверу.

24 минут назад, Lx671 сказал(а):

Этот софт от чего? Светильника ? Светильник фирменный и коннектится с ESP32?  Или софт для ESP32 дается?

Этот софт для Arduino (ESP), называется Blynk. На локальном железном сервере устанавливается серверная часть Blynk, написан на Java. Работает и под Win и под Linux (у меня на Linux), к нему подключаются устройства и смартфон. Для подключения требуется, чтоб был открыт порт сервера на роутере. IP у меня белый, по этому никаких сложностей нет.

Светильник "самофирменный", ни к чему не коннектится, управляется с моего "управлятора".

24 минут назад, Lx671 сказал(а):

И почему нельзя на 1-м ESP32 сделать все?

Нам ли боярам в ESPшках стеснение иметь? :ap:
Никто не запрещает делать на одной ESP, но мне удобней на разных. Это мой выбор.
Более того, на самом новом проекте, который будет на маленьком аквасе, у меня вообще климатом и светом будут заниматься 2 разных ESP. Климат будет под ESP8266, а свет и всё остальное под ESP32.

А решение вынести дисплей на отдельное устройство, как раз и было вызвано тем, что просто взяв дисплей с собой на работу, и поставив рядом с монитором, отпадает надобность лезть в смартфон, чтоб поинтересоваться отслеживаемыми параметрами.
Даже в дороге, на машине.. запускаю точку доступа на смарте, дисплей получает интернет по Wi-Fi со смарта, подключается к серверу и инфа вся на виду.. вопрос не в том, нужно это или нет, а в том, что можно. Ну, а мне всегда было интересно попробовать что-то ТАКОЕ... вот и появился дисплей-путешественник.

Поделиться сообщением


Ссылка на сообщение
5 часов назад, VALKNUT сказал(а):

Светильник "самофирменный", ни к чему не коннектится, управляется с моего "управлятора".

Вот этот момент интересует)) Если сам собирал, то под их софт должна быть схема подключения конструктора)) И как-нибудь собирать не получится. Где схема??

У меня самопальные светильники, но с 1-м цветом, все проще)) На RGB можно 3 таких врубить))

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

В общем я понял - это система подключается типа как ip-камеры и розетки умные. Называется "через большого брата".

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

Поделиться сообщением


Ссылка на сообщение
1 час назад, Lx671 сказал(а):

Вот этот момент интересует)) Если сам собирал, то под их софт должна быть схема подключения конструктора)) И как-нибудь собирать не получится. Где схема??

Вероятно мы думаем о разных вещах. Что такое "схема" в вашем понимании?
Если это схема подключения периферийных устройств к контроллеру, то скорее всего она Вам будет не интересна, т.к. большая часть пинов (выводов контроллера) может быть запрограммирована как удобно. Хотите, ШИМ сигнал с пина посылаете, хотите отправляете логические 0 или 1 или используете как ЦАП (цифро-аналоговый преобразователь) когда нужно измерить значение потенциометра и преобразовать это в число...

1 час назад, Lx671 сказал(а):

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

Мне известны 3 способа работы с цифровыми датчиками температуры DS18B20. (предполагается, что их как минимум 2)
1. Обращение по физическому адресу датчика. Есть свои плюсы и минусы. Из плюсов - не нужен поиск и идентификация датчика, обращаемся напрямую. Из минусов - у каждого датчика уникальный адрес и если меняем датчик, надо переписывать/перезаливать софт.
2. Поиск подключенных датчиков, добавление их в массив и работа с ними по индексу из массива. Датчики надо найти и присвоить номер, уникальный адрес знает только ESP, когда создает массив датчиков. Выполняется при запуске контроллера и как правило, индекс датчиков не меняется. Удобно, если нужно заменить датчик. Потом его просто назначаю на определенную зону. Это мой вариант. По другому не делаю.
3. Датчики температуры сидят на разных пинах и опрос производится не по адресу. а по пину (ну, там свои заморочки, в примерах можно выбрать любой вариант и потыкать палкой). Удобно, что не надо знать уникальный адрес датчика. неудобно - занимаются лишние пины. Расточительно.

Обслуживание чего я писал? Обращение к датчикам? С библиотекой датчиков "DallasTemperature" идет куча примеров. Берем понравившийся и адаптируем под свои задачи.

1 час назад, Lx671 сказал(а):

В общем я понял - это система подключается типа как ip-камеры и розетки умные. Называется "через большого брата".

Через "Большого брата", это если "брат" Вам недоступен в плане настройки/установки. У меня не через "большого брата", у меня через мой собственный сервер. Он может быть и локальным - не имеющим выхода в интернет, а может быть и вполне себе сетевым ресурсом, который находится у меня в администрировании. Может работать и на ноутбуке и на мегакомпе и даже на микрокомпьютере "Orange PI Zero" (одно время так у меня работал.. чисто ради интереса)
image.jpg.5c27c527514a3167de41f331447aa3b4.jpg

1 час назад, Lx671 сказал(а):

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

Без интернета устройства продолжают работать, но управление конечно же будет недоступно. Вы знаете какие-то варианты, как управлять устройствами, находящимися на почтительном расстоянии, без интернета? (я такие варианты не знаю).

Часы отдельная песня.. RTC (часы реального времени) DS3231 могут отдавать контроллеру время и контроллер будет выполнять свои функции. Я использую и вариант с RTC и вариант с запросом времени со своего сервера. По правде говоря, не могу определить ЧТО лучше.. меня и так и так устраивает.

Месячный график по оперативке на сервере.. работает себе и работает...
image.jpg.6eed155351526b6b14c342d852dcf2f7.jpg

2 часов назад, Lx671 сказал(а):

Где схема??

Одна из схем нового (для маленького аквариума) устройства. Это схема про LEDы.
image.jpg.e3d7bda3c5528b0a1ebe924db6a7d476.jpg

Это кусок кода, в котором прописаны номера пинов - вполне себе схема...

#define PWM_Freq        5000          //  Частота каналов ШИМ
#define PWM_Freq_FAN    25000         //  Частота канала ШИМ куллера
#define CoollerPower    12            //  Питание вентилятора
#define DisplayControl  13            //  Питание дисплея
#define Fan1Pin         17            //  ШИМ вентилятора охлаждения 1
#define ONE_WIRE_BUS    15            //  Шина датчиков температуры DS18B20 x4
#define Pump1Pin        16            //  Помпа 1
#define PWM1_PIN        23            //  Пин канала Холодный белый
#define PWM2_PIN        25            //  Пин канала Теплый белый
#define PWM3_PIN        26            //  Пин канала Красный
#define PWM4_PIN        27            //  Пин канала Зеленый
#define PWM5_PIN        33            //  Пин канала Синий
#define rHOT            32            //  Пин Нагревателя
#define PowerLed        14            //  Управление блоком питания LED

 

Поделиться сообщением


Ссылка на сообщение

Возвращаясь к "термоконтролю", с чего всё и началось..
Начал собирать для работы простейшее устройство, которое просто включит вентилятор вытяжки в серверной. Когда устройство будет готово, все контакты заизолирую "соплемётом" (термоклеем).
- Пока датчик температуры не подключал (нужен резистор 4,7кОм, просто забыл взять)

- В корпус вмонтирована колодка с розеткой и выключателем
image.thumb.png.25c2a245e0fe86e0e22a8a5f03dbcd5f.png

- К розетке подпаян блок питания(красный), к блоку питания подпаян стабилизатор напряжения (желтый), питание от стабилизатора идет на колодку твердотельного реле (фиолетовый), а с колодки на сам контроллер (синий).
image.thumb.png.2aa213d694ce3c2fd31764bc942b4ed3.png

Это уже работает, т.к. первичную прошивку залил... то есть можно программировать, как через USB, так и "по воздуху".

Сейчас уже можно зайти на контроллер по IP...
image.thumb.png.414d0fb91a0bd75665d7acb819f7eed8.png

И прошить "по воздуху" - кнопка "Прошивка". И далее "OTA firmware".
image.jpg.87f271116f6432b35bdaf70343aab628.jpg

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

Кусок готового кода:
 

Спойлер

#include <LittleFS.h>
#include <ESP8266WiFi.h>
#include <GyverPortal.h>

GyverPortal ui(&LittleFS);  // передать ссылку на fs (SPIFFS/LittleFS)

#ifndef STASSID
#define STASSID "ВАША-СЕТЬ--WI-FI"
#define STAPSK  "ВАШ-ПАРОЛЬ--WI-FI"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

// конструктор страницы
void build() {
  GP.BUILD_BEGIN();
  GP.PAGE_TITLE("ТЕРМОКОНТРОЛЬ");  
  GP.THEME(GP_DARK);
  GP.TITLE("ТЕРМОКОНТРОЛЬ");
  GP.HR();
  GP.BUTTON_MINI_LINK("/ota_update", "ПРОШИВКА", "#202326", "400px");
  GP.SYSTEM_INFO("1.0");
  GP.HR();
  GP.BUILD_END();
}

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // подключаем конструктор и запускаем
  ui.attachBuild(build);
  ui.start();
  ui.enableOTA();   // без пароля
  if (!LittleFS.begin()) Serial.println("FS Error");
  ui.downloadAuto(true);

}

void loop() {
  ui.tick();
}

 

 

Поделиться сообщением


Ссылка на сообщение
12 часов назад, VALKNUT сказал(а):

скорее всего она Вам будет не интересна, т.к. большая часть пинов (выводов контроллера) может быть запрограммирована как удобно. Хотите, ШИМ сигнал с пина посылаете, хотите отправляете логические 0 или 1 или используете как ЦАП (цифро-аналоговый преобразователь) когда нужно измерить значение потенциометра и преобразовать это в число...

Как раз я про это. У вас блок-схема, PWM - потроха может быть преобразователь шим или полевик под управлением аналог-выхода с контроллера, они там есть.

Непонятен момент прикрутки ардуиновского софта blynk к esp32, получается одна система команд??

12 часов назад, VALKNUT сказал(а):

Обращение по физическому адресу датчика

Да это надо. Если там просто будет видно HEX-число - вообще чудесно)) Вообще думал, что терморезистор на АЦП-пин вешается, как в стиралках.

12 часов назад, VALKNUT сказал(а):

RTC (часы реального времени) DS3231 могут отдавать контроллеру время и контроллер будет выполнять свои функции.

В ESP32 вы порт с часами периодически опрашиваете или там пишется процедура на обработку IRQ? В ардуино только опрос порта - не очень вариант...

12 часов назад, VALKNUT сказал(а):

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

Вообще-то знаю)) Но кнопочный телефон все-таки нужен. 

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

Если делать локальный сервер чисто для этого, как-то надо тогда ферму держать))

12 часов назад, VALKNUT сказал(а):

Это кусок кода, в котором прописаны номера пинов

А далее в проге вы прописываете - PWM2_PIN = 15; например , если надо зажечь на 15, так что-ли?

Или у них плагин со своей процедурой?


 

Поделиться сообщением


Ссылка на сообщение
19 минут назад, Lx671 сказал(а):

А далее в проге вы прописываете - PWM2_PIN = 15; например , если надо зажечь на 15, так что-ли?

Я искренне извиняюсь, но предлагаю Вам самостоятельно почитать хотя бы начальную информацию. Вот здесь например - https://cmitavia.ru/handbook/mk/mk_espressif/esp32/esp32-pwm-tutorial.html
И дело не в том, что лень, а в том, что эта тема "Ардуино в помощь". Изначально ориентирована на практические решения, в помощь управления аквариумом. Если я здесь буду копипастить статьи из интернетов, то "за деревьями леса не увидим".
Вот был запрос про как мониторить температуру и управлять при необходимости, я "подвязался" рассказать и показать. Была создана эта тема и потихоньку идем к созданию простейшего термореле. Вероятно пойдем еще дальше.
Я не готов стать "учителем" по Ардуино и это по тому, что я любитель и изучаю эту тему. То, что я могу показать и рассказать - всегда пожалуйста.
ЗЫ. В моем "Дневнике" есть даже полностью код моего контроллера, полистайте. Вероятно Вам этого будет достаточно, чтоб понять надо оно Вам или нет.

Начните с малого: Установите среду разработки, подключите любой контроллер и загрузите простейший пример. Тогда разговор будет предметный, а не просто поболтать =)

Поделиться сообщением


Ссылка на сообщение
9 часов назад, VALKNUT сказал(а):

Я не готов стать "учителем" по Ардуино и это по тому

Надо было сразу эту ссылку дать, воще нет вопросов)) 

9 часов назад, VALKNUT сказал(а):

подключите любой контроллер

Я не хочу разбираться с железом, которое в последствии не подойдет.

ШИМ мне не нужен, у меня на светильниках плавный вкл/выкл есть по умолчанию, а так же реакция на внешний свет.

Таймеры на нем я слепить смогу, но сделать аналоговое управление может не получиться. 

Я потихоньку собираю устройство, которое управляется через интернет с любого ПК через браузер, кнопки на этом устройстве, по проводу с планшета без драйверов и приложений. Можно по воздуху, но не нужно))

Подбираю устройство измерения температуры и анализ аналогового сигнала для управления. Рабочий анализ у меня есть, но на LC, хотел-бы на чипах.

Поделиться сообщением


Ссылка на сообщение
49 минут назад, Lx671 сказал(а):

Я не хочу разбираться с железом, которое в последствии не подойдет.

Я это понял и по этому немного (в меру своей культурности) сократил "информационный шум" на взлете. :ap:

Поделиться сообщением


Ссылка на сообщение

@VALKNUT , уважаемый. Тема интересная, но чтобы исключить повторяющиеся вопросы читаю Ваш дневник. И все никак не доберусь посмотреть что из исходного материала имеется

Поделиться сообщением


Ссылка на сообщение
28 минут назад, Haaans сказал(а):

И все никак не доберусь посмотреть что из исходного материала имеется

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

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

Устройство сообщало в телеграм, что оно запущено, дальше пока не делал.

Кусок готового кода скину сюда. Он сырой, но уже рабочий.

Спойлер

/*
 * УПРАВЛЕНИЕ ВЫТЯЖКОЙ v.0.3
 */
 
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LittleFS.h>
#include <ESP8266WiFi.h>
#include <GyverPortal.h>
#include <SimpleTimer.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

#ifndef STASSID
#define STASSID     "********"      // Имя сети Wi-Fi
#define STAPSK      "********"      // Пароль Wi-Fi
#endif
#define CoollerPower 15
#define ONE_WIRE_BUS  5                                                                 //Датчики температуры

SimpleTimer myTimer;
GyverPortal ui(&LittleFS);                                                              // передать ссылку на fs (SPIFFS/LittleFS)
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress temp1DeviceAddress, temp2DeviceAddress;
int numberOfDevices;                                                                    // Количество обнаруженных датчиков
bool DevNoFoundMSG = true;

#define BOT_TOKEN "**************:*******************************" // Токен бота телеграм
#define CHAT_ID "-**************"                                  // ID чата, куда бот будет слать сообщения

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
int botRequestDelay = 1000;                                                             // Каждую секунду проверяет новые сообщения
unsigned long lastTimeBotRan;

// DS18B20 - настройка температуры
uint16_t GET_TEMP_Interval = 1000;                                                      // интервал опроса датчиков DS18B20 (5сек)
byte averageFactor = 0;                                                                 // коэффициент сглаживания (0 = не сглаживать)
byte SensIndex0, SensIndex1;                                                            // переназначение индекса датчиков
float tempC_1, tempC_1ust;                                                              // переменная температур и юстировки
bool isRunCool = false;                                                                 // Работает ли охладитель
float myTermostat = 25.00;                                                              // Заданная температура
float myHisteresis = 0.5;                                                               // Гистерезис
bool DS1ERROR;                                                                          // Переменные ошибок датчиков
bool RCHStat1, RCHStat2;                                                                // переменная состояния каналов реллейного модуля
int ERRDev = 0;
String iT1, cT1;                                                                        // Переменная вывода температуры в терминал

const int ledPin =  LED_BUILTIN;                                                        // the number of the LED pin
int ledState = LOW;                                                                     // ledState used to set the LED
unsigned long previousMillis = 0;                                                       // will store last time LED was updated
const long interval = 500;                                                              // interval at which to blink (milliseconds)

const char* ssid     = STASSID;
const char* password = STAPSK;

static uint32_t tm_m = 0;
static uint32_t cnt_m = 0;


void build() { // конструктор страницы
  GP.BUILD_BEGIN();
  GP.PAGE_TITLE("ТЕРМОКОНТРОЛЬ");
  GP.THEME(GP_DARK);
  GP.TITLE("ТЕРМОКОНТРОЛЬ");
  GP.HR();
  GP.UPDATE("t1,t2");
  GP.LABEL("СОСТОЯНИЕ: ", "t2");                GP.HR();
  GP.LABEL("ТЕМПЕРАТУРА: ", "t1");              GP.BREAK();
  GP.LABEL("ТЕРМОСТАТ: 25.0°С");                GP.BREAK();
  GP.LABEL("ГИСТЕРЕЗИС: 0.5°С");                GP.BREAK();
  GP.HR();
  GP.BUTTON_MINI_LINK("/ota_update", "ПРОШИВКА", "#202326", "400px");
  GP.HR();
  //GP.SYSTEM_INFO("1.0");
  //GP.HR();
  GP.BUILD_END();
}

void setup() {
  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);                            // Светодиод на плате
  pinMode(CoollerPower, OUTPUT);                      // ПИН управления куллером
  digitalWrite(CoollerPower, LOW);                    // Включаем куллер для теста при запуске

  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  secured_client.setTrustAnchors(&cert);              // Add root certificate for api.telegram.org
  
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  sensors.begin();
  Serial.println(F("Поиск датчиков температуры"));
  numberOfDevices = sensors.getDeviceCount();
  if (numberOfDevices == 0) {
    ERRDev = ERRDev + 1;
    Serial.println(F(" - ERROR Датчики не обнаружены при старте"));
  } else {
    Serial.println(F(" - Минимум один датчик обнаружен при старте"));
  }

  // подключаем конструктор и запускаем
  ui.attachBuild(build);
  ui.attach(action);
  ui.start();
  ui.enableOTA();   // прошивка через Wi-Fi без пароля
  if (!LittleFS.begin()) Serial.println("FS Error");
  ui.downloadAuto(true);

  digitalWrite(CoollerPower, HIGH);                           // Выключаем нагрузку
  myTimer.setInterval(GET_TEMP_Interval);                     // Задаем интервал таймера
  bot.sendMessage(CHAT_ID, F("ТЕРМОКОНТРОЛЬ Запущен"), F(""));
}

void GetTemp() {
  float newSensor1Value = tempC_1;                            // DS 1
  sensors.setResolution(temp1DeviceAddress, 12);              // Разрядность замера
  sensors.requestTemperatures();                              // Запрос температуры

  tempC_1 = sensors.getTempCByIndex(SensIndex0);              // Первый датчик

  // Проверка работоспособности датчиков
  if (tempC_1 <= -50 || tempC_1 >= 100 || tempC_1 == 0.00) {
    DS1ERROR = true;
    iT1 = String(F("ERR"));
    Serial.print(F("DS1: ")); Serial.println(iT1);
    digitalWrite(CoollerPower, LOW);                    // Включаем куллер
  } else {
    DS1ERROR = false;
    iT1 = String(tempC_1, 2);
    Serial.print(F("DS1: ")); Serial.println(iT1);
    if (tempC_1 >= myTermostat) {
      isRunCool = true;
      digitalWrite(CoollerPower, LOW);                    // Включаем куллер
    }
    if (tempC_1 <= myTermostat - myHisteresis) {
      isRunCool = false;
      digitalWrite(CoollerPower, HIGH);                    // Включаем куллер
    }
  }
}

void myAction() {
  GetTemp();
}

void action() {
  cT1 =  String(tempC_1, 1);

  if (ui.update()) {
    if (ui.update("t1")) ui.answer("ТЕМПЕРАТУРА: " + cT1 + "°C");
    if (isRunCool) {
      if (ui.update("t2")) ui.answer("СОСТОЯНИЕ: ОХЛАЖДЕНИЕ");
    } else {
      if (ui.update("t2")) ui.answer("СОСТОЯНИЕ: НОРМАЛЬНОЕ");
    }

  }
}

void loop() {
  ShowFPS();
  ui.tick();
  if (myTimer.isReady()) {                                      // Check is ready a second timer
    myAction();
    myTimer.reset();                                            // Reset a second timer
  }
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    digitalWrite(ledPin, ledState);                             // Мигаем светодиодом на плате - типа дежурный режим
  }
}

void ShowFPS() {
  cnt_m++;
  if ((millis() - tm_m) > 1000)
  {
    //Serial.print("loop per sec: "); Serial.println(cnt_m);
    cnt_m = 0;
    tm_m = millis();
  }
}

 

 

Поделиться сообщением


Ссылка на сообщение

7 минут назад, VALKNUT сказал(а):

я сейчас не возьмусь пол сотни страниц перелопачивать. =)

Я кажется нашел то сообщение .

Из вопросов. Вы уплминаете UNO и Mega, а потом на ESP переходите (признаюсь описание не читал досконально к ним всем), а ESP ведь меньше по размерам, а функции шире. Почему так? Назначение продуктов разные? 

15 минут назад, VALKNUT сказал(а):

Если о скетче 

Не. Материалы. Питание, датчика точно нет, разъемы посмотреть, кнопки, все такое 

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, Haaans сказал(а):

Я кажется нашел то сообщение .

Из вопросов. Вы уплминаете UNO и Mega, а потом на ESP переходите (признаюсь описание не читал досконально к ним всем), а ESP ведь меньше по размерам, а функции шире. Почему так? Назначение продуктов разные? 

Вообще это просто эволюция микроконтроллеров. У меня есть и Ардуинки (Nano, Uno, Mega) и ЕСПешки (ESP8266, ESP32 Doit DevKit, ESP32-C3(SuperMini)) и они (каждая из них) так или иначе могут использоваться, пока не поломались.
То есть, выбирать надо исходя из поставленных задач. Каждая из них может измерить температуру и включить реле, но не каждая имеет "из коробки" возможность подключения к сети. У одних много памяти и круче процессоры.. но опять же..
Зачем двухядерная плата с дофига памяти, если задача опросить датчик один раз в 10-30 секунд и по результату опроса выполнить действие1 - вкл/выкл или действие2 - вкл/выкл.

Поделиться сообщением


Ссылка на сообщение
17 минут назад, VALKNUT сказал(а):

Зачем двухядерная плата с дофига памяти, если задача опросить датчик один раз в 10-30 секунд и по результату опроса выполнить действие1 - вкл/выкл или действие2 - вкл/выкл.

Согласен. Значит все как и везде начинается с ТЗ (хотелок).

Поделиться сообщением


Ссылка на сообщение
29 минут назад, Haaans сказал(а):

Не. Материалы. Питание, датчика точно нет, разъемы посмотреть, кнопки, все такое 

Вот здесь:

Показывал крайнюю закупку. Или что-то конкретное интересует?

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, VALKNUT сказал(а):

Показывал крайнюю закупку. Или что-то конкретное интересует?

Нет. Мне ваши ссылки на алиэкспресс не подойдут. Разделение по регионам. 

Надо мне посмотреть сначала, что у меня в шкафу лежит 

Поделиться сообщением


Ссылка на сообщение
14 минут назад, Haaans сказал(а):

Согласен. Значит все как и везде начинается с ТЗ (хотелок).

Начните с простого проекта, когда руку набьёте, будете для себя решать куда двигаться дальше.
Мои ссылки на алик если не пойдут, можно просто моделями устройств обсуждать. Начните с простой и надежной платы "ESP8266 WeMos D1 Mini v.3". У нее и блютуз на борту и вайфай и пинов хватит на большинство задач.
Можно взять плату такого же размера, но помощней, с заделом на будущее.. - "D1 Mini ESP32 (CH9102F)" - на такой у меня дисплей-путешественник работает.

 

 

Поделиться сообщением


Ссылка на сообщение
2 минут назад, VALKNUT сказал(а):

Можно взять плату такого же размера, но помощней, с заделом на будущее.. - "D1 Mini ESP32 (CH9102F)" - на такой у меня дисплей-путешественник работает.

Супер. Благодарю. 

Поделиться сообщением


Ссылка на сообщение
4 минут назад, Haaans сказал(а):

Супер. Благодарю. 

У этой платы 4 ряда пинов. Есть где разгуляться.

2024-07-25_09-06-07.jpg.a3f87125619528341641f4713b04d684.jpg

Поделиться сообщением


Ссылка на сообщение
28 минут назад, VALKNUT сказал(а):

У этой платы 4 ряда пинов. Есть где разгуляться.

Мммм. Нравится. 

Поделиться сообщением


Ссылка на сообщение

9 минут назад, VALKNUT сказал(а):

Прошлая версия "мобильного дисплея"
image.thumb.png.a9335038c98743f8950d02d96d16b460.png

И все версии имеют веб-морду/приложение? Нравится смотреть на графики 

Поделиться сообщением


Ссылка на сообщение
4 минут назад, Haaans сказал(а):

И все версии имеют веб-морду/приложение? Нравится смотреть на графики

У меня дисплеи и старый и новый имеют вебморду для прошивки через W-Fi. Но этого можно и не делать.

А приложение с графиками, это вообще отдельная тема. Совсем отдельная. Для приложения с графиками нужен постоянно работающий комп.. любой.. хоть мини, хоть ноутбук.. с запущенным на нем софтом и проброшенным на роутере портом.
Вам не обязательно сразу такое городить, могу уступить место на своем сервере, безвозмездно. Потренируетесь и решите, надо у себя такое делать или нет.
Вот так выглядит конструктор.. Это Blynk. Его поддержка для нашей страны прекращена, но кого это останавливало? :ap:
image.thumb.png.f1f7cdaa2d7c46fe8faea2e12a823b2a.pngimage.thumb.png.293b5a67141a47dbd948bb140d4c6947.png

Всё, что может потребоваться для развертывания у себя локального сервера приложения и само приложение (без всяких сексуальных намеков) есть и в сети и у меня, поделюсь и расскажу как и что.

Поделиться сообщением


Ссылка на сообщение
2 часов назад, VALKNUT сказал(а):

Для приложения с графиками нужен постоянно работающий комп.. любой..

Про мессенжеры в инструкции пишут и у вас это есть. А по FTP вариант связи есть?

Поделиться сообщением


Ссылка на сообщение
1 час назад, Lx671 сказал(а):

А по FTP вариант связи есть?

Связь с чем? Сервером на котором установлен серверный софт? У меня нет, да и небыло потребности такой.
На сервер захожу либо по RDP (рабочий стол) либо по SSH (PuTTY - консоль)

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×