Обновить
16K+
268

Пользователь

111
Рейтинг
134
Подписчики
Отправить сообщение

Создаём простейший киоск при помощи Yocto

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели12K

Я уже рассказывал, как можно собрать минимальный Linux под различные архитектуры. Также я описывал свой эмулятор известной игры «Ну, Погоди!». В этой статье я хочу рассказать, как создать дистрибутив Linux с моим эмулятором, который будет работать в режиме киоска.

Вы сталкивались с операционными системами, работающими в режиме киоска, когда снимали деньги в банкомате, взвешивали продукты в супермаркете или покупали товар на кассе самообслуживания.

Читать далее

Делаем из Raspberry Pi Pico синтезатор Roland SC-55

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели15K

В прошлой статье мы рассмотрели, как создать простой синтезатор на основе Raspberry Pi Pico. Звуки на основе синусоиды интересны, но хочется получить звук реального инструмента с его уникальным тембром.

Если вы думаете, что достаточно просто проигрывать записанный звук для каждой ноты, то, по крайней мере, для Raspberry Pi такой подход не сработает из-за ограниченных ресурсов. А вот использование звуковых шрифтов (SoundFont), которые придумали ещё в прошлом веке, поможет решить задачу.

Изобретать велосипед и реализовывать обработку SoundFont-файлов с нуля мы не будем, а воспользуемся готовой библиотекой TinySoundFont.

Изучение технологии SoundFont и то, как устроены звуковые банки вообще, даёт много в понимании синтеза звука.

В этой статье мы подключим библиотеку TinySoundFont к Raspberry Pi Pico, устраним главный недостаток библиотеки — загрузку всего SoundFont в оперативную память, и заставим синтезатор читать семплы напрямую из флеш-памяти.

Читать далее

Подключаем к Raspberry Pi Pico MIDI-клавиатуру и делаем музыкальный синтезатор

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели16K

Несколько лет назад я купил MIDI-клавиатуру. И как это часто бывает с вещами, о которых долго мечтал: поигрался, сбил свой интерес и положил пылиться на полку. Но вот недавно у меня возникло желание сделать из MIDI-клавиатуры синтезатор.

Многие могут спросить: а в чём проблема? Взял МIDI-клавиатуру, подключил к компьютеру или смартфону с программой и играй сколько хочешь. Но у меня другая цель — понять, как нажатие на клавишу превращается в звук.

Читать далее

Эмулятор CD-ROM из Raspberry Pi Pico W, использующий образы из сети

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели20K

В одной из своих статей я уже рассказывал, как из Raspberry Pi Pico сделать USB CD-ROM. Так как размер флеш-памяти Pico ограничен, поместить что-то серьёзное в образ, который будет находиться во флеш-памяти невозможно. Можно попробовать разместить образ на флеш-карте и использовать модуль для неё, но я нашёл более интересное с точки зрения используемых технологий решение. Эмулировать образ, который находится в интернете. Образа многих дистрибутивов Linux доступны для загрузки с сайта.

Читать далее

USB без магии: устройство протокола

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели31K

Целью этой статьи не является полный пересказ спецификации USB или книгу по USB. Я хочу приоткрыть магию работы USB и представить информацию таким образом, чтобы вы получили быстрый старт для понимания всего стека USB: от интерфейсов и конечных точек до электрических сигналов.

Читать далее

Загружаемся с Raspberry Pi Pico

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели22K

Я продолжаю освещать работу с USB на Raspberry Pi Pico. В текущей статье хочу привести пример, как можно использовать Raspberry Pi Pico в качестве загрузочного USB-устройства.

Читать далее

Делаем ностальгический фильмоскоп на Raspberry Pi Zero 2 W

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели20K

Один из ярких воспоминаний детства — просмотр семьёй диафильмов. Выключался свет, и на самодельном экране из простыни мы смотрели сказки. Детское воображение дорисовывало детали, и картинки оживали.

Сейчас в эпоху интернета, мультимедиа и ИИ вроде бы как такой необходимости нет, но слишком сильное чувство ностальгии. Поэтому решил получить ностальгические воспоминания с использованием современных технологий, а заодно и попрактиковаться в использовании энкодеров, разработке программ на Си и настройке Linux на Raspberry Pi.

Читать далее

Делаем любимую механику беспроводной: BLE-адаптер для Kingston HyperX Alloy FPS на базе Raspberry Pi Pico W

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели18K

Продолжаю рассказывать о своём опыте создания BLE адаптера для USB-клавиатуры, которым уже пользуюсь каждый день.

