Страница 3 из 11

Re: Радиоканал для котла отопления.

Добавлено: Вс фев 16, 2025 22:11:15
Ljubitel
Я бы под ESP32 написал, используя ESP-NOW.

Передатчик:
Спойлер

Код: Выделить всё

// Transmitter
#include <esp_now.h>
#include <WiFi.h>
#include <esp_sleep.h>

#define THERMOSTAT_PIN 4
#define HEARTBEAT_INTERVAL 300000000 // 5 минут в микросекундах (300 * 10^6)
#define RETRY_COUNT 3
#define RETRY_DELAY 200

RTC_DATA_ATTR static bool lastState;
RTC_DATA_ATTR static unsigned long sendCounter;
RTC_DATA_ATTR static unsigned long failedCounter;

uint8_t receiverMac[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC};

typedef struct message
{
    bool state;
    bool heartbeat;
} message;

bool ackReceived = false;
int retries = 0;

void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
    ackReceived = (status == ESP_NOW_SEND_SUCCESS);
    if (status == ESP_NOW_SEND_SUCCESS)
    {
        sendCounter++;
    }
    else
    {
        failedCounter++;
    }
}

void sendMessage(bool currentState, bool isHeartbeat)
{
    message msg;
    msg.state = currentState;
    msg.heartbeat = isHeartbeat;

    retries = 0;
    do
    {
        ackReceived = false;
        esp_err_t result = esp_now_send(receiverMac, (uint8_t *)&msg, sizeof(msg));
        if (result == ESP_OK)
        {
            unsigned long start = millis();
            while (!ackReceived && (millis() - start < RETRY_DELAY))
            {
                delay(10);
            }
        }
        retries++;
    } while (!ackReceived && retries < RETRY_COUNT);
}

void setup()
{
    pinMode(THERMOSTAT_PIN, INPUT_PULLUP);
    WiFi.mode(WIFI_STA);
    esp_now_init();
    esp_now_register_send_cb(OnDataSent);

    esp_now_peer_info_t peerInfo;
    memcpy(peerInfo.peer_addr, receiverMac, 6);
    peerInfo.channel = 1;
    peerInfo.encrypt = false;
    esp_now_add_peer(&peerInfo);

    bool currentState = digitalRead(THERMOSTAT_PIN) == LOW;
    bool stateChanged = (currentState != lastState);

    if (stateChanged)
    {
        sendMessage(currentState, false);
    }
    else
    {
        sendMessage(currentState, true);
    }
    lastState = currentState;

    esp_sleep_enable_timer_wakeup(HEARTBEAT_INTERVAL);
    esp_deep_sleep_start();
}

void loop() {}
Приёмник:
Спойлер

Код: Выделить всё

// Receiver
#include <esp_now.h>
#include <WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define RELAY_PIN 5
#define DS18B20_PIN 6
#define SAFE_TEMP 4.0
#define HYSTERESIS 1.0
#define CONFIRMATION_TIMEOUT 200

OneWire oneWire(DS18B20_PIN);
DallasTemperature sensors(&oneWire);

typedef struct message
{
    bool state;
    bool heartbeat;
} message;

bool lastValidState = false;
unsigned long lastMsgTime = 0;
const unsigned long TIMEOUT = 600000; // 10 минут таймаут

void sendConfirmation()
{
    uint8_t ff[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    esp_now_send(ff, nullptr, 0);
}

void OnDataRecv(const uint8_t *mac, const uint8_t *data, int len)
{
    if (len == sizeof(message))
    {
        message msg;
        memcpy(&msg, data, len);

        if (!msg.heartbeat)
        {
            digitalWrite(RELAY_PIN, msg.state);
            lastValidState = msg.state;
        }
        lastMsgTime = millis();
        sendConfirmation();
    }
}

void setup()
{
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, HIGH);

    sensors.begin();
    WiFi.mode(WIFI_STA);
    esp_now_init();
    esp_now_register_recv_cb(OnDataRecv);

    esp_now_peer_info_t peerInfo;
    memset(&peerInfo, 0, sizeof(peerInfo));
    memcpy(peerInfo.peer_addr, "\xFF\xFF\xFF\xFF\xFF\xFF", 6);
    peerInfo.channel = 1;
    peerInfo.encrypt = false;
    esp_now_add_peer(&peerInfo);
}

void emergencyMode()
{
    sensors.requestTemperatures();
    float temp = sensors.getTempCByIndex(0);
    static bool heating = false;

    if (heating && temp >= SAFE_TEMP + HYSTERESIS)
    {
        heating = false;
    }
    else if (!heating && temp <= SAFE_TEMP)
    {
        heating = true;
    }
    digitalWrite(RELAY_PIN, !heating);
}

