Гид по технологиям

Постройте собственный Stream Deck на Raspberry Pi Pico

10 min read DIY электроника Обновлено 09 Jan 2026
DIY Stream Deck на Raspberry Pi Pico
DIY Stream Deck на Raspberry Pi Pico

Фотография готового Stream Deck

Если вы только начали стримить на Twitch или хотите ускорить рабочие процессы, вы, вероятно, видели Elgato Stream Deck и похожие устройства. Они удобны для переключения сцен в OBS, отправки сообщений в соцсети или управления чатом. Но фирменные устройства часто дорогие.

Хорошая новость: вы можете сделать похожий контроллер примерно за долю стоимости, используя недорогой микроконтроллер Raspberry Pi Pico и несколько механических переключателей. Эта статья объясняет: что такое макро-пэд, какие детали нужны, как паять и подключать, как установить CircuitPython и как назначать макросы для OBS и других программ.

Что такое макро-пэд

Готовый макропэд — вид сверху

Макро-пэд — это панель из кнопок, каждая из которых отправляет заранее запрограммированное действие или комбинацию клавиш. Удобный пример: вместо нажатия Ctrl+C на клавиатуре вы можете нажать одну кнопку на макро-пэде, и устройство отправит сочетание клавиш за вас. С таким контроллером можно запускать/останавливать стрим, переключать сцены, управлять ПК и приложениями.

Главное преимущество самостоятельной сборки: вы получаете устройство с нужным вам набором кнопок и возможностью кастомизации — например, добавить RGB-индикацию или OLED-дисплей — при гораздо меньших затратах, чем у коммерческих аналогов.

Что потребуется

Фото комплектующих на столе

Список деталей и инструментов (локализация и пояснения):

  • 1× Raspberry Pi Pico (микроконтроллер на RP2040).
  • 9× механических переключателей Gateron (обычно MX-совместимые).
  • 9× крышек (keycaps) под переключатели.
  • Паяльник и паяльная станция.
  • Олово для пайки.
  • 4× винта M3 × 16 мм для крепления корпуса.
  • Провода 20 AWG (примерно 0,6 мм²), около 60 см суммарно.
  • Съёмник изоляции (стружка) или бокорезы.
  • Компьютер для программирования Pico (Windows/macOS/Linux).
  • Корпус: 3D-печатный, покупной или вырезанный/собранный вручную.
  • Кабель USB‑C (или micro‑USB, в зависимости от платы/кабеля).

Если у вас есть 3D‑принтер, вы можете напечатать корпус и даже некоторые крепления самостоятельно. В противном случае корпуса легко заказать онлайн.

Важно: пайка требует аккуратности. Паяльник может нагреваться до ~450 °C; соблюдайте технику безопасности и используйте защиту глаз и вытяжку.

Важно: Если вы не уверены в пайке или работе с электроникой, попросите помощника с опытом.

Краткая схема проекта и рабочий процесс

Все провода припаяны к Pi Pico

Общая последовательность работ:

  1. Установить и припаять переключатели в корпусе.
  2. Сформировать общую шину земли/питания (в статье используется общая «черная» шина).
  3. Припаять сигнальные провода переключателей к соответствующим GPIO на Pico.
  4. Установить CircuitPython, загрузить необходимые библиотеки и готовый код.
  5. Протестировать кнопки, собрать корпус и закрепить винтами.
  6. Настроить горячие клавиши в OBS и других приложениях.

Подробные шаги

Шаг 1: монтаж и пайка переключателей

Начните с установки переключателей в верхнюю часть корпуса. Зафиксируйте их и подготовьте контакты для пайки (припайте на каждую ножку по короткому отрезку провода). Для удобства используйте два цвета провода: красный — «сигнал», черный — «общая шина».

Припаянные контакты переключателей

Далее соберите «черную» шину в последовательность: соединяйте землю (черные провода) от первого переключателя к второму и т. д., пока не останется один длинный общий чёрный провод. Красные провода будут пущены к разным GPIO Pico — по одному на каждый переключатель.

Gateron переключатели, соединённые последовательно

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

Распиновка Pico с пометками

Затем подключите общий чёрный провод к выводу 3.3V OUT (на Raspberry Pi Pico это обозначено как 3V3) — он будет обеспечивать подтяжку/питание, когда Pico подключён к компьютеру. Убедитесь, что используете именно выход 3.3V, а не вывод EN (Enable).

Схема распиновки Raspberry Pi Pico

После пайки проводов и проверки механики — вы сделали самую трудную часть.

Советы по пайке и надёжности:

  • Делайте аккуратные короткие провода между соседними переключателями — это уменьшит помехи.
  • Используйте термоусадку или горячий клей в местах соединений для механической фиксации.
  • Проверяйте контакты мультиметром (континуитет) перед подключением питания.

