Перейти к содержимому
Betaflight | PINIO & PINIO Box (ПИНИО и Бокс ПИНИО)

Betaflight | PINIO & PINIO Box (ПИНИО и Бокс ПИНИО)

Технику БПЛА
Среда, 27 августа 2025

Обзор

PINIO — это абстракция простого интерфейса GPIO (General Purpose Input/Output — универсальные входы/выходы).

PINIO BOX — это механизм для привязки логических боксов (режимов) к выходам PINIO.

Большинство целевых плат (flight controllers) поддерживают настройку до четырёх выводов для функции PINIO, которыми затем можно управлять через PINIO BOX.

PINIO

Вывод микроконтроллера (MCU) можно назначить на PINIO с помощью CLI-команды resource:

resource PINIO <индекс> <ID_вывода>

Пример назначения ресурсов для PINIO:

resource PINIO 1 A01  
resource PINIO 2 A08  
resource PINIO 3 C99  
resource PINIO 4 D02

Конфигурация PINIO (PINIO CONFIG)

Конфигурация режима работы каждого вывода задаётся CLI-переменной pinio_config. Это список (массив) из 8-битных значений, разделённых запятыми.
Старший бит (MSB) указывает на инверсию сигнала, а оставшиеся 7 бит определяют режим ввода/вывода согласно описанию в drivers/pinio.h (в текущей реализации поддерживается только режим push-pull output).

КонстантаHEXDECОписание
PINIO_CONFIG_OUT_INVERTED 0x80 128 Инвертированный выход
PINIO_CONFIG_MODE_MASK 0x7F 127 Маска для режима
PINIO_CONFIG_MODE_OUT_PP 0x01 1 Выход в режиме Push-Pull (двухтактный выход)

Примечание: Значения можно комбинировать, например, инверсия плюс режим.

Пример значения pinio_config:

set pinio_config = 1,129,1,1

Это означает:

  • режим Output-Push-Pull для PINIO #1, #3 и #4
  • режим Inverted Output-Push-Pull для PINIO #2 (128 + 1 = 129)

Значение по умолчанию: 1 (Output-Push-Pull).

PINIO BOX (Бокс ПИНИО)

CLI-переменная pinio_box — это список, разделённый запятыми, из постоянных ID боксов (Permanent ID). Она связывает боксы с соответствующими выходами PINIO.

После привязки статус активации бокса (включён/выключен) отражается на состоянии связанного выхода PINIO (и, следовательно, на физическом выводе). Механизм PINIO BOX самостоятельно отслеживает состояние активации боксов и работает независимо от их основного назначения, по сути расширяя управление выходами PINIO через боксы.

Постоянные ID с 40 по 43 соответствуют пользовательским боксам USER1–USER4, которые отображаются в списках боксов на вкладке «Modes» в конфигураторе.

Пример установки pinio_box:

set pinio_box = 0,39,43,255

При такой настройке PINIO #1–#4 будут связаны с бокcами:

PINIOОписаниеПостоянный ID
1 ARM (Взведение) 0
2 VTX PIT MODE 39
3 USER4 43
4 BOXID_NONE (Не используется) 255

Таблица постоянных ID боксов (AUX-режимов) — источник msp/msp_box.c:

