This media is not supported in your browser
VIEW IN TELEGRAM
Крутит очень мощно. Рукой не остановить
This media is not supported in your browser
VIEW IN TELEGRAM
Готово!
Теперь 3 банки лития легко закрывают оба крана одновременно.
Нужно было немного разработать, а в холодной воде убрать лишнюю шайбу и не так сильно затягивать болты внутри.
Кайфушки прям от того как подскакивает стрелочка с давлением при открытии крана 🤩
Теперь 3 банки лития легко закрывают оба крана одновременно.
Нужно было немного разработать, а в холодной воде убрать лишнюю шайбу и не так сильно затягивать болты внутри.
Кайфушки прям от того как подскакивает стрелочка с давлением при открытии крана 🤩
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
На пути к подсчёту импульсов от счётчиков воды я на прошлых выходных:
- сделал кнопочки управления автоматическими кранами
- починил один кран
- сделал esp32 плату с двумя кнопками, ads1115 + 4 термистора, разъем для счетчика.
На этих выходных:
- сделал начальный проект, со своим айдишником и связал его с mqtt шиной
- сделал работу с кнопочками: быстрое нажатие = ОТКЛ, длинное = ВКЛ и передача состояния по mqtt
- разобрался как работать с библиотекой для ads1115, научился правильно считать температуру.
Теперь вот сижу и калибрую NTC термисторы. В весёлой чашечке с квадратиками и звёздочками у меня вода со льдом и датчики.
Держать фокус на конечной цели похоже не мой конёк 🎯
- сделал кнопочки управления автоматическими кранами
- починил один кран
- сделал esp32 плату с двумя кнопками, ads1115 + 4 термистора, разъем для счетчика.
На этих выходных:
- сделал начальный проект, со своим айдишником и связал его с mqtt шиной
- сделал работу с кнопочками: быстрое нажатие = ОТКЛ, длинное = ВКЛ и передача состояния по mqtt
- разобрался как работать с библиотекой для ads1115, научился правильно считать температуру.
Теперь вот сижу и калибрую NTC термисторы. В весёлой чашечке с квадратиками и звёздочками у меня вода со льдом и датчики.
Держать фокус на конечной цели похоже не мой конёк 🎯
🔥3
Я конечно же понятия не имею как калибровать NTC термисторы.
В формуле вычисления температуры присутствует "коэффициент B" наверно он служит как раз для этих целей.
Выставил его лениво в какие-то значения у которых температура близка к нулю:
Можно и точнее выставить, но не думаю что это отражает реальность.
Сделал чтобы температура отправлялась в mqtt. Вывел графики в инфлюксе. Почему-то значения меньше единицы инфлюкс обозначает как
Сейчас уберу лёд из стаканчика и на графиках посмотрю как водичка постепенно теплеет до комнатной температуры.
В формуле вычисления температуры присутствует "коэффициент B" наверно он служит как раз для этих целей.
Выставил его лениво в какие-то значения у которых температура близка к нулю:
V / T / raw
V[0]: 2443.199 mV, T= 0.31°C | 19545
V[1]: 2447.450 mV, T= 0.19°C | 19579
V[2]: 2361.697 mV, T= 0.30°C | 18893
V[3]: 2352.572 mV, T= 0.21°C | 18820
Можно и точнее выставить, но не думаю что это отражает реальность.
Сделал чтобы температура отправлялась в mqtt. Вывел графики в инфлюксе. Почему-то значения меньше единицы инфлюкс обозначает как
XXXm
. Может так и задумано, а может что-то пошло не по плану.Сейчас уберу лёд из стаканчика и на графиках посмотрю как водичка постепенно теплеет до комнатной температуры.
👍2
Вода из чайника.
На диапазоне 0 - 100 разброс получается в пару градусов.
Для моих бытовых наблюдений за водопроводом - вполне достаточно. Точнее разбираться лень.
Скриншётов с сырыми значениями и знания формулы достаточно чтобы свести 4 графика 1в1. Запомним это, для каких-нибудь будущих задач этим можно будет заняться.
ЗЫ: отредактировал сообещение - сначала разброс был в 5 градусов, но потом оно "устоялось" и разброс стал меньше.
На диапазоне 0 - 100 разброс получается в пару градусов.
Для моих бытовых наблюдений за водопроводом - вполне достаточно. Точнее разбираться лень.
Скриншётов с сырыми значениями и знания формулы достаточно чтобы свести 4 графика 1в1. Запомним это, для каких-нибудь будущих задач этим можно будет заняться.
ЗЫ: отредактировал сообещение - сначала разброс был в 5 градусов, но потом оно "устоялось" и разброс стал меньше.
🔥2👍1
Кстати я нифига не вдупляю в низкоуровневость Си, поэтому радостно ковыряюсь с esp32 у которой куча памяти и не нужно заботиться о всякой оптимизации.
Основная задача девайса - считать тики холодной и горячей воды. Как будем делать? Создадим 2 дополнительные таски! потому что внутри тасок код кажется изолированным друг от друга, его просто поддерживать и переносить из проекта в проект.
Вот на картинке как раз весь мой код в файле main:
- запускаем 2 новые таски
- делаем колбек для mqtt для реагирования на входящие команды, чтобы отправлять значения сразу в таску используя её хендл.
Как сравнивать 2 строчки в Си? а хрен его знает! Это последнее о чём хочется думать. Благо в стандартной библиотеке С++ (надеюсь не путаюсь в терминологии) есть объект
Ну и прекрасно! используем строки везде где нужно сравнение.
Основная задача девайса - считать тики холодной и горячей воды. Как будем делать? Создадим 2 дополнительные таски! потому что внутри тасок код кажется изолированным друг от друга, его просто поддерживать и переносить из проекта в проект.
Вот на картинке как раз весь мой код в файле main:
- запускаем 2 новые таски
- делаем колбек для mqtt для реагирования на входящие команды, чтобы отправлять значения сразу в таску используя её хендл.
Как сравнивать 2 строчки в Си? а хрен его знает! Это последнее о чём хочется думать. Благо в стандартной библиотеке С++ (надеюсь не путаюсь в терминологии) есть объект
string
у которого есть метод compare
. Ну и прекрасно! используем строки везде где нужно сравнение.
👍3🔥2
А вот так выглядит на данный момент таска для воды.
Осталось дописать бизнес-логику:
- повесить аппаратную считалку тиков на пин - вот какая крутая штука есть в esp32!
- проверять сколько там натикало
- брать значение из нотифая если вдруг оно прилетело по mqtt
- записывать в конфиг новое значение если вдруг оно поменялось
выглядит достаточно просто)
Осталось дописать бизнес-логику:
- повесить аппаратную считалку тиков на пин - вот какая крутая штука есть в esp32!
- проверять сколько там натикало
- брать значение из нотифая если вдруг оно прилетело по mqtt
- записывать в конфиг новое значение если вдруг оно поменялось
выглядит достаточно просто)
👍2🔥1
Больше тасок богу тасок! 😈😈
Для работы с конфигурацией тоже буду использовать отдельную таску.
Потому что для работы с тасками нужно использовать хендл с каким-то хитрым типом
Я гарантированно получу проблему если буду пробовать делать эту переменную екстерном и пробовать передавать её между файлами. Потому что передача перменных из одного файла в другой в c/cpp устроено через жопу.
А так этот хендл живёт внутри таски и никому не мешает. Подписан на входящие ивенты, пишет и читает конфиг.
Кстати в примере на гитхабе идёт работа с
Для работы с конфигурацией тоже буду использовать отдельную таску.
Потому что для работы с тасками нужно использовать хендл с каким-то хитрым типом
std::shared_ptr<nvs::NVSHandle> handle
.Я гарантированно получу проблему если буду пробовать делать эту переменную екстерном и пробовать передавать её между файлами. Потому что передача перменных из одного файла в другой в c/cpp устроено через жопу.
А так этот хендл живёт внутри таски и никому не мешает. Подписан на входящие ивенты, пишет и читает конфиг.
Кстати в примере на гитхабе идёт работа с
restart_counter
- переменная в конфиге которую увеличиваем на 1 при инициализации таски. Думаю хорошая идея передавать эту информацию в mqtt.Сделал отправку данных о рестарте.
Положил в главную луп-таску, которая мигает светодиодом.
Преобразование
На этом видимо всё. До самой главной задачи девайса сегодня так и не дошёл)
Положил в главную луп-таску, которая мигает светодиодом.
Преобразование
uint32_t
в string
скорее всего выполнил самым странным образом из возможных, но зато работает. В комментариях принимаются правильные варианты такого преобразования =)На этом видимо всё. До самой главной задачи девайса сегодня так и не дошёл)
👍1
Тёмный скрин - дом с Алисой.
Светлые скрины - туя (которая для РФ называется smart life)
Светлые скрины - туя (которая для РФ называется smart life)
Немного пришлось поковыряться. Но в итоге всё завелось, скомпилировалось и работает на
Добраться до счётчика сегодня уже не успеваю
ESP-IDF 5
Добраться до счётчика сегодня уже не успеваю
Со счётчиком
Для начала я не уверен аппаратный он или программный. Из документации никакой вывод не следует.
Вот документация:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/pcnt.html
Вот пример как на этом счётчике реализуется енкодер:
https://github.com/espressif/esp-idf/blob/master/examples/peripherals/pcnt/rotary_encoder/main/rotary_encoder_example_main.c
Из примера до конца не понятно как запустить не в виде енкодера, а просто считать тики на одном пине. Это решаемый вопрос и это не самое печальное.
Беда в том что при инициализации нужно указать минимальное и максимальное значение счётчика в формате
Наверно просто сделаю прерывание на пине и буду его обрабатывать.
pulse counter
есть проблемы.Для начала я не уверен аппаратный он или программный. Из документации никакой вывод не следует.
Вот документация:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/pcnt.html
Вот пример как на этом счётчике реализуется енкодер:
https://github.com/espressif/esp-idf/blob/master/examples/peripherals/pcnt/rotary_encoder/main/rotary_encoder_example_main.c
Из примера до конца не понятно как запустить не в виде енкодера, а просто считать тики на одном пине. Это решаемый вопрос и это не самое печальное.
Беда в том что при инициализации нужно указать минимальное и максимальное значение счётчика в формате
int.
Опытным путём установлено что int
в моём случае это int16_t
Минимум у меня 0, а максимум 99999_999. Лимит в 32767 меня совсем не устраивает.Наверно просто сделаю прерывание на пине и буду его обрабатывать.