Шаг 2: установка CircuitPython и загрузка кода

Загрузка файла PiPicoMain из GitHub

  1. Скачайте последнюю версию CircuitPython для Raspberry Pi Pico с официального сайта Adafruit (.UF2 файл).
  2. Скачайте проект Novaspirit (PiPicoMacroKeys) или используйте предоставленный далее код.
  3. Скачайте редактор Mu или используйте Thonny — любой редактор, который поддерживает CircuitPython.

Процедура установки CircuitPython:

  • Удерживайте кнопку Bootsel на Pico и подключите плату к компьютеру через micro‑USB/USB‑C. Должно появиться устройство RPI-RP2.
  • Перетяните файл .UF2 на это устройство. После копирования плата перезагрузится и появится как CIRCUITPY.
  • В корневой каталог CIRCUITPY скопируйте папку lib и файл code.py из проекта (или вставьте свой код).

Откройте code.py в Mu/Thonny и замените содержимое на следующий рабочий пример. Этот файл настроен на 9 кнопок и будет отправлять цифровые значения 1–9 при нажатии.

  
  
# Originally coded by Novaspirit Tech  
# Copy this code into your code.py file.   
  
import time  
import usb_hid  
from adafruit_hid.keycode import Keycode  
from adafruit_hid.keyboard import Keyboard  
import board  
import digitalio  
  
# These are the corresponding GPIOs on the Pi Pico  
# that you soldered  
  
btn1_pin = board.GP1  
btn2_pin = board.GP2  
btn3_pin = board.GP3  
btn4_pin = board.GP4  
btn5_pin = board.GP5  
btn6_pin = board.GP6  
btn7_pin = board.GP21  
btn8_pin = board.GP20  
btn9_pin = board.GP19  
  
btn1 = digitalio.DigitalInOut(btn1_pin)  
btn1.direction = digitalio.Direction.INPUT  
btn1.pull = digitalio.Pull.DOWN  
  
btn2 = digitalio.DigitalInOut(btn2_pin)  
btn2.direction = digitalio.Direction.INPUT  
btn2.pull = digitalio.Pull.DOWN  
  
btn3 = digitalio.DigitalInOut(btn3_pin)  
btn3.direction = digitalio.Direction.INPUT  
btn3.pull = digitalio.Pull.DOWN  
  
btn4 = digitalio.DigitalInOut(btn4_pin)  
btn4.direction = digitalio.Direction.INPUT  
btn4.pull = digitalio.Pull.DOWN  
  
btn5 = digitalio.DigitalInOut(btn5_pin)  
btn5.direction = digitalio.Direction.INPUT  
btn5.pull = digitalio.Pull.DOWN  
  
btn6 = digitalio.DigitalInOut(btn6_pin)  
btn6.direction = digitalio.Direction.INPUT  
btn6.pull = digitalio.Pull.DOWN  
  
btn7 = digitalio.DigitalInOut(btn7_pin)  
btn7.direction = digitalio.Direction.INPUT  
btn7.pull = digitalio.Pull.DOWN  
  
btn8 = digitalio.DigitalInOut(btn8_pin)  
btn8.direction = digitalio.Direction.INPUT  
btn8.pull = digitalio.Pull.DOWN  
  
btn9 = digitalio.DigitalInOut(btn9_pin)  
btn9.direction = digitalio.Direction.INPUT  
btn9.pull = digitalio.Pull.DOWN  
  
keyboard = Keyboard(usb_hid.devices)  
  
# below are the key values that you can change to   
# fit your preferences. Change Keycode.ONE for example to  
# (Keycode.CONTROL, Keycode.F4) for CTRL + F4   
# on the first button.   
# See the official CircuitPython docs  
# for additional help  
  
while True:  
    if btn1.value:  
        keyboard.send(Keycode.ONE)  
    time.sleep(0.1)  
    if btn2.value:  
        keyboard.send(Keycode.FOUR)  
    time.sleep(0.1)  
    if btn3.value:  
        keyboard.send(Keycode.SEVEN)  
    time.sleep(0.1)  
    if btn4.value:  
        keyboard.send(Keycode.TWO)  
    time.sleep(0.1)  
    if btn5.value:  
        keyboard.send(Keycode.FIVE)  
    time.sleep(0.1)  
    if btn6.value:  
        keyboard.send(Keycode.EIGHT)  
    time.sleep(0.1)  
    if btn7.value:  
        keyboard.send(Keycode.THREE)  
    time.sleep(0.1)  
    if btn8.value:  
        keyboard.send(Keycode.SIX)  
    time.sleep(0.1)  
    if btn9.value:  
        keyboard.send(Keycode.NINE)  
    time.sleep(0.1)  
