====== Unicorn HAT Mini: подключение, настройка и начало работы ======
Используйте [[amp>product/pimoroni-raspberry-pi-hat-unicorn-mini?utm_source=man&utm_campaign=pimoroni-raspberry-pi-hat-unicorn-mini&utm_medium=wiki|Pimoroni Unicorn HAT Mini]] для отображения радужной анимации, бегущего текста и простых изображений. Unicorn — это лучший карманный генератор радуги для [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=pimoroni-raspberry-pi-hat-unicorn-mini&utm_medium=wiki|Raspberry Pi]]!
{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini.14.jpg?nolink |}}
А если вы любите создавать музыку на [[https://sonic-pi.net/|SonicPi]], то это железка точно не оставит вас равнодушным.
===== Подключение и настройка =====
Unicorn HAT Mini совместим со всеми версиями компьютеров [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=pimoroni-raspberry-pi-hat-unicorn-mini&utm_medium=wiki|Raspberry Pi]]. В качестве примера используем одноплатный компьютер [[amp>product/raspberry-pi-4-model-b-2-gb?utm_source=man&utm_campaign=pimoroni-raspberry-pi-hat-unicorn-mini&utm_medium=wiki|Raspberry Pi 4]].
  - Установите Unicorn сверху на Raspberry Pi через 40-контактную колодку пинов ввода-вывода.{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-hardware.png?nolink |}}
  - [[articles:rpi-guide| Подготовьте Raspberry Pi]].
  - [[articles:rpi-interfaces#интерфейс_spi|Включите шину SPI]].sudo raspi-config nonint do_spi 0
  - Установите библиотеку [[https://github.com/pimoroni/unicornhatmini-python|Unicorn HAT Mini для Python]] из менеджера пакетов PiP.sudo pip3 install unicornhatmini
На этом установка библиотеки закончена и можно смело переходить к экспериментам.
===== Базовые примеры =====
По умолчанию в репозитории [[https://github.com/pimoroni/unicornhatmini-python|библиотеки]] присутствуют примеры для ознакомления с модулем.
  - Скачайте примеры на Raspberry Pi c GitHub.git clone https://github.com/pimoroni/unicornhatmini-python
  - Перейдите в директорию с экспериментамиcd unicornhatmini-python/examples
==== Демо ====
Для начала проведите тест матрицы.python3 demo.py 
После запуска примера, матричный экран продемонстрирует вашим глазам свои возможности радужного свечения и завораживающих переходов.
==== Вывод текста ====
Усложним задачу, выведите бегущую цветную строку с текстом.python3 text.py
==== Вывод изображения ====
Библиотека также позволяет отображать цветные изображения.python3 image.py
==== Считывания кнопок ====
На плате также присутствуют четыре тактовых кнопки. Запустите следующий пример и протестируйте события на клик по каждой кнопке.python3 button-splash.py
Это далеко не все базовые примеры, протестировать оставшиеся предлагаем самостоятельно.
===== Собственные примеры =====
Базовые примеры рассмотрели, теперь давайте попробуем создать что то своё. 
==== Переключение цветов ====
Для начала зажжём на всех светодиодах по очереди красные, зеленые, синие и белые цвета и так по кругу. Запустите скрипт ниже на вашей Raspberry Pi.
#!/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)
{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-switch-color.gif?nolink |}}
==== Цифровые часы ====
В продолжении запустим пример кода цифровых часов с управлением. 
  * В штатном режиме на плате отображается время.
  * При зажатии кнопки ''A'', время меняется на дату. При отпускании — дата меняется на время.
  * При клике на кнопу ''B'', меняется цвет светодиодов на случайный.
#!/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)
{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-digital-clock.gif?nolink |}}
===== Элементы платы =====
{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-anotation.png?nolink |}}
==== Светодиодная матрица ====
Матричный экран состоит из 119 {{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:led-smd2121-datasheet.pdf |RGB SMD2121 светодиодов}}: 17 столбцов по 7 строк.
==== Драйверы матрицы HT16D35A ====
Светодиодная матрица подключена к двум {{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:ht16d35a-datasheet.pdf |драйверам HT16D35A}}, которые получают команды от Raspberry Pi по SPI и передают на матричный экран. Один чип берет на себя 9 строк по 7 столбцов, а второй остальные — 8 строк по 7 столбцов.
==== Кнопки управления ====
С двух сторон матрицы из светодиодов расположены по две кнопки, которые можно применить на включение или отключения событий. Например управлять цветом / яркостью светодиодов или как элемент управления простых игр. А к каким выводом подключены кнопки вы найдёте в разделе [[#распиновка|распиновка]].
==== Входные пины ввода-вывода ====
Unicorn HAT Mini подключается к одноплатникам Rasperry Pi сверху через входной 40-пиновый разъём.
===== Распиновка ======
[[https://pinout.xyz/pinout/unicorn_hat_mini|{{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-pinout.png?nolink |}}]]
===== Габаритный чертёж =====
[[this>_media/products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-dimensions.pdf|{{:products:pimoroni-raspberry-pi-hat-unicorn-mini:pimoroni-raspberry-pi-hat-unicorn-mini-dimensions.png}}]]
===== Характеристики =====
  * Модель: Pimoroni Unicorn HAT Mini PIM498
  * Совместимость: платы Raspberry Pi
  * Разъём модуля: штырьковые соединители GPIO
  * Интерфейс модуля: SPI
  * Количество светодиодов: 119 (17 строк × 7 столбцов)
  * Количество цветов: 262К (64 на каждый цвет R, G, B)
  * Тип светодиодов: SMD2121
  * Встроенное управление: 4 кнопки
  * Размеры: 65×30×10 мм
===== Ресурсы =====
  * [[amp>product/pimoroni-raspberry-pi-hat-unicorn-mini?utm_source=man&utm_campaign=pimoroni-raspberry-pi-hat-unicorn-mini&utm_medium=wiki|Pimoroni Unicorn HAT Mini]] в магазине.
  * [[https://github.com/amperka/hardware-drawings/blob/master/pimoroni-raspberry-pi-hat-unicorn-mini.svg|Векторное изображение модуля]]
  * [[https://github.com/pimoroni/unicornhatmini-python|Библиотека на Python]]
  * {{ :products:pimoroni-raspberry-pi-hat-unicorn-mini:ht16d35a-datasheet.pdf |Datasheet на драйвер светодиодной матрицы Holtek HT16D35A}}
  * [[https://www.youtube.com/playlist?list=PLjMfQ8Gw5Iq4QyyCCtPxVgqnJFPy8T8b8|SonicPi на Pimoroni Unicorn HAT Mini]]