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

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ljubitel
Открыл глаза
Сообщения: 47
Зарегистрирован: Сб июн 18, 2011 02:15:28

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

Сообщение 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()
Проверка состояния каждую секунду
Последний раз редактировалось Ljubitel Пн фев 17, 2025 02:26:04, всего редактировалось 1 раз.
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

за труд спасибо о души...но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...уж если чего городить на ESP32 то полноценный термостат с цветным дисплеем с выходом в сеть..умный дом... с кучей плюшек оттуда..погода..новости..и т.д....и управлением по радиоканалу другой ESP что у котла...но это другой проект да и не нужен он...простота и минимум вот самое надежное решение отопления загородного дома...а сильно умные девайсы могут заставить тебя срочно лететь на дачу в 3 часа ночи...всё это уже сполна испытано на собственной шкуре..
Ljubitel
Открыл глаза
Сообщения: 47
Зарегистрирован: Сб июн 18, 2011 02:15:28

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

Сообщение Ljubitel »

но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...

Однако по цене esp32 c3 mini выйдет дешевле чем nRF24L01 + Digispark ATtiny 85.
Boryan_R писал(а): если чего городить на ESP32 то полноценный термостат с цветным дисплеем с выходом в сеть..умный дом... с кучей плюшек оттуда..погода..новости..и т.д....и управлением по радиоканалу другой ESP что у котла...

Ну скажем так - хотя бы оповещение о переходе системы в аварийный режим можно и отправить куда нибудь во внешний мир.
Это полезно. На той же esp это реализовать проще.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

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

Сообщение VNS »

Немного подкорректировал передатчик…
Tx_tiny24.hex
(2.91 КБ) 88 скачиваний
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Сообщение roman.com »

не вижу исходники...

Добавлено after 4 minutes 27 seconds:
ESP хорошо... но избыточно.
а во внешний мир у меня связь по проводам и по оптике.
по проводам нельзя заглушить... WiFi глушилками всякими))
Ljubitel
Открыл глаза
Сообщения: 47
Зарегистрирован: Сб июн 18, 2011 02:15:28

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

Сообщение Ljubitel »

Добавлено after 4 minutes 27 seconds:
ESP хорошо... но избыточно.

Так и AVR для этой задачи избыточно.
Можно на рассыпухе попробовать реализовать
СпойлерПередатчик:
[Термостат] → [HT12E] → [Радиопередатчик 868 МГц]

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

[Таймер NE555] → [Аварийный режим]
[Термодатчик] → [Схема Шмитта] → [Компаратор] → [Логика ИЛИ-И]

Что Вас смущает в "избыточности" esp ?
Цена ? Размер ? Недоступность ?
Зачем пользоваться компонентами прошлого века ?
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

[uquote="Boryan_R",url="/forum/viewtopic.php?p=4683405#p4683405"]но, на ESP32 слишком жирно раскидываться такими ресурсами ради простого радиоканала...

Однако по цене 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 собрал и пользовался таким ...реально лучший...но дешевые китайцы победили своим удаленным управлением. А так чел реально просек ситуацию комфорта в межсезонье и решил ее грамотно.
Последний раз редактировалось Boryan_R Пн фев 17, 2025 15:15:19, всего редактировалось 1 раз.
Ljubitel
Открыл глаза
Сообщения: 47
Зарегистрирован: Сб июн 18, 2011 02:15:28

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

Сообщение Ljubitel »

видно что чел рально в теме котлов соображает и сделал то что нужно...

Я как раз для себя тут мегадевайс собираю для своего котла, только он у меня дизельный.
И задачи я себе немного другие ставлю. Не контроль, а информация.
Расход топлива считает, параметры котла показывает, на Телеграмм оповещения шлет.
Вот только управление котлом стремаюсь я что то самоделкам отдавать. Мало ли...
Косяк в библиотеке, китайский DS18, который после пропадания питания выдаст +85*С и зависнет на этом значении и пр.
Поэтому именно управление у меня сделано на механических проводных термостатах и реле.
Кстати и Вам бы советовал аварийный режим реализовывать на тупом механическом термостате с проводом.
Или по воздуху (висит в котельной), или по теплоносителю (если насос постоянно работает, то температура теплоносителя будет равна
средней температуре в доме).
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

На счет аварийного режима во всех газовых котлах он реализован по умолчанию..называется защита от разморозки...срабатывает если в котельной температура падает ниже 4 градуса....тут все нормально продумано
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Сообщение roman.com »