time.sleep(0.1)  
  
  

Пояснения к коду (коротко):

  • import usb_hid, adafruit_hid.* — обеспечивают работу HID‑клавиатуры по USB.
  • digitalio и board — позволяют читать состояние GPIO.
  • Каждый btnX — это DigitalInOut с подтяжкой вниз (Pull.DOWN). При нажатии контакт замыкается и btn.value становится True.
  • keyboard.send(Keycode.X) — отправляет одно или несколько нажатий клавиш. Можно использовать модификаторы: Keyboard.send(Keycode.CONTROL, Keycode.F4).

Советы по доработке кода:

  • Добавьте антидребезг (debounce): при срабатывании кнопки ждите 30–50 мс и проверяйте повторное состояние.
  • Для долгих нажатий и двухкнопочных комбинаций реализуйте таймеры и флаги в коде.
  • Если нужно много макросов и логики — храните конфигурацию в отдельном файле на CIRCUITPY (например, config.json).

Шаг 3: тестирование и сборка

Редактор кода Thonny с открытым файлом

Откройте текстовый редактор и по очереди нажимайте кнопки — они должны вводить цифры 1–9. Если кнопки не срабатывают:

  • проверьте пайку и контактность проводов;
  • убедитесь, что CIRCUITPY содержит правильный code.py и lib;
  • проверьте, что общий провод подключён к 3.3V OUT, а не к EN;
  • используйте мультиметр для проверки питания и сигналов.

Если всё работает, отключите Pico и соберите корпус. Корпус можно зафиксировать защёлками или винтами M3.

Шаг 4: назначение макросов в приложениях (OBS пример)

Задняя панель макропэда

В OBS: Settings → Hotkeys → выберите действие, кликните по полю и нажмите нужную кнопку на макро-пэде. Нажмите ОК для сохранения.

Советы по использованию с OBS и потоковыми программами:

  • Настройте отдельные клавиши для «Start Streaming», «Stop Streaming», «Start Recording», «Switch Scene 1/2/…».
  • Для сложных последовательностей используйте комбинации клавиш (например, ALT+SHIFT+S) или макрокоманду в коде Pico.
  • Для приложений, которые не принимают чистые HID‑команды, используйте программное обеспечение-обёртку (например, AutoHotkey на Windows), которое поймает отправленную цифру и выполнит скрипт.

Дополнительные варианты и расширения

Это место, где DIY даёт преимущество. Ниже — идеи для улучшений и альтернатив:

  • Альтернатива плате: Pro Micro (ATmega32u4) или Raspberry Pi RP2040 в другом исполнении.
  • Использование QMK/VIAL на клавиатурных контроллерах для более гибкой прошивки.
  • Добавление OLED экрана для подписи кнопок (I2C OLED 128×32).
  • Подсветка RGB под каждой кнопкой (WS2812 или APA102 — потребует отдельного питания и транзисторов).
  • Модуль энкодера (колесико) для прокрутки громкости или перехода сцен.

Совместимость и миграция:

  • CircuitPython обеспечивает быструю разработку и простоту, но для продвинутых проектов QMK даёт больше контроля и эффективности.
  • Если вы планируете использовать много RGB‑светодиодов, рассмотрите внешний источник питания и транзисторный драйвер, чтобы не перегружать 3.3V Pico.

Частые проблемы и способы их решения

  • Кнопки «тапают» дважды: добавьте антидребезг (debounce), увеличьте задержку в коде или фильтруйте импульсы программно.
  • Плата не определяется как CIRCUITPY: повторно установите .UF2, удерживая Bootsel.
  • Программа не получает нажатия: убедитесь, что в коде используется adafruit_hid и Keyboard(usb_hid.devices).

Как кастомизировать макросы — практические примеры

Примеры назначений, которые ускоряют стрим- и рабочие сценарии:

  • Кнопка 1: Начать/остановить запись (OBS hotkey «Start/Stop Recording»).
  • Кнопка 2: Сцена «Начало стрима».
  • Кнопка 3: Сцена «Игра».
  • Кнопка 4: «Паник‑кнопка» — сворачивает все окна (Win+D на Windows).
  • Кнопка 5: Быстрое открытие браузера (через AutoHotkey или сочетание клавиш).
  • Кнопки для инструментов редактирования: смена размера кисти, лезвие в редакторе видео.

Примеры изменения кода для модификатора:

  • Отправка CTRL+F4: keyboard.send(Keycode.CONTROL, Keycode.F4)
  • Отправка ALT+TAB (для переключения окон): keyboard.send(Keycode.ALT, Keycode.TAB)

