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

Используйте Pimoroni Unicorn HAT Mini для отображения радужной анимации, бегущего текста и простых изображений. Unicorn — это лучший карманный генератор радуги для Raspberry Pi!

А если вы любите создавать музыку на SonicPi, то это железка точно не оставит вас равнодушным.

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

Unicorn HAT Mini совместим со всеми версиями компьютеров Raspberry Pi. В качестве примера используем одноплатный компьютер Raspberry Pi 4.

  1. Установите Unicorn сверху на Raspberry Pi через 40-контактную колодку пинов ввода-вывода.
  2. Включите шину SPI.
    sudo raspi-config nonint do_spi 0
  3. Установите библиотеку Unicorn HAT Mini для Python из менеджера пакетов PiP.
    sudo pip3 install unicornhatmini

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

Базовые примеры

По умолчанию в репозитории библиотеки присутствуют примеры для ознакомления с модулем.

  1. Скачайте примеры на Raspberry Pi c GitHub.
    git clone https://github.com/pimoroni/unicornhatmini-python
  2. Перейдите в директорию с экспериментами
    cd unicornhatmini-python/examples

Демо

Для начала проведите тест матрицы.

python3 demo.py

После запуска примера, матричный экран продемонстрирует вашим глазам свои возможности радужного свечения и завораживающих переходов.

Вывод текста

Усложним задачу, выведите бегущую цветную строку с текстом.

python3 text.py

Вывод изображения

Библиотека также позволяет отображать цветные изображения.

python3 image.py

Считывания кнопок

На плате также присутствуют четыре тактовых кнопки. Запустите следующий пример и протестируйте события на клик по каждой кнопке.

python3 button-splash.py

Это далеко не все базовые примеры, протестировать оставшиеся предлагаем самостоятельно.

Собственные примеры

Базовые примеры рассмотрели, теперь давайте попробуем создать что то своё.

Переключение цветов

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

switch-colors.py
#!/usr/bin/env python3
 
# Библиотека time для задержки
import time
# Библиотека для работы с модулем Unicorn HAT Mini
from unicornhatmini import UnicornHATMini
 
# Выводим информацию как остановить программу
print("""Press Ctrl+C to exit!""")
 
# Создаём объект для работы с матрицей
unicornhatmini = UnicornHATMini()
# Устанавливаем яркость
unicornhatmini.set_brightness(0.1)
 
while True:
    # Включаем красный цвет на RGB-светодиодах
    unicornhatmini.set_all(255, 0, 0)
    unicornhatmini.show()
    time.sleep(1)
    # Включаем зелёный цвет на RGB-светодиодах
    unicornhatmini.set_all(0, 255, 0)
    unicornhatmini.show()
    time.sleep(1)
    # Включаем синий цвет на RGB-светодиодах
    unicornhatmini.set_all(0, 0, 255)
    unicornhatmini.show()
    time.sleep(1)
    # Включаем белый цвет на RGB-светодиодах
    unicornhatmini.set_all(255, 255, 255)
    unicornhatmini.show()
    time.sleep(1)
    # Выключаем все RGB-светодиоды
    unicornhatmini.set_all(0, 0, 0)
    unicornhatmini.show()
    time.sleep(1)

Цифровые часы

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

  • В штатном режиме на плате отображается время.
  • При зажатии кнопки A, время меняется на дату. При отпускании — дата меняется на время.
  • При клике на кнопу B, меняется цвет светодиодов на случайный.
digital-clock.py
#!/usr/bin/env python3
 
# Библиотеки для работы примера
import time
import datetime
from gpiozero import Button
from unicornhatmini import UnicornHATMini
from random import randrange
from signal import pause
 
# Создаём объект для работы с модулем
unicornhatmini = UnicornHATMini()
# Устанавливаем яркость светодиодов
unicornhatmini.set_brightness(0.05)
 
# Переменные
red = 0
green = 0
blue = 0
dotson = True
previousMinute = -1
mode = "time"
 
