Оглавление:

Диско-пи: 8 шагов (с изображениями)
Диско-пи: 8 шагов (с изображениями)

Видео: Диско-пи: 8 шагов (с изображениями)

Видео: Диско-пи: 8 шагов (с изображениями)
Видео: Disco Elysium (день 8) Бесконечное диско какое-то 2024, Июль
Anonim
Диско-пи
Диско-пи

В этом руководстве показано, как использовать Raspberry Pi для управления цветной светодиодной лентой на основе музыки, воспроизводимой из веб-браузера.

В нем показано, как создать базовый веб-сайт с использованием Node.js через HTTPS и использовать socket.io через WSS (Secure Websocket).

Веб-сайт состоит из одной страницы с очень простым макетом. На веб-странице отображается раскрывающийся список музыкальных файлов, которые находятся в папке public / audio на сервере. При выборе варианта в списке музыкальный файл воспроизводится на веб-странице с использованием аудиоэлемента HTML 5. Во время воспроизведения музыкального файла веб-страница использует интерфейс AudioContext для анализа музыки, которая затем отправляется на сервер через безопасное соединение через веб-сокет.

Сервер, работающий на Raspberry Pi, использует собственную библиотеку Node RPI WS281x (обертывающую библиотеку WS281X Джереми Гарфа) для изменения цвета светодиодов на светодиодной полосе WS2811 на основе данных, отправленных через веб-сокет.

Пример кода можно найти здесь: disco-pi

Шаг 1: оборудование

  1. Raspberry Pi - я использовал Raspberry Pi 2B, который у меня был, но вы можете получить стартовый комплект Raspberry Pi 3 примерно за 100 канадских долларов.
  2. Светодиодная лента WS2811 - я играл с ALITOVE 16.4ft 150 Pixels WS2811. Он поставляется с контроллером и блоком питания примерно за 45-50 канадских долларов.
  3. Разъем Barrel Jack - я купил его в местном магазине электроники, что-то вроде этого. Просто убедитесь, подходит ли он вашему блоку питания
  4. Разъемы перемычки / провод - у меня было несколько соединительных кабелей между мужчинами и женщинами и несколько сплошных соединительных проводов калибра 22, лежащих вокруг

Шаг 2: настройка Raspberry Pi

Операционная система

Обычно я использую последнюю сборку Raspbian. Скачайте образ и запишите его на SD-карту. Если вы используете компьютер с Windows, вы можете использовать Win32 Disk Imager для записи образа на SD-карту.

Node.js

Установите последнюю версию Node.js. На момент написания я использую 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

Установить git

sudo apt-get install git

Шаг 3: Настройка примера кода

Клонировать пример кода

1. Настройте базовую папку для установки в

cd / opt

sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock

2. Клонируйте пример репозитория git.

git clone https://github.com/haydockjp/disco-pi.git"

или

git clone [email protected]: haydockjp / disco-pi.git

3. Установите зависимости

CD диско-пи

npm install

Это может занять 2-3 минуты.

Шаг 4. Создайте самоподписанный сертификат SSL

1. Создайте файл закрытого ключа.

cd /opt/com.jonhaydock/disco-pi/certs

openssl genrsa -out disco-pi-key.pem 2048

2. Создайте CSR (запрос на подпись сертификата).

openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem

На этом этапе вам будет предложено ввести некоторую информацию для запроса сертификата. Поскольку это самоподписанный сертификат, вам решать, насколько точно вы заполните данные. Вот пример

Название страны (двухбуквенный код) [AU]: CA

Название штата или провинции (полное название) [Some-State]: Название населенного пункта Британской Колумбии (например, город) : Название организации в Ванкувере (например, компания) [Internet Widgits Pty Ltd]: Название организационной единицы Disco Pi (например, раздел) : Общее имя (например, полное доменное имя сервера или ВАШЕ имя) : адрес электронной почты disco-pi : [email protected] Пароль вызова : необязательное название компании :