Мини-методология: как спроектировать макро-пэд для себя

  1. Определите сценарии использования: стрим, монтаж, офисная работа.
  2. Выберите количество кнопок: 6/9/12/15 в зависимости от сценариев.
  3. Разбейте задачи по приоритету: 1–3 для самых частых, 4–6 реже и т. д.
  4. Протестируйте прототип в виде бумажной схемы (расположение и размеры кнопок).
  5. Соберите первую версию, используйте в течение недели и корректируйте назначения.

Ролевые чеклисты

Чеклист сборщика (аппаратная часть):

  • Провести ревизию деталей (Pico, переключатели, провода).
  • Смонтировать переключатели в корпус.
  • Припаять сигнальные провода и общую шину.
  • Проверить пайки мультиметром.
  • Подключить Pico и проверить питание.

Чеклист стримера (настройка ПО):

  • Установить CircuitPython и нужные библиотеки.
  • Загрузить code.py и протестировать кнопки.
  • Настроить горячие клавиши в OBS/других приложениях.
  • Проверить взаимодействие с дополнительным ПО (AutoHotkey, Stream Deck software).

Критерии приёмки

  • Все 9 кнопок корректно распознаются и отправляют назначенные клавиши.
  • Нет ложных срабатываний при тестировании (тест 100 нажатий — не более 1% сбоев).
  • Корпус надёжно закрывается, провода не натягиваются.
  • При подключении к целевой машине устройство определяется как клавиатура HID.

Замеры и ключевые параметры (факт-бокс)

  • Количество кнопок: 9 (в примере).
  • Питание: 3.3 V от Pico при подключении по USB.
  • Интерфейс: USB HID — работает без драйверов как клавиатура.

Когда эта идея не подойдёт (контрпримеры)

  • Если вам нужен полноцветный дисплей с программируемыми мини-иконками под каждой кнопкой и сложными скриптами — коммерческий Stream Deck или собственная плата с OLED будет проще.
  • Если вам нужна полная безаппаратная интеграция с облаком и сетевыми API — устройство на USB/HID ограничено локальными действиями; придётся комбинировать его с программной прослойкой.

Руководство по откату и устранению проблем (runbook)

  1. Устройство не распознаётся: перепрошейте .UF2, удерживая Bootsel.
  2. Кнопки не срабатывают: проверить пайку и проводку, а затем код — убедиться, что назначенные GPn совпадают.
  3. Частые ложные срабатывания: добавить антидребезг в код, заменить переключатель или почистить контакты.

Таблица соответствия клавиш (шаблон для планирования)

Номер кнопкиНазначениеОтправляемая комбинация
1Start/Stop RecordingKeycode.CONTROL, Keycode.R
2Scene — IntroKeycode.F1
3Scene — GameKeycode.F2
4PanicKeycode.WINDOWS, Keycode.D
5Open BrowserKeycode.CONTROL, Keycode.N
6Mute MicKeycode.F8
7Next SceneKeycode.PAGE_DOWN
8Previous SceneKeycode.PAGE_UP
9Custom / MacroKeycode.ALT, Keycode.F4

Вы можете сохранить эту таблицу как шаблон и заполнить под свои задачи.

Безопасность и соображения о конфиденциальности

  • Устройство посылает симулированные нажатия клавиш — следите за тем, куда вы направляете эти действия (чтобы не закрыть важные окна или не отправить приватное сообщение).
  • Нет необходимости передавать персональные данные на устройство; конфигурация может храниться локально на CIRCUITPY.

FAQ

Подойдёт ли другой микроконтроллер вместо Pico?

Да. Можно использовать Pro Micro (ATmega32u4) или другие контроллеры с поддержкой USB HID. CircuitPython удобен на Pico, но альтернативы дают свои преимущества.

Можно ли обойтись без пайки?

Да, существуют варианты на макетной плате с пружинными клеммами или перфорированной плате, но пайка даёт надежность.

Сколько стоит собрать такой макропэд?

Точные цены зависят от магазина и страны. Компоненты в целом стоят значительно дешевле фирменных Stream Deck’ов, особенно если у вас есть доступ к 3D‑печати.

Можно ли добавить экранчики под кнопки?

Да, можно разместить OLED или маленькие TFT-экраны, но это усложнит схему и код — потребуется управление экраном по I2C/SPI и дополнительные ресурсы микроконтроллера.

Краткое резюме

  • Собрать макро-пэд на Raspberry Pi Pico можно бюджетно и достаточно быстро.
  • Проект полезен как для стримеров, так и для людей, желающих ускорить рутинные операции.
  • Основные шаги: пайка переключателей → установка CircuitPython → загрузка кода → тест → настройка горячих клавиш в приложениях.

Важно: всегда проверяйте пайку и используйте антидребезг в программном обеспечении. Проект легко масштабируется: больше кнопок, RGB, экран — всё зависит от ваших потребностей.

Удачной сборки и приятных стримов!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство