Troyka HAT: подключение, настройка и начало работы

Плата расширения Troyka HAT поможет подключить модули форм-фактора Troyka к одноплатникам Raspberry Pi без дополнительных проводов и макетных плат.

Платформа Troyka HAT также расширит возможности малинки, ведь у неё на борту расположен I²C-расширитель портов на микроконтроллере STM32F030F4P6 с вычислительным ядром ARM Cortex M0. Контроллер даёт восемь дополнительных пинов ввода-вывода с аппаратной поддержкой 12-битного АЦП и 16-битного ШИМ.

Подключение и настройка

Дисплей выполнен специально для компьютеров Raspberry Pi. В качестве примера приведем настройку на малинке Pi 4 Model B.

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

Аппаратная часть

Что понадобится

Сборка устройства

  1. Установите Troyka HAT сверху на Raspberry Pi.
  2. Подключите питание к DC-разъёму на Troyka HAT.

При использовании платы расширения Troyka HAT не подключайте питания через разъём USB на Raspberry Pi.

Программная часть

  1. Просмотрите подключённые I²C-устройства:
    sudo i2cdetect -y 1

    Сканер должен найти адрес 0x2a, который является I²C-адресом расширителя портов по умолчанию.

  2. Установите библиотеку TroykaHatPython для работы с платой Amperka Troyka HAT:
    pip3 install troykahat

На этом настройка закончена, теперь смело переходите к экспериментам.

Примеры работы

Имена пинов на Troyka HAT относятся к нумерации Wiring Pi, которая отличается от стандартной нумерации BCM, как например в стартовом наборе Малина. Для удобства в примерах ниже будем использовать именно нумерацию Wiring Pi. А все подробности распиновки вы можете найти в соответствующем разделе.

Маячок на WiringPi IO

Для начала мигнём светодиодом на группе контактов «Wiring Pi IO».

Что понадобится

Схема устройства

Код для Python

blink_led_wiringpi_io.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
# Библиотека для работы с функциями времени.
from time import sleep
 
 
# Назначаем константное имя пину 7 из группы "Wiring PI IO",
# Подключите светодиод к этому пину.
PIN_WP_LED = 7
 
 
# Создаём объект wp для работы с пинами,
# помеченными как «Wiring Pi IO» на плате Troyka HAT.
# Это пины, подключенные напрямую к Raspberry Pi через его GPIO-разъём.
wp = troykahat.wiringpi_io()
# Конфигурируем контакт "PIN_WP_LED" в режим выхода.
wp.pinMode(PIN_WP_LED, wp.OUTPUT)
 
while True:
 
    # Зажигаем светодиод
    wp.digitalWrite(PIN_WP_LED, True)
    # Ждём 500 мс
    sleep(0.5)
    # Гасим светодиод
    wp.digitalWrite(PIN_WP_LED, False)
    # Ждём 500 мс
    sleep(0.5)

После запуска скрипта, светодиод начнёт мигать раз в пол секунды.

Маячок на Analog IO

Продолжим, теперь мигнём светодиодом на группе контактов «Analog IO».

Что понадобится

Схема устройства

Код для Python

blink_led_analog_io.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
# Библиотека для работы с функциями времени.
from time import sleep
 
# Назначаем константное имя пину 7 из группы "Analog IO",
# Подключите светодиод к этому пину.
PIN_AP_LED = 7
 
 
# Создаём объект ap для работы с пинами,
# помеченными как «Analog IO» на плате Troyka HAT.
# Это пины, подключенные к встроенному на плате I²C расширителю
# на микроконтроллере STM32F030F4P6.
ap = troykahat.analog_io()
# Конфигурируем контакт "PIN_AP_LED" в режим выхода.
ap.pinMode(PIN_AP_LED, ap.OUTPUT)
 
while True:
 
    # Зажигаем светодиод
    ap.digitalWrite(PIN_AP_LED, True)
    # Ждём 500 мс
    sleep(0.5)
    # Гасим светодиод
    ap.digitalWrite(PIN_AP_LED, False)
    # Ждём 500 мс
    sleep(0.5)

