IOT / Esp32 / FreeRTOS / Arduino / stm32
799 subscribers
747 photos
133 videos
29 files
199 links
Копилка материалов по работе с микроконтроллером esp32 / stm32
Download Telegram
Вот ещё приехал зигби-умный дом :)
This media is not supported in your browser
VIEW IN TELEGRAM
Вставил вольтметр-амперметр в блок питания. На этом буду считать проект почти завершенным.

Ещё понижайку на систему охлаждения стоит поменять и верхушку корпуса напечатать. Но это уже никак не влияет на возможность использования
🔥3
Попробовал сделать видео.
Удивительно, но это заняло менее 2х часов.
+ пол часа на то чтобы выложить штуку на thingiverse
https://www.youtube.com/watch?v=o-d0SzPBn_4
👍2
В папочке "проекты" у меня почти 20 проектов начинающихся со слов esp32.
Большинство тестовые, просто потыкаться вечером и понять в как работает какая-нибудь перефирия или модуль.

Тут вырисовывается 2 проблемы:
1) С каждым новым проектом у меня накапливается всё больше и больше кода который копируется из одного проекта в другой.

Пара функциональных модулей уже вытащены в компоненты: работа с mqtt и модуль iot который делает обвязку. Они были сделаны достаточно давно, когда моё понимание С/Сpp и насмотренность хорошего кода были никакими. Их хорошо бы переписать. А ещё появилась куча "тасок" и папочка "утиль" которые мигрируют из проекта в проект и периодически приходится искать "а где же последняя версия" этой типовой задачи:
- просканировать файфай точки
- просканировать список устройств на шите i2c
- работа с NVS - это такой кей-валью сторадж для сохранения конфигурации
- набота с NTC и ds18b20
- работа с кнопками
- работа с диодами
- работа с енкодером
- работа с экраном
🔥1
2) У меня не хватает некоторых решений для создания конечного потребительского устройства которое можно получить по почте, и начать пользоваться настроив с телефона. В первую очередь это каптив портал для настройки вайфайя. Ну и есть ещё ряд полезных фич которые нужны. Я их описал для себя в ТЗ, постепенно про все задумки расскажу.

Решение понятное. Сделать фриртос-компонент, который будет давать мне всю необходимую обвязку для проекта.

И я даже начал это делать. И как часто получается - как только ты начинаешь думать в какую-то сторону - сразу находится проект в котором уже есть готовая реализация) осталось только скомпоновать всё в кучу.

За проект традиционно спасибо Руслану (UncleRus) который пишет максимально прекрасный в моём представлении код https://github.com/UncleRus/EvLamp
👍2
Media is too big
VIEW IN TELEGRAM
Вместо тысячи слов ТЗ - рафаэлло видос.

У компонентов классная система конфигурирования которая встраивает необходимые настройки в общие настройки SDK от експрессив.

Там даже можно делать зависимости между отмеченными галочками и выпадающие списки.

На неделе за вечер набросал конфигурацию - думаю она демонстрирует задумку сильно лучше чем текстовое описание.
Конфигурировалка пинов через гуй сильно упрощает понимание и вспоминание а где же у меня в этом девайсе i2c прицеплено и где сидит енкодер. А есть ли на этом пине АЦП? а стоит ли мне эту кнопку посадить на этот пин или он мне ещё пригодится.

Открыл всё в общем списке и увидел, мне нравится!

Теперь буду меньше пользоваться этой картинкой.
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Первое что я уже сделал - это использование пинов как кнопочек с помощью библиотеки:
https://github.com/UncleRus/esp-idf-lib/tree/master/components/button

- обычные бытовые кнопочки
- кнопочка (RESET) с событиями

В качестве кнопочки ресета использую кнопку енкодера) и сделаны пара событий:
— нажатие 3 секунды (планирую включать веб)
— нажатие 10 секунд (сбрасываем всю конфигурацию)

Инициализацию работы с NVC тоже уже сделал.

Далее - включение девайса в режиме captive portal
🔥2👍1
Доковырялся с отправкой сообщений в телегу.
И вроде даже память не утекает 😎

Полезная фича для пользовательских девайсов чтобы не заморачиваться с mqtt.

Собрал на основе примера
https://github.com/espressif/esp-idf/tree/master/examples/protocols/esp_http_client
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Написал большинство инициализации на основе Kconfig с описанием того что происходит в консоль.
- NVS(key-value store) и settings
- DIO
- ADC
- i2c
- wifi
- mqtt (только подключение)

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

На видосе видно как LED сигнализирует о статусе подключения:
- сначала выкл
- горим если старт wifi
- 3 раза моргаем и гаснем если подключились к вайфай
- горим если старт mqtt
- гаснем если подключились.

Хочу ещё на каждую входящую команду моргать.
🔥3🤩1
Не понимаю как писать сюда что-либо про разработку.
Мне кажется это достаточно специфичная информация и она мало кому будет интересна.

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

Предыдущую "обвязку" вокруг MQTT делал когда моё понимание C/C++ и архитектуры фриртоса было совсем никаким.
Сейчас переписываю тот-же самое только с чуть-большим пониманием.

Вроде я допёр в каком случае нужно метить переменные внутри функций как static =) и это уже достижение которое позволяет избежать кучи внезапных багов.
🤔3👍2
ESP-ха уже подписывается на нужные топики.
Отправляет регулярно информацию о доступности: availability и ip
Переподключается с задержкой к WiFi и Mqtt если отрубилось.
Это делается с помощью фриртос-таймеров.

Кроме этого при первом подключении отправляет информацию о количестве рестартов.
Сейчас у меня 301 рестарт - столько раз я перепрошил процессор с момента реализации этой фишки.
Информация о количестве рестартов храниться в энергонезависимой памяти (NVS) там-же где хранится конфигурация.
Очень прикольная фишка)
👍1🔥1
Хозяйке на заметку.

Вывод из ящика нужно делать сбоку, а не из крышки, тогда это не будет мешать обслуживанию ёмкости.
👍1🤣1
Датчик EC можно втыкать в любую дырку тройника