В этом примере просто нажмите клавишу возврата, чтобы оставить пароль проверки пустым.

3. Создайте сертификат.

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Для дополнительной безопасности мы также создадим файл параметров Diffie Hellman.

openssl dhparam -out dh_2048.pem 2048

Это может занять 15-20 минут.

Шаг 5: Подключение оборудования

Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования

Питание светодиодной ленты

Светодиодная лента питается от 12 вольт. Raspberry Pi способен выводить только 3,3 В или 5 В и не способен выводить сигнал где-либо рядом с усилителями, необходимыми для управления таким количеством светодиодов.

Важно не подключать блок питания 12 В к Raspberry Pi.

У моей ленты также были дополнительные провода питания, подключенные к полосе с обоих концов. Я предлагаю вам закрепить их лентой, чтобы они не соприкасались с каким-либо другим вашим оборудованием.

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

Светодиодная полоса

У моей светодиодной ленты три провода:

КРАСНЫЙ - +12 Вольт

ЧЕРНЫЙ - Земля

ЗЕЛЕНЫЙ - Данные

ПРИМЕЧАНИЕ: есть Din и Dout - Data In и Data Out. Убедитесь, что вы работаете с концом светодиодной ленты с надписью Din.

Убедитесь, что Barrel Jack не подключен к источнику питания.

1. Подключите красный провод светодиодной ленты к положительной стороне разъема Barrel.

Я использовал белый провод 22-го калибра.

Вставьте провод в паз «+» в цилиндрическом домкрате и прикрутите его.

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

2. Подключите черный провод от светодиодной ленты к минусовой стороне разъема Barrel.

Я использовал черный провод 22-го калибра.

Вставьте провод в паз - в цилиндрическом домкрате. На этом этапе также поместите вилку одного из соединительных кабелей (коричневый провод на фото) в то же отверстие и прикрутите их оба на место.

Вставьте другой конец черного провода в гнездо светодиода.

Убедитесь, что вы подключаетесь с помощью черного провода.

3. Подключите зеленый провод от светодиодной ленты.

Возьмите один из соединительных кабелей типа "мама-папа". На моих фото это зеленый провод.

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

Это кабель для передачи данных.

Raspberry Pi

1. Возьмите зеленый соединительный кабель и подключите его к Raspberry Pi GPIO.

Вам необходимо подключить его к PCM_CLK (контакт 12 / GPIO 18)

2. Возьмите черный соединительный кабель и подключите его к Raspberry Pi GPIO.

Его нужно подключить к одной из площадок. Я предлагаю вам использовать контакт 14, но вы также можете использовать контакт 6, 9, 20, 25, 30, 34 или 39.

ПРИМЕЧАНИЕ: для этого источник питания светодиода и Raspberry Pi должны иметь общее заземление. Также обратите внимание, что вы не должны подключать 12 Вольт + (красный провод) к Raspberry Pi.

LED Мощность

У вас не должно быть возможности подключить источник питания 12 В к гнезду ствола.

Все светодиоды на светодиодной ленте должны загореться БЕЛЫМ цветом.

Шаг 6. Код на стороне сервера

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

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Это запустит веб-сервер и начнет прослушивать запросы HTTPS и WSS.

Порт по умолчанию - 443, но вы можете переопределить это, установив переменную среды перед запуском кода. Например

экспорт DISCO_PI_PORT = 1443

В моей светодиодной ленте 150 светодиодов. Они управляются группами по три человека. Это означает, что я не могу управлять каждым светодиодом по отдельности, и мне нужно передать достаточно информации для управления 50.

Если у вашего светодиода больше или меньше, вы можете переопределить количество светодиодов, которыми вы управляете, передав параметр при запуске. Например, если вы можете управлять только 10 светодиодами

sudo npm start 10

Код основного сервера можно найти в файле app.js. Этот файл запускает веб-сервер HTTPS, а также добавляет socket.io для прослушивания запросов веб-сокетов на том же порту.

