Flipper Zero — проект карманного мультитула для хакеров в формфакторе тамагочи, который мы разрабатываем. Предыдущие посты [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
3 декабря 2021 г. в Москве прошел хакатон посвященный разработке под Flipper Zero. Всего было подано 57 заявок, из них одобрено 17. Всего в хакатоне приняло участие 42 человека и унесли домой 50 Флипперов.
Если коротко — это было потрясающе! Мы не ожидали такого уровня проработки проектов и вовлечения участников. Порог входа в понимание прошивки Флиппера достаточно высокий, разобраться со всеми API сложно, но не смотря на это почти все проекты были реализованы успешно.
В статье описания проектов, которые родились на хакатоне, глазами самих участников.
Проекты, которые родились на хакатоне
- SPI программатор для флеш-памяти — подключаешь прищепку к SPI флешке, другим концом в GPIO флиппера, и можно дампать и записывать SPI-память. Определение флешки происходит автоматически. Дампы сохраняются на SD-карту и с нее же прошиваются.
- Ethernet модуль — хардварный модуль для подключения Флиппера к Ethernet сетям. Можно использовать как LAN тестер, проверять есть ли в кабеле интернет. Ребята сделали собственную печатную плату и получился готовый продукт!
- Модуль твердотельного гироскопа IMU — хардварный модуль, который измеряет положение Флиппера в пространстве. В будущем может использоваться для приложения вроде air mouse.
- Инфракрасный приемник -> HID мост — Флиппер подключается к компьютеру и прикидывается HID-клавиатурой, дальше ИК-приемник настраивается на прием сигналов от любого пульта для телевизора. Можно использовать любой пульт имеющийся в доме для управления компьютером. Гениальная программа, до которой мы не додумались сами.
- Эмулятор CHIP-8 — эмулятор для программ на языке CHIP-8. Можно запускать существующие ROM-ы с играми и демками. Вывод на экран автоматически скейлится до флипперного экрана 128х64px.
- Флиппер как Apple AirTag — система гео отслеживания на основе Bluetooth LE, которая используется в устройствах Apple, может быть реализована и на других устройствах. Команде удалось превратить Флиппер в Airtag, так что его положение можно отслеживать используя инфраструктуру Apple.
- Telegram клиент (sic!) — настоящий телеграм-клиент на Флиппере. Работает как мост к Telegram-клиенту запущенному на телефоне через Bluetooth. Пользоваться им как полноценным клиентом не получится, но проект полезен как демонстрация использования разных слоев API.
- Игра 2048 (sic!) — классическая игра 2048 на маленьком экране. Сложность ее рализации в том, что из-за маленького экранчика флиппера, на один кубик не помещается 4 цифры в стандартном шрифте. Поэтому авторам пришлось рисовать собственный пиксельный шрифт.
- Расширение функций iButton DS199x — автор добавил поддержку протоколов DS1995. И что-то там про чтение NVRAM. @blvdharvest
- Эмулятор магнитных карт — авторы повторили проект magspoof и скрестили его со считывателем магнитных карт в виде аппаратного модуля для Флиппера. Позже выяснилось, что вместо отдельного модуля magspoof, можно использовать встроенную антенну Флиппера на 125khz! Таким образом, во Флиппере была открыта новая полезная функция.
- Анализатор спектра Sub-GHz — консольная утилита для просмотра спектра в диапазоне Sub1-GHz.
- Игра Stack Attack — оммаж на старую игру на телефонах Siemens, где нужно было уворачиваться от ящиков и складировать их. Роль грузчика выполняет дельфин.
- Игра Танчики — старые добрые танчики (Battle City), почти такие же как на Денди. Авторы нарисовали крутую графику и почти реализовали сетевую игру, так что можно играть двумя флипперами по радио Sub-GHz.
Менеджер SPI флешек
Авторы проекта: Hedger, x893, @ghettorce
Текст: Hedger
1. Идея
У Флиппера “из коробки” есть множество повседневно-полезных фич, а также несколько реже используемых, но не менее ценных функций, каждая из которых ранее требовала отдельного девайса.
Концепция подключаемых внешних модулей, позиционируемая разработчиками как одна из фишек устройства, расширяет возможности использования за рамки предоставляемого встроенным оборудованием и прошивкой.
На внешний интерфейс выведено несколько GPIO, некоторые из которых также можно сконфигурировать для работы встроенных интерфейсов UART, SPI и I2C.
Интерфейс Флиппера для внешних модулей
Флиппер уже вышел в серийное производство, но в части набора программных фич всё ещё находится в активной разработке.
Поэтому, когда появилось объявление о проведении московского хакатона, мы подали одну из первых заявок на участие, выбрав качестве проекта поддержку работы с внешними SPI-флешками.
Подобные флешки стоят практически в любом современном устройстве, в котором есть обновляемая прошивка. В таких флешках хранятся UEFI и BIOS видеокарт современных компьютеров и ноутбуков, прошивки девайсов IoT, в том числе на платформах ESP32/ESP8266, а также множества прочих гаджетов.
Для работы с SPI-флешками есть множество различных программаторов, в том числе дешёвые китайские на основе микросхемы CH341a.
Китайский программатор на CH341a
Но работа с ними требует наличия компьютера, а также использования софта различной степени стабильности и надёжности. Поэтому мы и решили реализовать аналогичный функционал в портативном “хакерском” девайсе.
2. Прошивка и API
Две остававшихся до хакатона недели мы провели за изучением кодовой базы прошивки и созданием каркаса приложения.
Прошивка Флиппера хорошо структурирована, имеет несколько слоёв абстракций, упрощающих взаимодействие с аппаратной частью, но при этом сохраняющих гибкость настройки периферии.
Низкоуровневая часть называется furi hal и написана на чистом C. Она предоставляет интерфейсы доступа ко всем внутренним компонентам девайса.
Часть хедеров HAL
Система предоставляет сервисы для взаимодействия с файловой системой, нотификациями, RPC, графикой.
Для разработки приложений используется кастомный UI-фреймворк с разделением обработки событий и рендера интерфейса. При разработке доступно несколько стилей написания кода — от простого однооконного приложения с использованием С API, до более сложных многоэкранных интерфейсов в двух стилях — полноценный объектно-ориентированный на C++ и более простой, но не менее функциональный стиль на чистом С.
Для добавления функционала в прошивку необходимо её перекомпилировать. На текущий момент Флиппер не поддерживает загрузку приложений с SD-карты. Однако, разработчики обещали в обозримом будущем предоставить функционал загрузки плагинов с SD и исполнения их из оперативной памяти.
3. Удалённая отладка
Организаторами был предоставлен доступ к удалённому стенду с подключённым Флиппером и инструментами для отладки. Он оказался невероятно полезным для тестирования кода до непосредственного старта трёхдневного хакатона. С его помощью удалось проверить и отладить каркас UI и фоновый обработчик взаимодействия по SPI.
“Удалённый” флиппер
Отдельно хочется отметить удобные инструменты для стриминга экрана Флиппера и удалённого управления им github.com/aprosvetova/screech
Тестовый билд прошивки, загруженный на удалённый Флиппер
4. Среда разработки: J-Link & Segger ES
Оригинальная прошивка Флиппера подразумевает сборку с помощью make и тулчейна gcc-arm-none-eabi. Для удобства развёртывания разработчиками таже предоставлен Docker-контейнер, в котором установлено всё необходимое для сборки и базовой отладки с помощью gdb под Linux. Для редактирования исходников предлагалось использовать всё, что угодно, от Sublime Text до VS Code.
Но ленивым и развращённым GUI разработчикам вроде нас такое решение показалось неудобным, и вдвоём с x893 мы собрали солюшен под Segger Embedded Studio for ARM (SES) — отличную (для эмбеда) кроссплатформенную среду разработки. Солюшен для сборки прошивки использует тот же тулчейн, что и оригинальный пайплайн.
SES также предоставляет удобную навигацию по исходному коду, управление параметрами сборки (для Флиппера — релизный или отладочный билд, выбор таргета аппаратной ревизии) и графическую отладку. В качестве отладчика может применяться как родной для Segger J-Link, так и интерфейс gdb через openocd или ST-LINK-SERVER.
Пошаговая отладка прошивки
Во время разработки и отладки прошивки мы пользовались отладчиками J-Link v8 и v9, китайские клоны которых можно приобрести по демократичной цене. Уже после хакатона проверили и настроили связь SES с Флиппером через ST-Link — прошивка и отладка также работают без особых проблем.
5. Графический интерфейс модуля прошивки
Разработанное нами приложение — компонент прошивки Флиппера — предоставляет базовые функции по работе с SPI флешками:
- Определение модели подключённой флешки
- Чтение дампа в файл (.bin) на SD-карту
- Стирание флешки и запись дампа из файла
- Верификация записанного
Всё взаимодействие с SPI памятью ведётся по базовой части протокола 25 серии, включающей в себя запрос трёхбайтового ID микросхемы (необходимо для определения размера флешки и её особенностей), чтение, стирание и запись областей памяти.
Экран определения типа памяти перед чтением и записью
При запуске программа автоматически определяет тип подключенной флеш-памяти и выводит результаты обнаружения на экран.
Процесс чтения дампа в файл на SD-карте
Интеграция в файловый архив
Файлы считанных дампов доступны в отдельной вкладке файлового архива. Их можно запустить из списка и сразу активировать процесс записи дампа на флешку.
Очистка флешки перед записью
Запись дампа в SPI флеш
Когда запись флешки завершена, по нажатию кнопки ОК можно запустить процесс верификации данных.
Верификация данных
Поскольку операции взаимодействия с внешней памятью могут быть достаточно долгими, особенно стирание участков флеша, то вся работа с внешним SPI вынесена в фоновый поток, обрабатывающий очередь задач от пользовательского интерфейса и не блокирующий его.
Также мы изначально планировали добавить поддержку работы с I2C памятью с повторным использованием компонентов пользовательского интерфейса, но сроки хакатона оказались слишком сжатыми для полноценной отладки взаимодействия по второму физическому интерфейсу.
6. Аппаратный модуль
Для демонстрации был собран прототип внешнего модуля с ZIF-панелью для микросхем памяти. В панельке предусмотрены 2 места под установку микросхем SPI 25 серии (в левой части) и I2C памяти 24 серии (в правой).
Внешний модуль
В панельку можно напрямую вставлять чипы в корпусах DIP-8, а с помощью стандартных тестовых клипс возможно прямое подключение к чипам в корпусах SOIC-8/SOP-8.
Подключение модуля к Флипперу
SPI-флеш память на девборде ESP32
Подключение к флешке девкита с помощью клипсы-”прищепки”
Отладчик ST-Link v3 также может использоваться как breakout плата для пинов GPIO
Отладка физического уровня при обмене по SPI
7. Демонстрация
На презентации проекта в конце хакатона нами был представлен разработанный компонент прошивки и внешний модуль для подключения SPI флешек. Для демонстрации возможностей проекта был осуществлён перенос прошивки с одного девкита на основе ESP32 на другой. В процессе переноса оригинальный девкит, донор прошивки, не включался — к его флешке подключалась тестовая клипса, и с помощью Флиппера считывалась прошивка.
После чего этой же клипсой подсоединялись ко второму девкиту, записывали и верифицировали прошивку.
Второй девкит пережил все эти операции и запустился с прошивкой с донорского модуля.
8. Результат и итоги
На прошедшем хакатоне нам повезло быть одними из первых, получивших возможность поработать с релизной версией Флиппера.
Для нашей команды этот хакатон — ценный опыт интеграции софта и железа на сложной и малознакомой платформе.
По итогам хакатона, нашей командой были разработаны:
- Компонент прошивки Флиппера, реализующий базовое взаимодействие с внешними SPI-флешками 25 серии.
- Код, после некоторой доработки и “зачистки”, пригоден для включения в код прошивки в качестве опционального компонента.
- Прототип внешнего модуля для Флиппера, обеспечивающий удобное подключение микросхем памяти в корпусах DIP и SOIC-8/SOP-8.
Также мы подготовили проектную часть от Segger Embedded Studio в виде отдельного репозитория, чтобы упростить вхождение в разработку прошивки Флиппера и её компонентов для других участников сообщества.
Ethernet ping-tester
Авторы проекта: @karasevIA, @sht4
Текст: @karasevIA, @sht4
О самом хакатоне мы оба узнали из статьи на Хабре. Далее Ефим дал клич в чат института, а Иван его подхватил. Встретились и стали думать — что делать?
Вариант с CAN-модулем был первым претендентом, но так и не удалось придумать куда бы его применить. Тогда выбор пал на модуль Ethernet, гораздо более популярный разьем, и применить его проще простого. Часто на производстве, дома или в общаге встречается пустая RJ-45 розетка, а что в ней — загадка. Разгадать ее и стало целью нашего модуля.
С идеей разобрались, дальше встал вопрос о ее реализации. Задачу разбили на “железо” и “софт”. На Ефима упала железная часть, на Ивана возложили софтовую реализацию. Отладочным железом стал модуль на основе w5500 и плата stm32l0-discovery.
Из комплекта собрали простенькую отладку на основе FreeRTOS и смеси библиотек, найденных на просторах интернета. Не обошлось без трудностей и на этом этапе, первый модуль упорно отказывался получать адрес от роутера, после пары дней мучений был куплен второй, более компактный, и он уже заработал как надо.
Со схемой расправились быстро. Первоначально заметили, что на выбранной нами гребенке, есть два пина CS, а значит можно подключить и два разных модуля: один — наш, второй — другой. Потому заложили в схему второй модуль. Впоследствии от идеи отказались, реализовать ее за хакатон не представлялось возможным.
С платой думали дольше. К счастью, открытость флиппера позволила скачать весь корпус флиппера в step файлах! Чертежи так же были достаточно удобны в использовании. Рисовали прямо на них, а напечатанная моделька упростила визуальное восприятие.
Контур платы накидали во Fusion 360, и подхватили его в Altium-е. Нам подсказали что нужно учитывать еще и возможный чехол, потому добавили пару мм вылета разъему.
День Х
На начало хакатона у нас в запасе:
- Простой, но работающий, пример на отладочной плате
- Виртуалка, где вроде собирается проект прошивки недельной давности
- Ефим, мчащий за платой в Резонит
- Горящие сердца и желание заполучить признание фанатов флиппера
В этот день нам раздали флипперы. Как именно они оказались у команды организаторов хакатона умалчивается. Но один из организаторов был подозрительно сильно похож на Павла Жовнера.
День Х+1
Утром этого дня во флиппер была зашита первая самопальная прошивка через специальное приложение qFlipper и спаяна первая плата. Легких путей мы не ищем, потому решили делать gui самым “правильным” вариантом — через ViewDispatcher. С платой тоже решили не обходить стороной детские ошибки и наделали их везде где можно было. Ефим потратил весь день на то чтобы отладить плату, а Иван разбирался в системе gui.
День Х+2. Он же — последний.
На утро имелся базовый gui, а плата все так же не работала. К счастью, была возможность использовать сколхоженный из соплеклея и текстолита модуль, и основная отладка велась именно на нем.
Когда основная работа с GUI была завершена, и мы начали скрещивать наш самописный GUI + железный модуль — выяснилась очень важная вещь. В прошивку, буквально за день-два до этого, внесли важный патч, упрощающий работу с внешним SPI. При этом в старой её версии, для переключения МК на гребенку флиппера, четкой инструкции не было.
Позиция организаторов была примерно такой:
“По образу и подобию раскидайте конфиги”. Иван раскидал во все файлы нужные конфиги, с полпинка не завелось и мы прислушались к другому совету — перейти на новую прошивку.
Уже началась следующая презентация, а мы, “только начали” работать с железками на самом Flipper-e. Пот стекал по пальцам и закипал на ноутбуке, сборка происходила внутри докера внутри виртуальной Ubuntu внутри ноутбука на Windows, отчего ноут кипел. Как только проект был переведен на более совершенную прошивку, модуль завелся с пол-пинка, мы выдохнули и дали отмашку что готовы выходить. К сожалению, исправить все ошибки в красивой плате не удалось, презентацию мы делали на модуле из соплеклея. Отладить его удалось уже после хакатона.
Выводы и замечания
По аппаратной части флиппера проблем не встретили, вставил — заработало.
С софтом было посложнее. По своей простоте работа с прошивкой очень далека от той же Ардуино. Чтобы собрать один gui проект, потребовалось много бегать по проекту и ручками вставлять свои дефайны и анимации, и это не говоря о том, сколько файлов пришлось на сам проект. Хотелось бы попроще для мелких проектов. Команда флиппера и сама это понимает, пусть и быстрого решения не предвидится.
Сам хакатон собрал очень классных людей в одной комнате, способных сделать кучу технически сложных проектов за пару дней. Чувствуется уровень и высокая квалификация. Также мероприятие помогло ощутить масштаб проделанной над флиппером работы. И такая же огромная работа их ждет впереди.
Эмулятор chip8
Авторы проекта: dwdraugr, @mega8bit
Текст: @mega8bit
Цель проекта — создание приложения, позволяющего запускать бинарные файлы программ, работающих на 8-битных микрокомпьютерах CHIP8 70-ых годов
Сам CHIP8 имеет 35 опкодов, 16 8-битных регистров, 48 байт стека для 12 уровней вложенности, несколько таймеров для звука и задержки.
Исходное разрешение дисплея составляет 64х32 пикселя, что в два раза меньше, чем у флиппера, по этому мы масштабируем изображение, цвет дисплея — монохромный, что идеально подходит для флиппера.
Графика выводится на экран путем рисования спрайтов от 1 до 16 пикселей. Каждый пиксель это XOR операция по отношению пикселей экрана, таким образом нет необходимости задавать цвет.
В итоге реализовали все, что задумывали, сторонние программы загруженные на флешку запускались и работали корректно за исключением управления. В ходе проектирования столкнулись с особенностями программирования эмбед систем, такие как ограниченные ресурсы памяти, скорость процессора, но в целом было весело :)
Флиппер и твердотельный гироскоп
[Видео] Демонстрация работы модуля гироскопа
Авторы проекта: @avtopolet, @okalachev
Текст: @okalachev
Цель проекта — создание платы расширения Флиппера для подключения твердотельного гироскопа/акселерометра (IMU).
В проекте использовался модуль GY-521, который содержит в себе микросхему IMU-6050 и минимальную необходимую обвязку, включая резисторы подтяжки шины I2C (по этой шине и происходит обмен данными с Флиппером). Для того, чтобы все выглядело красиво и монолитно было принято решение изготовить печатную плату-переходник.
Исчерпывающая информация была найдена на сайте документации docs.flipperzero.one/ru. В разделе “GPIO и модули” дана расшифровка выведенных на корпус гнезд разъема доступных GPIO.
Для подключения использованы выводы 15 (данные), 16 (тактирование), 11 (общий) и 9 (питание 3.3V). Команда Флиппера упростила процесс разработки создав шаблон в EasyEDA (https://docs.flipperzero.one/ru/development/external-module/guide), на его основе была разведена плата и получены Gerber-файлы.
Методом изготовления была выбрана фрезеровка платы на станке ЧПУ, использовался FlatCAM (получение управляющей программы для станка) и G-code Ripper (для коррекции управляющей программы по высоте для точной фрезеровки). Очень подробно процесс описан товарищем DI HALT easyelectronics.ru/gravirovka-pechatnyx-plat-na-chpu-frezernom-stanke-chast-pervaya-flatcam.html, огромное ему спасибо).
После сборки и тестирования была обнаружена проблема — модуль в переходнике работал только на проводах-перемычках. При подключении непосредственно в разъем Флиппера IMU-6050 переставала определяться на шине. Происходило это из-за неподключенного ни к чему обширного медного полигона вокруг дорожек. Припаяв полигон к общему выводу мы решили проблему и сосредоточились на разработке программного обеспечения.
Было сделано приложение для взаимодействия с IMU, состоящее из трех экранов. Первый экран с основной информацией: сырые данные с акселерометра, данные с гироскопа с учетом калибровки, рассчитанные углы по pitch и roll. Второй экран с дополнительной информацией (температура), третий экран — импровизированный уровень.
Для взаимодействия с модулем использовалась библиотека для Arduino, в которой все I2C-функции были заменены на соответствующие вызовы к API Флиппера, а также сделаны другие правки (например, учет 32-битности МК Флиппера).
Исходник добавленного приложения: github.com/okalachev/flipperzero-firmware/tree/imu/applications/imu.
Telegram клиент
Авторы проекта: Astrra, vichuma, SunnyCapt [2lnlwtx/wetox]
Текст: vichuma
О хакатоне я с Астрой узнали из канала Жовнера, так как давно следим за развитием Флиппера и его успехами, и не поучаствовать было невозможно :)
Первой идеей была реализация таймера, однако организаторы отклонили заявку из-за недостаточной сложности. Поэтому я предложила замахнуться на реализацию максимально простого клиента для Telegram, чтобы еще сильнее расширить его присутствие на различных платформах. Идея была в отправке сообщений, не доставая телефон (зимой в перчатках на телефоне затруднительно что-либо делать), чтобы не отвлекаться от увлекательного процесса хакинга, а заодно сразу делиться записанными сигналами/ключами/дампами. У всей команды почти полностью отсутствовал какой-либо опыт разработки embedded (не считая баловства с Arduino), поэтому идея звучала амбициознее некуда :)
Firmware
GUI для приложения на флиппере можно реализовать тремя разными способами — мы остановились на варианте с ViewDispatcher, так как нужен был интерфейс и переиспользование готовых модулей, а переусложнять со сценами не хотелось. Так как прошивка ещё не умеет подгружать кастомные приложения, для запиливания решили сделать встроенное в прошивку приложение, вызывающееся из меню плагинов (скорее всего, любые кастомные приложения в будущем будут вызываться оттуда). При открытии приложения после короткой загрузки показываются 3 последних диалога из Telegram аккаунта (поддерживаются только ЛС). При выборе любого из них список показывает три последних сообщения из выбранного диалога и кнопку написания нового. Кнопка написания нового сообщения открывает клавиатуру на которой можно натыкать любое сообщение (из английских букв и цифр, вместо пробела нижнее подчёркивание), и кнопка save его отправляет. Ура!
Всё это мы реализовали стоковыми GUI функциями флиппера, так что даже не пришлось городить что-то своё с этой стороны.
[Видео] Телеграм клиент на Флиппере
Android App
Варианты реализации взаимодействия флиппера с телеграмом сводились к различным комбинациям неизведанного, а именно telegram client api (недолго думая остановились на использовании библиотеки tdlib) и RPC. И вот какой выбор стоял:
- Написать свое приложение с нуля, разобраться во всем самостоятельно и рассказать людям —полезно, круто, но долго
- Впилить в официальный клиент телеграма общения с флиппером — не пришлось бы возиться с апи, однако документации по реализации RPC не было
- Впилить в приложение флиппера общение с телеграмом — ковырять tdlib, по нему благо есть документация и примеры.
Решили пойти по последнему пути. Дальше было два дня боли, связанной в основном с tdlib. Когда код был уже написан — ничего не работало. Несколько часов рассуждений принесли плоды: Prebuilt tdlib library for Android с core.telegram.org был устаревшим (не было поддержки 64-битных id’шников), скомпилировав либу из исходников всё закрутилось, завертелось.
В реализации очень помог автор приложения — @LionZXY
[Видео] Прокси приложение для Telegram под Android на основе tglib
RPC
На момент хакатона документация для разработчиков практически полностью отсутствовала, поэтому приходилось учиться на примерах из исходников, параллельно задавая вопросы разрабам прошивки. Общение для сторонних приложений по RPC чуть-чуть не успело зарелизиться к хакатону, и в итоге решено было цепляться к системному RPC. Общение реализовано с помощью протокола Protobuf, а в качестве транспорта мог использоваться один (только один одновременно!) из транспортов: Bluetooth или CLI (доступный по USB), при использовании которого вы лишаетесь возможности смотреть логи без отладчика, так как сессия CLI может быть только одна.
Удобных инструментов для отладки RPC не было, поэтому я вооружилась PySerial и писала байты напрямую в открытую CLI сессию, используя CyberChef, protoflex и protogen для (де)сериализации. Оказалось, что флиппер использует delimited вариацию Protobuf, в которой пишется длина пакета перед ним самим в виде VarInt — стоит учитывать это при разработке, так как далеко не все реализации умеют его подставлять из коробки. Итоговая proto-схема выглядит таким образом: основной пакет, telegram-specific сообщения.
Сообщения получаются по RPC через Bluetooth от приложения на телефоне, и потом обрабатываются callback’ом, в котором нужно обрабатывать все пришедшие данные — в нашем случае, перерисовывать GUI и сохранять последние сообщения.
Result
За 2 суток (первый день не считается, так как только получили флипперы на руки и разбирались) мы написали полностью рабочее приложение для флиппера с телеграмом, через которое можно было отправлять и получать сообщения. Так как времени было крайне мало, всё держалось на честном слове (мы были удивлены, когда на демо всё прошло без проблем!), и само приложение всё ещё сырое, поэтому на момент написания статьи не рекомендуем его к использованию — однако, со временем это может измениться, следите за новостями и коммитами!
Процесс разработки на флиппер ещё не совсем дружелюбен к новичкам, но организаторы уже учли большинство замечаний и улучшений по developer experience, и в ближайшем будущем разрабатывать станет ещё проще!
[Видео] демонстрация на телеграм клиента на хакатоне
Прошивка Флиппера на Github
Приложение под Android
Функция AirTag для Флиппера
Заявка
Авторы: Биба, Боба и Абоба: @Genom_10, AlexStrNik и kinjalik
Цель проекта
Разработать модификацию для Flipper Zero Firmware с функционалом локации устройства на местности посредством эксплуатации сети устройств Apple FindMy (iPhone, iPad, etc.) с использованием программного решения OpenHayStack.
А если по человечески — увидеть приблизительное местоположение флиппера на карте, по типу Apple AirTag, используя наработки OpenHayStack.
Получившийся результат
Мы добавили в устройство третий режим работы Bluetooth Low Energy под названием OHS (сокращенно от OpenHayStack). К, сожалению, из-за особенностей структуры пакета не получилось совместить нормальную работу BLE и OHS. Со временем выяснилось, что наш функционал ломает еще больше всяких вещей :) Не исключено что нам просто не хватило знаний, но в том же айфоне под это выделен отдельный чип (вроде), а в Купертино работают люди точно поумнее нас (дизайнеры нового макбука не в счет). Когда режим включен, он начинает бродкастить advertise-пакеты BLE, содержащие публичный ключ Флиппера. Затем, через сервис Apple FindMy, мы грабим записи о местоположении, расшифровываем и кладем на карту.
Нами так же было форкнуто непосредственно приложение-клиент OpenHayStack с целью автоматизации загрузки публичного ключа в память Флиппера. В итоге все действия пользователя свелись к а) Прошивке Флиппера; б) Генерации пары ключей в клиенте Openhaystack; в) Деплою публичного ключа в память Флиппера непосредственно из приложения OHS.
Подводя итоги хакатона для нашей команды, я мы сошлись на том, что это чистой воды слабоумие и отвага. Опыт в embedded у нашей команды околонулевой, а все время, которое можно было готовиться к хакатону, мы
Инфракрасный приемник -> HID мост
Авторы: @ashpooljh, @Elecon-rou, @trexxet
Текст: zhovner
Флиппер подключается к компьютеру и прикидывается HID-клавиатурой, дальше ИК-приемник настраивается на прием сигналов от любого пульта для телевизора. Можно использовать любой пульт имеющийся в доме для управления компьютером. Гениальная программа, до которой мы не додумались сами.
Особенный кайф в том, что можно взять любой пульт и забиндить ВСЕ его кнопки на какие-то действия на компьютере, в том числе и комбинации клавиш. Мы обязательно добавим эту функцию в прошивку флиппера.
Интерфейс программы IR Dongle
Stack Attack Heap Defense
Заявка
Наш форк прошивки Flipper Zero
Авторы: @wquinoa, @m010, @vedmein
Цель проекта: написать Игру.
Вольный пересказ механики игры:
Цель игры — продержаться как можно дольше. В игре доблестный рабочий, в нашем случае дельфин, старается пофиксить неоптимальную службу разгрузки коробок. Коробки падают на него с неба, и он, рискуя собственной жизнью, должен двигать их чтобы заполнять образовавшиеся пустоты. Как только ряд заполняется, он магическим образом исчезает. Игра немного похожа на тетрис, но не тетрис)
Помню как часами просиживал за этой игрой на Siemens C45, а потом у сестры появился цветной сименс, а там уже можно было выбирать персонажей! И конечно же больше всего запомнилось то, как я получал по шапке каждый раз, когда меня находили под одеялом с чужим телефоном) Так что когда в первый раз увидел экран флиппера, захотелось написать для него и клон Stack Attack.
Ну и настал тот час и объявили о хакатоне! И… мы настолько быстро отправили заявку на участие, что стали последними кто заявился и был принят!) После этого у нас было много времени подготовиться, поэтому до самого начала хакатона почти ничего готово не было и нас ожидало 2 дня удивительных приключений в мире окирпиченных флипперов и висящих в воздухе furi_alloc-ов) И вот что у нас получилось:
На самом деле получилось не совсем так (это доработки от @wquinoa)
А на презентации работы было так:
Спасибо организаторам! Это было очень увлекательное путешествие, начиная с отличной лекции по возможностям библиотеки в начале хакатона, до фиксов прошивки в такси за минус час до начала презентации:
Ждем новых эвентов!
З. Ы. отдельное спасибо Лизе за шикарные заставки к нашей игре
В статье описаны не все проекты, так как их авторы вовремя не прислали тексты. В будущем, возможно опубликуем остальные проекты.
Наши соцсети
Узнавайте о новостях проекта Flipper Zero первыми в наших соцсетях!
Комментарии (38)
vaniacer
15.12.2021 17:19+9ProstakovAlexey
15.12.2021 17:38+1Это отлично, что у кого получилось подержать флипера в руках и даже написать под него программы, очень рад за них, искренне. Но я прямо тоже хочу! Когда же начнутся продажи по предзаказу, ведь скоро НГ, нужен подарок. У меня на почте письмо от 26 ноября: We will send instructions by email which will also include your personal pre-order coupon in case you've lost it. Расскажи пожалуйста, когда уже можно купить?
xakep2011
15.12.2021 17:42+7Я прошёл уже все стадии ожидания, от грусти до гнева, от гнева до депрессии и алкоголизма. Сейчас завязал, радуюсь любым новостям, чего и вам желаю.
ECRV
15.12.2021 18:10+2После хакатона у какого-то количества людей появились флипперы. Есть общий чат в тележке (https://t.me/flipperzero) и если очень не терпится написать приложение, можно попросить у кого-нибудь погонять флиппер
В тяжелые времена дефицита чипов эмбеддерам нужно сплотиться и помогать друг другу
agathakazar
15.12.2021 18:17+2Скоро можно будет, но мы пока еще не получили всю информацию по стоимости доставки от логистического брокера. Как только сможем принять заказ - отправим все инструкции.
Sazonov
15.12.2021 18:54Спасибо, очень ждём. Хотя есть чуйка, что в Беларусь флиппер будет ехать очень долго.
koteeq
15.12.2021 18:18+1С нашей стороны всё готово, чтобы взять у вас деньги за предзаказанные Флипперы, но логистический брокер пока задерживается с ценами на доставку, а без них никак.
Мы уже получили цены для некоторых стран, но не для СНГ, например. Как получим все, сразу разошлем письма, можно будет оплатить Флиппер и даже добавить аксессуары.
drWhy
15.12.2021 17:38+2«Ethernet модуль — хардварный модуль для подключения Флиппера к Ethernet сетям. Можно использовать как LAN тестер, проверять есть ли в кабеле интернет.»
Ethernet ping-tester — отличная идея. С учётом специфики изделия — что если добавить функциональность Smart Lan — определение длины подключённого сегмента и состояния линий обрыв/замкнуто? Заодно реализовать ВЧ пробник для поиска определённого линка в произвольном месте жгута. А потестировать PoE на предмет отдаваемой мощности?ECRV
15.12.2021 18:04Боюсь за пару баксов подходящий чип не купить. Вся функциональность которая имеет смысл уже бала поднята и будет переделана под новый тип приложений, когда их допилят. Решения которые могут проверять подключение проводов, разрыв, нагружать PoE и прочее надежнее купить в уже готовой коробке
ShtAnigga
15.12.2021 18:20Учитывая, что этот чип стоит не пару баксов при рознице, то про PoE и говорить нечего. Получится очень "небюдженая" разработка.
drWhy
15.12.2021 18:32+1Realtek 8111 за пару баксов умеет ;)
Иногда просто опросить возможности инжектора без нагрузки может быть полезно, где-то в статьях описывались хождения по мукам техников, когда в разветвлённой PoE сети с каскадным подключением инжекторов пытались определить причину периодических отключений.
Готовая коробка от Fluke — это здорово, но чем Флиппер хуже, речь ведь о поиске возможных дополнительных функций.
Можно что попроще — dhcp/tftp сервер для удалённой загрузки сетевых устройств.
И да, необязательно всё вместе и мгновенно.esaulenka
16.12.2021 00:54+2Realtek 8111 за пару баксов умеет ;)
Он стоит пару баксов только потому, что оооочень массовый. Внутри он довольно продвинутый. И общаться с хостом он желает не по примитивным SPI/I2C/UART, а по PCI-Express, поддержку которого на STM32 никак не сделать...
Можно, правда, поискать Ethernet PHY c интерфейсом RMII. Его, правда, во флиппере тоже нет, но конфигурация такого чипа читается-пишется по отдельному интерфейсу MDIO, который, кажется, можно имитировать ногодрыгом. Насколько хорошо там реализована диагностика проблем с кабелем, я никогда не думал, но в каких-то чипах она заявлена.
Решение, честно скажу,
через заднивыглядит очень по-хакерски. Насколько в принципе оно работает, я не знаю (и работает ли вообще MDIO при мёртвом RMII). Я когда-то давно разбирался с MII, но мне надо было байтики в сеть передавать, а не вот этой диагностикой заниматься.drWhy
16.12.2021 15:02«оооочень массовый»
Именно. Встречал на платах как минимум три модификации, частично несовместимых.
Вообще Realtek на недорогих сетевых чипах собаку съел, и не одну, вспомнить хотя бы линейку чипов для медиаплееров.
«выглядит очень по-хакерски» — Флипперу иначе неможно )
«общаться с хостом он желает не по примитивным SPI/I2C/UART, а по PCI-Express, поддержку которого на STM32 никак не сделать...»
Занимательное мостостроение позволит заодно оценить производительность Флиппера в Crysis.Лишних инструментов не бывает )esaulenka
16.12.2021 15:21+1Занимательное мостостроение
Вспоминается давно забытое слово "мультипортовка". Судя по картинке и нагугленному даташиту, вместо "Any MCU" в левой части картинки надо читать "какой-то странный толстый процессор, у которого есть лишний PCIe, но нет нужного количества GPIO / UART / SPI / ...".
drWhy
16.12.2021 16:27С другой стороны — если уж у Флиппера появится pci-e, то вместо Realtek за $2, придётся ставить Intel 100GbE.
Astrra
15.12.2021 18:00+7Огромное спасибо команде Flipper Devices за офигенный хакатон! Было весело :)
ade
15.12.2021 20:15+1LAN-тестр - классный проект, только я бы делал его форму просто прямоугольной, распаяв компоненты по обе стороны платы, чтобы получить коробочку толщиной с флипер, так и производство выйдет дешевле, и при неудачном рывке за кабель вектор усилия будет направлен так, что модуль просто отсоединится по пинам
ShtAnigga
15.12.2021 20:53на фото макетный образец для отладки технологии. Итоговый вариант обсуждаемый, наберает критическую массу пожеланий. Самое главное, что он корректно работает и готов к бою.
xakep2011
15.12.2021 21:13А где можно почитать подробности про консольный анализатор субгигагерцового диапазона?
JayK
16.12.2021 08:12+2Эзернет тестер и полноценный АВТОНОМНЫЙ, без ноутбука программатор в кармане. Это ОЧЕНЬ круто. Прямо вещь которую можно применить здесь и сейчас.
Выше написали что еще очень не помешал бы детектор разрыва витой пары, тк он большой и тяжелый, а флиппер - маленький
И про TFTP, тогда можно будет так же автономно, без ноутбука или малины, запрошивать разные рутеры прямо на месте.
Пульт, ну прикольно, да.
Игры - в формате, а мы можем в игры на мк это круто, практически же...
Вообще концепция разработки устройства прямо противоположная копирастически-вендорлоковому огораживанию, однажды приведет к тому что комьюнити сделает вообще в принципе все что на ем теоретически можно сделать.
wquinoa
16.12.2021 12:18+2Конкретно про нашу игру - здесь был вопрос не столько в том, что мы "можем в игры на мк", а скорее в том, что мы (пока что) не можем в основной функционал :)
Soukhinov
16.12.2021 10:32+4Вы забыли добавить во Flipper Zero фонарик. Я серьёзно говорю.
Dr_No
16.12.2021 10:58+1Так ничего сложного нет, любой светодиод и втыкаем в 3,3В-GND и получаем фонарик.
Soukhinov
16.12.2021 12:41Flipper Zero — это инструмент. Многие электроинструменты имеют встроенные фонарики. Дрель имеет, лобзик имеет, карманный мультиметр имеет. Это неспроста. Единственное электронное устройство в моей сумке, кроме мобильника, — фонарик. Он может понадобиться неожиданно и независимо от телефона.
Так что ждём либо новую аппаратную ревизию с фонариком, либо компактный внешний модуль-фонарик.
avtopolet
16.12.2021 12:59Есть же. Включаете статусный светодиод в режиме синего цвета и пожалуйста. Конечно не фара, но в темноте замочную скважину легко найти.
ECRV
16.12.2021 13:09+4Там есть мощный ИК фонарик. Он правда может быть бесполезен как фонарик, если вы не рептилоид, но всем не угодишь
vvzvlad
16.12.2021 13:13+8Там есть фонарик. Вы просто не видите в том диапазоне, в котором он светит!
nam5580
17.12.2021 01:26+1Часто на производстве, дома или в общаге встречается пустая RJ-45 розетка, а что в ней — загадка.
Что-что, passive PoE на 220 вольт. Ноль на синей паре, фаза на коричневой.
drWhy
17.12.2021 01:44+1И это ни разу не шутка — видел на предприятии пару промежуточных коммутаторов, подключённых таким образом. Точнее самих коммутаторов не видел — кабели к ним уходили в дыру под подоконником на территорию, но отводы незадействованных пар от двух кабелей были включены прямо вилками в розетки. Причёсывать брошенную ушедшим админом сеть сразу расхотелось.
Теперь понял — сбежавший админ обучался проектированию СКС в той общаге.
dwdraugr
Как участник хакатона, спасибо ребятам за хорошую организацию процесса и добрую атмосферу. Без толковых советов Паши эмулятор встал бы на полпути =)
zhovner Автор
А какого Пашу вы имеете в виду? Я вряд ли что-то дельно подсказал бы.