Бокс (Box)Режим (Mode)IDПримечания
BOXARM ARM 0  
BOXANGLE ANGLE 1  
BOXHORIZON HORIZON 2  
BOXALTROLD ALTITUDE HOLD 3 добавлено в 4.6
BOXANTIGRAVITY ANTI GRAVITY 4  
BOXMAG MAG 5  
BOXHEADFREE HEADFREE 6  
BOXHEADADJ HEADADJ 7  
BOXCAMSTAB CAMSTAB 8  
BOXCAMTRIG CAMTRIG 9 удален
BOXGPSHOME GPS HOME 10 удален
BOXPOSHOLD POSITION HOLD 11 добавлено в 4.6
BOXPASSTHRU PASSTHRU 12  
BOXBEEPERON BEEPER 13  
BOXLEDMAX LEDMAX 14 удален
BOXLEDLOW LEDLOW 15  
BOXLLIGHTS LLIGHTS 16 удален
BOXCALIB CALIB 17  
BOXGOV GOVERNOR 18 удален
BOXOSD OSD DISABLE SW 19  
BOXTELEMETRY TELEMETRY 20  
BOXGTUNE GTUNE 21 удален
BOXRANGEFINDER RANGEFINDER 22 удален
BOXSERVO1 SERVO1 23  
BOXSERVO2 SERVO2 24  
BOXSERVO3 SERVO3 25  
BOXBLACKBOX BLACKBOX 26  
BOXFAILSAFE FAILSAFE 27  
BOXAIRMODE AIR MODE 28  
BOX3D DISABLE / SWITCH 3D 29  
BOXFPVANGLEMIX FPV ANGLE MIX 30  
BOXBLACKBOXERASE BLACKBOX ERASE (>30s) 31  
BOXCAMERA1 CAMERA CONTROL 1 32  
BOXCAMERA2 CAMERA CONTROL 2 33  
BOXCAMERA3 CAMERA CONTROL 3 34  
BOXFLIPOVERAFTERCRASH FLIP OVER AFTER CRASH 35  
BOXPREARM PREARM 36  
BOXBEEPGPSCOUNT BEEP GPS SATELLITE COUNT 37  
BOX3DDISABLESWITCH 3D ON A SWITCH 38 удален
BOXVTXPITMODE VTX PIT MODE 39  
BOXUSER1 USER1 40  
BOXUSER2 USER2 41  
BOXUSER3 USER3 42  
BOXUSER4 USER4 43  
BOXPIDAUDIO PID AUDIO 44  
BOXPARALYZE PARALYZE 45  
BOXGPSRESCUE GPS RESCUE 46  
BOXACROTRAINER ACRO TRAINER 47  
BOXDISABLEVTXCONTROL DISABLE VTX CONTROL 48  
BOXLAUNCHCONTROL LAUNCH CONTROL 49  
BOXMSPOVERRIDE MSP OVERRIDE 50  

Примечание: Значение 255 определено как BOXID_NONE и означает, что слот PINIO не используется.


Примеры использования

Включение/выключение устройств

Многие встроенные или внешние устройства/модули имеют специальный провод для включения/выключения. Поведение зависит от устройства:

  • Некоторым требуется подать сигнал HIGH (логическую 1, примерно 3.3 В) на этот провод для включения.
  • Другим требуется сигнал LOW (логический 0, примерно 0 В) для включения.

Обязательно изучите документацию вашего устройства для правильного подключения.

Поиск предопределённых функций PINIO

Некоторые полётные контроллеры поставляются с заранее настроенными PINIO, например для переключения камеры, подачи питания VTX или управления встроенным Bluetooth.

Используйте команду resource на работающей плате для просмотра назначения выводов:

resource PINIO 1 B00

Это означает, что PINIO #1 назначен на вывод B00. Для добавления новых PINIO не удаляйте существующие ресурсы, а увеличивайте индекс.

Отключение встроенного Bluetooth при взведении мотора (ARM)

Большинство контроллеров с Bluetooth модулем имеют настройку по умолчанию. Пример конфигурации:

# resource
...
resource PINIO 1 B00

# get pinio_config
pinio_config = 129,1,1,1

# get pinio_box
pinio_box = 0,255,255,255

PINIO #1 назначен на вывод B00, pinio_box равен 0, что соответствует боксу BOXARM (ARM). При взведении бокс активируется.

pinio_config равно 129 (128 + 1), то есть PINIO настроен как Output-Push-Pull с инверсией. Физический сигнал на выводе инвертирован — при активации бокса сигнал LOW (~0 В).

Встроенный Bluetooth выключается подачей LOW на вывод (по проекту схемы).

Отключение внешнего Bluetooth UART-адаптера при взведении мотора (ARM)

Принцип тот же, что и для встроенного модуля. Для настройки:

  1. Выберите свободный вывод для управления устройством.
  2. Уточните, какой сигнал (HIGH или LOW) требуется для включения/выключения устройства.

Пример:

Имеется PPM-вывод B09, который освобождается для управления внешним Bluetooth-модулем с проводом POWER или ENABLE. Документация показывает, что сигнал LOW выключает модуль.

Для настройки:

resource PPM B09
resource PINIO 1 C08
resource PINIO 2 C09

resource PPM none
resource PINIO 3 B09

# get pinio_config
pinio_config = 1,1,1,1

# set pinio_config = 1,1,129,1  # Устанавливаем инверсию (129) для PINIO #3

# get pinio_box
pinio_box = 40,41,255,255

# set pinio_box = 40,41,0,255  # Привязываем PINIO #3 к боксу ARM (ID=0)

# save

Комментарий:

  • Для PINIO #3 изменяем pinio_config с 1 на 129 (инверсия), чтобы устройство выключалось при активации бокса (ARM).
  • Изменяем pinio_box с 255 на 0 (BOXARM), чтобы PINIO #3 активировался при взведении.
  • Не забывайте выполнять команду save.

Включение Bluetooth в режиме Pit Mode (VTX PIT MODE)