Чтобы получить доступ к веб-сайту, вы должны открыть веб-браузер на своем основном компьютере (я тестировал это только в Chrome) и использовать IP-адрес Raspberry Pi, например

10.0.1.2/

Вы можете узнать свой IP-адрес из командной строки Raspberry Pi.

ifconfig

Веб-сервер будет обслуживать любой контент из общей папки. По умолчанию отображается страница index.html.

У него одна конечная точка API - / api / audio. Эта конечная точка ищет любые файлы в папке public / audio и возвращает список. Например

["GYAKO.mp3", "Havana (с участием Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "This Is What You Came For (feat. Rihanna).mp3"]

Чтобы добавить музыку как вариант, скопируйте файлы в эту папку. Я лично использую Filezilla поверх ssh. Папка, в которую вы хотите добавить файлы, - это /opt/com.jonhaydock/disco-pi/public/audio.

Шаг 7. Код веб-сайта

Код веб-сайта
Код веб-сайта

Когда вы заходите на сайт, вы должны увидеть что-то вроде этого.

Если вы видите предупреждение системы безопасности, это связано с тем, что мы используем самозаверяющий сертификат SSL. Вы можете проигнорировать это или добавить как исключение.

При выборе имени файла источник аудиоэлемента HTML 5. будет установлен в этот файл. Когда все будет готово, заиграет музыка. Как только песня закончится, музыка остановится.

Если вы выберете вариант «Нет», музыка перестанет воспроизводиться.

Во время воспроизведения музыкального файла веб-страница использует интерфейс AudioContext для анализа музыки, которая затем отправляется на сервер через безопасное соединение через веб-сокет.

Это сообщение того типа, что socket.io на сервере настроен для прослушивания "ws2811". Он содержит массив из 50 элементов, которые находятся в диапазоне от 0 до 255.

«ws2811», {«0»: 251, «1»: 252, «2»: 241, «3»: 217, «4»: 193, «5»: 164, «6»: 148, «7»: 139, «8»: 110, «9»: 96, «10»: 81, «11»: 67, «12»: 72, «13»: 66, «14»: 60, «15»: 60, «16»: 63, «17»: 54, «18»: 37, «19»: 30, «20»: 31, «21»: 26, «22»: 13, «23»: 3, » 24 »: 10,« 25 »: 7,« 26 »: 6,« 27 »: 0,« 28 »: 0,« 29 »: 0,« 30 »: 1,« 31 »: 8,« 32 »: 12, «33»: 3, «34»: 2, «35»: 2, «36»: 0, «37»: 0, «38»: 0, «39»: 0, «40»: 0, «41»: 0, «42»: 0, «43»: 0, «44»: 0, «45»: 0, «46»: 0, «47»: 0, «48»: 0, « 49 : 0}

Сервер использует собственную библиотеку Node RPI WS281x (обертывающую библиотеку WS281X Джереми Гарфа) для изменения цвета светодиодов на светодиодной полосе WS2811 на основе данных, отправленных через веб-сокет.

Шаг 8: Наконец

Image
Image

Вы должны увидеть, как светодиоды на полосе меняют цвет вместе с музыкой на основе анализа быстрого преобразования Фурье, выполненного на веб-странице.

Надеюсь, вам это понравится. Дай мне знать, что ты с ним делаешь!

ПРИМЕЧАНИЕ: Если у вас есть проблемы

Поскольку эта библиотека и встроенный аудиоблок Raspberry Pi используют ШИМ, их нельзя использовать вместе.

Вам может потребоваться внести в черный список модуль аудио ядра Broadcom, создав файл /etc/modprobe.d/snd-blacklist.conf с

черный список snd_bcm2835

Если аудиоустройство все еще загружается после внесения в черный список, вам также может потребоваться закомментировать его в файле / etc / modules. В безголовых системах вам также может потребоваться принудительное аудио через hdmi.

Отредактируйте config.txt и добавьте:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Чтобы это изменение вступило в силу, требуется перезагрузка.

Рекомендуемые: