В статье описывается вариант подачи как дискретных, так и ШИМ сигналов, исполнителем которых является плата на контроллере ESP8266, а посредником — Android телефон с доступом в Интернет и с установленной системой визуального потокового программирования Node-RED и MQTT-брокером mosquitto. Аналогично будет продемонстрирован вывод показаний температуры по запросу из Телеграм с помощью датчика ds18b20. Также будет показана возможность сохранения ресурса аккумулятора при постоянно подключенном зарядном устройстве через недозаряд при помощи linux-скрипта ACC.
Обладателям старых Android-смартфонов и газовых котлов на даче посвящается!
Введение
Моя задача на данную статью — показать лишь базовые возможности организации дискретного и ШИМ управления через Telegram-бота, иначе бы текст получился слишком раздутый.
На данный момент, существует три наиболее легких способа получить контроль над Arduino-устройством через интернет:
1. Blynk — недостатки в ограниченном количестве контролируемых выводов в бесплатной версии, зависимость от чужого облака. В старой версии приложения можно было делать неограниченное количество контролируемых выводов, но эта версия приложения больше не поддерживается.
2. Arduino cloud — аналогично, ограниченное количество контролируемых выводов в бесплатной версии, зависимость от чужого облака.
3. Node-RED Богатый функционал при бесплатности. Возможность организовать на «белом» IP доступ к выстроенной панели управления приборами из любой точки земли, либо настроить общение через Telegram-бота. Встраивается в системы управления умным домом, например Home assistant, но и сама по себе представляет широкие возможности для построения автоматизации различной сложности.
Следует отметить, что автоматизация на Node-RED уже затрагивалась на данном ресурсе — №1, №2, что говорит об универсальности данной системы программирования.
Мы же будем действовать по такой схеме (чертил в diagrams.net, рекомендую):
Приложение Telegram на компьютере или смартфоне через бота отправляет команду (через меню команд, глобальную клавиатуру или клавиатуру под сообщением). Команда доходит до Node-RED, хостящейся на смартфоне под управлением Android с установленным приложением Termux (на котором поднят Node.js). Далее специальный модуль node-red-contrib-telegrambot обрабатывает полученную команду, интерпретирует ее в команды топиков MQTT, брокер которого тоже хостится на Android-телефоне посредством Termux. Платы контроллеров с wi-fi со специально адаптированной прошивкой (с подписками на соответствующие топики) следят за изменением событий на подписанных топиках и при изменении посылают сигнал на дискретные выходы.
Как видно, при этом мы вольны как угодно распоряжаться балансом сложности логики контроллер-потоки Node-RED и в зависимости от задачи оставлять сложную логику на стороне контроллера или водружать ее на плечи Node-RED.
Видео демонстрирует возможность как дискретного управления 6 светодиодами, так и пропорционального управления ими же, с шагом 25% (чтобы не усложнять логику работы с двумя клавиатурами бота телеграм). А также позволяет запрашивать текущую температуру с датчика ds18b20.
Чтобы организовать всю эту систему нам нужно:
1. Выбрать сервер под Node-RED и mosquitto. Сервером будет служить смартфон под управлением Android версии не ниже 7.
2. Установить на сервер приложение Termux.
3. В Termuxe поднять node.js, установить зависимости для Node-RED и установить саму Node-RED. Установить брокер MQTT mosquitto.
4. Написать логику работы с Телеграм-ботом в Node-RED.
5. Написать прошивку под вышеозначенную логику для wi-fi-контроллеров.
6. Разобраться с деградацией аккумулятора телефона-сервера при постоянно подключенном к сети состоянием посредством скрипта ACC.
1. Выбор сервера
Для систем домашней автоматизации принято использовать одноплатные компьютеры, например: orange pi, banana pi. Однако, в базовой комплектации они хранят свои данные на простой microSD, которая исчерпывает свой срок службы не столько за сравнительно короткое время (от полугода до года), но вдобавок еще и умирает внезапно, что несет определенные риски. Конечно, можно настроить ОС на минимацию записи на диск, но при наличии активной БД, все равно результат будет плачевным. Выходом может служить покупка nand-модуля памяти, но тогда и так не бюджетная система еще сильнее оттягивает карман. А ведь к ней нужно еще докупать ИБП модуль с аккумуляторами.
Автор уверен, что в современном хозяйстве с большой долей вероятности найдется ненужный Android-телефон, в котором уже имеется Nand-памят и встроенный ИБП в виде аккумулятора. Даже если версия системы будет меньше 7, то на известном ресурсе наверняка найдется ветка с достаточным количеством актуальных прошивок. Для наших нужд достаточно будет от 1.5ГБ ОЗУ (думаю, даже с 1ГБ все заведется).
У меня основным сервером служит Jiayu S3 без физического экрана. Будучи один раз настроенным на отладку по USB в заранее сохраненную виртуальную машину, я, при необходимости увидеть рабочий стол телефона, подключаюсь к нему через программу Scrcpy. Но 99% времени я взаимодействую с сервером через командную строку по SSH.
2. Установка Termux
Последнюю версию данного приложения можно скачать непосредственно со страницы релизов на GitHub либо установить магазин приложений Fdroid и уже оттуда установить Termux. Внимание, версия из Google Play не поддерживается и не рекомендуется к установке!
3. Поднимаем Node-RED в Termux
Если не собираетесь поднимать Node-RED на смартфоне, можно сразу переходить к п.4.
Чтобы не мучиться с неудобной клавиатурой смартфона, предлагаю законнектиться к телефону по SSH и с компьютера комфортно вводить команды через копипаст. Для этого надо установить OpenSSH и задать пароль.
Запускаем Termux и в нем проделываем последовательность команд
Устанавливаем NodeRED в Termux
pkg update
В случае запроса, чей пакет ставить — нажимает Y, т.е. пакет мейнтейнера.
pkg install openssh
passwd
Задаем пароль, запускаем сервер SSH командой
sshd
и уже с компьютера (который находится в одной сети с телефоном) вводим
ssh -p 8022 x.x.x.x
Где x.x.x.x ваш IP, который можно узнать через команду ifconfig (секция wlan0).
При первом соединении через командную строку вас попросят подтвердить соединение, на что мы должны вбить yes и дальше можно работать через компьютер. Также можно соединяться по SFTP через программу WinSCP для передачи файлов.
А если вы установите
pkg install termux-api
И выполните в консоли
termux-setup-storage
Затем подтвердите на смартфоне запрос на доступ к файловой системе, то в домашней папке Termux будете иметь смонтированную домашнюю директорию Android. Кстати, на скрине Termux с настроенной оболочкой zsh и темой PowerLevel10K. Здесь написано, как все это настроить.
Начинаем подготовку зависимостей для Node-RED.
Настроим mosquitto. Для этого создадим отдельный файл конфигурации и в нем запишем параметры мониторинга порта и разрешим анонимный вход. В домашней директории делаем:
nano .mosquitto.conf
добавляем в файл
listener 1883
allow_anonymous true
Настроим автозапуск. Для этого из магазина F-Droid нужно скачать приложение Termux:Boot и единоразово запустить его. Далее
cd .termux
mkdir boot
cd boot
nano start.sh
После чего попадаем в пустой только созданный файл, в котором вводим
Внимание! После апгрейда Node-RED на новую версию, нужно сделать
termux-fix-shebang $(which node-red)
один раз, иначе автозагрузка Node-RED не будет работать.
Сохраняемся. Вводим в терминале
termux-wake-lock
На смартфоне должно высветиться предложение не ограничивать работу приложения Termux в фоне. Соглашаемся.
После перезагрузки в менеджере процессов по команде top должен быть Node-RED.
Настраиваем красивый терминал в Termux c oh-my-zsh
1) Устанавливаем необходимые пакеты:
pkg update
pkg install curl git zsh mc
2) Качаем и инсталлим oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
На запрос сделать ли zsh оболочкой по-умолчанию даем утвердительный ответ.
3) Устанавливаем плагины zsh-syntax-highlighting, zsh-autosuggestions
И подключаем тему, редактируя файл ~/.zshrc на предмет ZSH_THEME=«powerlevel10k/powerlevel10k».
5) Конфигурируем powerlevel10k, для перезапускаем оболочку и при первом запуске с новой темой, она нам предложит удобный пошаговый мастер настройки powerlevel10k:
zsh
При желании всегда можно запустить повторную конфигурацию темы powerlevel10k, запустив в терминале:
p10k configure
4. Работа в Node-RED.
Мы уже научились узнавать IP сервера по ifconfig (секция wlan0). Соответственно в браузере компьютера, находящегося в одной сети со смартфоном, вводим
http://x.x.x.x:1880/
Видим приветственное сообщение и после него редактор Node-RED
У данной статьи нет цели описывать органы управления редактора Node-RED, поэтому я буду лишь направлять читателя, давая определенную последовательность действий, ведущую к результату. Подробнее ознакомиться с тонкостями Node-RED можно в русскоязычной Wiki.
Сначала нам нужно установить модуль node-red-contrib-telegrambot. Для этого в правом верхнем углу щелкаем на «гамбургер» и жмем «Manage palette» (alt + p), выбираем «Install» и вводим node-red-contrib-telegrambot, жмем «Install». Если Node-RED просит перезапуститься, чтобы модуль заработал, то перезапускаемся.
4.1 Создание и настройка бота Телеграм
Теперь наша задача создать своего Телеграм-бота, получить его токен и Chat-ID диалога с ботом, а далее внести эти данные в поток. Переходим в https://t.me/botfather, в меню выбираем /newbot, задаем имя бота, юзернейм, заканчивающийся на «bot» и получаем в ответном сообщении токен
Для получения ChatID своего бота cоздаем следующую конструкцию из нод, находящихся в левой части редактора. Это простейший бот, возвращающий отосланное сообщение.
Два быстрых клика на ноде «Telegram receiver» и перед нами окно создания нового бота. Нажимаем на карандаш, вводим имя бота и наш токен. Нажимаем на Done. И применяем изменения по кнопке Deploy в правом верхнем углу
Теперь идем в приложение Телеграм, вписываем в поиск юзернейм бота (заканчивающийся на bot) и вступаем с ним в диалог. Достаточно написать туда «Привет». Бот вернет это сообщение.
А в правой части редактора на вкладке «Debug» будет отображен Payload нашего сообщения (т.к. на выход мы подключили отладочную ноду). Запишем из него chatId.
Далее нам нужно импортировать мой поток (Flow), где я разместил логику работы Телеграм-бота (берем на Pastebin). Жмем на «гамбургер» и выбираем «Import» (ctrl + i). Вставляем мой JSON и после импорта в редакторе должна появиться вкладка Telegram LEDs с настроенным потоком:
Заметьте, что фильтр потока яркости лампы я сделал двумя способами — с функциональной нодой и на стандартных нодах. Первый вариант информативнее, но занимает больше места в редакторе. Сочетание данных стилей позволяет сделать ваши потоки по-настоящему простыми в восприятии.
Перенастраиваем все Telegram-ноды на своего бота. Для этого при двойном клике на соответствующей ноде выбираем свого бота. А также во всех функциональых нодах «Sent to TG light number» в chatId нужно вставить свой chatId. В розовых нодах MQTT нужно поменять IP на IP смартфона. Не забываем задеплоить изменения.
4.2 Создание набора команд в меню Telegram
Удобно иметь наглядное представление набора доступных команд в едином меню.
Для этого в BotFather набираем /setcommands выбираем своего бота и задаем список команд с описанием в соответствии с синтаксисом. Например:
temp - Температура ds18b20
leds - Выбор светодиодов
red - 5 степеней ШИМ красного LED
green1 - 5 степеней ШИМ зеленого LED1
4.3 Поток считывания температуры с ds18b20
Делаем уже знакомую нам операцию импортирования потока (берем на Pastebin). Настраиваем ноды Telegram, MQTT и в функциональной ноде записываем свой chatId.
4.4 Мониторим сообщения в MQTT-топиках
Уже сейчас мы можем посмотреть первые результаты работы. Для этого нам нужен MQTT-клиент. Рекомендую MQTT Explorer. Им мы будем мониторить изменения в наших топиках.
После запуска программы настраиваем подключение в соответствии с IP нашего MQTT-сервера.
И после соединения мы уже будем видеть активный топик $SYS. Если сейчас послать в диалог нашего бота команду /temp то появится топик Temp с сообщением Request=Yes. Аналогично и с другими командами.
Осталось настроить микроконтроллер так, чтобы он реагировал на изменения в соответствующих топиках.
5. Написание прошивки для Wi-Fi микроконтроллера
Для Arduino есть несколько библиотек, реализующих протокол MQTT. Мы остановимся на PubSubClient, как наиболее популярной и имеющей подробную документацию. Примеры ее использования есть в поставляемой документации, а также на замечательном сайте Стива.
Прикрепляю код на Pastebin. Для его работы нужны библиотеки DallasTemperature by Miles Burton, OneWire by Paul Stoffregen и, собственно, сам PubSubClient. Отмечу, что чтобы функционально реализовать работу с ШИМ, мне потребовалось вынести обработку входящих данных из функции callback в основной цикл. Обратите внимание на пины, к которым подключены ds18b20 и светодиоды.
6. Скрипт ACC продляет жизнь аккумулятору при постоянно подключенной зарядке
Работа смартфона в серверном режиме предполагает постоянное подключение к сетевой зарядке. Есть несколько факторов, приводящих к ускоренной деградации аккумулятора в таком режиме.
1. Постоянное нахождение в режиме 100% заряженности, что вредно для Li-ion аккумуляторов.
2. Если контроллер заряда телефона не поддерживает прямую поставку тока к потребителю, в обход аккумулятора при достижении 100% зарядки аккумулятора, то он будет находиться в постоянном цикле заряд-микроразряд. Что также вредно.
Для решения эти проблем существует скрипт ACC. Внимание, для его работы нужны root-права! Вот статистика работы аккумулятора моего смартфона с этим скриптом за 20 дней.
Как видно, за этот период батарея ни разу не заряжалась полностью. А если бы не такой большой промежуток, можно было бы увидеть «пилу» между зарядом от 60%, ниже которого при подключенной зарядке телефон не разряжается, и до 70%, после которого идет разряд при подключенном зарядном устройстве.
Скрипт устанавливается как модуль Magisk и после перезагрузки запускается сам. Существует android приложение ACCA, позволяющее наглядно управлять параметрами скрипта.
Заключение
Я писал это, чтобы в дальнейших статьях, где описывается более сложная автоматизация на основе NodeRED, ссылаться на уже готовый гайд. Рекомендую группу в телеграме, где вы можете получить консультацию по этой системе программирования. И желаю удачи в освоении программирования в разных его ипостасях!
Планирую купить+115Добавить в избранноеОбзор понравился+132
+221
Смотря какой андроид. У меня два планшета — на 5 и 6. Два мобильника HTC на 4 андройде, один самсунг на 5 андройде.
Тот же Termux требует минимум 7 андроид. Да и вообще, 95% приложений хотят не ниже 7 андроида. Ещё год-полтора и будут хотеть восьмёрку. Даже приличное mqtt приложение не поставить.
Как человек не знающий программирование, я обожаю Node-RED. Node-RED наше всё! Как стяжки, скотч, синюю изоленту и wd40, Node-RED создали Боги.
С помощью Node-RED я решил все задачи автоматизации не зная программирование.
Это для совсем маленьких задач.
В красной ноде я использую без единой строчки кода, ну иногда буквально 5-10 строк кода:
— нода onvif
— нода hikvision
— нода для командной строки
— ноды для обработки изображений.
И вополняются такие задачи:
Одна камера с широким углом обзора, умная, выдаёт по протоколу isapi координаты объекта (человек, транспорт)
Вторая камера ptz — по протоколу onvif заставляю её вертеться туда, где обнаружен объект первой камерой.
Нода обработки изображений вырезает из снапшотов из камеры тот участок кадра, где обнаружен объект, подписывает его текстом.
На этом же докер контейнере стоит консольный ffmpeg, нода шлёт команду, ffmpeg и он из нескольких снапшотов собирает gif. Эту гифку отправляю в мессенжер. Это контроль огорода.
А на улице тоже самое, но с использованием jetson nano + Deepstack, купленным в довоенные доспецоперационные времена на али за 4800р. Тоесть ещё и фейсы распознаются.
И всё это я замутил на Node-RED за три-четыре вечера, причём именно так, как хочу, как надо. И нет никаких «неполучилось». Страшно подумать, как это всё можно реализовать на каком-нибудь питоне или c++, сколько лет и нервов потратил бы. И это малая доля, у меня вообще 4 контейнера с нодами, на каждой свои кучи автоматизации.
И главное, когда захожу через год в Node-RED, всё понимаю, что к чему. А когда взгляну на код, даже ардуиновский, через месяц, не могу понять, что там сам накодил.
У меня травма психологическая на обзоры. Я как-то несколько лет назад долго долго решал одну задачу на ардуино, долго собирал из разных кусков кода. Потом заметил, что некоторые тоже ищут решение данной задачи, ну я и выложил своё решение. Ещё неделю чистил код, пытался найти ошибки за собой, привести всё в нормальный вид. Кучу времени потратил. Написал топик. Налетели местные программисты, так меня опустили, мол это не правильно, тут ваще работать не будет а вот это только идиот мог придумать, тут всего три строчки кода нужно. На предложение написать эти три строчки кода мне сразу предложили заплатить $100, бесплатных советов никто не даёт, они там годы учились программированию не для волонтёрства. В итоге ветку заминусили а из-за срача в комментах модератор вообще всё удалил. Такой вот поганый ресурс ардуино ру.
В общем теперь я не пишу на темы, в которых не разбираюсь на 100%. Да и вообще не пишу, времени нет.
Налетели местные программисты, так меня опустили, мол это не правильно, тут ваще работать не будет а вот это только идиот мог придумать, тут всего три строчки кода нужно
А это обратная сторона той самой медали, что в ардуино могут и (как вы же сказали):
малограмотные люди в программировании, мы вообще не программисты. Нам надо решить задачу быстро и без кучи знаний.
Знаете, какая боль потом смотреть на такой код? А пытаться его использовать в своих проектах? Приведу конкретный пример — датчик температуры/влажности DHT22. Его считывание занимает порядка 5 мс (или даже больше). Код для ардуино (по крайней мере тот, что я находил несколько лет назад) запрещает прерывания и читает всё в цикле. И все работает, просто и без кучи знаний (как вы написали).
Но у меня был проект (тоже в ардуино!), где на прерываниях реализована динамическая индикация, частота прерываний — 25 КГц (или что-то такое). Если я запрещу прерывания, экранчик будет некрасиво мигать при опросе датчика. Если я не запрещу — опрос не работает, т.к. тайминги нарушаются. В итоге, пришлось писать свой код.
На предложение написать эти три строчки кода мне сразу предложили заплатить $100, бесплатных советов никто не даёт, они там годы учились программированию не для волонтёрства
А это уже другое дело. Если не нравится реализация — хотя бы надо объяснить, почему не нравится и что можно улучшить, да и как вообще это лучше сделать, потому что человек может просто не знать, что можно время считать с помощью таймера и т.д.
А вас заставляют? Дуло у виска держат? Или гордыня не позволяет пройти мимо не облаяв, как та дворняжка кидающаяся на всех проходящих? Ну хорошо, заметил ошибки, так исправь. Много исправлять и нет на это времени, ну ок, укажи на ошибку, порекомендуй что-то конкретное. А если нет, то нафига ты такой вообще нужен на том форуме и в чём смысл твоих предъяв? Холивары разводить? Самоутвердиться за счет обывателей?
А вас заставляют? Дуло у виска держат? Или гордыня не позволяет пройти мимо не облаяв, как та дворняжка кидающаяся на всех проходящих?
Ну, я же вроде выше понятно объяснил — требуется библиотека, ищешь, находишь, начинаешь использовать, что-то работает не так. Смотришь в код и офигиваешь. Причем тут «мимо пройти»? Я ведь даже после этого постов на форумах не пишу, просто переписываю под себя с нуля и забываю.
А если нет, то нафига ты такой вообще нужен на том форуме
А меня нет на том форуме :)
Я вот только одного не понимаю, вы жалуетесь на то, что там все такие токсичные, лают как дворняжки, но сами-то так же делаете — от каждого вашего предложения негативом веет. Как будто вас сотни лет угнетали, как афроамериканцев, и вот теперь настал момент, когда об этом нужно кричать.
Вы поймите, что выставляя любой проект в общественный доступ, вы автоматически должны быть готовы к критике. И это нормально, люди разные — кому-то не понравится, кто-то мимо пройдет, а кто-то и оценит, у каждого свое мнение. Если вы считаете, что приносите пользу, ориентируйтесь только на последних. Ну и критика разная бывает — к конструктивной надо прислушиваться, неконструктивную мимо пропускать. Как-то так.
простой человек за несколько дней не поднимет 4 контейнера
Я их и не поднимал. Просто выбрал на докер хабе, и нажал install.
Не, потом, спустя какое-то время, я научился собирать контейнеры сам с помощью Портейнера.
А логика… Все 100% нужных мне действий я содрал. Потому что это есть в примерах к ноде от автора ноды, плюс на форуме Node-RED можно найти уже готовые решения много чего. Дольше всего возился с пробросом хранилища, чтоб данные не в контейнере хранились, и с подбором консольной команды для ffmpeg.
Джетсон — железка. В эту железку я ставлю Deepstack.
Deepstack съедает изображение (снапшот с камеры) и через 0.1-0.15 сек выдаёт резолюцию по изображению в виде .xml, что там обнаружено, сколько, где(координаты)…
Это всё, что я знаю. И меня это вполне устраивает. А что там внутри этого Deepstack я не знаю. Может питон, может удав, а может и вообще гадюка.
Но, насколько знаю, проект открыт, можете посмотреть исходники на гите.
погуглил цены на джетсон нано — офигел
Да. Первый я взял за 8500 на авито, 4G. А второй за 5500 на али, 2G, и потом кусал локти, потому что прямо через неделю цена упала до 4800.
А потом санкции… и плюсом Nvidia объявила, что прекращает развитие и поддержку платформы Nano. И настал пипец. Да что там, мне микротик потребовался, hex. Я его брал в dns да 4200. Месяц назад он 22000 стоил. Сейчас появились на Али за 5700.
Мне знакомый показывал проект на джетсоне с распознаванием предметов с помощью нейронных сетей — т.е. видеоизображение с камеры а на нем прямоугольниками выделены предметы с названиями. Весь проект был выполнен на python.
У меня похожая на вашу хотелка, я хочу знать, кто подходит к воротам и калитке на даче и как часто.
Спасибо большое за статью.
Плюс поставил с удовольствием. Было интересно. Думаю, что многие меня поддержат, ведь это стимулирует авторов писать больше познавательных интересных статей.
Но что касается меня лично — я слишком стар для всего этого рутования смартфонов и телеграм-ботов.
Поставил копеечную ардуину, подключил к ней копеечную SIM800.
Ардуина принимает от меня и отправляет мне смски. Читает с пинов/дёргает ногами. Заодно в эфир через HC-12 плюёт другим моим модулям по участку, если я в смске попрошу. Чего ж ещё-то надо…
Можно добавить ноду Inject с галочкой «Inject once after 0.1 seconds, then» (временной промежуток нужен, чтобы другие ноды успели подгрузиться) и соответствующим Payload.
Скрин ноды
Или вы имели в виду автоматическое включение устройства?
Никак. Две 18650 параллельно дадут время непрерывной работы от 24 часов. Их и ставить. Или три.
Или городить устройство внешнего запуска, например на ардуинке и подпаиваться к кнопке.
Тут только железный внешний костыль, в виде ардуинки, одновибратора на рассыпухе, можно наверно в программном коде телефона что нибудь нашаманить. Как вариант можно использовать андроид магнитолы, те сразу начинают включатся при подаче питания, но это не в компетенции данного топика, да и своих тараканов в данном типе устройств не мало.
ЗЫ Топик на 4пда с подобным обсуждением. Актуальность решений конечно же не проверял ибо нет необходимости.
Дискретными сигналами можно управлять, например, лампой, чайником, сервоприводом, закрывающим/открывающим шаровый кран. А ШИМ-сигналом можно регулировать яркость светодиодной лампы с драйвером, поддерживающем регулирование тока ШИМ-сигналом.
Статья, как я уже писал, вводная, я планирую еще по теме, постепенно усложняя контент.
Дело в том, что тема раскрыта не полностью
Вот купил я себе ESP8266, а что дальше? Его же надо как-то запитать, прошить, сконектить, докупить какие-то шлейфы, датчики. Для меня это темный лес…
Думаю пост был бы интересен многим, если бы был описан весь процесс, начиная с настройки железа.
Плюсанул авансом. Ждем приквел…
Буквально сейчас вышла Arduino IDE v2, но все же она уступает возможностям Platformio в VS Code. Поэтому я рекомендую связку Platformio и VS Code для написания кода Arduino.
Есть такой проект «Наливайка». Довольно большой по меркам простых скетчей, многофайловый, многобиблиотечный. Так вот он написан под Arduino IDE. Если бы его переделывать под чистый C++ platformio, то на каждый отдельный файл пришлось бы городить .include и поддерживать все это хозяйство. Для таких случаев и нужна Arduino IDE. Особенно сейчас, когда в версии 2 появились продвинутые средства работы с кодом.
Даже если выбрать «использовать фреймворк Arduino», файлы кода будут с расширением .cpp, а не .ino и, соответственно, будут подчиняться не правилам Arduino, а чистого C++.
файлы кода будут с расширением .cpp, а не .ino и, соответственно, будут подчиняться не правилам Arduino, а чистого C++
Ну, можно исхитриться, оставить для компиляции один.срр файл, а остальные включить в него с помощью #include (никто не запрещает включать исходники, надо только понимать, что делаете). Но это не соответствует правилам написания кода на С++. Так что лучше один раз поправить и забыть. При этом, ведь в большинстве ардуино-проектов только один ino-файл, остальные уже срр.
А с точки зрения удобства разработки VS Code удобней среды ардуино, как вы и написали — не знаю, какая там вторая версия (не успел посмотреть), но в первой даже intellisense (или чего-то похожего) не было. Писать на ней в 21-м году было просто болью.
Тем более, если потом потребуется переходить на более продвинутые платы/МК, лучше сразу начинать в платформио.
если потом потребуется переходить на более продвинутые платы/МК,
Нет, не потребуется. Не все на столько продвинутые. Не всем это надо. А для классического ардуинщика «переход на более продвинуты платы» это переход с ардуино нано на ардуино мега. С мега на ESP8266, с ESP8266 на ESP32. И с ESP32 только на то, что в дальнейшем появится поддерживаемое именно в ARDUINO IDE. Не надо нам лишнего гемора. Мы малограмотные люди в программировании, мы вообще не программисты. Нам надо решить задачу быстро и без кучи знаний.
Табуретку можно собрать имея доски, пилу, молоток и гвозди. Да, если добавить рубанок, шлифмашинку, саморезы, краску, то можно собрать шикарный стул. Но нам не надо стул, мы не хотим тратить время на обучение работать с рубанком, с краской, с шлифмашиной. Я прекрасно знаю, что стул лучше, но табуретка выполняет всё, что мне необходимо, и при этом не забирает лишнее время. Я предпочту покататься на велосипеде, посмотреть киношку, потусить с друзьями..., чем трать время на обучение работы с инструментом, который мне не нужен, каким бы там хорошим он небыл. И так в любой области, в кулинарии, в электрике, в строительстве… Каждому своё.
Понятно теперь за ардуинщиков?
На заре коллективизации привезли в колхоз трактор. Механик несколько часов объяснял, что и как, потом спрашивает:
— Ну что, вопросы есть?
В толпе началось перешёптывание, но все молчат. Тут встает председатель:
— Так, всё объяснили хорошо, в принципе, всё понятно. Один вопрос — КУДА ТУТ ЛОШАДЬ ЗАПРЯГАТЬ?
А теперь по теме. Во-первых, почему вы говорите за всех ардуинщиков?
Понятно теперь за ардуинщиков?
Во-вторых, вы категорически не понимаете, что такое ардуино, ардуино IDE и платформио (и ваше следующее сообщение это еще раз подтверждает). Но при этом, гонора и уверенности в своих словах у вас хоть отбавляй. Я рекомендую вам сначала разобраться с вопросами, а потом уже «набрасывать на вентилятор». И я даже вам помогу. Итак:
1. Ардуино с точки зрения программирования это HAL-фреймворк. То есть, это набор библиотек, которые предоставляют ардуинщику аппаратно независимые функции (такие, как digitalWrite, например). Именно это и позволяет добиваться описанного вами же сценария:
Мы малограмотные люди в программировании, мы вообще не программисты. Нам надо решить задачу быстро и без кучи знаний.
2. Ардуино IDE — это редактор, изначально поставляемый с фреймворком для того, чтобы в блокноте не кодить и командной строкой не пользоваться, ибо это сложно.
3. Платформио же — это вообще среда разработки, устанавливаемая плагином в один из поддерживаемых редакторов.
А теперь самое главное — никто (и я в том числе!) не предлагает вам отказаться от ардуино и использовать любой другой фреймворк вроде RTOS, libopencm3, CMSIS и т.д. Пользуйтесь на здоровье, переходите от плате к плате и т.д.
Я предлагаю лишь отказаться от убогого редактора ардуино IDE (по крайней мере первой версии, что там во второй — пока не видел) и перейти на тандем VS Code + platformio.
Зачем? Да потому, что редактор VS Code в разы удобнее редактора ардуино IDE. Вы можете устанавливать любые требуемые вам плагины (например, проверка правописания), вы можете использовать удобный intellisense, подсказывающий вам возможные имена и идентификаторы и много чего еще другого. VS Code считается лучшим бесплатным редактором для множества языков программирования, тут и спорить бессмысленно, что ардуино IDE ему проиграет.
А теперь к платформио. Во-первых, наверное, вы будете удивлены, но в него можно просто импортировать ардуино-проект, независимо от того, нашли ли вы его на форуме 10-летней давности или вчера взяли у коллеги:
Во-вторых, вот даже простая задача — ставите вы ардуино, захотели на ESP перейти — вам надо искать ссылку на json, добавлять его в настройки. Геморно. В платформио вы просто выбираете плату из списка.
Многие годы показали, что это лучшее, что придумано. Роешься на древних форумах, нашёл код 12 летней давности на ардуино нано. Клац клац, и код запустился и работает на ESP32, которой тогда, когда это писали вообще в природе не существовало.
Или заходиш на какой-нибудь проект, например есть очень хороший проект на ESP8266 — UART over Ethernet, или как-то так называется, но он только на ESP8266, потому, что написан на С++. Я на гите спросил автора, портируется ли проект на ESP32, там и Ethernet есть кроме WiFi, и три аппаратных UART… Автор сказал, что на переделку кода уйдёт уйма времени и он не может этим заняться. Так если бы ты изначально писал в Arduino IDE, то почти ничего не пришлось бы переделывать ни под ESP32, ни под следующие ESP которые там когда-либо в будущем придумают.
но он только на ESP8266, потому, что написан на С++
Вот не позорьтесь, ну правда. Под ардуино так-то пишут тоже на С++.
Так если бы ты изначально писал в Arduino IDE, то почти ничего не пришлось бы переделывать ни под ESP32, ни под следующие ESP которые там когда-либо в будущем придумают.
Вы путаете теплое с мягким. Допустим, возьму я ардуино IDE и под классическую UNO напишу код, использующий напрямую регистры таймера atmega328. Мне это в ардуино запретят? Нет. Этот код будет работать без модификаций на ESP? Тоже нет. И что толку, что я написал его в Arduino IDE?
Потому что для этого и придуман HAL (Hardware Abstraction Layer). Если писать, опираясь на него — будет переносимо. Но сначала этот HAL надо под каждую конкретную плату написать. Посмотрите, например, как сделано управление WS2812 — там внутри для каждой поддерживаемой платы написан свой код, и никак иначе. Потому что управление диодами на atmega и на ESP реализовано абсолютно по-разному. Вы это понимаете?
А теперь представьте, что я хочу решить какую-то задачу, для которой никто никакого HAL не написал. Что я сделаю — либо напишу HAL для моей имеющейся платы, либо просто сделаю всё напрямую. И все могу прекрасно сделать в том же ардуино IDE. В первом случае для переноса на другую необходимо будет добавить HAL для другой платы, во втором — переписать проект заново. Итого, в любом случае просто взять и сменить тип платы в проекте — не выйдет.
Поэтому, вы сначала с вопросом разберитесь, а потом уже пишите и минусы ставьте.
Здесь вопрос в том, кто с какой стороны заходит в автоматику. Для электриков и электронщиков все навороты иде, нюансы софта, сред разработки и т.п. действительно вторичны. Это полностью соответствует историческому подходу внедрения цифровых систем управления в промышленности, когда новое железо попало в руки вчерашних киповцев. Думаю для многих автоматчиков это справедливо и сейчас. Человеку нужно быстро (и не обязательно эффективно) решить задачу, а не учиться программированию.
Другое дело когда человек заходит в автоматику из программирования (привет хабр). Многие из таких вообще под системами управления понимают в первую очередь (а иногда и исключительно) софт, что далеко не всегда верно.
В общем я бы не стал так «отшивать» Вашего оппонента. Его мнение вполне справедливо и, уверен, разделяется многими автоматчиками «от сохи», в смысле от кипа). Тем более что он же оговорился в самом начале, что «не всем надо», а не утверждал, что «всем не надо». Да и минусы я вижу только у него, а отнюдь не у Вас.
А за статью спасибо автору, было интересно. Но лично я вряд ли буду повторять этот проект на этом «железе», не смотря на всю любовь делать конфетки из г-на и палок)
Роешься на древних форумах, нашёл код 12 летней давности на ардуино нано. Клац клац, и код запустился и работает на ESP32
Ох уж эти сказочники… Очень часто авторы кода прямо пишут что-то вроде «Собиралось и проверялось под Ардуино IDE (условно ) 1.6.хх. На более свежих версиях — работоспособность не гарантирована!» Компилируешь под (условно) 1.8 — и получаешь кучу ошибок… Начинаешь разбираться — одна (или несколько) установленных по умолчанию библиотек поменяли версии и работают совершенно иначе… Откатываешь библиотеки, заливаешь — и… правда — не работает!
И это на платах с тем же CPU, что и в оригинальной разработке!
Не знаю, как сейчас, но года 2 назад у меня более половины рабочих проектов (особенно с использованием Телеграмма) на ESP8266 невозможно было переделать под ESP32…
Начинаешь разбираться — одна (или несколько) установленных по умолчанию библиотек поменяли версии и работают совершенно иначе…
Встречал такое. Но решалось по второй ссылке в выдаче гугла за 20 минут. Что-то типа «раньше библиотека объявлялась так, а теперь вот так, зайди в код библиотеки, поправь строки 2, 13, 256 вот так… » и всё работало.
если реально есть желание «войти в тему» (хм… ну да ладно), то поищите на сайте обзоры других поделок с 8266. Как минимум есть обзоры двух метеостанций — в одном из них есть сылки на все инструкции по прошивке, а в другом(вроде бы) описан процесс непосредственно в обзоре.
Сложного ничего нет — но есть особенности. Я уже несколько лет не шил свои — обхожусь OTA обновлениями при необходимости. Но помню что иногда процесс обнаружения модуля в программаторе требует шаманства (для готовых плат с встроенным CH340 обычно не актуально). А больше всего достает что современные смарты с современными браузерами пытаются зайти на модуль по https — первое время не понимал почему старый смарт подключается сразу а новый ваще никак…
Для устройств, постоянно включенных использую не штатную зарядку со скриптом, а прямое подключение к клеммам акума и переделанную зарядку на напругу 4 вольта. Некоторые приборы работают уже лет 15 и даже аккумы не сдохли!
Напрямую. На аккум подается 4 В, от них питается телефон. Соответственно, аккумулятор всегда заряжен до 4 В. Важно только, чтобы было и ограничение тока, т.к. если внешнее питание пропадет, аккум начнет разряжаться, а потом, когда оно появится, будет заряжаться. И вот тут ток надо ограничить.
Тем не менее, вы останетесь в подчинении схемотехники конкретного телефона — может ли он работать напрямую от зарядки или он все же будет заряжать/разряжать аккумулятор?
В обоих подходах есть плюсы и минусы. Плюс вашего — не надо разбирать телефон и паять. Минус — нужны рут-права. Но если вы собрались подключать ту же плату на есп, вам, скорее всего, паять все равно придется.
Года четыре назад встала задача организовать видеонаблюдение на планшете (плюс стоит приложение для домофона калитки БЕВАРД). Месяца через три вспух и впоследствии сдох аккум на 6000 ма/с. Что делать? Подключаю вместо аккумулятора стабилизатор с напряжением где-то 3,7-3,9. А операционка говорит фиг! Аккум должен разряжаться!!! И… медленно-медленно по процентику зарядка доходит до 1 % и планшет выключается. Включить можно только с подключенной зарядкой.
Долго искал выход. Помог Tasker благо рут на планшете был. Работает и по сей день. Такая вот история.
Таскер проверяет уровень заряда аккумулятора и при снижении ниже допустим 50% выполняет команду шела на установку нужного текущего процента заряда. Так и крутится.
P.S. команда dumpsys battery set level 100 (100 естественно уровень заряда), команду обязательно выполнять от su.
Если есть терминал на телефоне, можете попробовать поставить любой уровень заряда аккума вне зависимости от реального
Делается да, но инструкций с кодом нет. Также можно с tasmota сделать.
Можно всем небольшим умным домом одной esp32 управлять наверно, но без node-red, что неудобно.
Я тоже писал, бот кстати работал много лет после статьи и был убран 2 года назад когда котел сменили на нормальный который не имеет таких проблем. mySKU.me/blog/china-stores/48213.html
Библиотека изменилась так что скетч не актуален уже.
Посмотрел, скетч уже недоступен на дропбоксе) удалили за давностью, видимо.
В принципе, написать работу с телеграмм-ботом для есп, судя по всему, не сложно. Единственный вопрос — там нужен протокол HTTPS (то есть, с шифрованием) — для есп есть такие клиенты?
Это если одна плата на весь дом. А если платка ESP8266 находится в спальне, еще одна в ванной, ESP32 на кухне, ESP32-C3 в зале и еще пару ненужных смартфонов отсылают фото в телеграм (например, когда кто-то звонит в звонок, его фотографируют) по запросу. То все это хозяйство поддерживать на уровне автономных прошивок без NodeRED нерационально.
отсылают фото в телеграм (например, когда кто-то звонит в звонок, его фотографируют)
Как вы заставили телефон фотографировать, когда звонят? Вы в дверной глазок телефон камерой вовнутрь вмотировали? А как телефон узнаёт о звонке? Очень интересно.
У меня-то ардуина оптопарой со штатного звонка напряжение меряет, а регистратор штатным образом по тревожному входу фоткает, складывает и оповещает, — это его работа. Внешне вообще ничего не видно — обычный звонок с обычной советской кнопкой, звонит штатным обычным образом. И городить ничего не надо, да и заморачиваться с зарядками телефонов.
Не хотел писать, но не выдержал… Посмотрите на ТВ приставки!
Возможно я ошибаюсь, не учитываю чьи-то потребности и особенности задач, но считаю, что самым оптимальный вариантом малонагруженного (и не только «мало») сервера, например для домашней автоматизации, является решение на базе ТВ приставки.
И на сегодня это ТВ-приставки на Amlogic S905X3 (ценой в $40 на али). Пример реализации.
Почему?
Оно маленькое, дешевое, малопотребляющее законченное устройство. С мощным процессором (Мощнее многих Pi) и 4Гб памяти, втроенной EMMC и портами USB 3.0 / 2.
Питается от 5В, то есть резервирование питания сделать можно огромным количеством способов, если оно нужно. Ищите на али «UPS 18650». Хотя мне ближе БП вроде MEANWELL AD55A + stepdown, все же с винтами бокс кушает более 0.5А.
Впрочем это не мешает смотреть и на более старые приставки на том же S912 (USB2) или даже нечто на Rockchip RK3399/RK3329.
А по USB, если недостаточно встроенного EMMC без проблем подключаются хоть флешки, хоть SSD, хоть HDD.
А полноценный Armbian на базе последней Ubuntu 22.04 LTS или последнейго Debian позволяет использовать весь спектр современного линух софта натуральным и удобным способом. И уже имеет встроенную реализацию ZRAM для долгой жизни флешек.
(вздох) чего только люди не городят, вместо того, чтобы не пользоваться Apple Homekit…
Я тоже сношался с Raspberry Pi и Orange PI, перешивал приставки под Armbian и вот это всё. А потом махнул рукой и попробовал их решение. Оказалось, что оно просто работает. Никакого зоопарка протоколов, запитал — зашуршало. Китайцы освоили прошивку ESP-шек открытым софтом с github.com/maximkulkin/esp-homekit Вот эта кроха за 500 руб. идеально входит за выключатель в подрозетник:
Хочешь чего-то совсем под себя — ковыряешь JSON, прошиваешь, готово.
Хочу теперь обратно угробленные на Android TV и Armbian человеко-месяцы.
Правильно ли я понимаю, что использование Apple Homekit влечёт за собой и обязательное использование продукции Apple? Что это «экосистема», ориентированная на работы в и с их устройствами?
Беглый поиск и чтение найденного «по диагонали» навели именно на такую мысль. И если это действительно так, то лично для меня и Apple, и Home, и их Кit все они идут лесом… :)
Рабство это. :))
Классная вещь этот homekit и локально работать умеет и код открытый и любые свои устройства на esp подключить можно. Еще бы под android работал, вообще бы цены не было. Альтернатив нету.
Вот тоже почитал —- и думаю: хорошая это штука, даже жаль, что на фиг не нужна, в данных конкретных обстоятельствах. :))
Не стану я даже ради лучшей в мире программы продукцию Apple закупать…
Если бы у автора был старый айфон, то он, возможно, и стал бы использовать Homekit. Но тут, как и с NodeRed, есть проблема с поддержкой старых устройств. Насколько древней может быть ios?
Рутованый телефон на андроиде дает бОльший выбор в ПО.
С Raspberry Pi не надо сношаться, надо поставить систему на SSD и забыть.
Зоопарк протоколов позволяет смешать в кучу устройства практически из любой экосистемы, что опять же дает бОльший выбор.
поскольку у меня один самртфон на андройд умер именно изза протертого флеша
скептически смотрю на подобные статьи, хотя все в принципе логично.
Плюс только wifI и скорее всего только на 2.4 плюс вопрос с акумулятором
— все вроде мелочи, а в комплексе — решение для храбрых.
Плюс вопрос бэкапа наработанных «непосильным трудом» настроек.
Ту же карту памяти хотя бы и на комп склонировать можно целиком, заменить быстро.
Если сдохнет телефон (та же память в нем) и так же внезапно, то простых и быстрых способов восстановить все не будет, а настроить бэкап по сети все равно не помешает.
Так что альтернатива дешевая, но надежность старого телефона — не та вещь на которую стоит полагаться.
А чему там неуемно писаться на диск, если нет БД и в NodeRED не включено логирование? Сам Termux тоже ничего не пишет. Бэкапить настройки потоков можно, но какой смысл, если они меняются только при разработке? И если включена опция проектов, то можно деплоить на гитхаб.
а чему тогда неуемно писать на sd карточку на одноплатниках, тем более с линуксом (там тем более можно логи отключить)?
так регулярно плачутся карточки дескать летят
Прикольная статья но честно говоря все немножко в кучу намешано. Ибо здесь на мой взгляд есть две независимые части.
1) Как построить систему домашней автоматизации используя Node Red + MQTT и бот телеграмы для удаленного управления. В качестве домашнего сервера можно использовать что угодно.
2) Как использовать старый телефон или планшет в качестве сервера домашней автоматизации.
Если например разбить на две статьи то начинающим было бы проще разобраться.
А у меня на зигби датчики протечки оповещения через бота, тоже через node red. Он подключён через HA. Сам HA автоматизацию я не осилил, хрень какая-то. Служит мне только чтобы устройства добавлять.
Правда бот в телеге так себе надёжное оповещение… А если инет в этот момент пропадет? Лучше бы звонок настроить какой-то или сирену. Бывают usb-динамики?
Ну, например, отсылка раз в месяц сообщения на мыло/в телегу количества расхода м3 воды из ванной — одна плата. Еще одна — фотографирование звонящего в дверь и отсылание фото в телеграм. Еще по одной — независимое шим управление светильниками в зале/спальне.
Ничего, в каждом конкретном случае. Но вы же не будете ставить одну плату и от неё тянуть провода и в ванную, и в спальню, и к дверному глазку? Вы поставите отдельные платы. А теперь все это надо как-то объединить, чтобы управлять из единого места. Чтобы писать общие сценарии управления, использующие возможности всех устройств сразу. Например — позвонили в дверь, надо выключить свет в спальне и отправить показания счетчиков хозяину (пример, конечно, надуманный, но он показывает идею совместного использования устройств).
А у вас 10 плат по квартире, где эти сценарии будут выполняться? Где будете организовывать взаимодействие между ними? Можно, конечно, одну плату сделать «главной», но только вот логику вы тогда на С++ будете для ESP писать, т.к. реализовать управление через веб-интерфейс у есп просто ресурсов не хватит. Вот habl и считает, что для этого надо иметь центральный сервер управления, в качестве которого он предлагает node red использовать, установленную на телефон.
у меня «10 плат по квартире». Например, в подрозетниках за выключателями прячутся ESP-шки, рулящие светом. Без проводов, питание — от осветительной проводки. Вебинтерфейс не нужен, они прекрасно управляются сценариями с айфона по протоколу Apple Homekit. Например, «по будням включай свет за 10 минут до будильника, а когда все в отпуске — отдыхай».
Вместо написания кода для Ардуино можно использовать Esphome. Управление такое же — из Nodered через mqtt. Для большинства применений это окажется проще, а когда смартфон проапгрейдится до одноплатника с Home Assistant, эти устройства залетят туда как родные ;)
У него всегда была возможность или нативно с Home Assistant по своему протоколу работать или с ним же (и с кем угодно) по mqtt. Так что нет, не поменялось, всегда так было :) Нужно просто в настройках указать адрес брокера, логин, пароль.
У меня все розетки с EspHome работают c Home Assistant (или с Nodered) как раз по mqtt.
В этой теме мне бы хотелось вариант на zigbee вместо вайфая, чтоб стандартные сенсоры реле подключать. Но к сожалению готовых полноценных модулей для Андроида нету, физический интерфейс надо городить на ардуино и тд…
Эээх, жаль поздно увидел, но вдруг кто-нибудь подскажет.
Если в Вашей схеме со «стрелочками с двух концов», надо будет прочитать отправленные телеграмм-ботом данные тем же (другим) node-red, это возможно?
У меня esp-шки на «объектах» шлют данные через mqtt в телеграмм. На «большой земле» node-red и желание эти данные читать и обрабатывать.
Везде «динамический серый адрес за nat'ом». Сейчас использую халявно-бесплатный-ненадежный внешний vpn и платить аренду «для поиграться» совсем не хочется.
Три смарта валяются. Пользоваться на постоянку уже старенькие 512 мб, 2 гиг, 4 гиг оперативки а вот присобачить к чему-нибудь еще вполне.
Тот же Termux требует минимум 7 андроид. Да и вообще, 95% приложений хотят не ниже 7 андроида. Ещё год-полтора и будут хотеть восьмёрку. Даже приличное mqtt приложение не поставить.
С помощью Node-RED я решил все задачи автоматизации не зная программирование.
В красной ноде я использую без единой строчки кода, ну иногда буквально 5-10 строк кода:
— нода onvif
— нода hikvision
— нода для командной строки
— ноды для обработки изображений.
И вополняются такие задачи:
Одна камера с широким углом обзора, умная, выдаёт по протоколу isapi координаты объекта (человек, транспорт)
Вторая камера ptz — по протоколу onvif заставляю её вертеться туда, где обнаружен объект первой камерой.
Нода обработки изображений вырезает из снапшотов из камеры тот участок кадра, где обнаружен объект, подписывает его текстом.
На этом же докер контейнере стоит консольный ffmpeg, нода шлёт команду, ffmpeg и он из нескольких снапшотов собирает gif. Эту гифку отправляю в мессенжер. Это контроль огорода.
А на улице тоже самое, но с использованием jetson nano + Deepstack, купленным в
довоенныедоспецоперационные времена на али за 4800р. Тоесть ещё и фейсы распознаются.И всё это я замутил на Node-RED за три-четыре вечера, причём именно так, как хочу, как надо. И нет никаких «неполучилось». Страшно подумать, как это всё можно реализовать на каком-нибудь питоне или c++, сколько лет и нервов потратил бы. И это малая доля, у меня вообще 4 контейнера с нодами, на каждой свои кучи автоматизации.
И главное, когда захожу через год в Node-RED, всё понимаю, что к чему. А когда взгляну на код, даже ардуиновский, через месяц, не могу понять, что там сам накодил.
В общем теперь я не пишу на темы, в которых не разбираюсь на 100%. Да и вообще не пишу, времени нет.
Знаете, какая боль потом смотреть на такой код? А пытаться его использовать в своих проектах? Приведу конкретный пример — датчик температуры/влажности DHT22. Его считывание занимает порядка 5 мс (или даже больше). Код для ардуино (по крайней мере тот, что я находил несколько лет назад) запрещает прерывания и читает всё в цикле. И все работает, просто и без кучи знаний (как вы написали).
Но у меня был проект (тоже в ардуино!), где на прерываниях реализована динамическая индикация, частота прерываний — 25 КГц (или что-то такое). Если я запрещу прерывания, экранчик будет некрасиво мигать при опросе датчика. Если я не запрещу — опрос не работает, т.к. тайминги нарушаются. В итоге, пришлось писать свой код.
А это уже другое дело. Если не нравится реализация — хотя бы надо объяснить, почему не нравится и что можно улучшить, да и как вообще это лучше сделать, потому что человек может просто не знать, что можно время считать с помощью таймера и т.д.
А меня нет на том форуме :)
Я вот только одного не понимаю, вы жалуетесь на то, что там все такие токсичные, лают как дворняжки, но сами-то так же делаете — от каждого вашего предложения негативом веет. Как будто вас сотни лет угнетали, как афроамериканцев, и вот теперь настал момент, когда об этом нужно кричать.
Вы поймите, что выставляя любой проект в общественный доступ, вы автоматически должны быть готовы к критике. И это нормально, люди разные — кому-то не понравится, кто-то мимо пройдет, а кто-то и оценит, у каждого свое мнение. Если вы считаете, что приносите пользу, ориентируйтесь только на последних. Ну и критика разная бывает — к конструктивной надо прислушиваться, неконструктивную мимо пропускать. Как-то так.
Не, потом, спустя какое-то время, я научился собирать контейнеры сам с помощью Портейнера.
А логика… Все 100% нужных мне действий я содрал. Потому что это есть в примерах к ноде от автора ноды, плюс на форуме Node-RED можно найти уже готовые решения много чего. Дольше всего возился с пробросом хранилища, чтоб данные не в контейнере хранились, и с подбором консольной команды для ffmpeg.
PS погуглил цены на джетсон нано — офигел
Deepstack съедает изображение (снапшот с камеры) и через 0.1-0.15 сек выдаёт резолюцию по изображению в виде .xml, что там обнаружено, сколько, где(координаты)…
Это всё, что я знаю. И меня это вполне устраивает. А что там внутри этого Deepstack я не знаю. Может питон, может удав, а может и вообще гадюка.
Но, насколько знаю, проект открыт, можете посмотреть исходники на гите.
Да. Первый я взял за 8500 на авито, 4G. А второй за 5500 на али, 2G, и потом кусал локти, потому что прямо через неделю цена упала до 4800.
А потом санкции… и плюсом Nvidia объявила, что прекращает развитие и поддержку платформы Nano. И настал пипец. Да что там, мне микротик потребовался, hex. Я его брал в dns да 4200. Месяц назад он 22000 стоил. Сейчас появились на Али за 5700.
У меня похожая на вашу хотелка, я хочу знать, кто подходит к воротам и калитке на даче и как часто.
Плюс поставил с удовольствием. Было интересно. Думаю, что многие меня поддержат, ведь это стимулирует авторов писать больше познавательных интересных статей.
Но что касается меня лично — я слишком стар для всего этого
рутования смартфонов и телеграм-ботов.Поставил копеечную ардуину, подключил к ней копеечную SIM800.
Ардуина принимает от меня и отправляет мне смски. Читает с пинов/дёргает ногами. Заодно в эфир через HC-12 плюёт другим моим модулям по участку, если я в смске попрошу. Чего ж ещё-то надо…
*Да, автоматическое включение телефона/планшета
Или вы имели в виду автоматическое включение устройства?
Или городить устройство внешнего запуска, например на ардуинке и подпаиваться к кнопке.
навернов программном коде телефона что нибудь нашаманить. Как вариант можно использовать андроид магнитолы, те сразу начинают включатся при подаче питания, но это не в компетенции данного топика, да и своих тараканов в данном типе устройств не мало.ЗЫ Топик на 4пда с подобным обсуждением. Актуальность решений конечно же не проверял ибо нет необходимости.
Статья, как я уже писал, вводная, я планирую еще по теме, постепенно усложняя контент.
Вот купил я себе ESP8266, а что дальше? Его же надо как-то запитать, прошить, сконектить, докупить какие-то шлейфы, датчики. Для меня это темный лес…
Думаю пост был бы интересен многим, если бы был описан весь процесс, начиная с настройки железа.
Плюсанул авансом. Ждем приквел…
Приквелу быть )
А с точки зрения удобства разработки VS Code удобней среды ардуино, как вы и написали — не знаю, какая там вторая версия (не успел посмотреть), но в первой даже intellisense (или чего-то похожего) не было. Писать на ней в 21-м году было просто болью.
Тем более, если потом потребуется переходить на более продвинутые платы/МК, лучше сразу начинать в платформио.
Табуретку можно собрать имея доски, пилу, молоток и гвозди. Да, если добавить рубанок, шлифмашинку, саморезы, краску, то можно собрать шикарный стул. Но нам не надо стул, мы не хотим тратить время на обучение работать с рубанком, с краской, с шлифмашиной. Я прекрасно знаю, что стул лучше, но табуретка выполняет всё, что мне необходимо, и при этом не забирает лишнее время. Я предпочту покататься на велосипеде, посмотреть киношку, потусить с друзьями..., чем трать время на обучение работы с инструментом, который мне не нужен, каким бы там хорошим он небыл. И так в любой области, в кулинарии, в электрике, в строительстве… Каждому своё.
Понятно теперь за ардуинщиков?
А теперь по теме. Во-первых, почему вы говорите за всех ардуинщиков?
Во-вторых, вы категорически не понимаете, что такое ардуино, ардуино IDE и платформио (и ваше следующее сообщение это еще раз подтверждает). Но при этом, гонора и уверенности в своих словах у вас хоть отбавляй. Я рекомендую вам сначала разобраться с вопросами, а потом уже «набрасывать на вентилятор». И я даже вам помогу. Итак:
1. Ардуино с точки зрения программирования это HAL-фреймворк. То есть, это набор библиотек, которые предоставляют ардуинщику аппаратно независимые функции (такие, как digitalWrite, например). Именно это и позволяет добиваться описанного вами же сценария:
2. Ардуино IDE — это редактор, изначально поставляемый с фреймворком для того, чтобы в блокноте не кодить и командной строкой не пользоваться, ибо это сложно.
3. Платформио же — это вообще среда разработки, устанавливаемая плагином в один из поддерживаемых редакторов.
А теперь самое главное — никто (и я в том числе!) не предлагает вам отказаться от ардуино и использовать любой другой фреймворк вроде RTOS, libopencm3, CMSIS и т.д. Пользуйтесь на здоровье, переходите от плате к плате и т.д.
Я предлагаю лишь отказаться от убогого редактора ардуино IDE (по крайней мере первой версии, что там во второй — пока не видел) и перейти на тандем VS Code + platformio.
Зачем? Да потому, что редактор VS Code в разы удобнее редактора ардуино IDE. Вы можете устанавливать любые требуемые вам плагины (например, проверка правописания), вы можете использовать удобный intellisense, подсказывающий вам возможные имена и идентификаторы и много чего еще другого. VS Code считается лучшим бесплатным редактором для множества языков программирования, тут и спорить бессмысленно, что ардуино IDE ему проиграет.
А теперь к платформио. Во-первых, наверное, вы будете удивлены, но в него можно просто импортировать ардуино-проект, независимо от того, нашли ли вы его на форуме 10-летней давности или вчера взяли у коллеги:
Во-вторых, вот даже простая задача — ставите вы ардуино, захотели на ESP перейти — вам надо искать ссылку на json, добавлять его в настройки. Геморно. В платформио вы просто выбираете плату из списка.
Или заходиш на какой-нибудь проект, например есть очень хороший проект на ESP8266 — UART over Ethernet, или как-то так называется, но он только на ESP8266, потому, что написан на С++. Я на гите спросил автора, портируется ли проект на ESP32, там и Ethernet есть кроме WiFi, и три аппаратных UART… Автор сказал, что на переделку кода уйдёт уйма времени и он не может этим заняться. Так если бы ты изначально писал в Arduino IDE, то почти ничего не пришлось бы переделывать ни под ESP32, ни под следующие ESP которые там когда-либо в будущем придумают.
Вы путаете теплое с мягким. Допустим, возьму я ардуино IDE и под классическую UNO напишу код, использующий напрямую регистры таймера atmega328. Мне это в ардуино запретят? Нет. Этот код будет работать без модификаций на ESP? Тоже нет. И что толку, что я написал его в Arduino IDE?
Потому что для этого и придуман HAL (Hardware Abstraction Layer). Если писать, опираясь на него — будет переносимо. Но сначала этот HAL надо под каждую конкретную плату написать. Посмотрите, например, как сделано управление WS2812 — там внутри для каждой поддерживаемой платы написан свой код, и никак иначе. Потому что управление диодами на atmega и на ESP реализовано абсолютно по-разному. Вы это понимаете?
А теперь представьте, что я хочу решить какую-то задачу, для которой никто никакого HAL не написал. Что я сделаю — либо напишу HAL для моей имеющейся платы, либо просто сделаю всё напрямую. И все могу прекрасно сделать в том же ардуино IDE. В первом случае для переноса на другую необходимо будет добавить HAL для другой платы, во втором — переписать проект заново. Итого, в любом случае просто взять и сменить тип платы в проекте — не выйдет.
Поэтому, вы сначала с вопросом разберитесь, а потом уже пишите и минусы ставьте.
Другое дело когда человек заходит в автоматику из программирования (привет хабр). Многие из таких вообще под системами управления понимают в первую очередь (а иногда и исключительно) софт, что далеко не всегда верно.
В общем я бы не стал так «отшивать» Вашего оппонента. Его мнение вполне справедливо и, уверен, разделяется многими автоматчиками «от сохи», в смысле от кипа). Тем более что он же оговорился в самом начале, что «не всем надо», а не утверждал, что «всем не надо». Да и минусы я вижу только у него, а отнюдь не у Вас.
А за статью спасибо автору, было интересно. Но лично я вряд ли буду повторять этот проект на этом «железе», не смотря на всю любовь делать конфетки из г-на и палок)
Очень часто авторы кода прямо пишут что-то вроде «Собиралось и проверялось под Ардуино IDE (условно ) 1.6.хх. На более свежих версиях — работоспособность не гарантирована!» Компилируешь под (условно) 1.8 — и получаешь кучу ошибок… Начинаешь разбираться — одна (или несколько) установленных по умолчанию библиотек поменяли версии и работают совершенно иначе… Откатываешь библиотеки, заливаешь — и… правда — не работает!
И это на платах с тем же CPU, что и в оригинальной разработке!
Не знаю, как сейчас, но года 2 назад у меня более половины рабочих проектов (особенно с использованием Телеграмма) на ESP8266 невозможно было переделать под ESP32…
Но чаще-то бывает как раз наоборот.
Сложного ничего нет — но есть особенности. Я уже несколько лет не шил свои — обхожусь OTA обновлениями при необходимости. Но помню что иногда процесс обнаружения модуля в программаторе требует шаманства (для готовых плат с встроенным CH340 обычно не актуально). А больше всего достает что современные смарты с современными браузерами пытаются зайти на модуль по https — первое время не понимал почему старый смарт подключается сразу а новый ваще никак…
Да и, судя по всему, у автора все же идет заряд-разряд от 60 до 70 процентов. А тут — практически стабильное напряжение.
В обоих подходах есть плюсы и минусы. Плюс вашего — не надо разбирать телефон и паять. Минус — нужны рут-права. Но если вы собрались подключать ту же плату на есп, вам, скорее всего, паять все равно придется.
Долго искал выход. Помог Tasker благо рут на планшете был. Работает и по сей день. Такая вот история.
P.S. команда dumpsys battery set level 100 (100 естественно уровень заряда), команду обязательно выполнять от su.
Если есть терминал на телефоне, можете попробовать поставить любой уровень заряда аккума вне зависимости от реального
Можно всем небольшим умным домом одной esp32 управлять наверно, но без node-red, что неудобно.
mySKU.me/blog/china-stores/48213.html
Библиотека изменилась так что скетч не актуален уже.
В принципе, написать работу с телеграмм-ботом для есп, судя по всему, не сложно. Единственный вопрос — там нужен протокол HTTPS (то есть, с шифрованием) — для есп есть такие клиенты?
У меня-то ардуина оптопарой со штатного звонка напряжение меряет, а регистратор штатным образом по тревожному входу фоткает, складывает и оповещает, — это его работа. Внешне вообще ничего не видно — обычный звонок с обычной советской кнопкой, звонит штатным обычным образом. И городить ничего не надо, да и заморачиваться с зарядками телефонов.
Удлинил шлейф от камеры. Думал, будут наводки, но нет, все работает нормально. Можно, кстати, ESP32 Cam приспособить, но качество будет хуже.
На звонок пришлось поставить отдельную плату микроконтроллера и когда на динамик приходит сигнал, его считывает плата.
Возможно я ошибаюсь, не учитываю чьи-то потребности и особенности задач, но считаю, что самым оптимальный вариантом малонагруженного (и не только «мало») сервера, например для домашней автоматизации, является решение на базе ТВ приставки.
И на сегодня это ТВ-приставки на Amlogic S905X3 (ценой в $40 на али). Пример реализации.
Почему?
Оно маленькое, дешевое, малопотребляющее законченное устройство. С мощным процессором (Мощнее многих Pi) и 4Гб памяти, втроенной EMMC и портами USB 3.0 / 2.
Питается от 5В, то есть резервирование питания сделать можно огромным количеством способов, если оно нужно. Ищите на али «UPS 18650». Хотя мне ближе БП вроде MEANWELL AD55A + stepdown, все же с винтами бокс кушает более 0.5А.
Впрочем это не мешает смотреть и на более старые приставки на том же S912 (USB2) или даже нечто на Rockchip RK3399/RK3329.
А по USB, если недостаточно встроенного EMMC без проблем подключаются хоть флешки, хоть SSD, хоть HDD.
А полноценный Armbian на базе последней Ubuntu 22.04 LTS или последнейго Debian позволяет использовать весь спектр современного линух софта натуральным и удобным способом. И уже имеет встроенную реализацию ZRAM для долгой жизни флешек.
Я тоже сношался с Raspberry Pi и Orange PI, перешивал приставки под Armbian и вот это всё. А потом махнул рукой и попробовал их решение. Оказалось, что оно просто работает. Никакого зоопарка протоколов, запитал — зашуршало. Китайцы освоили прошивку ESP-шек открытым софтом с github.com/maximkulkin/esp-homekit Вот эта кроха за 500 руб. идеально входит за выключатель в подрозетник:
Хочешь чего-то совсем под себя — ковыряешь JSON, прошиваешь, готово.
Хочу теперь обратно угробленные на Android TV и Armbian человеко-месяцы.
Беглый поиск и чтение найденного «по диагонали» навели именно на такую мысль. И если это действительно так, то лично для меня и Apple, и Home, и их Кit все они идут лесом… :)
Рабство это. :))
Не стану я даже ради лучшей в мире программы продукцию Apple закупать…
Рутованый телефон на андроиде дает бОльший выбор в ПО.
С Raspberry Pi не надо сношаться, надо поставить систему на SSD и забыть.
Зоопарк протоколов позволяет смешать в кучу устройства практически из любой экосистемы, что опять же дает бОльший выбор.
скептически смотрю на подобные статьи, хотя все в принципе логично.
Плюс только wifI и скорее всего только на 2.4 плюс вопрос с акумулятором
— все вроде мелочи, а в комплексе — решение для храбрых.
Плюс вопрос бэкапа наработанных «непосильным трудом» настроек.
Ту же карту памяти хотя бы и на комп склонировать можно целиком, заменить быстро.
Если сдохнет телефон (та же память в нем) и так же внезапно, то простых и быстрых способов восстановить все не будет, а настроить бэкап по сети все равно не помешает.
Так что альтернатива дешевая, но надежность старого телефона — не та вещь на которую стоит полагаться.
так регулярно плачутся карточки дескать летят
1) Как построить систему домашней автоматизации используя Node Red + MQTT и бот телеграмы для удаленного управления. В качестве домашнего сервера можно использовать что угодно.
2) Как использовать старый телефон или планшет в качестве сервера домашней автоматизации.
Если например разбить на две статьи то начинающим было бы проще разобраться.
Правда бот в телеге так себе надёжное оповещение… А если инет в этот момент пропадет? Лучше бы звонок настроить какой-то или сирену. Бывают usb-динамики?
например дешеманские колончки с единственным usb проводом
Ух!
У ESP32 и даже ESP8266 достаточно мозгов и RAM чтобы общаться с API Телеграма по HTTPS самостоятельно. Руководств в интернете — вагон.
А у вас 10 плат по квартире, где эти сценарии будут выполняться? Где будете организовывать взаимодействие между ними? Можно, конечно, одну плату сделать «главной», но только вот логику вы тогда на С++ будете для ESP писать, т.к. реализовать управление через веб-интерфейс у есп просто ресурсов не хватит. Вот habl и считает, что для этого надо иметь центральный сервер управления, в качестве которого он предлагает node red использовать, установленную на телефон.
У меня все розетки с EspHome работают c Home Assistant (или с Nodered) как раз по mqtt.
play.google.com/store/apps/details?id=com.okhiroyuki.redmobile,
play.google.com/store/apps/details?id=com.okhiroyuki.redmobilelite
Лайтовая версия прекрасно работает, проверено
Если в Вашей схеме со «стрелочками с двух концов», надо будет прочитать отправленные телеграмм-ботом данные тем же (другим) node-red, это возможно?
У меня esp-шки на «объектах» шлют данные через mqtt в телеграмм. На «большой земле» node-red и желание эти данные читать и обрабатывать.
Везде «динамический серый адрес за nat'ом». Сейчас использую халявно-бесплатный-ненадежный внешний vpn и платить аренду «для поиграться» совсем не хочется.