void loop()
{
    if (millis() - lastMsgTime > TIMEOUT)
    {
        emergencyMode();
    }
    else
    {
        digitalWrite(RELAY_PIN, lastValidState);
    }

    delay(5000 + random(0, 1000));
}
Словами
СпойлерПередатчик:

Просыпается каждые 5 минут
Отправляет сообщение ВСЕГДА при пробуждении:
isHeartbeat = true если состояние не изменилось
isHeartbeat = false если состояние изменилось
3 попытки отправки с подтверждением
Глубокий сон между отправками

Приемник:

Реагирует ТОЛЬКО на сообщения с isHeartbeat = false
Обновляет таймер при получении ЛЮБОГО сообщения
Таймаут 10 минут для активации аварийного режима
Автоматическая обработка переполнения millis()
Проверка состояния каждую секунду

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 01:47:50
Boryan_R
за труд спасибо о души...но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...уж если чего городить на ESP32 то полноценный термостат с цветным дисплеем с выходом в сеть..умный дом... с кучей плюшек оттуда..погода..новости..и т.д....и управлением по радиоканалу другой ESP что у котла...но это другой проект да и не нужен он...простота и минимум вот самое надежное решение отопления загородного дома...а сильно умные девайсы могут заставить тебя срочно лететь на дачу в 3 часа ночи...всё это уже сполна испытано на собственной шкуре..

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 02:49:37
Ljubitel
[uquote="Boryan_R",url="/forum/viewtopic.php?p=4683405#p4683405"]но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...[/uquote]
Однако по цене esp32 c3 mini выйдет дешевле чем nRF24L01 + Digispark ATtiny 85.
Boryan_R писал(а): если чего городить на ESP32 то полноценный термостат с цветным дисплеем с выходом в сеть..умный дом... с кучей плюшек оттуда..погода..новости..и т.д....и управлением по радиоканалу другой ESP что у котла...
Ну скажем так - хотя бы оповещение о переходе системы в аварийный режим можно и отправить куда нибудь во внешний мир.
Это полезно. На той же esp это реализовать проще.

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 06:01:24
VNS
Немного подкорректировал передатчик…
Tx_tiny24.hex
(2.91 КБ) 94 скачивания

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 09:47:23
roman.com
не вижу исходники...

Добавлено after 4 minutes 27 seconds:
ESP хорошо... но избыточно.
а во внешний мир у меня связь по проводам и по оптике.
по проводам нельзя заглушить... WiFi глушилками всякими))

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 12:51:50
Ljubitel
[uquote="roman.com",url="/forum/viewtopic.php?p=4683452#p4683452"]Добавлено after 4 minutes 27 seconds:
ESP хорошо... но избыточно.[/uquote]
Так и AVR для этой задачи избыточно.
Можно на рассыпухе попробовать реализовать
СпойлерПередатчик:
[Термостат] → [HT12E] → [Радиопередатчик 868 МГц]

Приёмник:
[Радиоприёмник 868 МГц] → [HT12D] → [Логика ИЛИ-И] → [Реле]

[Таймер NE555] → [Аварийный режим]
[Термодатчик] → [Схема Шмитта] → [Компаратор] → [Логика ИЛИ-И]
Что Вас смущает в "избыточности" esp ?
Цена ? Размер ? Недоступность ?
Зачем пользоваться компонентами прошлого века ?

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 14:23:34
Boryan_R
[uquote="Ljubitel",url="/forum/viewtopic.php?p=4683409#p4683409"][uquote="Boryan_R",url="/forum/viewtopic.php?p=4683405#p4683405"]но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...[/uquote]
Однако по цене esp32 c3 mini выйдет дешевле чем nRF24L01 + Digispark ATtiny 85.
Boryan_R писал(а): если чего городить на ESP32 то полноценный термостат с цветным дисплеем с выходом в сеть..умный дом... с кучей плюшек оттуда..погода..новости..и т.д....и управлением по радиоканалу другой ESP что у котла...
Ну скажем так - хотя бы оповещение о переходе системы в аварийный режим можно и отправить куда нибудь во внешний мир.
Это полезно. На той же esp это реализовать проще.[/uquote]