После запуска скрипта, светодиод начнёт мигать раз в пол секунды.

Дабл Маячок

Соединим два скрипта: один светодиод подключим к группе контактов «WiringPi IO», а второй — к «Analog IO».

Что понадобится

Схема устройства

Код для Python

blink_led_multiple.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
# Библиотека для работы с функциями времени.
from time import sleep
 
# Назначаем константное имя пину 7 из группы "Wiring PI IO",
# Подключите красный светодиод к этому пину.
PIN_WP_LED = 7
# Назначаем константное имя пину 7 из группы "Analog IO",
# Подключите зеленый светодиод к этому пину.
PIN_AP_LED = 7
 
 
# Создаём объект wp для работы с пинами,
# помеченными как «Wiring Pi IO» на плате Troyka HAT.
# Это пины, подключенные напрямую к Raspberry Pi через его GPIO-разъём.
wp = troykahat.wiringpi_io()
# Создаём объект ap для работы с пинами,
# помеченными как «Analog IO» на плате Troyka HAT.
# Это пины, подключенные к встроенному на плате I²C расширителю
# на микроконтроллере STM32F030F4P6.
ap = troykahat.analog_io()
# Конфигурируем контакт "PIN_WP_LED" в режим выхода.
wp.pinMode(PIN_WP_LED, wp.OUTPUT)
# Конфигурируем контакт "PIN_AP_LED" в режим выхода.
ap.pinMode(PIN_AP_LED, ap.OUTPUT)
 
while True:
 
    # Зажигаем светодиод на контакте "PIN_WP_LED"
    wp.digitalWrite(PIN_WP_LED, True)
    # Зажигаем светодиод на контакте "PIN_AP_LED"
    ap.digitalWrite(PIN_AP_LED, True)
    # Ждём 500 мс
    sleep(0.5)
    # Гасим светодиод на контакте "PIN_WP_LED"
    wp.digitalWrite(PIN_WP_LED, False)
    # Гасим светодиод на контакте "PIN_AP_LED"
    ap.digitalWrite(PIN_AP_LED, False)
    # Ждём 500 мс
    sleep(0.5)

После запуска скрипта, светодиоды начнут мигать раз в пол секунды.

Кнопочный выключатель

В продолжении соберем простой кнопочный выключатель.

Что понадобится

Схема устройства

Код для Python

toogle_led.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
 
 
# Назначаем константное имя пину 7 из группы "Wiring PI IO",
# Подключите светодиод к этому пину.
PIN_WP_LED = 7
# Назначаем константное имя пину 22 из группы "Wiring PI IO",
# Подключите кнопку к этому пину.
PIN_WP_BUTTON = 22
 
# Создаём объект wp для работы с пинами,
# помеченными как «Wiring Pi IO» на плате Troyka HAT.
# Это пины, подключенные напрямую к Raspberry Pi через его GPIO-разъём.
wp = troykahat.wiringpi_io()
# Конфигурируем контакт "PIN_WP_LED" в режим выхода.
wp.pinMode(PIN_WP_LED, wp.OUTPUT)
# Конфигурируем контакт "PIN_WP_BUTTON" в режим входа.
wp.pinMode(PIN_WP_BUTTON, wp.INPUT)
 
while True:
 
    # Если кнопка нажата
    if not wp.digitalRead(PIN_WP_BUTTON):
        # Зажигаем светодиод
        wp.digitalWrite(PIN_WP_LED, True)
    # Если кнопка отжата
    else:
        # Гасим светодиод
        wp.digitalWrite(PIN_WP_LED, False)

Если кнопка нажата — светодиод загорится, а если отжата — погаснет.

Светильник с управляемой яркостью

Далее соберем светильник с управляемой яркостью. К сожалению в Raspberry Pi всего два канала ШИМ, а АЦП вовсе отсутствует. Однако порты «Analog IO» на плате Troyka HAT с отдельным контроллером подарят малинке 8 пинов с поддержкой ШИМ и АЦП.