Ljubitel писал(а):Что Вас смущает в "избыточности" esp ?

у esp, кроме не надежности по радио, есть ещё оин минус -больное энергопотребление.

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

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

ну так уже бы давно собрал бы на AVR и nRF24... проверил бы как работает.
не понравится потом переделал бы на CC1101.
хотя вряд ли там будет какая то разница)) все современные радио модули построены по одной схеме... и работают по одному принципу)) по большому счёту отличие у них только в частотах... на 433 мгц работает обычно дальше чем 2500 мгц... потому что затухание меньше... в остальном разницы можно даже и не заметить))
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

Boryan_R писал(а):ESPшек разных есть ...AVRок тоже есть...nRF24 много...а вот CC1101 нету

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

Пока CC1101 в полете ..есно буду пробовать и на nRF24...
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

... Косяк в библиотеке, китайский DS18, который после пропадания питания выдаст +85*С и зависнет на этом значении и пр. ...

Не создавайте "легенд" о несуществующих событиях. Это не проблема DS и не ее происхождение.
Проблема создана лицом, написавшим программный код.

DS18B20, стр. 6:

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

*The power-on reset value of the temperature register is +85°C

т.е. если видите 85 градусов, это означает, что DS не выполнил преобразование с момента последнего включения питания.
Просто добавьте сравнение для первого измерения после включения питания.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

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

Сообщение VNS »

Надеюсь это окончательный вариант:
Rx_tiny2313.hex
(2.8 КБ) 96 скачиваний


Tx_tiny24.hex
(2.78 КБ) 88 скачиваний
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

Надеюсь это окончательный вариант:
Rx_tiny2313.hex


Tx_tiny24.hex


Чего добавил или убрал? Жаль что пока не могу потестить...жду модули.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

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

Сообщение VNS »

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

Можно было бы конечно написать аналогичный первоначальный вариант для модуля nRF24L01, но как показала практика, они очень плохо работают в монолитных зданиях (с трудом "пробивают" одну монолитную стену…). Потому не стал тратить время на данный вариант. Модуль СС1101-868МГц значительно гибче в сравнении с nRF24L01+, да и "пробивная" способность данного диапазона значительно выше. :)
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Сообщение roman.com »

https://www.ozon.ru/product/radiomodul- ... 565278116/
дорого))

nRF24L01+ с усилителем пробивает бетонные стены...
https://www.ozon.ru/product/1sht-radiom ... 1739808281
и дешевле))
Аватара пользователя
Boryan_R
Прорезались зубы
Сообщения: 216
Зарегистрирован: Пт фев 21, 2014 22:39:54
Откуда: живу на крыше

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

Сообщение Boryan_R »

https://www.ozon.ru/product/radiomodul-priemoperedatchik-na-cc1101-s-sma-antennoy-433-mgts-do-380-m-1565278116/
дорого))

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

Чота прям совсем дорого и то и то...там же есть как минимум в два раза дешевле оба варианта

VNS
Как поведут себя приемник и передатчик в не штатных ситуациях? Например отключить приемник на хх минут и включить? Связь восстановится? А если передатчик отключить на хх минут? Если оба отключить на хх минут?
В данных ситуациях некоторые заводские китайские термостаты с радиоканалом теряют связь и не восстанавливают и нужны пляски с бубном что бы снова их подружить...
Например сейчас у меня работает китайский https://aliexpress.ru/item/100500833321 ... 1769Nb46Iv
Если отключить/включить передатчик то связь восстановится....а если приемник откл/вкл то пляски с бубном...ручками прописывать номер канала...Пока котел и приемник питаются от бесперебойника все норм...
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

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

Сообщение VNS »

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

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

Если хотите ещё чего-то дополнить, то составьте конкретные хотелки на все случаи… чтобы точно знать требуемый алгоритм работы. :dont_know:
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Сообщение roman.com »

Чота прям совсем дорого и то и то..

значит надо сидеть искать дешевле...

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

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

а на AVR и nRF24... мы делать будем или нет ? или уже передумали))
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1614
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

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

Сообщение VNS »

В данной прошивке реализован алгоритм для аварийного термостата. При замыкании контакта у аварийного термостата, произойдёт отключение котла и блокировка выполнения команд от передатчиков.
Rx_tiny2313.hex
(2.91 КБ) 83 скачивания


Схема.png
(105.12 КБ) 91 скачивание
Ответить

Вернуться в «Arduino»