IOT / Esp32 / FreeRTOS / Arduino / stm32
800 subscribers
747 photos
133 videos
29 files
199 links
Копилка материалов по работе с микроконтроллером esp32 / stm32
Download Telegram
Пришла посылка из Китая (с)

5 управляемых розеток/релюх:
- одна аналоговая
- две вайфай
- две вайфай с повер-монитором.


Одну я уже установил.
Полноценно с графиками управляется через тую. Подключается с базовым функционалом в дом с Алисой.
Клубника с балкона переехала в санузел и собирается жить по расписанию.
👍4
Тёмный скрин - дом с Алисой.
Светлые скрины - туя (которая для РФ называется smart life)
Релюхи приехали на выходных.

А сегодня приехали запчасти для блока питания:
- понижайки с 50 для питания кулера
- вольтметр-амперметр, 3 штуки (взял несколько, т.к. хорошо уходят (с))
👍1🔥1
С аппаратным счётчиком импульсов какие-то непонятки и путаница в примерах.

Решил обновить ESP-IDF с 4.4 до 5 версии. Чтобы использовать последние примеры из документации.

Благо это можно сделать прямо из VsCode через палитру команд
ESP-IDF: Настроить расширение
Немного пришлось поковыряться. Но в итоге всё завелось, скомпилировалось и работает на ESP-IDF 5

Добраться до счётчика сегодня уже не успеваю
Со счётчиком 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 недостаточно, нужно ещё резисторы добавить
https://eckonom.ru/stati/umnyie-schetchiki-vodyi-s-impulsnyim-vyixodom

Нашёл описание.
Вот что узналновое:
- там геркон. Поэтому нажатия скорее всего долгие.
- тики скорее всего на 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
отправил на тестирование.
Всё заработало.

Сейчас отправлю команды на установку начального текущего значения и надеюсь устройство заступит на свой пост.

Вот интересный момент при работе с конфигурацией. В самом начале работы определили партишен для nvc
- это место для сохранения настроек.

При перепрошивке устройства если я не меняю таблицу разделов - vsCode не перезаписывает этот раздел при заливке прошивки. Это видно по количеству рестартов (84) столько раз я перезагрузил устройство с того момента.

Хозяйке на заметку:
Работать с количеством рестартов сильно удобнее чем мониторить время работы устройства.

Базовый пример для работы с сохранением конфигурации:
https://github.com/espressif/esp-idf/blob/master/examples/storage/nvs_rw_value/main/nvs_value_example_main.c
Первый час работы - полёт нормальный.

С температурой горячей воды кстати прям беда :/ Воскресенье вечер выглядит так печально - чуть выше 40 градусов.

С давлением ещё большая проблема =)
Давление горячей воды чуть больше 0.1МПа при норме ближе к 0.4.

Вопрос знатокам: а как это перевести в цифру? Прибор мой, могу его снимать и разбирать при желании и модифицировать. Первая мысль - повесить в центр стрелки магнит и использовать датчик хола. Какие могут быть другие варианты?
https://aliexpress.ru/item/32341898423.html

Пришёл люксметр из китая
*просто для истории