Собранный ранее на макетной плате адаптер с подключённым pico debug был хорош тем, что можно было экспериментировать, набираться опыта, но пользоваться таким адаптером как устройством неудобно: нет корпуса и нет автономного питания.

В комментариях к прошлой статье читатели упоминали, что китайцы продают адаптеры, по функционалу похожие на мой, но пользоваться такими адаптерами также неудобно. C хостом действительно беспроводной канал, а вот кипу проводов к самому адаптеру никто не отменял.

Стремление к универсальности часто приводит к неудобным решениям, поэтому я сосредоточился на своей клавиатуре Kingston HyperX Alloy.

Читать далее

Делаем Bluetooth-адаптер для USB-клавиатуры

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели23K

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

Я уже предпринимал такую попытку в одной из своих статей. Описанный там адаптер представлял больше учебный интерес, чем имел практическое применение, так как прошивка представляла собой полноценный Linux, кастомизированный скриптами, и использовала слишком мощное (Raspberry Pi Zero 2 W) для такой простой задачи железо.

К той статье были написаны справедливые замечания, а сейчас я хочу их исправить.

Читать далее

Превращаем старую клавиатуру от ноутбука в полноценную USB-клавиатуру на RP2040 без QMK

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели20K

По созданию клавиатур на Хабре написано много статей, но, как правило, они подразумевают кастомизацию прошивки QMK или использование уже готовой.

Использование готовой прошивки удобно тем, что большинство шишек за вас набили её разработчики. Такой подход годится, если вы хотите получить отлаженное решение в сжатые сроки.

Для обучения и понимания работы клавиатуры, периферийных устройств и протоколов взаимодействия лучше изобрести свой велосипед. Так я и поступил.

Читать далее

Запускаем эмуляцию «Ну, погоди!» в Linux на слабом железе

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели11K

У меня уже были статьи, посвящённые эмуляции «Ну, погоди!». Цель этой статьи — рассказать, с чем я столкнулся при переносе моего эмулятора на Linux, и почему вообще я не воспользовался готовым решением. Статья может послужить туториалом для тех, кто хочет начать разбираться в библиотеке SDL2.

Читать далее

Запускаем Tetris на домашнем роутерe

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели16K

Интернет пестрит информацией о том, как запускают DOOM на различных устройствах. Захотелось и мне запустить Doom на своём стареньком TP-Link WR-841N. Как видно из заголовка статьи, у меня этого не получилось, но результатом стало понимание основ написания прошивок роутеров и работающий тетрис.

Читать далее

Чёрное окошко Linux: погружение в подсистему TTY

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели30K

Начав изучать тему терминалов в Linux, вы можете почувствовать, что по отдельности вроде бы всё понятно, но разница между понятиями и их суть всё равно ускользает. Консоль, терминал, TTY, виртуальная консоль, виртуальный терминал, эмулятор терминала, оболочка — это просто «вот то чёрное окошко, куда вводят команды Linux». На самом деле за этим окошком скрывается целая цепочка разных сущностей — от компонентов ядра до пользовательских программ. Цель данной статьи — объяснить подсистему TTY и избавить вас от этого неприятного ощущения.

Читать далее

Изучаем, как работает клавиатура в Linux, и пишем шуточный модуль ядра

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели20K

Часто в учебной литературе по Linux приведены скучные и неинтересные примеры написания модулей ядра. Я решил исправить этот пробел и показать, что разработка небольшого модуля — это задача под силу многим, если понимаешь базовые принципы разработки программ.

Читать далее

Сеть вместо SD-карты: как собрать минимальный Linux для Raspberry Pi с возможностью загрузки по сети

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели21K

Когда собираешь и тестируешь свой Linux для одноплатника достаточно долго, начинаешь замечать, что деплой Linux на SD-карту — монотонная повторяющаяся последовательность действий, занимающая ценное время, в которой легко совершить ошибку. К тому же больно видеть, как исчерпывает свой ресурс SD-карта и слот для неё.

Часто при embedded-разработке эти проблемы решают при помощи сетевой загрузки Linux.

В этой статье я расскажу, как организовать сетевую загрузку для Raspberry Pi и собрать минимальное ядро Linux, поддерживающее сетевую загрузку.

Сетевая загрузка рассматривается для Raspberry Pi 3 Model В и Raspberry Pi 4 Model B, которые я далее называю общим термином Raspberry Pi или более ласково — малинка.