Что понадобится

Схема устройства

Код для Python

dimming_led.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
 
 
# Назначаем константное имя пину 6 из группы "Analog IO",
# Подключите светодиод к этому пину.
PIN_AP_LED = 6
# Назначаем константное имя пину 3 из группы "Analog IO",
# Подключите потенциометр к этому пину.
PIN_AP_POT = 3
 
# Создаём объект ap для работы с пинами,
# помеченными как «Analog IO» на плате Troyka HAT.
# Это пины, подключенные к встроенному на плате I²C расширителю
# на микроконтроллере STM32F030F4P6.
ap = troykahat.analog_io()
# Конфигурируем контакт "PIN_AP_LED" в режим выхода.
ap.pinMode(PIN_AP_LED, ap.OUTPUT)
# Конфигурируем контакт "PIN_AP_INPUT" в режим входа.
ap.pinMode(PIN_AP_POT, ap.INPUT)
 
while True:
 
    # Считываем данные с потенциометра
    potValue = ap.analogRead(PIN_AP_POT)
    # Указываем полученные данные в качестве яркости светодиода
    ap.analogWrite(PIN_AP_LED, potValue)

После запуска скрипта, яркость светодиода будет меняться в зависимости от перемещения ползунка слайдера.

Аналоговая регулировка громкости

Выйдем за рамки светодиодной робототехники. Сделаем аналоговую регулировку громкости одноплатника Raspberry Pi.

Что понадобится

Схема устройства

Установка дополнений

Установите библиотеку pyalsaaudio для контроля уровня громкости:

pip3 install pyalsaaudio

Код для Python

analog_control_volume.py
# Библиотека для работы с платой Troyka HAT.
import troykahat
# Библиотека для контроля уровня громкости
import alsaaudio
# Назначаем константное имя пину 3 из группы "Analog IO",
# Подключите потенциометр к этому пину.
PIN_AP_POT = 3
# Создаём объект ap для работы с пинами,
# помеченными как «Analog IO» на плате Troyka HAT.
# Это пины, подключенные к встроенному на плате I²C расширителю
# на микроконтроллере STM32F030F4P6.
ap = troykahat.analog_io()
# Создаём объект для работы с регулировкой громкости
mixer = alsaaudio.Mixer('Master')
 
while True:
    # Считываем данные с потенциометра
    potValue = ap.analogRead(PIN_AP_POT)
    # Умножаем полученное значение со слайдера на 100
    # и преобразовываем переменную float в int
    volume = int(potValue * 100)
    # Устанавливаем громкость
    mixer.setvolume(volume)

Громкость в операционной системы будет меняться в зависимости от перемещения ползунка слайдера.

Элементы платы

Микроконтроллер STM32F030F4P6

Raspberry Pi обладает всего двумя каналами ШИМ и не имеет аналого-цифрового преобразователя. Troyka HAT решает проблему аналоговых интерфейсов через встроенный микроконтроллер STM32F030F4P6 на архитектуре ARM Cortex M0+, который получает команды от малинки по шине I²C и дальнейшие операции по железу берет на себя. Ножки микроконтроллера выведены на соответствующую колодку Troyka-контактов I²C расширителя.

Troyka-контакты Raspberry Pi

На плате установлены группы штыревых Troyka-контактов «S-5V-G»:

  • сигнал (S) — цифровой пин Raspberry Pi с толлератностью к 5 В.
  • питание (5V) — питание модуля, постоянно и равно 5 В
  • земля (G) — общая земля

Отдельными пинами на плате выведены три группы контактов аппаратного интерфейса I²C и две группы SPI.

Колодки позволяют быстро подключать типовые Troyka-модули к малинке без дополнительных проводов и макетных плат. Подробности про сигналы и интерфейсы Troyka HAT читайте в разделе распиновка.

Troyka-контакты I²C расширителя

Пины I²C расширителя выведены на отдельную группу Troyka-контактов «S-V-G»:

  • Сигнал (S) — сигнальный пин расширителя GPIO
  • Питание (V) — питание модуля 3,3 / 5 В (выбирается джампером)
  • Земля (G) — общая земля

