Решил я поиграться в ардуинки. Выбор пал на ESP32-C3 с 0,42-Дюймовым OLED-Модулем за какие-то там 200 руб. Пока оно едет из Китая думаю, дай потыкаюсь со средой разработки. Раньше дела с ней не имел.
Оказывается есть две версии под линухой. Одна на электроне v. 2.3.8 и старая 1.8.19 на Java. Но об ентом я ещё не знал, естественно выбрал поновее и получил засаду - вечно крутится на заставке. Думал наши разрабы АльтЛинухи накосячили с опакечиванием, перепробовал кучу сборок со стороны (не из репов Альта) - везде одно и тоже - вечно крутится заставка. Запустил иде из консоли и увидел туеву хучу ошибок с невозможностью чего-то там скачать. Направление гугления тут же изменилось и выяснилось, что www.arduino.cc лочит россиян из-за Cloudflare (эдакий сервис для защиты сайтов от хакерских атак). Что и и как произошло между Cloudflare и РФ вспоминать не стал и начал думать как пустить Ардуино-ИДЕ через тор-сеть. Придумать не удалось
Вот тогда я и узнал, что разница между старой и новой ИДЕ исключительно в интерфейсе, более того, настроек сети в новой версии я не нагуглил (возможно пальчиками где-то в конфигах и прописывается). А вот в старой версии пожалуйста Файл-->Настройки->Сеть:
При этом все библиотеки и "платы" начали загружаться. И да, версия из репозиториев Альта. Между прочим, ардуинки часто используются не только как хобби, но и в образовательных целях. Но политиканам насрать на это.
Она - автор нового развлекательного проекта "Капибара". Проект уже успел наделать шуму. И по большей части благодаря комьюнити. Как все началось? Это история для сериала. У айтишницы было две работы, ипотека и колоссальная нагрузка. Сломаться, устать можно по "щелчку Таноса". Отдыхала глазами на "Пикабу". Читала, постила. Пока политика сайта не пошла вразрез с ее личными убеждениями. Дальше был вихрь.
- Это название выбрали пользователи. Сначала устраивали мозговой штурм. Потом голосовали в два этапа за понравившиеся варианты. Потом откатывались, чтобы обоснование сделать: почему тот вариант, а не другой. В целом, это полностью инициатива самих участников. Когда задала финальный вопрос: «Название «Капибара» всех устраивает?», больше 500 человек ответили: «Да!»
- А где проводили это голосование?
- В чате. Он создался в первые секунды жизни идеи. Там есть специальный топик: выбираем имя для проекта. В нем и провели голосование буквально через 3-4 дня после его создания. 24 июля обновился «Пикабу». В этот же день мною был создан тот самый пост, тут же был создан чат и все понеслось…
Капибара - герой мемов
О причинах популярности капибар (ссылка на материал в Тинькофф журнал)
- Все-таки изначально идею предложили вы? Это связано с модой на капибар?
- Идея названия – полностью пользовательская. Я изначально дала только рабочее название Vortex. Нужно было заводить репозиторий, называть документы, папки. В общем, я автор только служебного названия. Но я не взяла на себя ответственность, что так будет называться весь проект. А Vortex потому, что у меня сложился такой ассоциативный ряд. Как «Капибара» началась вихреобразно, так все и понеслось.
- Вихреообразно – имеете ввиду, что началось все эмоционально?
Мы как-то очень неожиданно, очень импульсивно стартовали. Когда вышло обновление на «Пикабу», то от меня был всего один эмоциональный пост
- Стоп. Ольга, что за пост, с которого все началось?
Я написала «С этим «Пикабу» все понятно, если никто не начнет делать новый, то это начну делать я»
Триггером стал выход обновления на «Пикабу». Отмена отображения минусов. То есть в «горячее» с прошлого обновления стали попадать посты с отрицательным рейтингом. Это оказалось не багом: они что-то сделали с алгоритмами и не будут «чинить» рейтинговую систему, а будут маскировать продвигаемые посты под видимость обычных.
Я поняла, что того, что я любила на «Пикабу», больше не будет. Я была не согласна с тем, что нет альтернативы. Мол, есть «Пикабу», он единственный, терпите. Альтернатива нужна! Тогда еще не было известно ни про «Вомбат» ни про другие новые проекты.
Когда я создавала этот эмоциональный пост, думала, что впишусь в какую-нибудь команду разработчиков. О том, что я возглавлю, я даже не подозревала.
А, да, на «Пикабу» мой профиль забанили за упоминание «Капибары». Моему аккаунту было 8 лет и больше 100 000 рейтинга. Это не топ, но очень неплохие цифры для «Пикабу».
— Вы создали пост и получили обратную связь от пользователей?
- Да, посыпались комментарии: «Фронтенд-разработчик у тебя есть! Я разработчик с четырнадцатилетним опытом – я с тобой!»
Я создала отдельный чат в телеграм: ну пусть будет, и ушла работать.
Через два часа возвращаюсь, а в чате 3,5 тысячи человек
Ольга получила сильную поддержку сообщества
Я включила людям топики, темы они создавали сами, какие-то голосования начали вести. Посмотрев на это, я поняла, что надо стартовать разработку прямо сейчас, потому что люди уже начали голосованием выбирать базу данных, языки программирования и прочие технические вещи. Но это не те вещи, которые выбираются голосованием…
- То есть в чатах народ взял власть в свои руки?
- Абсолютно. Но оно пошло не в том направлении, в каком имело хоть какие-то шансы развиться. Поэтому к вечеру следующего дня я написала, каких именно компетенций нужны специалисты.
Мне ответили: «Давайте не будет как с народным Авито!» «Народное Авито» — это проект «Мой торг», тоже проект пикабушников, которые решили создать свой «Авито». Один из ребят из той команды сказал мне: «Блин, мы за полгода ни строчки кода не написали. Давай здесь не будет также…»
Про энтузиазм и конфликты
- Проект, абсолютно построенный на UGC – это, наверное, какой-то идеал, к которому вы стремитесь?
- Есть огромная разница, между тем как строить проект и как им пользоваться. Как им пользоваться — не вопрос. Мы все делаем для того, чтобы это была UGC-платформа с минимальным вмешательством со стороны администрации. То есть это действительно полностью власть пользователей. Люди сами решают, какой контент годный, что будет в тренде, что будет в топе, а чему нужно утонуть в минусах. Это полностью их вотчина.
Но при постройке самого проекта, при создании архитектуры, кодовой базы, дизайна такая демократия невозможна.
- А вы не думаете, что проекты, созданные на эмоциях, долго не живут?
Если в проекте только одна эмоция – я полностью согласна. Но «Капибара» разогналась до достаточно приличной скорости. Ее притормозить просто так не получится. У проекта колоссальная поддержка коммьюнити. Идея жива. Продукт людям нужен.
Даже если меня завтра собьёт автобус – «Капибар» легко восстановить, потому что исходники в открытом доступе.
У команды есть доступы, и базы данных «Капибары» могут поднять на соседнем домене. Я диверсифицировала риски.
- Что «Капибар» сегодня из себя представляет?
- Это платформа с честной регуляцией и алгоритмами, прозрачной рейтинговой системой, саморегуляцией контента пользователей и приятной площадкой для авторов.
Получается – основные отличия «Капибары» как UGC -платформы от сотен других соцсетей в том, что человек настраивает не только свою ленту – игнором тегов, подписками на теги, но и он влияет на то, что в трендах. У «Капибара» нет информационного пузыря. Здесь ценится то, что ты делаешь и пишешь.
Ленты «Тренды, Топ и Авторское» — это отдельные ленты, на которые ты не подписывался. Подписка — отдельная лента. Каждый человек влияет своими оценками на то, что попадает в тренды.
- Какие цифры у «Капибары» сейчас?
На сегодня Капибара — это 1 890 зарегистрированных верифицированных пользователей, постов за все время – 3 550, комментариев – 24 000.
Незарегистрированных пользователей мы еще не особо умеем считать. Пока здесь надежда на Google метрики, Яндекс-аналитику и Similarweb. Он, кстати, говорит, что у нас 192 000 посетителей за месяц.
- Для вас это больше цифры?
- Сложно сказать. Наверное, большие.
- Вы говорите, что 1, 8 тысяч зарегистрированных пользователей. Но если сравнивать с подписчиками какого-нибудь крупного паблика – это не очень большая цифра
- Капибар вышла в публичный доступ 1 января. Это отдельный сайт без раскрутки. Получается, что для проекта, который в доступе чуть больше 2 месяцев – это очень хороший показатель.
Саму разработку мы начинали летом. В ноябре вышли в закрытый альфа тест. Туда можно было заходить по приглашениям. Человек заходил со всеми дисклеймерами: понимал, что это тест, понимал, что еще куча багов. Но, таким образом, мы авторов запускали.
— Команда капибар. Кто это?
- Динамический состав команды. Часть разработчиков пришла со старта. Часть после. Часть присоединилась недавно. Это высококвалифицированные специалисты. С коммерческим опытом работы больше четырех лет. Я не могла позволить себе взять команду джунов. Потому что это оттягивало бы ресурс остальных разработчиков.
Все спецы очень высокого грейда. Все это истинные герои и энтузиасты. Идейные люди. Очень самостоятельные. С комплексным видением с умением цельно видеть весь продукт и проект. Что редкое качество.
- Сколько денег потратили на запуск проекта?
- Честно — не считала. Расходы на регистрации доменов, ботов для упрощения модерации в канале, инфраструктуру – это все совершенно не сравнимые цифры с тем, сколько бы я потратила на разработку, если проект был бы коммерческий.
-???
- Можно посмотреть на HeadHunter среднюю зарплату разработчиков. У нас 10 человек – костяк команды, а в целом в команде разработки было до 40 человек.
У нас динамический характер команды. Если бы все эти люди были на зарплате, то на проект уже бы потратили восьмизначные суммы.
(От автора)Чтобы посчитать возможные затраты на проект, я возьму среднюю зарплату программиста middle уровня в РФ – 120 000 рублей (hh. ru). Костяк команды «Капибара» — 10 человек. В итоге, ежемесячно на проект Ольга тратила бы 1, 2 млн. рублей. Учитывая, что с момента разработки прошло уже больше 7 месяцев, то затраты составили бы около 10 млн. руб только на постоянных участников проекта, не считая тех, кто нерегулярно привлекается к задачам.
«Капибара» едет на энтузиазме. Люди горят идеей, чтобы этот проект был. Чтобы существовала альтернатива. Поэтому open source код и затраты только на инфраструктуру (облачные сервера).
- Понимаю – проект молодой. Но были ли конфликты с пользователями?
- Да, конфликты случаются. Связано в первую очередь с тем, что «Капибара» – пока без политики. И мы об этом рассказывали до старта проекта, и повторяли не раз. Это записано в правилах и повторяется самими пользователями.
У некоторых были ожидания, что проект станет местом, где можно обсуждать и двигать свои политические идеи. Те, которые не проходят модерацию на «Пикабу».
Я не готова рисковать проектом, который могут «роскомнадзорнуть» за чье-то высказывание. И я не хочу, чтобы «Капибара» превращалась в агитплощадку. Потому что это очень непростая тема, на которую даже близкие люди могут переругаться. А на огромном сайте…
Конечно, есть не согласные с этим.
«Капибара» делалась как обитель авторского контента. Того, которому не придется сражаться за доступ к читателю пробиваясь через «баяны» и рекламу десятков тысяч телеграм-каналов. У всех были свои ожидания, и есть люди, которые ждали, что там будет свобода вообще во всем.
Отмечу, что мы ограничены законодательством всех стран технического контакта. Большинство пользователей из России, а значит, надо соблюдать закон РФ. Это мы делаем в добровольном порядке. Мы соблюдаем закон.
Главный фейл и инсайт Ольги в этом вихре "Капибара" я по-традиции опубликовал в своем телеграм-канале "Стас смотрит рекламу"
Про несогласие с отсутствием альтернативы на рынке
- «Капибар», «Вомбат», «Пипмай», есть, думаю, еще ряд проектов, о которых пока мы не знаем. Почему вдруг люди начали делать подобные проекты. В чем причина?
- Я думаю, несогласие с отсутствием альтернативы. В воздухе висит такое: «Хочешь альтернативу? Иди на «Reddit». Там англоязычные люди из далекого зарубежья и их посты тебе не «откликаются». Это не про тебя. Да, есть «Yaplakal. com» – там своя специфика. Есть «Fishki. net» – но это не замена «Пикабу».
- В чем отличия?
- По функционалу, по темам, по аудитории, по специфике.
- А чем аудитория отличается?
- Я взяла агрегированные данные. Читала немало постов на тему, почему это не аналог, но сама эту аналитику не проводила. Если вкратце – это не замена. Все аналогичные проекты, о которых говорили выше, стартовали, чтобы у людей был выбор
- У проекта есть бизнес-цель или это пока хобби?
Это точно не хобби. Это уже слишком серьезно.
Но цели «зашибать» там миллионы мы не ставили. Если финансово взлетит, то, конечно, отказываться от денег не будем. Цель минимум — вывести проект на «самоподдержание».
- А в целом, сколько времени у вас отнимает работа над «Капибарой»?
- Все свободное время. У меня стандартная восьмичасовая пятидневка. А «Капибар» это уже не просто «поработать». Я ею живу! У меня каждое утро начинается с «Капибар». Появляется минута на обеде – «Капибар». Свободный вечер – «Капибар».
- Как сейчас продвигается проект?
- SЕО продвижение. Страницы "Капибары" очень хорошо индексируются google и Яндексом. Ну, и конечно, сарафанное радио. Сообщество рассказывает о «Капибаре». Плюс, у нас есть страницы в ВК, откуда приходят люди. Но если верить Similarweb, то основное количество людей идет через Телеграм. Люди делятся статьями, пересылают их, рассказывают о них. Плюс у нас регулярные публикации на других ресурсах.
Например, первая статья на Хабре удачно выстрелила, есть статьи на vc, на tenchat, на реддите.
- То есть пока вы не заходите в такие инструменты как Яндекс. Директ и т. д.?
- Пока нет такой необходимости. Для этого нам нужно SEO ядро. Человек, который умеет это делать, чтобы не сливать бюджет.
«Все! Не могу больше…»
- Возвращаясь к Пикабу. Есть мнение из комментариев к одному моему интервью, что клонов у этого сайта десятки. Что можете ответить на это?
Могу ответить: «Пожалуйста, не бросайте начатое. Альтернативы — это прекрасно. Свободный рынок – это двигатель развития, прогресса. Нам нужно разнообразие. Чем больше создается таких площадок, тем выше шанс, что через 10-15 лет кто-то из нас будет еще существовать».
- То есть вы говорите о том, что если крупные площадки закроются, то вся масса пользователей останется без контента?
- Нет, без контента, конечно же, не останется. Но вопрос в качестве этого контента. Быстро, легко, смешно, листай-листай-листай… Посмотрите на рилсы в Инстаграме*, на клипы в ВК, перепосты «хохотачей» с Одноклассников, сотни тысяч телеграм-каналов с мемами. «Пикабу» взял тот же ориентир. Площадок с качественным авторским контентом все меньше.
- Есть еще мнение конспирологическое. Якобы за созданием «Вомбата» и «Капибар» стоит один человек. И якобы это сайд-проекты «Пикабу».
- Впервые слышу такое мнение. «Вомбаты» и «Капибары» в коллабе. Мы поддерживаем друг друга. У нас совместные активности и конкурсы. Тот же «Анонимный Дед мороз» или конкурс на 14 февраля. У них под тегом – #любовьморковь , у нас #расскажи мне о любви. И призы были совместные. Хлопнули по лапкам и помогаем в развитии друг другу.
Нет, никто не из администрации «Пикабу». Мы все — бывшие пользователи «Пикабу».
- Ольга, когда хотелось бросить проект? Ну, вот: «Все, не могу больше…»
«Капибара» началась, когда в моей жизни было одновременно две работы, и я только-только влезла в ипотеку. Представляете уровень нагрузки?! И тут появляется третья бесплатная работа — «Капибара».
Она забирает время и деньги. Конечно, я была близка к выгоранию! И, например, через месяц руки уже опускались!
Взяла выходные. Провела их как нормальные люди и снизила нагрузку. Тут мне очень помогли модераторы, команда проекта, активисты чата. Они взяли на себя многое из того, чем занималась я. И за чатом смотрели, и обновления сами выкатывали, и конкурсы сами проводили, и различные мероприятия/игры для поддержания активности пользователей, и объявления раскидывали, и с текстами помогали, и авторов звали. Стало проще.
- Ваша большая нагрузка была угрозой проекту?
- Это сложно назвать угрозой. Потому что я заложила очень сильный фундамент в «Капибару». У нее высокая автономность. Даже если бы я выпала на 3 месяца из проекта, то я сделала в команде высокую ставку на самоорганизованность.
- Что это значит?
- Каждый понимает, что он делает. И делает, не спрашивая разрешения. У нас есть функциональные требования и общее понимание того, во что целимся. В виде прототипа — тот же «Пикабу». И мне не нужно расписывать людям в деталях: сделай так или так. Команда высокопрофессиональная и на высоком уровне организованности.
Даже если все пропадет по щелчку Таноса – исходники находятся в открытом доступе. Кто-нибудь обязательно возьмет и продолжит…
*Meta – запрещенная на территории РФ организация
Мы проговорили с Ольгой несколько часов. Материала много. Она высококлассный специалист и не попросить ее поделиться лайфхаками было бы глупо. Она поделилась: как использует нейросети в работе над проектом. Нейронки пишут код, ищут ошибки, забирают рутину. Но, это уже вторая часть интервью, которая выйдет позже. Проанонсирую в своем канале: Стас смотрит рекламу
Попала мне в руки плата Ардуины Р4. Покупал по одной причине, а оказалось она под мои хотелки не подходит. Забросил на некоторое время на полку. Потом заморочился немного и решил применить руки. Хотел сначала сделать автомат типа тетрис или пинг понг, но меня понесло и получилось что получилось. Думаю буду дальше допиливать и исправлять. Видео есть на ютуб и есть непосредственно в посте. На ваш выбор. Краткое описание ниже.
Прототип видеоадаптера, поддерживающий режим VGA 640x480 при 60 Гц - пока что только в одноцветном варианте. В качестве аппаратной основы используется плата Arduino Uno R4 Minima с тактовой частотой процессора 48 МГц и частотой пиксельного генератора 24 МГц. На данный момент реализован текстовый режим с сеткой 64x50 символов. Технические характеристики платы довольно скромные, однако благодаря низкоуровневому программированию удалось добиться стабильности сигнала на уровне 95%. Архитектура платы зачастую ограничивает доступ к регистрам контроллера. Для этого режима была разработана полноценная библиотека, включающая поддержку окон, прокрутки, спрайтов, пользовательских (или игровых) шрифтов, внеэкранных буферов и многого другого. К сожалению, пришлось пожертвовать всеми прерываниями - в текущей реализации они отключены. Из исходных 32 КБ памяти пользователю доступно от 10 до 20 КБ, в зависимости от выбранного режима. В дальнейшем можно будет добавить поддержку таких функций, как подключение PS/2-клавиатуры, вывод звука и т. д. В этом упрощенном режиме пользовательские программы выполняются только во время интервала гашения кадра (обратного хода кадровой развертки). Для более опытных пользователей предусмотрен доступ к контроллеру и во время обратного хода строчной развертки. Реализован и протестирован графический режим 640x480 (60 Гц), обеспечивающий рабочую область 320x240 с глубиной цвета 1 бит. В планах - внедрение 4-цветной палитры, подобной той, что использовалась в легендарном стандарте CGA. И снова напомню: объем оперативной памяти крайне ограничен в видеорежиме только экран монохромный съедает 10кб озу - 30% от всего что есть! PS. Аналогичных поделок именно на этой плате я не нашел. Код писался на С++ документация на плату 1000+ страниц.
Пришла мне вчера ESP32-C3 с OLED 0.42" дисплейчиком. Подключил к Arduino 1.8.19 (электрон версию не брал). Включил, увидел моргающий светодиодик с периодом в 1 сек. Какой-то текст вида "ESP32-C3" и пр. на дисплейчике, ну и положил всё енто в пакетик с китайским ампер-вольтметром (калибрануть его надо - дома точных эталонных тестеров нет - ширпотреб только). Принёс на работу, а дисплейчик того - хана, разбил я его...
Ну да ладно. Похвастался, поплакался, сегодня начал изучать ардуино-программирование (ранее дела не имел), и вот что получил на выхлопе:
1. ESP32, в отличие от ESP8266 имеет под капотом FreeRTOS (мля, задолбали лочить РФ). 2. Как следствие delay() уже не тормозит одноядерный проц, что имеет место в атмегах и ESP8266, а использует vTaskDelay() от операционки, что позволяет сделать адекватной консолидированную многозадачность 3. Есть уже готовые от ОСи мютексы, инхронизацию потоков и пр., в том числе и асинхронный ввод-вывод с портов, что позволяет ожидать событий на GPIO/портах не нагружая проц в цикле.
Скетч, который я сейчас гоняю и далее изучаю (русские комменты мои, на английском с гугла/примеров и т.п.):
И да, синий светодиодик мыргает как полагается.
Буду ковырять далее. Думаю до ассемблера с RISC-V дойду не скоро, но буду стараться закапываться глубже, точнее ниже FreeRTOS. Надеюсь меня хватит надолго играться в енто...
Программируемый многофункциональный робот от Keyestudio V3.0 для Arduino. Умеет выполнять множество команд. Комплект для сборки отлично подойдет начинающим любителям робототехники и программирования.Ссылкана источник.
2 Фургон
Интересный набор для сборки фургона-автодома с множеством различных функций.Ссылкана источник.
3) Робот с клешней
Набор для сборки умного робота с 'рукой'. Умеет выполнять различные команды, брать/класть предметы и тд.Ссылкана источник.
4) Механический робот
Еще одна версия робота с 'клешней' для самостоятельной сборки и программирования.Ссылкана источник
5) Танк
Комплект для сборки собственного робота-танка на гусеницах. Умеет выполнять множество команд.Ссылкана источник
6) 4WD Mecanum
Робот с интересными колесами, которые могут двигаться в любом направлении. Робот сборный, программирование на Microbit V2.Ссылкана источник
7) Самобалансирующийся робот
Электронный комплект «сделай сам» - робот балансир для взрослых и детей.Ссылкана источник
8) Робот с камерой
Робот-машинка Pi 4B для сборки и программирования. Имеет камеру и функцию слежения/наблюдения, а также множество других возможностей.Ссылкана источник
9) Ферма
Необычный конструктор для программирования с множеством датчиков и солнечной панелью.Ссылкана источник
10) Робот-погрузчик
Забавный робот с ковшом и умеющим рисовать.Ссылкана источник
11) Игровая приставка
Геймпад Keyestudio ATMEGA32U4 с OLED-экраном, стартовый набор для Arduino.Ссылкана источник
12) Генератор
Генератор электричества с солнечной панелью, которая поворачивается вслед за солнцем и поможет зарядить ваши гаджеты в трудную минуту.Ссылкана источник
13) Лягушка
Веселый робот-лягушка с сервоприводами для сборки.Ссылкана источник
14) Манипулятор
Набор для сборки крана-манипулятора для последующего программирования. Поможет обучить и научить начинающих любителей электроники, роботостроения и программирования как это делается=).Ссылкана источник
15) Поливочная машина
Набор для создания автоматической станции поливки цветов и других растений. Датчики влажности будут следить за состоянием почвы и поливать, когда это будет нужно.Ссылкана источник
16) Перчатка
Специальная перчатка с датчиком движения, способная управлять Вашими роботами и другими устройствами.Ссылкана источник
17) робот-собачка
Умная собака-робот для сборки и программирования.Ссылкана источник
18) Паук
Роботизированный паук с пультом управления.Ссылкана источник
19) Вездеход
Робот-вездеход ELEGOO Conqueror с UNO R3.Ссылкана источник
20) Робот-картограф
Самый серьезный аппарат в нашей сегодняшней подборке. ROSMASTER X1 - это обучающий робот с приводом на 4 колеса, разработанный на основе операционной системы ROS robot. Он использует плату серии Jetson и Raspberry Pi 4B в качестве основного контроллера и оснащен высокопроизводительной аппаратной конфигурацией, такой как лидар и камера глубины, которые могут осуществлять управление роботом, дистанционную связь, картографирование и навигацию, отслеживание обхода препятствий, автопилот, распознавание особенностей человеческого тела и другие функции.Ссылкана источник.
Всем привет. Хочу посоветоваться. Я задумал сделать в комнате светодиодное освещение, для этого купил ленту RGBCTT. Это та, которая не адресная, просто 5 отдельных каналов. Уже подключил к Ардуине и проверил, все работает вот по такой схеме:
Мне хотелось бы ее подключить к Home Assistant, но Ардуино туда не подцепить, единственное, что в голову приходит - связать ее с какой-нибудь ESPшкой и уже ее подключать к HA через ESPHome. Делается это для того, чтобы иметь физическое управление светом и возможность давать команды с сервера HA.
Вопрос, как правильно связать два микроконтроллера и возможно ли управлять ардуиной с ESP? Например, передавать команды типа: "R180 G51 B120 CC255 CW 200". С кодом я разберусь. Главное, понять принцип, как это делать.
Свежая подборка из 10 электронных модулей для любителей электронного творчества.
1. Микроволновый радиолокационный датчик расстояния с частотой 24 ГГц
Представляет собой устройство для определения расстояния с использованием радиоволновой технологии, обладает рядом преимуществ по сравнению с другими типами датчиков дальности.
Благодаря использованию микроволновых технологий датчик имеет компактные размеры и небольшой вес, что делает его удобным для размещения в различных устройствах и системах.
Датчик обеспечивает высокую точность и чувствительность в определении расстояния до целей, он способен проникать через неметаллические материалы, а также в условиях пыли, дыма и тумана.
Все необходимые компоненты для обработки сигнала радиолокационного датчика встроены непосредственно в устройство, что обеспечивает удобство использования и простоту интеграции в различные системы.
Датчик поддерживает модуляцию Frequency-Modulated Continuous Wave (FMCW), что обеспечивает более точные и стабильные измерения расстояния.
Датчик также поддерживает интерфейс связи ASI с частотой полосы 57600 бит/с и логическим уровнем 3.3 В TTL, что обеспечивает простое взаимодействие с другими устройствами и компьютерами.
С помощью контроллеров Arduino можно реализовать различные функции, такие как система радиолокационного обратного резервного копирования автомобиля, автоматическое открывание дверей, система обнаружения потока пассажиров и другие, что делает датчик универсальным инструментом для широкого спектра проектов.
2. Funduino Joystick шилд v1.A
Расширительная плата, специально разработанная для использования с основными версиями плат Arduino, такими как UNO, Mega 2560 и Due.
На плате установлен двухосевой джойстик, который обеспечивает управление по осям X и Y, а также шесть тактовых кнопок для дополнительных функций.
Кнопки подключаются к цифровым пинам 2-8 на плате Arduino, что обеспечивает простоту и удобство подключения и использования.
На плате предусмотрены коннекторы для подключения дополнительных устройств, таких как модули Bluetooth, nRF24L01, дисплей Nokia 5110 LCD и интерфейс I2C, что расширяет функциональные возможности системы.
Плата оснащена переключателями питания, позволяющими выбирать между напряжением питания 3.3 В и 5 В, что делает ее совместимой с микроконтроллерами, работающими на разных уровнях напряжения, включая STM32 и другие.
Funduino Joystick Shield v1.A предоставляет простое и эффективное решение для добавления элементов управления и интерфейсов к проектам на базе Arduino, обеспечивая гибкость и расширяемость в различных приложениях, таких как игровые консоли, робототехника, устройства управления и многое другое.
3. Лазерный датчик расстояния TF Mini Plus (ToF)
TF Mini Plus (ToF) - это компактный лазерный датчик расстояния с уникальными оптическими и электрическими алгоритмами, обеспечивающий точные и быстрые измерения расстояния с высокой чувствительностью.
Датчик основан на принципе "время полета", при котором он периодически излучает модулированный ближний инфракрасный луч и измеряет время, за которое луч достигает объекта и возвращается обратно, это позволяет определить расстояние до объекта с высокой точностью.
TF Mini Plus имеет улучшенные характеристики по сравнению с предыдущими версиями, включая повышенную частоту кадров до 1000 Гц, сниженную слепую зону до 10 см, увеличенную точность и стабильность измерений.
Датчик укомплектован корпусом с защитой IP65, обеспечивающим защиту от попадания воды и пыли, что делает его подходящим для использования в различных условиях окружающей среды.
TF Mini Plus обладает низким энергопотреблением, что позволяет сэкономить энергию при работе.
Датчик совместим с интерфейсами UART и IIC, что обеспечивает удобное подключение к различным контроллерам, таким как Arduino, он также легко интегрируется в системы при использовании библиотеки Arduino, предоставленной от DFRobot.
TF Mini Plus - это надежный и эффективный лазерный датчик расстояния, который можно успешно применять в различных проектах, требующих точного измерения расстояния с высокой чувствительностью.
4. GPS модуль NEO-6M v2
Компактное и надежное устройство с керамической антенной, предназначенное для определения местоположения в различных проектах, таких как авиаконструирование, мультикоптеры и трекеры.
Модуль работает от напряжения 3-5 В, что делает его совместимым с широким диапазоном источников питания.
Используемый чип обеспечивает высокую точность и надежность при определении координат.
Модуль оснащен энергонезависимой памятью EEPROM, которая позволяет сохранять настройки даже при отключении питания.
Он совместим с большинством контроллеров полета, которые поддерживают GPS.
Компактный размер антенны составляет 25 х 25 мм, что обеспечивает удобство установки в различных проектах.
Модуль имеет UART интерфейс для коммуникации с другими устройствами. Также возможно взаимодействие через USB, SPI, I2C при условии правильной конфигурации.
По умолчанию модуль передает данные со скоростью 9600 б/с, что обеспечивает эффективную передачу информации.
GPS модуль NEO-6M v2 представляет собой надежное и удобное решение для определения местоположения в различных проектах, обеспечивая высокую точность и стабильность работы.
5. Контроллер скорости ESC Simonk 30A
Регулятор скорости с номинальным током 30 А, разработанный на основе транзисторов N-FET, предназначен для управления скоростью электродвигателей в различных моделях, таких как квадрокоптеры, модели самолетов, мультикоптеров и других летательных аппаратов.
Контроллер использует транзисторы типа N-FET для управления мощными электродвигателями, обеспечивая высокую эффективность и надежность. Встроенный кристалл имеет стабильную частоту вне зависимости от температурных изменений, что обеспечивает точное управление скоростью мотора.
Высокая частота управления (16 кГц) обеспечивает плавное и точное регулирование скорости вращения мотора, что особенно важно для моделей, требующих высокой стабильности и маневренности.
Важно отметить, что данный контроллер не имеет встроенной защиты от перегрева или низкого напряжения, это может быть причиной потенциальных проблем при эксплуатации, поскольку перегрев или низкое напряжение могут привести к полному отключению моторов.
Контроллер скорости ESC Simonk 30A представляет собой компактное и надежное устройство для управления скоростью электродвигателей в различных летательных аппаратах, обеспечивая высокую производительность и точное регулирование.
6. Gravity: Аналоговый датчик кислотности V2
Представляет собой комплект, который включает в себя комбинированный рН-электрод и плату усилителя сигнала.
Датчик предназначен для измерения уровня кислотности (рН) в жидких средах и может быть интегрирован с микроконтроллерами Arduino для автоматизации и контроля процессов.
Комбинированный рН-электрод представляет собой чувствительный элемент, который реагирует на концентрацию водородных ионов в растворе и генерирует соответствующий сигнал. Плата усилителя сигнала принимает сигнал от рН-электрода и усиливает его для более точного измерения.
Этот датчик позволяет измерять уровень кислотности в различных средах, таких как водные растворы, почвы, биологические жидкости и другие, он может использоваться в различных приложениях, таких как мониторинг качества воды, контроль pH в аквариумах, гидропонных системах, аквапонике, а также в лабораторных и научных исследованиях.
7. Кнопочная клавиатура с 8 LED-индикаторами
Представляет собой компактное устройство, специально разработанное для управления и ввода данных в проектах робототехники и электроники.
Клавиатура имеет матричную структуру, что позволяет существенно сэкономить количество портов на Arduino или другом микроконтроллере, это особенно полезно для проектов, где доступные порты ограничены.
Для программирования клавиатуры удобно использовать библиотеку Keypad, которая облегчает обработку ввода с кнопок и упрощает код проекта.
Клавиатура использует динамические методы считывания, что позволяет эффективно обрабатывать сигналы от кнопок и снижает нагрузку на микроконтроллер.
Клавиатура оснащена 8 LED-индикаторами, которые могут использоваться для визуализации различных состояний или сигналов в проекте, это позволяет создавать более информативные и интерактивные устройства.
В дополнение к матричным кнопкам, на клавиатуре присутствуют 4 дополнительные кнопки, которые могут использоваться для простых операций или управления.
Клавиатура подходит для ввода как числовых, так и буквенных данных, что делает ее универсальным средством управления для широкого спектра проектов и приложений.
Эта кнопочная клавиатура с LED-индикаторами и дополнительными кнопками идеально подходит для создания интерактивных устройств, контроллеров и многих других проектов, требующих ввода данных и управления с помощью кнопок.
8. Микроволновый датчик движения
Применяет принцип эффекта Доплера для обнаружения движущихся объектов с использованием микроволновых волн, при котором частота микроволн изменяется при отражении от движущихся объектов.
Датчик регистрирует эти изменения частоты и определяет наличие движущихся объектов в его зоне обнаружения.
В отличие от обычных инфракрасных (ИК) датчиков, которые реагируют на изменения температуры окружающей среды, микроволновой метод измерения движения не зависит от температуры, что делает его более универсальным и надежным.
Микроволновые датчики движения широко применяются в промышленности, транспортных средствах и гражданских системах безопасности, они используются для измерения скорости транспортных средств, контроля уровня жидкости, автоматического открытия дверей, запуска автоматической стирки, обнаружения материалов на производственных линиях и систем реверса в автомобилях.
Микроволновые датчики могут комбинироваться с другими типами датчиков для повышения точности измерений и снижения частоты ложных срабатываний. Например, их сочетание с инфракрасными датчиками может повысить эффективность системы безопасности.
Благодаря высокой надежности и универсальности, микроволновые датчики движения обеспечивают эффективное функционирование систем безопасности, таких как автоматическое открытие дверей или обнаружение движущихся объектов в опасных зонах.
Микроволновые датчики движения представляют собой эффективное и универсальное решение для обнаружения движущихся объектов в различных приложениях, где требуется надежное и точное измерение движения.
9. Звуковая карта PCM5102
Высококачественное устройство, предназначенное для воспроизведения цифрового аудио с высокой четкостью и точностью, карта представляет собой ЦАП (Цифро-Аналоговый Преобразователь), который может быть использован для замены встроенного аналогового выхода в устройствах, таких как Raspberry Pi, для улучшения качества звука.
Поддерживает воспроизведение аудио сигнала с разрешением до 24 бит и частотой дискретизации до 192 кГц, что обеспечивает высокое качество звука и достоверное воспроизведение звуковых файлов.
Обладает компактными габаритами, что делает карту удобной для интеграции в различные устройства и системы.
Представляет собой бюджетное решение среди аналогов аналоговых ЦАП, обеспечивая при этом высокое качество звука.
Модуль использует интерфейс l2S для передачи аудио сигнала, который позволяет передавать сигналы синхронизации и данные по отдельным линиям, что уменьшает фазовое дрожание и обеспечивает более точное восстановление сигналов.
Звуковая карта PCM5102 является отличным выбором для тех, кто стремится к улучшению качества звука в своих проектах или устройствах, таких как Raspberry Pi или другие одноплатные компьютеры, её возможности позволяют полностью раскрыть потенциал звуковых файлов и обеспечить высококачественный звуковой опыт.
10. GeeekPi 10,1-дюймовый ЖК-экран с разрешением 1366x768
Представляет собой удобное и качественное решение для использования с мини-компьютерами. Дисплей обеспечивает высокое качество изображения и прекрасно подходит для различных задач, будь то работа, развлечения или встроенные решения.
Дисплей подходит как для использования в качестве рабочего ПК, так и для создания компактного домашнего мультимедийного центра, обеспечивая при этом высокую производительность и качество изображения.
Дисплей имеет малую ширину, что соответствует современным требованиям к компактности и эстетике.
Контрольная плата и матрица работают с распространенным стандартом LVDS, что обеспечивает легкость в замене компонентов в случае необходимости.
Дисплей обеспечивает передачу звука вместе с изображением по одному проводу, что упрощает его использование и подключение.
GeeekPi 10,1-дюймовый ЖК-экран представляет собой удобное и функциональное устройство, которое прекрасно дополняет мини-компьютеры, обеспечивая высокое качество изображения и удобство использования.
Как обычно дело было вечером, делать было нечего и мне пришла в голову мысль сделать сервис стейджинга! Ну а почему нет? А вот хз…
В общем я поставил себя на место начинающего реалитчика и понеслось!!!
В самом начале можно загрузить фото комнаты
там можно поиграться с освещением, тенями, насыщенностью, палитрой итд
А можно сразу перейти в Стейджинг или Ремонт
Пойдем в ремонт для начала
где можно выбрать варианты ремонта и получить фото очищенной комнаты
после этого можно очищенное фото перенести в стейджинг и начать обставлять квартиру
тут можно повыбирать стиль, мебель, можно написать пожелания для AI чтобы не фантазировал и можно внести информацию о квартире. Название, описание, цена, контакты итд. Жмем кнопку Скачать все и получаем архив!
А что с ним дальше делать ? можно просто распаковать его и использовать фото как вам удобно, а можно пойти в закладку Просмотр и загрузить архив там!
тут мы можем посмотреть инфу и фотки , докинуть фоток из других архивов, в общем сформировать предложение.
потом мы жмем кнопку - Поделиться - и получаем ссылку на архив, которой вы можете делиться!
По ссылке открывается готовый лендинг на 5 языках, который автоматом переводит описание квартиры на нужный язык. Плюс внизу плашки телефона и ватсапа, по нажатию которых начинается дозвон риэлтеру или можно написать ему в ватсап
Как вам идея?
Если бы я был риэлтером мне наверное бы понравилось )))
Кстати кинув ссылку в соцсеть, подгружается название и фото ремонта до-после
P.S. Теперь осталось придумать куда это все применить ))) Прямо как в анекдоте
Командир корабля приветствует пассажиров на борту новейшего сверхсовременного лайнера: — Уважаемые дамы и господа! Мы рады приветствовать вас на борту нашего нового самолета.
На первой палубе нашего лайнера находится шикарный бассейн с вышкой и подогревом.
На второй палубе — огромный кинотеатр, боулинг и казино.
На третьей палубе расположился зимний сад, теннисный корт и поле для гольфа.
На четвертой палубе к вашим услугам пятизвездочный отель, спа-салон и рестораны с кухнями всех народов мира.
А теперь, уважаемые пассажиры, пожалуйста, пристегните ремни безопасности. Со всей этой хернёй на борту мы попытаемся взлететь!
Тут тусуются чуваки, что пытаются самоделить в погроммировании. Я уже при общении с одной самоудалившейся обиженкой упоминал, что решил поиграться в аврдуино, была закуплена платка ESP32-C3, размер чуть больше ногтя моего большого пальца на руке. Зато умеет дофига. По факту это 32битный проц на частоте 160МГц с периферией, да, ядро одно, но его можно сравнить с первым пентиумом.
Конечно мыргать светодиодиком (эдакий “hello world” в мире ардуино) неинтересно. Учитывая, что у него есть на борту WiFi и Free RTOS то появилась идея наладить общение с домашней сетью. Гугель, как всегда, не позволяет тратить время на чтение документации, потому вышло достаточно легко, но долго, т.к. разбирался с самой Arduino IDE. После ентого, опять же с помощью гугеля наваял на ентой малютке веб-сервер, который как раз и мыргает светодиодиком.
И, когда получилось сделать асинхронный (работающий в фоне) веб-сервер, тогда и загорелся сделать свою метеостанцию. Да, будет долго и дорого. Но то, что продаётся “за дёшево“ на, пока ещё не погоревших маркетплейсах, не умеют мерить атмосферное давление, только температура и влажность - экономят на датчике.
За качество видео не пиняйте - снял как смог, ну и ватерпас от сайта - лень было вспоминать ffmpeg скрипт для сжатия. И да, шнурок чисто для питалова - в панели задач запущены только бравзеры.
Все началось с рабочей задачи по реализации весьма специфичной web-панели мониторинга и управления различным оборудованием, в которой нужно было получать данные и отправлять команды по разнообразным сценариям (периодический опрос, подписка на websocket-события, https-запросы и т.д.), а также выводить состояние и графики в реальном времени, динамически комбинируя различные источники данных в разных виджетах.
Кроме того, у панели было предусмотрено несколько настраиваемых режимов работы, которые переключались по запросу пользователя, что требовало массового управления маршрутами потоков данных внутри системы.
В первой итерации с использованием RxJS получилось много неструктурированного и сложно поддерживаемого кода, так как архитектура на RxJS вынуждала императивно описывать перестроение топологии при изменении правил маршрутизации «на лету». В нашем специфичном кейсе с динамическими виджетами это приводило к сайд-эффектам и сложностям в отладке. Кроме того, местами размывалась строгая типизация и мы лишались compile-time гарантий. Так появилась идея разработать собственное решение на основе альтернативной концепции — модели графа потоков данных.
В результате получившаяся модель продемонстрировала предсказуемое поведение и низкую связность компонентов, а кодовая база сократилась на ~30% и приобрела более декларативный вид. Убедившись в эффективности решения, мы решили оформить его в виде отдельной библиотеки с открытым исходным кодом — Transferum.
И что, получилась просто еще одна реактивная библиотека?
Не совсем. Классические FRP-библиотеки (RxJS, Bacon, Most) построены вокруг единственного примитива (Observable). Transferum же основан на композиции различных типов узлов с явно определенным поведением.
Каждый узел в графе потоков распространения данных явно декларирует свои способности: может ли он принимать данные через push, отдавать через pull, распространять полученный сигнал подписчикам, опрашивать источник, фильтровать, блокировать поток и т.д.
Объявленные узлом возможности являются одновременно флагами для использования в runtime и compile-time гарантиями наличия соответствующих методов, определяющих его поведение.
Ключевая идея: поведение системы описывается как композиция независимых возможностей, которые одновременно определяют тип, реализацию и правила взаимодействия.
Transferum предоставляет четыре слоя абстракции:
Трансферы — узлы графа (каналы, поллеры, мапперы, буферы, разветвители и концентраторы, реализации debounce, throttle, switchMap и т.д.).
Мосты — ребра графа — управляемые вентили между узлами с динамической маршрутизацией и гейтингом.
Операторы — stateless-трансформаторы и фильтры данных (используются трансферами, отвечающими за конвертацию данных).
Билдеры — fluent-конструкторы композитных трансферов из цепочек трансферов-примитивов.
Концептуальная и архитектурная основа — capability flags system. Каждый трансфер реализует CommunicationContractInterface — набор булевых флагов, определяющих его возможности.
Флаги isPushable, isPullable, isSubscribable, isGate и другие — это не просто свойства объекта. Это метаданные, которые:
Определяют TypeScript-интерфейс трансфера на этапе компиляции.
Управляют стратегией связывания с другими трансферами в рантайме (с помощью функции linkTransfers()).
Обеспечивают совместимость в билдерах без приведений типов.
Один набор флагов — три потребителя. Это единый источник истины для всей системы.
Когда флаг равен true, соответствующий метод входит в TypeScript-интерфейс трансфера. Это позволяет предоставлять трансфер пользователю вот так:
Transfer
// гомогенный трансфер: T -> [ Transfer ] -> T
Или вот так:
Transfer
// гетерогенный трансфер: TInput -> [ Transfer ] -> TOutput
Именно в таком формате типов фабрики в библиотеке возвращают трансферы. Например:
const pushChannel: Transfer;
const converter: Transfer;
// содержат методы push(), subscribe()
const manualBuffer: Transfer;
// содержит методы push(), pull(), trigger()
// trigger() в данном случае нужен, чтобы сделать запушенное значение
// доступным для чтения через pull()
const pollingProxy: Transfer
// содержит методы pull(), subscribe(), trigger(), activate(), deactivate(), toggle()
// может быть связан с pullable-источником благодаря поддержке поллинга
Эта «магия» работает в compile-time благодаря несколько замысловатой системе вычислимых типов:
Трансфер определяет своё поведение (push, pull, subscribe и др.), но никогда не ссылается и не проверяет класс другого трансфера. Он не знает, что является upstream или downstream — лишь выполняет свой контракт. Пользователь может создать свой трансфер, объявить и реализовать его возможности — и он органично и бесшовно впишется в экосистему.
2. Мосты не знают конкретных реализаций
Мост инспектирует capability flags, а не имена классов. Нет цепочки instanceof, нет переключения по имени класса. Любой output-трансфер может быть соединен с любым input-трансфером — при условии совместимости их флагов, о чем мы поговорим чуть ниже. Это применимо и к тем узлам, которые еще не существуют и будут созданы пользователем.
3. Значение undefined никогда не распространяется
В Transferum undefined означает «нет данных», а не «пустое значение». Оно подавляется на уровне внутренней реализации менеджера подписок — подписчики никогда не уведомляются с undefined. При этом для явных маркеров пустых значений можно использовать null. Мы сознательно пошли на этот компромисс, чтобы избежать runtime-оверхеда и сохранить нативную скорость работы на плотных потоках данных.
Связывание трансферов
Функция linkTransfers(lhs, rhs) соединяет output-трансфер (lhs) с input-трансфером (rhs) с автоматическим выбором стратегии связывания на основе возможностей этих трансферов:
Protocol-oriented design: механизм не спрашивает «какой это класс?» — он выясняет, какие у него есть возможности. Любая пара трансферов с совместимыми возможностями является linkable. Добавление нового класса трансфера требует только объявления его флагов и реализации соответствующих методов — как связать его с другим трансфером, связующий алгоритм разберется сам.
Синхронные и асинхронные трансферы сосуществуют и могут быть связаны между собой. linkTransfers() предпочитает sync-связывание, когда это возможно, а async-стратегии применяет только когда sync неприменим. Нет отдельного «асинхронного мира».
Поддержка backpressure
Ряд асинхронных трансферов (AsyncSinkTransfer, AsyncWriteTransfer, AsyncConvertTransfer, AsyncConditionTransfer) поддерживают необязательные поля в конфигурации: maxConcurrency, bufferSize и onBufferOverflow — для ограничения параллельных async-операций, очереди избыточных данных и graceful-обработки переполнения. По умолчанию — неограниченная обработка, без буферизации.
Локальная обработка ошибок
Transferum использует единую модель обработки ошибок для всех трансферов. Каждый трансфер, который может столкнуться с runtime-ошибкой, принимает опциональный onError-хэндлер в своей конфигурации.
А теперь — к примерам использования
Вот так можно просто и декларативно описать опрос и агрегирование данных из нескольких источников:
А вот как можно организовать динамический роутинг:
import {
createPushStoredChannelTransfer,
createBridgeMultiSelector,
createBridgeSelector,
createPassBridge,
} from 'transferum';
// Вариант 1. Выбор одного реципиента
const commandRouter = createBridgeSelector({
bridges: {
light: createPassBridge({ source: commandChannel, target: lightController, activated: false }),
thermostat: createPassBridge({ source: commandChannel, target: thermostatController, activated: false }),
lock: createPassBridge({ source: commandChannel, target: lockController, activated: false }),
},
initialKey: 'thermostat', // выбор по умолчанию
activated: true,
owned: true,
});
commandRouter.select('lock'); // выберем другой вариант
// Вариант 2. Выбор нескольких реципиентов
const loggersRouter = createBridgeMultiSelector({
bridges: {
prometheus: createPassBridge({ source: metricsChannel, target: prometheusWriter, activated: false }),
elk: createPassBridge({ source: metricsChannel, target: elkWriter, activated: false }),
sentry: createPassBridge({ source: metricsChannel, target: sentryWriter, activated: false }),
},
initialKeys: ['prometheus', 'elk'], // будут активированы по умолчанию
activated: true,
owned: true,
});
loggersRouter.check('elk'); // теперь выбраны все три
loggersRouter.uncheck('prometheus'); // выбраны elk, sentry
loggersRouter.select(['prometheus', 'sentry']); // выбраны prometheus, sentry
А вот пример c организацией игровой механики:
import {
createDebounceTransfer,
createConvertTransfer,
createMapOperator,
createBridgeSelector,
createPassBridge,
linkTransfers,
} from 'transferum';
// Источник: debounce нажатий клавиш (16ms ~ 1 кадр при 60 FPS)
const rawInputSource = createDebounceTransfer({ delay: 16 });
// Конвертер: KeyboardEvent -> код клавиши
const inputConverter = createConvertTransfer({
operator: createMapOperator((event) => event.code),
});
// Целевые системы-потребители пользовательских событий
const carSystem = { push: (cmd: string) => console.log(🚗 Car executing: ${cmd}) };
const planeSystem = { push: (cmd: string) => console.log(✈️ Plane executing: ${cmd}) };
const menuSystem = { push: (cmd: string) => console.log(📋 Menu processing: ${cmd}) };
// Роутер: динамическое переключение между игровыми контекстами
const gameplayRouter = createBridgeSelector({
bridges: {
driving: createPassBridge({ source: inputConverter, target: carSystem }),
flying: createPassBridge({ source: inputConverter, target: planeSystem }),
ui: createPassBridge({ source: inputConverter, target: menuSystem }),
},
initialKey: 'driving', // игрок начинает в машине
activated: true,
});
// Связывание источника с конвертером с автовыбором стратегии
linkTransfers(rawInputSource, inputConverter);
// Демонстрация:
// Игрок в машине нажимает "W"
rawInputSource.push(new KeyboardEvent('keydown', { code: 'KeyW' }));
// Через 16ms: 🚗 Car: KeyW
// ==================
// Переключаемся на самолёт
gameplayRouter.select('flying');
// Та же клавиша теперь управляет самолётом
rawInputSource.push(new KeyboardEvent('keydown', { code: 'KeyW' }));
// Через 16ms: ✈️ Plane: KeyW
Когда имеет смысл попробовать Transferum
Библиотека подойдет для:
TypeScript-first проектов — благодаря максимально строгой типизации и compile-time вычислению доступных методов любого трансфера на основе объявленных у него флагов возможностей.
Работы с pull-based источниками данных — polling API, датчиков, хранилищ с PollingProxy.
Смешанных sync/async пайплайнов — в единой модели без ручного преобразования.
Явного flow control — gates, bridges, selectors для runtime-маршрутизации.
Game development / IoT — frame-aligned tickers, idle polling, sensor aggregation.
Устойчивой обработки ошибок — локальная, non-fatal обработка: одна стадия не убивает пайплайн при условии переданного в конфиге обработчика ошибок, ничего не подавляется молча.
Результаты и планы
Библиотека уже используется в двух наших внутренних проектах и показывает свою эффективность. Код доступен на GitHub под лицензией MIT, библиотека не имеет внешних зависимостей и поставляется с подробной документацией (README + API Reference).
В одном из проектов граф состоит из ~80 узлов и стабильно обрабатывает несколько сотен событий в секунду без деградации. На основе этих данных в том числе рендерится 3D-сцена в Babylon.js со стабильным фреймрейтом ~60 FPS без микрофризов.
Тесты библиотеки покрывают не только отдельные трансферы, но и поведение системы в динамике: переподключение мостов, обработку ошибок в длинных асинхронных цепочках, а также разнообразные граничные случаи. Покрытие — 100%.
В дальнейшем планируем реализовать хуки и утилиты для более удобного и нативного использования Transferum с Vue и React. Если они окажутся в достаточной мере переиспользуемыми, оформим в отдельные пакеты-адаптеры.
Буду рад, если вы заглянете в репозиторий, попробуете библиотеку в деле и поделитесь замечаниями — обратная связь поможет сделать Transferum лучше.
P. S. Если вы сталкивались с похожими задачами и решили их как-то иначе — буду рад прочитать о вашем опыте в комментариях.
Комментарии