# Массив графических чисел
numbers = {
    "0": [
        [2, 0],
        [1, 0],
        [0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 4],
        [0, 5],
        [0, 6],
        [1, 6],
        [2, 6],
        [2, 5],
        [2, 4],
        [2, 3],
        [2, 2],
        [2, 1],
    ],
    "1": [
        [0, 1],
        [1, 0],
        [1, 1],
        [1, 2],
        [1, 3],
        [1, 4],
        [1, 5],
        [1, 6],
        [0, 6],
        [2, 6],
    ],
    "2": [
        [0, 0],
        [1, 0],
        [2, 0],
        [2, 1],
        [2, 2],
        [1, 3],
        [0, 4],
        [0, 5],
        [0, 6],
        [1, 6],
        [2, 6],
    ],
    "3": [
        [0, 0],
        [1, 0],
        [2, 0],
        [2, 1],
        [2, 2],
        [2, 3],
        [1, 3],
        [0, 3],
        [2, 4],
        [2, 5],
        [2, 6],
        [1, 6],
        [0, 6],
    ],
    "4": [
        [0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [1, 3],
        [2, 3],
        [2, 0],
        [2, 1],
        [2, 2],
        [2, 3],
        [2, 4],
        [2, 5],
        [2, 6],
    ],
    "5": [
        [0, 0],
        [1, 0],
        [2, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [1, 3],
        [2, 3],
        [2, 4],
        [2, 5],
        [2, 6],
        [1, 6],
        [0, 6],
    ],
    "6": [
        [2, 0],
        [1, 0],
        [0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 4],
        [0, 5],
        [0, 6],
        [1, 6],
        [2, 6],
        [2, 5],
        [2, 4],
        [2, 3],
        [1, 3],
    ],
    "7": [[0, 0], 
        [1, 0], 
        [2, 0], 
        [2, 1], 
        [2, 2], 
        [2, 3], 
        [1, 4], 
        [1, 5], 
        [1, 6]
    ],
    "8": [
        [2, 0],
        [1, 0],
        [0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 4],
        [0, 5],
        [0, 6],
        [1, 6],
        [2, 6],
        [2, 5],
        [2, 4],
        [2, 3],
        [1, 3],
        [2, 2],
        [2, 1],
    ],
    "9": [
        [2, 0],
        [1, 0],
        [0, 0],
        [0, 1],
        [0, 2],
        [0, 3],
        [0, 6],
        [1, 6],
        [2, 6],
        [2, 5],
        [2, 4],
        [2, 3],
        [1, 3],
        [2, 2],
        [2, 1],
    ],
    ":": [[1, 2], [1, 4]],
    ".": [[1, 6]],
}
 
# Кнопки
button_a = Button(5)
button_b = Button(6)
 
# Функция отображения времени
def enable_show_time(button):
    global mode
    mode = "time"
 
 
# Функция отображения даты
def enable_show_date(button):
    global mode
    mode = "date"
 
 
# Функция смена цвета
def change_color():
    global red
    global green
    global blue
    red = randrange(256)
    green = randrange(256)
    blue = randrange(256)
 
 
# Считываем состояние кнопок
button_a.when_pressed = enable_show_date
button_a.when_released = enable_show_time
button_b.when_pressed = change_color
 
 
def letter(char, offset):
    for pixel in numbers[char]:
        # x = pixel[0]   offset
        y = pixel[1]
        unicornhatmini.set_pixel(x, y, red, green, blue)
 
 
# Функция отображения времени
def show_time(now):
    global dotson
    unicornhatmini.clear()
    timestring = now.strftime("%H%M")
    letter(timestring[0], 0)
    letter(timestring[1], 4)
    if dotson == True:
        letter(":", 7)
    letter(timestring[2], 10)
    letter(timestring[3], 14)
    unicornhatmini.show()
 
 
# Функция отображения даты
def show_date(now):
    global dotson
    unicornhatmini.clear()
    timestring = now.strftime("%d%m")
    letter(timestring[0], 0)
    letter(timestring[1], 4)
    letter(".", 7)
    letter(timestring[2], 10)
    letter(timestring[3], 14)
    unicornhatmini.show()
 
 
while True:
    # Считываем дату и время
    now = datetime.datetime.now()
    # Если прошла минута, меняет цвет
    if now.minute != previousMinute:
        change_color()
    # Если флаг установлен в «time», отображаем время
    if mode == "time":
        show_time(now)
    # Если флаг установлен в «date», отображаем дату
    if mode == "date":
        show_date(now)
 
    dotson = not dotson
    previousMinute = now.minute
    time.sleep(0.5)

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

Светодиодная матрица

Матричный экран состоит из 119 RGB SMD2121 светодиодов: 17 столбцов по 7 строк.

Драйверы матрицы HT16D35A

Светодиодная матрица подключена к двум драйверам HT16D35A, которые получают команды от Raspberry Pi по SPI и передают на матричный экран. Один чип берет на себя 9 строк по 7 столбцов, а второй остальные — 8 строк по 7 столбцов.

Кнопки управления

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

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

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

Распиновка

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

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

  • Модель: Pimoroni Unicorn HAT Mini PIM498
  • Совместимость: платы Raspberry Pi
  • Разъём модуля: штырьковые соединители GPIO
  • Интерфейс модуля: SPI
  • Количество светодиодов: 119 (17 строк × 7 столбцов)
  • Количество цветов: 262К (64 на каждый цвет R, G, B)
  • Тип светодиодов: SMD2121
  • Встроенное управление: 4 кнопки
  • Размеры: 65×30×10 мм

Ресурсы