А вот так выглядит на данный момент таска для воды.
Осталось дописать бизнес-логику:
- повесить аппаратную считалку тиков на пин - вот какая крутая штука есть в 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 меня совсем не устраивает.Наверно просто сделаю прерывание на пине и буду его обрабатывать.
За сутки ничего не произошло.
(это конечно ещё и вчера вечером было понятно).
Я ожидал что счётчик воды будет давать импульс на каждый литр. А в итоге ничего)
На это может быть несколько причин:
- импульсы слишком долгие для библиотеки кнопок.
- импульсы слишком короткие для библиотеки кнопок
- счётчики не работают
- счётчики вообще работают не так как я ожидаю)
- внутренней подтяжки к VCC недостаточно, нужно ещё резисторы добавить
(это конечно ещё и вчера вечером было понятно).
Я ожидал что счётчик воды будет давать импульс на каждый литр. А в итоге ничего)
На это может быть несколько причин:
- импульсы слишком долгие для библиотеки кнопок.
- импульсы слишком короткие для библиотеки кнопок
- счётчики не работают
- счётчики вообще работают не так как я ожидаю)
- внутренней подтяжки к VCC недостаточно, нужно ещё резисторы добавить
https://eckonom.ru/stati/umnyie-schetchiki-vodyi-s-impulsnyim-vyixodom
Нашёл описание.
Вот что узналновое:
- там геркон. Поэтому нажатия скорее всего долгие.
- тики скорее всего на 10 литров а не на литр.
Использую для кнопок компоненты от UncleRus https://github.com/UncleRus/esp-idf-lib/tree/master/components/button
Там несколько видов событий.
Поменял на
отправил на тестирование.
Нашёл описание.
Вот что узналновое:
- там геркон. Поэтому нажатия скорее всего долгие.
- тики скорее всего на 10 литров а не на литр.
Использую для кнопок компоненты от UncleRus https://github.com/UncleRus/esp-idf-lib/tree/master/components/button
Там несколько видов событий.
BUTTON_PRESSED
BUTTON_RELEASED
BUTTON_CLICKED
BUTTON_PRESSED_LONG
Я использовал BUTTON_CLICKED
Поменял на
BUTTON_PRESSED_LONG
отправил на тестирование.
GitHub
esp-idf-lib/components/button at master · UncleRus/esp-idf-lib
Component library for ESP32, ESP32-S2, ESP32-C3 and ESP8266 - esp-idf-lib/components/button at master · UncleRus/esp-idf-lib
Всё заработало.
Сейчас отправлю команды на установку начального текущего значения и надеюсь устройство заступит на свой пост.
Вот интересный момент при работе с конфигурацией. В самом начале работы определили партишен для nvc
- это место для сохранения настроек.
При перепрошивке устройства если я не меняю таблицу разделов - vsCode не перезаписывает этот раздел при заливке прошивки. Это видно по количеству рестартов (84) столько раз я перезагрузил устройство с того момента.
Хозяйке на заметку:
Работать с количеством рестартов сильно удобнее чем мониторить время работы устройства.
Базовый пример для работы с сохранением конфигурации:
https://github.com/espressif/esp-idf/blob/master/examples/storage/nvs_rw_value/main/nvs_value_example_main.c
Сейчас отправлю команды на установку начального текущего значения и надеюсь устройство заступит на свой пост.
Вот интересный момент при работе с конфигурацией. В самом начале работы определили партишен для nvc
- это место для сохранения настроек.
При перепрошивке устройства если я не меняю таблицу разделов - vsCode не перезаписывает этот раздел при заливке прошивки. Это видно по количеству рестартов (84) столько раз я перезагрузил устройство с того момента.
Хозяйке на заметку:
Работать с количеством рестартов сильно удобнее чем мониторить время работы устройства.
Базовый пример для работы с сохранением конфигурации:
https://github.com/espressif/esp-idf/blob/master/examples/storage/nvs_rw_value/main/nvs_value_example_main.c