Идентичная настройка, но для pinio_box PINIO #3 устанавливаем 39 (BOXVTXPITMODE), чтобы Bluetooth включался при активации Pit Mode.

Управление включением/выключением VTX с пульта с помощью пользовательской функции (USERn)

Цель — управлять питанием VTX с помощью переключателя на пульте.

Требуется:

  • VTX с выводом для включения/выключения (POWER / ENABLE)
  • Функция на плате контроллера, позволяющая отключать питание VTX (готовый модуль типа RealPit или самодельная схема с транзистором)
  • Использование одного из боксов BOXUSER<n> (ID 40–43), который появится на вкладке Modes и может быть назначен на канал пульта

Пример:

# resource
resource PPM B03

# resource PPM none  # освобождаем ресурс PPM

# resource PINIO 1 B03  # назначаем вывод B03 на PINIO #1

# get pinio_box
pinio_box = 255,255,255,255

# set pinio_box = 40,255,255,255  # привязываем PINIO #1 к боксу USER1 (ID=40)

# save

Комментарий:

  • pinio_config менять не требуется — значение по умолчанию 1 (Output-Push-Pull) подходит для включения по сигналу HIGH.
  • Первое значение pinio_box устанавливается в 40 (BOXUSER1), так как это первая пользовательская функция.
  • После сохранения в конфигураторе на вкладке Modes появится режим USER1, который можно привязать к каналу пульта.
  • Не забудьте выполнить save.

Ключевые термины и пояснения

  • PINIO (ПИНИО): Абстракция GPIO вывода для универсального управления.
  • PINIO BOX (Бокс ПИНИО): Механизм привязки логических режимов (боксов) к физическим выводам PINIO.
  • CLI (Command Line Interface): Интерфейс командной строки для настройки полётного контроллера.
  • Resource (Ресурс): Команда CLI для назначения физических выводов микроконтроллера на логические функции.
  • Box (Бокс / Режим): Логическое состояние (например, ARM, ANGLE, USER1), которое можно включить или выключить с помощью переключателя на пульте или автоматически.
  • Permanent ID (Постоянный ID): Уникальный числовой идентификатор бокса.
  • ARM (Взведение): Режим, когда двигатели коптера готовы к работе (обычно активируется стиком или переключателем).
  • VTX (Video Transmitter): Видеопередатчик.
  • Pit Mode: Режим пониженной мощности VTX (часто для соблюдения правил или экономии энергии на земле).
  • Push-Pull Output (Двухтактный выход): Тип выхода цифровой логики, способный явно выдавать и высокий (HIGH), и низкий (LOW) уровень.
  • Inverted (Инвертированный): Состояние физического вывода, противоположное логическому состоянию бокса (HIGH при выключенном боксе, LOW при включённом).
  • BOXID_NONE (255): Значение, указывающее, что слот PINIO не используется.
  • USER1 - USER4: Пользовательские боксы/режимы, которые можно свободно назначать для управления через PINIO.

Техническое руководство: Управление периферийными устройствами БПЛА через PinIO в Betaflight

1. Введение и принцип работы

Функция PinIO позволяет программно управлять состоянием свободных контактов (пинов) полётного контроллера (FC), привязывая их к виртуальным "пользовательским режимам". Эти режимы, в свою очередь, активируются переключателями на пульте. Таким образом, при переключении тумблера на пульте соответствующий пин на FC подает сигнал (3.3V), который можно использовать для управления питанием или сигнальными входами периферийных устройств.

Примечание: Для управления камерой обычно требуется два независимых сигнала: один для включения/выключения питания камеры, второй для старта/стопа записи. Для этого потребуется два свободных пина и два переключателя AUX.

2. Определение свободных контактов на полётном контроллере

Первым шагом необходимо найти физически свободные и программно не занятые контакты на плате FC.

Визуальный осмотр

Найдите свободные контактные пады на плате. Часто хорошими кандидатами являются незадействованные выводы UART (например, TX/RX R11, T11), лишние выходы для моторов (Motor 5, 6) или контакты для LED-ленты.

bandicam_2025-08-27_19-42-13-239.jpg

Проверка в CLI

Подключите FC к Betaflight Configurator и перейдите во вкладку CLI.

Выполните команду:

resource

Эта команда выведет список всех ресурсов контроллера и их текущее назначение.

bandicam_2025-08-27_20-01-48-645.jpg

Проанализируйте список. Исключите из рассмотрения пины, которые уже используются (например, serial_rx, serial_tx, motor, led).

Найдите подходящие свободные пины. В примере используются пады R11 ( в списке ресурсов - serial_rx) и T11 (serial_tx). Их обозначение в ресурсах будет выглядеть как контакты B10 или A00 (точные названия зависят от FC).

