Скоро Новый Год, и если у вас есть пара часов свободного времени, можно сделать hi-tech украшение для новогодней елки, пальмы или мандаринового дерева. Без разницы — оно будет неплохо смотреться везде.
![](https://habrastorage.org/webt/ox/ua/uv/oxuauvtyt2k4rigbsfhbikuf740.png)
Под катом — гифка с демонстрацией работы этой штуки
Основа конструкции — светодиодная гибкая лента NeoPixel 32x8, Raspberry Pi и хорошее настроение. Ну и да, понадобится немного кода на Python.
![](https://habrastorage.org/getpro/habr/post_images/ccd/868/0b8/ccd8680b8d979e82eb40045d085c90f9.gif)
На этом этапе нужно будет припаять пару контактов и воспользоваться примером кода от Adafruit’s NeoPixel Uberguide. Для нашего проекта нужно два источника питания — для «малинки» и светодиодной ленты. Для последней нужно будет подключить не только питание, но и данные. Здесь все просто.
![](https://habrastorage.org/getpro/habr/post_images/093/6f6/436/0936f643690f95d8c99502f8cfad4619.png)
При желании можно добавить еще полоску ткани, чтобы рассеивать яркий свет светодиодов.
Подключаем данные
Берем любую «землю» от «малинки» и подключаем ее к GND-линии данных светодиодной ленты.
![](https://habrastorage.org/getpro/habr/post_images/f60/67e/e5a/f6067ee5a907eff363a534f8a5e712ca.webp)
Подключаем источник питания
Это можно сделать либо при помощи обычного кабеля, по схеме, уже показанной выше, либо воспользоваться USB-кабелем. В этом случае нужно выполнить подключение вот по этой схеме.
Теперь давайте проверим матрицу, запустив код от Adafruit
Запускаем «малинку» подключаем питание RGB-матрицы, открываем терминал и устанавливаем зависимости:
Загружаем код из репозитория автора статьи:
Выбираем папку scrollingTextMask:
Запускаем тестовый код fillMatrix.py:
Если получилась радуга, как на гифке выше, все работает, можно двигаться к следующему этапу. Если что-то пошло не так, скорее всего, какие-то контакты неверно подключены.
Советы: Если система не работает с пином 21 GPIO «малинки», попробуйте пины 10, 12 или 18. Затем нужно открыть 32-fillMatrix.py из папки scrollingTextMask и обновить вывод GPIO. В этом случае нужно будет соответствующим образом изменить и другие файлы проекта.
Останавливаем скрипт при помощи комбинации Ctrl+C.
Теперь в терминале, который все еще открыт, набираем команду:
![](https://habrastorage.org/getpro/habr/post_images/a05/f82/823/a05f82823ca2a2650258324ec340d8f5.gif)
В папках, которые мы взяли с GitHub, есть папка «fire», которая содержит 10 картинок в формате jpeg. Вот что делает код treeTopper.py:
Объявляет библиотеки, которые используются в коде. Внимание нужно обратить на PIL (Pillow Imaging Library), это библиотека, которая добавляет возможность обработки изображений в интерпретатор Python.
А если хочется собственных картинок?
Параметры должны быть следующими:
Каждый файл нужно сохранять под названиями 1-10.JPG в соответствующую папку.
Для отображения картинок нужно задать новый путь к картинкам. При желании можно сменить и последовательность их отображения.
Запуск при загрузке
Как только мы подготовили все изображения, используем Python для запуска скрипта при загрузке устройства. Лучший вариант — Crontab.
В консоли открываем Crontab: crontab -e
Вводим 1 и нажимаем Enter.
Таким образом открывается новый файл crontab. Внутри опускаемся вниз и enter ->
Нажимаем Ctrl+X, а затем crontab для сохранения.
Выключаем «малинку» и отключаем все, что собрали.
На этом шаге уже можно продемонстрировать новогодний огонек на вершине не менее новогодней елки.
![](https://habrastorage.org/getpro/habr/post_images/339/a80/c27/339a80c27c50d74846d9052c8d2f952b.jpg)
Кстати, автор в курсе, что его изобретение по форме напоминает рулон туалетной бумаги.
Она шутит, что на фоне происходящего в 2020 году это вполне адекватно. Но вообще ее можно и изменить — конструкция при желании легко модифицируется, так что рулон бумаги превращается… да во что угодно.
![](https://habrastorage.org/webt/1h/dq/mj/1hdqmj1bvguax5hnugdz0ci_jbw.jpeg)
![](https://habrastorage.org/webt/ox/ua/uv/oxuauvtyt2k4rigbsfhbikuf740.png)
Под катом — гифка с демонстрацией работы этой штуки
Основа конструкции — светодиодная гибкая лента NeoPixel 32x8, Raspberry Pi и хорошее настроение. Ну и да, понадобится немного кода на Python.
Что нужно для работы
![](https://habrastorage.org/getpro/habr/post_images/ccd/868/0b8/ccd8680b8d979e82eb40045d085c90f9.gif)
- Raspberry Pi 3, Raspberry Pi 4 или Raspberry Pi Zero W с GPIO разъемом.
- Источник питания, мышь, монитор, клавиатура и HDMI кабель для Raspberry Pi
- Гибкая лента 32x8 NeoPixel RGB LED Matrix
- Набор джамперов (M-to-F, M-to-M и F-to-F)
- 5В источник питания
- Конденсатор 1000 µF
- Еще можно взять полоску ткани для рассеивания света LED-ленты
- Напечатанная на 3D-принтере основа для всей конструкции.
Часть 1. Подготовка RGB-матрицы
На этом этапе нужно будет припаять пару контактов и воспользоваться примером кода от Adafruit’s NeoPixel Uberguide. Для нашего проекта нужно два источника питания — для «малинки» и светодиодной ленты. Для последней нужно будет подключить не только питание, но и данные. Здесь все просто.
![](https://habrastorage.org/getpro/habr/post_images/093/6f6/436/0936f643690f95d8c99502f8cfad4619.png)
При желании можно добавить еще полоску ткани, чтобы рассеивать яркий свет светодиодов.
Подключаем данные
Берем любую «землю» от «малинки» и подключаем ее к GND-линии данных светодиодной ленты.
![](https://habrastorage.org/getpro/habr/post_images/f60/67e/e5a/f6067ee5a907eff363a534f8a5e712ca.webp)
Подключаем источник питания
Это можно сделать либо при помощи обычного кабеля, по схеме, уже показанной выше, либо воспользоваться USB-кабелем. В этом случае нужно выполнить подключение вот по этой схеме.
![](https://habrastorage.org/getpro/habr/post_images/c6f/1fb/668/c6f1fb6686d545656268c1759e0657d9.png)
Теперь давайте проверим матрицу, запустив код от Adafruit
Запускаем «малинку» подключаем питание RGB-матрицы, открываем терминал и устанавливаем зависимости:
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
sudo python3 -m pip install --force-reinstall adafruit-blinka
Загружаем код из репозитория автора статьи:
git clone https://github.com/carolinedunn/RGBTreeTopper
Выбираем папку scrollingTextMask:
cd RGBTreeTopper
Запускаем тестовый код fillMatrix.py:
sudo python3 32-fillMatrix.py
![](https://habrastorage.org/getpro/habr/post_images/24d/6c4/9a0/24d6c49a088e3df9a0d15062e640c1b2.gif)
Если получилась радуга, как на гифке выше, все работает, можно двигаться к следующему этапу. Если что-то пошло не так, скорее всего, какие-то контакты неверно подключены.
Советы: Если система не работает с пином 21 GPIO «малинки», попробуйте пины 10, 12 или 18. Затем нужно открыть 32-fillMatrix.py из папки scrollingTextMask и обновить вывод GPIO. В этом случае нужно будет соответствующим образом изменить и другие файлы проекта.
Останавливаем скрипт при помощи комбинации Ctrl+C.
Часть 2. Зажигай!
Теперь в терминале, который все еще открыт, набираем команду:
sudo python3 treeTopper.py
![](https://habrastorage.org/getpro/habr/post_images/a05/f82/823/a05f82823ca2a2650258324ec340d8f5.gif)
В папках, которые мы взяли с GitHub, есть папка «fire», которая содержит 10 картинок в формате jpeg. Вот что делает код treeTopper.py:
Объявляет библиотеки, которые используются в коде. Внимание нужно обратить на PIL (Pillow Imaging Library), это библиотека, которая добавляет возможность обработки изображений в интерпретатор Python.
![](https://habrastorage.org/getpro/habr/post_images/c96/fb7/f2b/c96fb7f2b80d1e1c5fa78a78b6213e87.png)
- Сообщает Pi, куда отправлять данные на матрицу, указав 21 пин GPIO (строка 8).
- Указывает параметры матрицы, включая размер, яркость и время паузы между демонстрацией каждой из картинок (строки 9-13).
- Создает массив с данными тех самых 10 JPEG файлов в последовательном порядке (строки 28-32).
- Анализирует пиксели изображений и преобразовывает их в RGB-матрицу с выводом изображения на матрицу RGB (строки 35-41).
- Делает паузу на 0.2 секунды, затем повторяет процесс для следующего изображения (строка 42).
- Процесс выполняется до момента выполнения комбинации Ctrl+C.
А если хочется собственных картинок?
Параметры должны быть следующими:
- Формат — JPEG.
- Ширина — 32 пикселя.
- Высота — 8 пикселей.
Каждый файл нужно сохранять под названиями 1-10.JPG в соответствующую папку.
Для отображения картинок нужно задать новый путь к картинкам. При желании можно сменить и последовательность их отображения.
![](https://habrastorage.org/getpro/habr/post_images/8f2/85e/966/8f285e9663d41b9d55064ed97b65997a.png)
Запуск при загрузке
Как только мы подготовили все изображения, используем Python для запуска скрипта при загрузке устройства. Лучший вариант — Crontab.
В консоли открываем Crontab: crontab -e
Вводим 1 и нажимаем Enter.
![](https://habrastorage.org/getpro/habr/post_images/4de/e26/45c/4dee2645cb21030e3125cb60ff39ea84.png)
Таким образом открывается новый файл crontab. Внутри опускаемся вниз и enter ->
sudo python3 /home/pi/RGBTreeTopper/treeTopper.py
@reboot sudo python3 /home/pi/RGBTreeTopper/treeTopper.py
Нажимаем Ctrl+X, а затем crontab для сохранения.
Выключаем «малинку» и отключаем все, что собрали.
Часть 3. Финальная сборка
На этом шаге уже можно продемонстрировать новогодний огонек на вершине не менее новогодней елки.
- Печатаем корпус на 3D-принтере.
- Пропускаем в нужные места провода и фиксируем их.
- Изгибаем LED-матрицу, сильно давить не нужно.
- Водружаем конструкцию на вершину елочки. Включаем и радуемся.
![](https://habrastorage.org/getpro/habr/post_images/339/a80/c27/339a80c27c50d74846d9052c8d2f952b.jpg)
Кстати, автор в курсе, что его изобретение по форме напоминает рулон туалетной бумаги.
![](https://habrastorage.org/getpro/habr/post_images/814/9e8/eef/8149e8eef382b760cf5ad2be75055d2f.webp)
Она шутит, что на фоне происходящего в 2020 году это вполне адекватно. Но вообще ее можно и изменить — конструкция при желании легко модифицируется, так что рулон бумаги превращается… да во что угодно.
![](https://habrastorage.org/webt/1h/dq/mj/1hdqmj1bvguax5hnugdz0ci_jbw.jpeg)
Amor-roma
https://alexgyver.ru/gyverlamp/
оставлю это для желающих повторить)
DmitryAnatolich
Когда зашел, чтобы запостить эту ссылку :)