Колодки позволяют быстро подключать типовые Troyka-модули к малинке без дополнительных проводов и макетных плат. Подробности про сигналы и интерфейсы Troyka HAT читайте в разделе распиновка.

Выбор питания на Troyka-контактах I²C расширителя

На линии питания I²C-расширителя есть возможность выбора питания установкой джампера:

  • 5V→V — на линии V будет присутствовать напряжение 5 вольт. Режим пригодится при подключении модулей с рабочим напряжением 5 вольт, например микросервопривод FS90 или ультразвуковой дальномер SR-04.
  • 3V3→V — на линии V — 3,3 вольта. Т.к. микроконтроллер ожидает принимать диапазон входного напряжения от 0 до 3,3 вольт, то режим полезен при подключении аналоговых сенсоров, которые возвращают напряжение от 0 до значения на линии питания, например модуль потенциометр или датчик освещённости.

Светодиодная индикация

Имя светодиода Назначение
L23 Светодиод контакта 23 по нумерации WiringPi. При подачи высокого уровня — светодиод загорается, при низком — гаснет.
ACT Мигает при обмене данными между одноплатником Raspberry Pi и I²C расширителям портов. Если светодиод не мигает, скорее всего микроконтроллер не прошит.

Разъём питания DC

Коннектор DC Barrel Jack служит для подключения внешнего источника напряжения в диапазоне от 7 до 15 вольт, который будет питать одновременно Troyka HAT и подключенную Raspberry Pi. Если запитать устройство от порта Raspberry Pi, то напряжение на Troyka-контактах Raspberry Pi будет отсутствовать.

При использовании платы расширения Troyka HAT не подключайте питания через разъём USB на Raspberry Pi.

Преобразователь напряжения

Понижающий импульсный преобразователь TPS565208 обеспечивает питание Troyka HAT и подключенной Raspbeery Pi при напряжения через разъём питания DC. Диапазон входного напряжения от 7 до 15 вольт. Выходное напряжение 5 В с максимальным выходным током 5 А.

Микросхема ID EEPROM

На плате Troykaa HAT расположена микросхема EEPROM-памяти AT24C32D, которая содержит информацию о производителе платы, настройке GPIO и описание подключенного оборудования, которое позволяет Linux автоматически загружать необходимые драйверы.

Микросхема ID EEPROM одно из основных требований компании Raspberry Pi Foundation в спецификации производств плат расширения с именем Raspbery Pi HATs.

Входные пины ввода-вывода

Troyka HAT подключается к одноплатникам Rasperry Pi сверху через входной 40-пиновый разъём.

Распиновка

Принципиальная и монтажная схемы

Габаритный чертёж

Характеристики

  • Модель: Amperka Troyka HAT
  • Совместимость: компьютеры Raspberry Pi
  • Аппаратный интерфейс: штырьковые соединители GPIO
  • Программный интерфейс: контакты Raspberry Pi и I²C-расширитель
  • Входное напряжение через DC-разъём: 7–15 В
  • Размеры: 65×56,5×20,5 мм

Контакты Raspberry Pi

  • Troyka-контактов ввода-вывода общего назначения: 21
  • Troyka-контактов SPI: 3
  • Troyka-контактов I²C: 2
  • Напряжение питания периферии: 5 В
  • Напряжение логических уровней: 3,3 В (все пины толерантны к 5 В)

Контакты I²C расширителя

  • Микроконтроллер: STM32F030F4P6
  • I²C-адрес: по умолчанию 0x2A
  • Troyka-контактов ввода-вывода общего назначения: 8
  • Контактов с поддержкой ШИМ: 8
  • Разрядность ШИМ: 8 бит
  • Контактов с АЦП: 8
  • Разрядность АЦП: 12 бит
  • Напряжение питания периферии: 3,3 / 5 В (выбирается джампером)
  • Напряжение логических уровней: 3,3 В (толерантность к 5 В)

Ресурсы