bandicam_2025-08-27_19-52-40-461.jpg

Обозначение выводов контроллера

3. Освобождение и переназначение выбранных ресурсов

Если выбранный пин ранее был назначен на другую функцию (например, как UART), его необходимо освободить.

Внимание! Прежде чем вносить изменения, выполните команду diff all и сохраните вывод в текстовый файл для возможности отката.

Освобождение ресурсов

В CLI выполните команды для освобождения ресурсов. Например, для освобождения пина serial_rx 11 и serial_tx 11:

resource SERIAL_RX 11 NONE 
resource SERIAL_TX 11 NONE

(Замените 11 на номер используемого ресурса, который вы нашли в шаге 2)

Сохранение изменений

Выполните команду:

save

для сохранения изменений и перезагрузки контроллера.

4. Настройка виртуальных режимов PinIO

Функция PinIO использует четыре слота (0-3) для создания до четырех пользовательских режимов.

!!! При настройке мы всегда обращаемся ко всем четырем.

Например:

bandicam_2025-08-27_20-15-45-240.jpg

set pinio_box = 0, 39, 43, 255

Проверка предустановок

Перед настройкой проверьте, не используются ли слоты PinIO другими функциями вашей прошивки:

get pinio_config 
get pinio_box

Если значения не равны 255 (значение по умолчанию, означающее "не используется"), возможно, их не нужно изменять. В противном случае настраивайте свободные слоты.

Назначение пинов режимам

Свяжите физический пин с одним из четырех слотов PinIO. Например, чтобы назначить пин B10 на слот 0:

set pinio_config = 0, 1, 255, 255
  • 0 - номер слота PinIO
  • 1 - номер физического пина (здесь 1 соответствует B10, уточните номер для вашего FC через команду resource)
  • 255 - неиспользуемые слоты

Определение логики активации (pinio_box)

Задайте, к какому режиму работы БПЛА будет привязана активация пина. Чаще всего его привязывают к состоянию виртуального "пользовательского режима".

set pinio_box = 40, 41, 255, 255
  • 40 - идентификатор для создания первого пользовательского режима (User 1)
  • 41 - идентификатор для второго пользовательского режима (User 2)

Сохранение настроек

Выполните команду:

save

5. Настройка вкладки "Modes" в Configurator

После перезагрузки в графическом интерфейсе Betaflight на вкладке Modes появятся новые режимы: User 1 и User 2 (или больше, в зависимости от настройки).

bandicam_2025-08-27_20-30-27-742.jpg

Назначение переключателей

Назначьте каждому из этих режимов отдельный переключатель AUX на вашем пульте.

bandicam_2025-08-27_20-33-23-153.jpg

Рекомендуемая логика

Для управления камерой:

  • User 1: Назначьте для управления записью (старт/стоп). Например, среднее положение переключателя - запись, нижнее - пауза.
  • User 2: Назначьте для управления питанием камеры. Например, нижнее положение - питание включено, верхнее - выключено.

6. Физическое подключение и проверка

Пайка

Припаяйте сигнальные провода к выбранным вами контактным падам на FC (в нашем примере это бывшие R11 и T11).

Проверка мультиметром

Подайте питание на БПЛА.

Переключайте назначенные AUX-переключатели.

С помощью мультиметра убедитесь, что при активации соответствующего пользовательского режима на физическом пине появляется напряжение 3.3V, а при деактивации оно пропадает.

Подключение к камере

Подключите этот сигнальный провод к соответствующему контакту на камере или платах управления (например, к контакту "Remote" на GoPro). Второй провод (землю) соедините с GND на FC.

Краткий алгоритм действий:

  1. Найти свободный пин (resource)
  2. Освободить его, если он занят (resource ... NONE)
  3. Назначить пин на слот PinIO (pinio_config)
  4. Привязать слот PinIO к пользовательскому режиму (pinio_box)
  5. Назначить переключатель AUX на новый режим во вкладке Modes
  6. Припаять провод и проверить напряжение
  7. Подключить к управляемому устройству
Важно: Данные инструкции являются общими. Точные названия пинов (например, B10, A00) всегда необходимо сверять для конкретной модели полётного контроллера с помощью команды resource.
Betaflight | PINIO & PINIO Box (ПИНИО и Бокс ПИНИО) Внешние URLs: ID 240
  • Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)

    Betaflight 4.6 представляет функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold). Эти функции позволяют пилоту использовать тумблер для включения функции зависания дрона в фиксированном месте и на постоянной высоте в режиме Angle. Стики можно использовать для регулировки высоты и положения. Обязательно требуется GPS, а использование магнитометра (компаса) настоятельно рекомендуется.