Это видео недоступно.
Сожалеем об этом.
Подключаем STM32 к WiFi. Умный дом на STM32. Используем MQTT. Мой протокол.
HTML-код
- Опубликовано: 17 авг 2024
- Умный дом - это инженерная система и интерфейс управления всеми устройствами современного жилого пространства.
Если хочешь собрать устройство и внедрить его в свою экосистему - ты по адресу!) Держи, мой друг, легкий протокол общения между STM32 и ESP8266. Теперь ты можешь создавать устройства на STM32 и подключать их к MQTT брокеру. В данном видео я показываю то, чем занимался последние пол года).
Cсылки:
Материалы из видео: github.com/Sol...
GitHub: github.com/Sol...
Группа ВК: solderi...
ЯндексДзен: zen.yandex.ru/...
STM32F103C8T6: aliexpress.ru/...
ESP8266: aliexpress.ru/...
ESP8266_2: aliexpress.ru/...
Wemos D1 mini: aliexpress.ru/...
Китайский счетчик эл. энергии: aliexpress.ru/...
#Умный_дом#MQTT#Stm32#ESP8266#DIY#STM32_Уроки
00:00 Введение
00:22 Что такое MQTT. Описание моей задумки
03:03 Описание протокола UART_MQTT
07:06 Как программировать ESP8266(установка PlatformIO, настройка VSCode)
12:49 Настройки сетевых параметров
16:16 Прошивка и отладка ESP8266
24:49 Программирование и отладка STM32
31:38 Взаимодействие с телефоном
32:12 Схема подключения ESP8266, если распаивать самому.
Просматривая ролики других авторов, а потом просматривая ваши, как будто попадаешь в очень приятную обстановку, тебе становится хорошо, контент и его подача просто суперские, и автор хороший, положительный и общительный человек. Спасибо.
Спасибо за очень подробное описание работы!
Автору безмерная благодарность за столь концентрированную суть в коротком видео и готовые примеры.
Сел за изучение и реализацию увиденного. Однако, по старинке, считаю, что провода это залог надежности. У себя в квартире я сделал сеть на витой паре, и поэтому следующим шагом буду искать решение stm32+ethernet(PoE)+MQTT. Кстати ниже уже упоминали W5500, возможно с ним.
Хороший новый формат видео, так понятнее даже, а то обычно расказывают как в кофемолке молотят что то, только разгребай
О, как раз понадобилось подобное сообразить. Юарт хорошо, SPI лучше.
Надо было передавать данные меж контроллерами в json, чтобы сообщение содержало не только что, но и куда отправить. Таким образом для различных устройств пришлось бы править только код стмки.
и я такую-же хочу. нихуя не понятно, но было интересно.
Супер.. я сейчас делаю что то наподобие только отправка данных инкубаторов по Mqtt на собственный сервер
Спасибо за труды и подробное объяснение , интересно получилось!Легко излагаете .
супер! тема нужна, тема важна!!
жде еще!
Автор крут! То самое чувство когда не хватает кнопки доната!
Познавательно. Возьму на заметку. Незначительная просьба, немного уменьшить фоновую музыку. А так огромное спасибо.
На счет музыки учту) В следующих роликах может убавлю на пару дБ)
@@Solderingironspbлучше вообще без музыки. Все умеют её включать. Если хотите поделиться супер треком, можно оставить ссылку в описании.
5:40 впервые удалось понять мало-мальски как это происходит в целом в жизни байтов) как раз для миди клавиатуры изучаю отправку байтов и их "сборку в пакет" И отправляются они ни куда-нибудь а в конкретный адрес, с помощью данного видео уже чуть легче понимать что там происходит с байтами, какие там механизмы, интересно на 5:40 показано как байты "шевелятся как под микроскопом" а то их никогда не удавалось увидеть, вот бы все так объясняли "под микроскопом мощным". Даже себе сделаю такую табличку для своих проектов с байтами.
даже до распбери дошло, что в свою плату разработчика на MK нужно обязательно wifi устанавливать в 21 веке, а до stm это еще только годиков через 5 дойдет)
Всё было так хорошо, пока музыка не пришла в ролики. И тут опять началоооось.
Да) я потом ушел от этого)
Конечно полезная разработка. Вот только бы без фоновой музыки. Я вроде бы и сам мог себе включить. Какую захочу. Или не включать. Я же не за музыкой сюда пришёл \_0_/
Не пробовали тоже самое, но с голым ESP с прошивкой под AT команды? По идеи в таком варианте нужно программировать только stm32 и не заморачиваться с platformio и программированием ESP.
Пробовал) Хапнул горя в свое время...Во первых, я так и не смог поднять MQTT на AT командах. Хотя на той же ESP32 оно вроде как с завода предусмотрено, но на любую команду из Datasheet, относящуюся к MQTT мне выдавало ERROR. Меня это очень бесило. Получаешь ошибку, а тебе не пишет даже, что ты делаешь не так. Поэтому я плюнул на AT и решил написать собственный протокол общения) В итоге получил надежность, т.к. имеем проверку CRC. Общаемся всего лишь по 9 байтам, в отличие от длиннющих портянок на AT. Единственное, на плате, если все распаивать, то нужно будет джамперы ставить на UART или на питание, между STM32 и ESP8266, чтоб при прошивке ESP8266 порт был не занят).
Как интересно, но не понятно) потому что программную я stm32 через arduino ide, то ещё извращение, но за то очень удобно
Не смотрел ли в сторону wb серий? интересно то, что есть и беспроводная связь и сверхнизкое потребление. Если периферия тоже не прожорливая, можно на маленьких батарейках CR2032, лепить что-нибудь. Например, сенсор влажности почвы в горшки. Ну, протечки там, закрытые окна-двери, светло ли на улице, и т.п. и всё в умный дом интегрировать.
Ну...я смотрел) они дорогие пока очень. А так да, привлекательные) я пока в роли сенсоров температуры и влажности использую в квартире xiaomi aqara temperature & humidity sensor. Мелкие, недорогие и показывают довольно точно) A Home Assistant уже делает свое дело, объединяя все, что я домой притащу, в одну экосистему) надо пока с основной периферией на stm32 разобраться) Еще много чего не изучено)
Переходы в видео аля черный экран пугают, начинаю тыкать в экран телефона думая, что погас
Ахах 😀
Тем более, что трек повторяется бесконечное число раз😢😢😢😢
Столько задач решенных когда есть WiFi рядом. А что делать если нужно передавать данные на mqtt сервер без WiFi? Сейчас проект пытаюсь делать, где устройство будет находится в месте где нет WiFi сети,а только связь оператора.На руках есть модуль sim800c со слотом сим карты. Тоже программирую Stm32. Но пока мысли есть кидать данные только в лоб на ftp или другой сервер без всяких mqtt, потому что mqtt, как я понял все делают на esp wifi модулях. Надо искать как делать на sim800c или других чипах, пока ене нашёл
Отложите пока stm32 в сторонку. Подключите sim800 через UART к PC и начинайте разбираться с AT командами при помощи терминала. Сам не пробовал еще, но в сети видел, что на нем поднимают MQTT over TCP. Тут еще важно, чтоб на разрыв соединения как-то реагировало адекватно, переподключалось автоматом и чтоб не выбрасывало с сервера при простое…
@@Solderingironspb Да, я так и собираюсь сделать. Сначала рассмотреть поведение sim800 на команды с компьютера, определить алгоритм передачи команд для необходимой работы,а потом уже эти команды переписать на стмку. Единственное, что я пока не понял, так это в чем смысл вообще mqtt от того, что я могу просто делать обычные запросы на сервер с базой данных, где они будут обрабатываться. Я так понимаю, mqtt именно помогает организовать связь когда много устройств, так как в моем случае пока одно устройство и уже место(сервер,ftp или еще что),куда данные будут сбрасываться. Ну в любом случае сначала попробую разобраться именно с базовыми функциями sim а потом смотреть в сторону mqtt, можно ли его реализовать
А не посещала идея работать с Ethernet(WiFI) / MQTT напрямую силами STM32? К примеру использовать любимые ардуинщиками чипы (готовые шилды) типа W5500, W5100. Для WiFi типа HDG104, HDG205...
Отличный проект. Отлично оформлено. Понимаю что работает, получилось дёшево, библиотека MQTT для ESP готовая...
Но "сложная" конструкция получилась у вас. Два парсера, UART между контроллерами, изменять 2 проекта в случае чего..
Посещала. Но решил пока с самого надежного и проверенного. К тому же, на разработку(я даже пытался все на AT командах вначале построить...) и тесты ушло очень много времени, очень ценю свой проект. Ну тут и вся автономная работа лежит на stm32. Сетью занимается esp8266. Даже если она отлетит, stm32 свою задачу делать не перестанет. На счет сложной конструкции - это до первого проекта) потом уже все по шаблону) а по поводу тех же w5500, я думал. Но это нужно еще поднять) пока не дошел до нее, но уже куплено 3 штучки). HDG вообще еще никогда не трогал.
@@Solderingironspb я вот подумал, если у вас есть физические провода (витая пара) то по всей видимости вам не нужен протокол MQTT, думаю есть возможность пинать данные в home assitant через тот же UART напрямую..... Я прав в своих умозаключениях ?
Если по rs422 или по rs485, то еще можно. Просто использовать голый uart нельзя на длинные расстояния.
Как раз задача стоит в избавлении от проводов. Прокладка проводов от разных помещений с разных этажей и является самым сложным в решении моей задачи. Требуется на один экран вывести состояния вспомогательного оборудования (компрессоры, чиллеры, газовые котлы, вентиляции, уровень ёмкости со скважины и много другого), то что сейчас решается путём обхода раз в 8 часов, но о факте аварии в основном узнаем по звонку типа пропала вода в туалетах или стали по давлению воздуха ...
В общем lora модули, black pill, модуль с W5500 уже куплены, начну пожалуй со связки MQTT-W5500-STM32
Такое серьезное оборудование и Вы хотите это сделать беспроводным...Это для себя чисто хотелка или это на работе попросили? Просто у меня б такое не разрешили, мол нет документации. И хоть что делай, каким бы современным и классным устройство не было - нихрена не дадут внедрить. А за Wifi еще бы и высказали, мол угроза безопасности. Я б попробовал это все сделать на МЗТА МС-8(его б использовал в роли основного мастер устройства, а уже на него по modbus тянул сигналы с разных устройств, пусть даже самодельных). МЗТА просто скада систему бесплатную имеет. Настроить на ней оповещение на почту всем и норм. Я так на климатических камерах делал. Нравятся контроллеры их. (Ну это чисто, если на работе строить)
Извеняюсь за дилетантский вопрос.Есть плата esp и есть wifi роутер в который вставляется модем с 3g или 4g сетью (мобильный интернет) ,esp соответственно подключается к нему .Есть ли в интернете сервер куда можно с esp отправлять небольшие порции данных хотя бы один байт и потом через браузер в смартфоне просматривать эти значения. Все это изо серого ip .Нельзя подключиться к esp напрямую с читать данные напрямую .Извиняюсь если написал бред ,но интересно как решаются подобные проблемы
Ну вот, сторонние серверы с MQTT с этой задачей справляются на ура) esp шлет данные на сервер. А Вы с любой точки мира будете подключаться к нему. Никаких VPN, статического IP и прочего, не нужно. А на примере моего домашнего сервера, на home assistant: сервер дома. Работает локально, даже если нет интернета. Чтоб я мог подключаться к нему с любой точки мира, я его зеркалю на сервер NABU CASA(сервис от home assistant). Стоит 5$ в месяц. Там куча защит, шифрование и прочее. Очень нравится 👍🏻 с марта 2019 пользуюсь. Еще не было отказов.
Мне необходимо связать 2 щуки STM32 с подключеним 2 модуля по UART HC-12 и передават- принимать днанни от всякаго типа един друга. Попробовал передать данни от буфера Tx в шестадесетеричнам виде, но их UART-монитор не воспренимает, в десетичном тоже. Попробовал използват Ардуино сериал монитор, он тоже на воспринимает байти в хес-формате. Когда използю Ардуино етот монитор порта воспринимеат все вида данни, а сейчас нет. Скажите, какая причина? Как могу я проверить какие числа-байти идет на изходе UART в Tx? Я остал с убеждением, что монитор спасобен отражат толко символами char, но можно и ошебатся есть ли касается до некакая настройка. Подскажите...
Вам нужен терминал, который может данные выводить в hex формате. В данном видео я делал через Advanced Serial Port Terminal. С 20:32 гляньте.
У Вас параметры подключения к Wi-fi сети, записаны как константы в прошивке ESP8266. А если устройство к другой сети надо подключить, то перепрошивать что ли?)
Да. Но Вы можете доделать код и передавать данные по подключению так же по UART. Но там просто проблемка, я пока не понял как ее решать на esp8266. Данные по подключению пишутся еще куда-то в память.Т.к. у меня бывало, что при перепрошивке МК с новыми данными по подключению к сети, он подключался к старой точке доступа. Помогал только erase flash перед прошивкой.
Да, данные сохраняются. Что бы проверить есть ли сейчас подключение вызываете WiFi.status(). Если подключение есть, то читаете к какой сети подключены, вызываете WiFi.SSID(). Если не устраивает эта сеть, то отключаетесь от нее вызывая WiFi.disconnect().
По хорошему надо писать полноценный протокол обмена между ESP и STM, типа AT команд, только лучше)
Нет, AT команды - это зло. Слишком тяжело для мк. Побайтовая передача с CRC быстрее и надежней.
Здравствуйте, делал все по видео, в итоге вот такие ошибки: C:\Users\frees\Documents\Arduino\libraries\pubsubclientesp8266\src\MQTT.cpp:474:3: error: control reaches end of non-void function [-Werror=return-type] и * [.pio\build\esp12e\lib30a\pubsubclientesp8266\MQTT.cpp.o] Error 1, перехожу по ссылке IntelliSense ничего не подсвечивает, можно ли как-то это решить?
Здравствуйте. Можете написать вконтакте или на почту? Легче удаленно подключиться будет и разобраться
@@Solderingironspb а где ссылку на вк можно найти?
@@ITway404 прямо под видео. Группа ВК.
@kirillsavin5512 компилятор ругается что нет возврата никаких данных из функции, хотя возвраты обёрнуты выше в switch. допишите в строке 474 до скобочки return None;
@@red9ka Спасибо, добрый человек, что написал для всех, а то я уже не знал, что с ним делать. По комментариям смотрел, все в личке решали, а всем не сказали. Олег конечно и так молодец, много делает и выкладывает просто так. А тебе респект, что поделился решением.
Если esp используется для коммуникации, почему не использовать его же в качестве контроллера вместо STM32? В чём смысл такого подключения собаки к еноту?
Полагаю, смысл в удобстве отладки и разработки серьезных устройств
А почему бы не использовать протокол ModBus?
В модбасе есть мастер и слейв устройства. Здесь же независимые устройства, которые общаются в обе стороны.
При компиляции выскакивает ошибка: C:\Users\andre\Documents\Arduino\libraries\pubsubclientesp8266\src\MQTT.cpp:474:3: error: control reaches end of non-void function [-Werror=return-type]
Подскажите как исправить.
Так а вы по данному адресу закинули библиотеку эту?
@@Solderingironspb Да.
Можете написать мне на почту или вконтакте. Они указаны в информации о канале. Могу подключиться удаленно, глянуть.
@@Solderingironspb Здравствуйте, делал все по видео, в итоге вот такие ошибки: C:\Users\frees\Documents\Arduino\libraries\pubsubclientesp8266\src\MQTT.cpp:474:3: error: control reaches end of non-void function [-Werror=return-type] и *** [.pio\build\esp12e\lib30a\pubsubclientesp8266\MQTT.cpp.o] Error 1, перехожу по ссылке IntelliSense ничего не подсвечивает, можно ли как-то это решить?
Етот протокол прием-передача разные типа данных по УАРТ, наконец понял - ето болшой труд. Но не понял 2 вещи: 1. Для чего нужен первый стартовый баит? Можно ли етот байт занимат другая стойност и ползуется примерно для входной код принемание данни с условный оператор If. Например: if (HAL_UART_Receive_DMA(&huart1, RxData, sizeof(RxData)) == HAL_OK && RxData[0] == 0xFF) ...делаем нечего........2. Зачем предназначение второй байт VARIABLE_ID или по протокол - адрес переменной? Я разбираю как номер переменной, каторые передаем от 0 до 254, но непонятно как мы узнаем какой, номер приемаем, потаму что в функция приема нет возможности определит етот адрес переменной, или определяем его от саответново номера масива, в случае второй елемент масива приема? Уточните пожалуйста?
Стартовый байт я использовал для того, чтоб при отладке, можно было бы легко найти начало команды в программе-терминале. Переделать Вы можете протокол, как угодно)
VARIABLE_ID нужен для того, чтоб разделять переменные на устройстве. т.е. под свой протокол я выделил аж 254 ячейки. Думаю этого должно хватить для большинства проектов. В функции приема мы видим, что у нас приходит в rx_buffer[1]. Пришло, допустим туда 0x05, мы знаем, что 0x05 - это температура газа в котле(при составлении проекта составили список адресов переменных). Эта температура имеет формат float, о чем нам говорит rx_buffer[2] = 0x08. ага....проверяем CRC. Бьется. Значит забираем данные, которые находятся в rx_buffer[3], rx_buffer[4], rx_buffer[5], rx_buffer[6]. Преобразуем данные и получаем температуру в формате float.
@@Solderingironspb Болшое спасибо, все понял. Я посмотрел внимательно есшо 2-3 раза видео и понял как отделяете и перезаписваете переменние с оператор SWICH и как ключей използеуте адрес переменная VARIABLE_ID при передаче. Ето очен круто. Вый сделали проект, каторое меня очен необходим. Я переработою библиотека для моей целей, потаму що прием-передача данны будет между двумя ми STM32 и два UART WiFi модуля HC-12. И последный вопрос, которой не понял в ваш протокол: Для чего нужны последние 2 байта в протоколе,
представляющая контрольную сумму - это не понятно из видео? Зачем етая контролная сума служить? И большое спасибо за Вашу помощь!
Контрольная сумма - некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных при их передаче или хранении. Т.е., если по-простому - она нужна для проверки правильности принятых данных. Если CRC, которую Вы рассчитали у принятого пакета, бьется с CRC записанной в этот пакет, то этим данным можно верить. Если же CRC расчетное не совпадает - данные битые. Возможно была наводка, зависание и прочее. Эти данные в расчет и работу соответственно не берем.
@@Solderingironspb Все понял наконец и есшо раз внимательно осмотрел в библиотека функция UART_MQTT_Checksumm_validation. По-простому: Вы с функция передача изчисляете сумма полезных байтов и передаете ее с последние 2 байта. Потом когда будет осоществен прием, с функция UART_MQTT_Checksumm_validation снова изчисляется сумма, но уже на полученьх байтах. Есть ли при передача некаторый бит от серия байтов был повреден, то ето сравняется с передана и приета контролная сумма и функция соответственно генерирует труе или фалсе. Потом етот флаг изполуется для повторение обмена данни есть ли нужно. Я сначала хотел ето игнорировать из функции в библиотека, отдалить, но сейчас понял, чте именно ето самое важное для коректноый передача данных. Я переделаю все функции в твое библиотека, добавлю только есшо един стартовый байт /второй/ и ети первые два байта будут използоватся для кодировка входящого UART сигнала. Так я смогу сделать оделние пара контролера с обмен данны, каторые не мешали друг-друга на другие пара контролеров.
Друг, я очень благодарен тебе за твой безвозмездный Ю-Туб труд. Дал Бог тебе много здаровя и на твое семе. СПАСИБО!
Музыка слишком громко((
В настоящее время я уже отказался от музыки на заднем фоне, т.к. под нее сложнее думать, отвлекает...
А что за прекрасная девушка у вас на видео?)
А вот)
Это та, кто реально пишет код, а этот чувак просто диктором работает :))))))))))))
Как избавится от ошибок типа:
"отсутствуют экземпляры конструктора "PubSubClient::PubSubClient", соответствующие списку аргументов -- типы аргументов: (WiFiClient, const char *, const int)"
"отсутствует явный тип (требуется "int")"
"требуется круглая скобка ")""
"идентификатор "pub" не определен"
И таких с десяток, код компилируется, все нормально, но ошибки раздражают. Возможно в настройках ВСкоде нужно что-то поправить? Извиняюсь за нубский вопрос, в первый раз сталкиваюсь с этим редактором
а Вы ж моим проектом пользуетесь? Там смысл в чем. PlatformIO очень придирчив к коду, как и любой нормальный редактор. А библиотеки под ардуино написаны не самым лучшим образом. Вы библиотеку pubsubclientesp8266 куда поместили? как я в видео, т.е. в стандартную папку ардуино? Тогда не должен ругаться. А если запихнете ее в src и include, то там начинается 200++ ошибок :D ну и в VSCode установите дополнение "C/C++ IntelliSense, debugging, and code browsing." Я на видео говорил, что я не помню, нужно или нет, но лишним не будет. По идее ошибок не должно быть. По крайней мере у меня нет. Отпишитесь, помогло или нет. Если что, то могу и удаленно подключиться, глянуть)
@@Solderingironspb Дополнение C/C++ IntelliSense установлено, pubsubclientesp8266 в стандартной папке ардуино (
@@denykelektrik4110 напишите мне на почту olegdizzvolkov@yandex.ru или вконтакте
@@Solderingironspb Написал на почту
@@denykelektrik4110 вы решили эту проблему? у меня нечто похожее