Основное назначение окружения для сетевой загрузки — ускорение отладки и тестирование пользовательских приложений и программ разрабатываемого дистрибутива Linux.

Тема сетевой загрузки довольно многогранна и затрагивает несколько уровней стека — от протоколов локальной сети до особенностей загрузчика Raspberry Pi. Я старался изложить материал максимально просто и последовательно, но если у вас нет базовых знаний о работе локальных сетей (DHCP, TFTP), протоколах TCP/IP или процессе загрузки Linux, некоторые моменты могут показаться сложными.

Статья является продолжением моей предыдущей статьи, где я рассказывал, как создать минимальный Linux для Raspberry Pi, который грузится с SD-карты.

В свой репозиторий я поместил исходный код Docker-образов, упрощающий сборку минимального Linux и настройку окружения для сетевой загрузки.

Надеюсь, что статья сэкономит вам время, которое вы сможете потратить на свой увлекательный проект.

Читать далее

Строим свой остров: как создать минимальный Linux для Raspberry Pi

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели22K

Ещё три года назад меня просили рассказать, как собрать минимальный Linux для Raspberry Pi, — и сейчас я выполняю эту просьбу. Несмотря на то, что первоначальной целью Raspberry Pi было создание дешёвого устройства для обучения базовым навыкам программирования, информации о том как, создать минимальный Linux для Raspberry Pi в интернете немного. Я хочу восполнить этот пробел для желающих начать погружение в embedded-разработку.

Linux для встраиваемых систем, включая Raspberry Pi, и Linux для PC имеют ряд различий. Различия касаются используемых загрузчиков, платформо-зависимого кода ядра, файловых систем и прочего. Для встраиваемых систем большое значение имеет Board Support Package (BSP), который обычно сопровождает различные системы на кристалле (System on Chip — SoC) или одноплатные компьютеры (Single Board Computer — SBC).

Чтобы сделать статью интереснее и полезнее, я рассмотрю создание Linux для Raspberry Pi 3 и для Raspberry Pi 4 и укажу на различие этих одноплатных компьютеров в контексте загрузки и сборки ядра Linux. Также мы соберём и запустим downstream и upstream Linux-ядра для Raspberry Pi.

Под Raspberry Pi 3 и Raspberry Pi 4 подразумеваются модели Raspberry Pi 3 Model B и Raspberry Pi 4 Model B соответственно. А обе модели называются в статье Raspberry Pi.

Как и в моей прошлой статье по сборке Linux для PC собирать мы будем без использования Buildroot или Yocto Project, только сделаем его более практичным, так как он будет поддерживать работу с SD-картой.

Такие сборки минимального Linux без Buildroot и Yocto Project мне чем-то напоминают высадку на необитаемый остров, где вы вынуждены минимальным набором инструментов благоустраивать свою жизнь. Да, вашей жизни ничего не угрожает, но определённая закалка в виде полученных базовых знаний остаётся. Поэтому системе Linux, создаваемой в статье, я дал кодовое название Robinson Linux.

Я надеюсь, что после прочтения статьи вам будет гораздо проще собрать Linux для другого одноплатного компьютера, например, Orange Pi.

Кому интересно погрузиться в embedded-разработку, добро пожаловать под кат.

Читать далее

Собираем Linux, который весит меньше, чем мем с котиком, ну или почти…

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели38K

Мне всегда было интересно, насколько минимальным может быть Linux.

Три года назад я уже публиковал статью, но понимание темы меняется. Сейчас хочу освежить знания и поделиться ими.

В отличие от предыдущей статьи, в этой я рассматриваю Linux с более свежим ядром с минимальной конфигурацией на основе tinyconfig, оформленный в виде одного файла и загружаемый при помощи UEFI.

Зачем вообще нужно создавать такие сборки Linux?

Установил готовый дистрибутив или загрузился в Live — работай и изучай. Но такой подход не даёт настоящей уверенности в знаниях. Представьте: водитель и шофёр. Водитель просто ездит. Шофёр знает устройство автомобиля и может его починить.

Современные автомобили сложны — починить всё самому уже нельзя. Но вы можете открыть капот, измерить уровень масла, заменить колесо в случае прокола, установить винт для буксировочного троса и т. д. Так же и с Linux: коммерческий дистрибутив вы вряд ли соберёте, но на одну ступеньку вверх по лестнице профессионализма подниметесь.

На мой взгляд, описание создания минимального Linux не должно быть большим, поэтому я старался его сделать минимально возможным, вложив максимум смысла.