Да ни кто не спорит что ESP32 дешевле...уж тогда можно на ESP8266 или вообще на ESP01..их тут за глаза хватит..зачем сразу монстра ESP32...и уж если и его... то реализовывать в передатчике полноценный термостат с дисплеем и кучей настроек...гистерезис..коррекция датчика...недельное расписание..и все это с выходом в сетку и удаленным управлением...в итоге отказываемся от штатного заводского китайского глючного термостата :)))
Я не против и этого проекта...я не для себя эту ветку затевал...мало ли кому что нужно.
Он имеет право на жизнь однозначно!
Для себя я выбрал проект от VNS....видно что чел рально в теме котлов соображает и сделал то что нужно...заказал модули ..жду...
ESPшек разных есть ...AVRок тоже есть...nRF24 много...а вот CC1101 нету :shock: хочу их в деле пощупать
По поводу ESPшек....по дальности (во всяком случае у меня на участке) они со штатной антенной на самом модуле шпарят на много дальше чем крутые роутеры с кучей 5дб антенн...Участок 9 соток ни фига роутер не покрывает...еще по участку два репитера стоят...а ESP ещё и соседей захватывают..
Может кому нужно проект термостата на ESP https://19dx.ru/2017/08/esp8266-termost ... ravleniem/
А по поводу умнейшего термостата для дома наш кот сделал такой...https://www.radiokot.ru/circuit/digital ... 3527051928 собрал и пользовался таким ...реально лучший...но дешевые китайцы победили своим удаленным управлением. А так чел реально просек ситуацию комфорта в межсезонье и решил ее грамотно.

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 15:14:58
Ljubitel
[uquote="Boryan_R",url="/forum/viewtopic.php?p=4683583#p4683583"]видно что чел рально в теме котлов соображает и сделал то что нужно...[/uquote]
Я как раз для себя тут мегадевайс собираю для своего котла, только он у меня дизельный.
И задачи я себе немного другие ставлю. Не контроль, а информация.
Расход топлива считает, параметры котла показывает, на Телеграмм оповещения шлет.
Вот только управление котлом стремаюсь я что то самоделкам отдавать. Мало ли...
Косяк в библиотеке, китайский DS18, который после пропадания питания выдаст +85*С и зависнет на этом значении и пр.
Поэтому именно управление у меня сделано на механических проводных термостатах и реле.
Кстати и Вам бы советовал аварийный режим реализовывать на тупом механическом термостате с проводом.
Или по воздуху (висит в котельной), или по теплоносителю (если насос постоянно работает, то температура теплоносителя будет равна
средней температуре в доме).

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 15:19:04
Boryan_R
На счет аварийного режима во всех газовых котлах он реализован по умолчанию..называется защита от разморозки...срабатывает если в котельной температура падает ниже 4 градуса....тут все нормально продумано

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 16:05:03
roman.com
Ljubitel писал(а):Что Вас смущает в "избыточности" esp ?
у esp, кроме не надежности по радио, есть ещё оин минус -больное энергопотребление.

у AVRок + радио энергопотребление в ~10 раз меньше.

Можно на рассыпухе собрать...
но будет большая схема... а это дорого... неудобно (много паять)... и не практично (большие габариты)... и т.д.
поэтому на рассыпухе мы делать не будем))
Boryan_R писал(а):ESPшек разных есть ...AVRок тоже есть...nRF24 много...а вот CC1101 нету
ну так уже бы давно собрал бы на AVR и nRF24... проверил бы как работает.
не понравится потом переделал бы на CC1101.
хотя вряд ли там будет какая то разница)) все современные радио модули построены по одной схеме... и работают по одному принципу)) по большому счёту отличие у них только в частотах... на 433 мгц работает обычно дальше чем 2500 мгц... потому что затухание меньше... в остальном разницы можно даже и не заметить))

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 16:15:06
Boryan_R
[uquote="roman.com",url="/forum/viewtopic.php?p=4683616#p4683616"]
Boryan_R писал(а):ESPшек разных есть ...AVRок тоже есть...nRF24 много...а вот CC1101 нету
ну так уже бы давно собрал бы на AVR и nRF24... проверил бы как работает.
не понравится потом переделал бы на CC1101.
хотя вряд ли там будет какая то разница)) все современные радио модули построены по одной схеме... и работают по одному принципу)) по большому счёту отличие у них только в частотах... на 433 мгц работает обычно дальше чем 2500 мгц... потому что затухание меньше... в остальном разницы можно даже и не заметить))[/uquote]
Пока CC1101 в полете ..есно буду пробовать и на nRF24...

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 16:23:22
veso74
[uquote="Ljubitel",url="/forum/viewtopic.php?p=4683599#p4683599"]... Косяк в библиотеке, китайский DS18, который после пропадания питания выдаст +85*С и зависнет на этом значении и пр. ...[/uquote]
Не создавайте "легенд" о несуществующих событиях. Это не проблема DS и не ее происхождение.
Проблема создана лицом, написавшим программный код.

DS18B20, стр. 6:

Код: Выделить всё

*The power-on reset value of the temperature register is +85°C
т.е. если видите 85 градусов, это означает, что DS не выполнил преобразование с момента последнего включения питания.
Просто добавьте сравнение для первого измерения после включения питания.

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 16:33:44
VNS
Надеюсь это окончательный вариант:
Rx_tiny2313.hex
(2.8 КБ) 102 скачивания
Tx_tiny24.hex
(2.78 КБ) 98 скачиваний

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 18:21:51
Boryan_R
[uquote="VNS",url="/forum/viewtopic.php?p=4683630#p4683630"]Надеюсь это окончательный вариант:
Rx_tiny2313.hex
Tx_tiny24.hex
[/uquote]

Чего добавил или убрал? Жаль что пока не могу потестить...жду модули.

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 18:56:36
VNS
Убрал всё лишнее, что ранее добавлял… :) в общем, ничего значимого… так сказать, рабочий тестовый процесс. :write: Подожду ваших реальных тестов, может какие добавления понадобятся.

Можно было бы конечно написать аналогичный первоначальный вариант для модуля nRF24L01, но как показала практика, они очень плохо работают в монолитных зданиях (с трудом "пробивают" одну монолитную стену…). Потому не стал тратить время на данный вариант. Модуль СС1101-868МГц значительно гибче в сравнении с nRF24L01+, да и "пробивная" способность данного диапазона значительно выше. :)

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 19:06:56
roman.com
https://www.ozon.ru/product/radiomodul- ... 565278116/
дорого))

nRF24L01+ с усилителем пробивает бетонные стены...
https://www.ozon.ru/product/1sht-radiom ... 1739808281
и дешевле))

Re: Радиоканал для котла отопления.

Добавлено: Пн фев 17, 2025 20:24:47
Boryan_R
[uquote="roman.com",url="/forum/viewtopic.php?p=4683687#p4683687"]https://www.ozon.ru/product/radiomodul- ... 565278116/
дорого))

nRF24L01+ с усилителем пробивает бетонные стены...
https://www.ozon.ru/product/1sht-radiom ... 1739808281
и дешевле))[/uquote]
Чота прям совсем дорого и то и то...там же есть как минимум в два раза дешевле оба варианта

VNS
Как поведут себя приемник и передатчик в не штатных ситуациях? Например отключить приемник на хх минут и включить? Связь восстановится? А если передатчик отключить на хх минут? Если оба отключить на хх минут?
В данных ситуациях некоторые заводские китайские термостаты с радиоканалом теряют связь и не восстанавливают и нужны пляски с бубном что бы снова их подружить...
Например сейчас у меня работает китайский https://aliexpress.ru/item/100500833321 ... 1769Nb46Iv
Если отключить/включить передатчик то связь восстановится....а если приемник откл/вкл то пляски с бубном...ручками прописывать номер канала...Пока котел и приемник питаются от бесперебойника все норм...

Re: Радиоканал для котла отопления.

Добавлено: Вт фев 18, 2025 15:57:36
VNS
Если обесточить приёмник, то он перестанет управлять котлом, что естественно приведёт к отключению нагрева. При подаче питания на приёмник, он при старте посылает запрос каждому из семи возможных передатчиков не зависимо от того, есть ли данный передатчик в сети или нет. И получив ответы об их состоянии, производит соответствующее управление котлом.

Если обесточить какой либо передатчик, то приёмник никак не отреагирует на данный инцидент. И если данный передатчик ранее отправлял сигнал на включение котла, то котёл так и будет работать без изменений. При подаче питания на передатчик, он при старте отправляет информацию приёмнику, о его статусе (замкнут или разомкнут). И только тогда приёмник сможет отреагировать. Можно дописать в приёмник (при необходимости) алгоритм аварийного режима отключения котла по максимальной температуре воздуха от аварийного термостата. Незадействованные вывода у приёмника есть в наличии для такой реализации.

Если хотите ещё чего-то дополнить, то составьте конкретные хотелки на все случаи… чтобы точно знать требуемый алгоритм работы. :dont_know:

Re: Радиоканал для котла отопления.

Добавлено: Вт фев 18, 2025 16:12:02
roman.com
[uquote="Boryan_R",url="/forum/viewtopic.php?p=4683712#p4683712"]Чота прям совсем дорого и то и то..[/uquote]
значит надо сидеть искать дешевле...

надо ещё дешевле ?
к примеру пульт 27 нам обошёлся вообще бесплатно))

я так понял исходники мы так и не увидим...

а на AVR и nRF24... мы делать будем или нет ? или уже передумали))

Re: Радиоканал для котла отопления.

Добавлено: Вт фев 18, 2025 17:01:42
VNS
В данной прошивке реализован алгоритм для аварийного термостата. При замыкании контакта у аварийного термостата, произойдёт отключение котла и блокировка выполнения команд от передатчиков.
Rx_tiny2313.hex
(2.91 КБ) 92 скачивания
Схема.png
(105.12 КБ) 102 скачивания