Как минимальный Linux служит для понимания более сложных вещей, так и моя статья даёт базу для дальнейшего более глубокого изучения.

В комментариях к моей предыдущей статье я видел замечания, что можно использовать buildroot или книгу Linux From Scratch. Скажу только, что я преследую другие цели: собрать минимальный Linux без использования специализированных программ и сделать это как можно проще.

Всем, кого заинтересовало, добро пожаловать под кат.

Читать далее

Разбираемся с композитным видеосигналом NTSC, и стоит ли изучать его в 2025 году. Часть 2

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели21K

В предыдущей статье я рассказал об основах композитного видеосигнала NTSC. Эта статья должна быть интереснее, так как она посвящена программной генерации такого видеосигнала. Тема интересна тем, что помимо самого видеосигнала вы ещё получаете множество практических навыков применения современных микроконтроллеров.

Сигнал CVBS можно получить, используя и FPGA-решения, но стоимость их выше, чем у микроконтроллеров, таких как Raspberry Pi Pico или ESP32.

Я использовал платы разработчика на базе микроконтроллера RP2040. На рынке существует несколько таких плат. Классика — это Raspberry Pi Pico, но есть несколько китайских аналогов, например, YD-2040. Отдельно хочется выделить RP2040 Zero от Waveshare — очень компактное решение, правда у него отсутствует порт для отладки, но можно обойтись и без порта.

Важный момент — СVBS-сигнал является аналоговый, поэтому стабильность напряжение на выходе играет важную роль и для приемлемого качества сигнала китайские клоны Raspberry Pi Pico могут не подойти, так как они страдают нестабильным напряжением на выходах. Мой совет — используйте или оригинальный Raspberry Pi Pico или RP2040 Zero от Waveshare.

Желающих продолжить чтение приглашаю под кат.

Читать далее

Разбираемся с композитным видеосигналом NTSC, и стоит ли изучать его в 2025 году. Часть 1

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели19K

Раньше для генерации композитного видеосигнала требовались схемотехнические решения, а теперь задачу можно решить, используя микроконтроллер и цифроаналоговый преобразователь.

Производительности микроконтроллера хватает для генерирования сигнала с достаточной степенью дискретизации, а цифроаналоговый преобразователь можно собрать, используя минимум электронных компонентов. Естественно, качество такого композитного видеосигнала будет невысоким, но думаю, эффект «Wow» и почва для экспериментов будут обеспечены.

Идея генерации композитного сигнала может показаться банальной, так как в интернете без труда можно найти примеры генерации. Но я не встречал системного описания этой темы и хочу исправить этот недочёт. Изначально я хотел это оформить в виде одной статьи, но потом решил, что лучше это оформить в виде серии из двух статей, так как объём одной получился отпугивающим.

В школе нам давали знания, но редко говорили, где они могут пригодиться. Ещё раз я убедился, что знание — это сила. Знание линейной алгебры, тригонометрии, дифференциального исчисления, оптики, электромагнетизма, биологии, физиологии и других дисциплин позволило человечеству создать телевидение.

К сожалению, всё включить даже в серию статей невозможно, как и невозможно включить ощущения в моменты озарения, когда во вроде бы уже знакомой теме находишь что-то новое. Я надеюсь, что и читатели узнают что-то новое.

Кому интересно скоротать несколько вечеров, хочется улучшить свои знания и умения, добро пожаловать под кат.

Читать далее

Ну, погоди! Как я создал свою версию культовой игры: от схемы до корпуса

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели27K

Получив заряд эндорфинов от успешной работы эмулятора «Ну, погоди!» и вдохновившись ценными советами по улучшению эмулятора в комментариях к своей предыдущей статье, я приступил к следующему этапу — созданию полноценного устройства, готового к использованию в повседневных условиях. Этот процесс оказался не менее захватывающим, чем разработка прототипа эмулятора.

Теперь у меня сформировалось более полное понимание экосистемы разработчиков DIY-устройств, а именно: какими программами можно пользоваться и чёткое понимание этапов разработки.

Заранее хочу предупредить, что разводку на печатной плате я по-прежнему не сделал, а ограничился перфорированной макетной платой. Но чтобы «Ну, погоди!» выглядело более эстетично, поместил её в пластмассовый корпус. Если у вас нет 3D-принтера, то возможен более-менее эстетичный вариант без корпуса — далее в статье я приведу фотографию, как это можно сделать.

Читать далее
1

Информация

В рейтинге
58-й
Зарегистрирован
Активность