Проектирование мультирума.
Re: Проектирование мультирума.
MSapogov, интересная статья на тему как продлить жизнь одноплатнику.
https://geektimes.ru/post/283802/
Думаю что в статье и в коментах найдете интересное и для апельсинок.
https://geektimes.ru/post/283802/
Думаю что в статье и в коментах найдете интересное и для апельсинок.
Re: Проектирование мультирума.
MSapogov, не подскажете, какой правильный формат параметра коммандной строки "-G" для squeezelite ...написано, что <Rpi GPIO#>:<H/L>....
пробовал -G 04:L .... -G GPIO04:L.... -G GPIO#04:L
но с такими вообще не стартует.
... И еще столкнулся со странным поведением, может подскажете из-за чего так - запускаю 2 squeezelite, один на встроенное аудио (ExecStart= /usr/bin/squeezelite-armv6hf -D -v -o dmix:CARD=audiocodec,DEV=0 -n internal_out -m 00:00:00:00:00:03 -s 192.168.1.189
)
второй на USB звуковуху (ExecStart= /usr/bin/squeezelite-armv6hf -D -v -o front:CARD=Device,DEV=0 -n usb_out -m 00:00:00:00:00:02 -s 192.168.1.189)
так вот на USB играет на пару тонов ниже... как будто бы замедленно
PS... в общем вот, что за ошибку пишет при попытке использовать параметр -G
получалось ли у Вас использовать этот параметр на Orange Pi?
пробовал -G 04:L .... -G GPIO04:L.... -G GPIO#04:L
но с такими вообще не стартует.
... И еще столкнулся со странным поведением, может подскажете из-за чего так - запускаю 2 squeezelite, один на встроенное аудио (ExecStart= /usr/bin/squeezelite-armv6hf -D -v -o dmix:CARD=audiocodec,DEV=0 -n internal_out -m 00:00:00:00:00:03 -s 192.168.1.189
)
второй на USB звуковуху (ExecStart= /usr/bin/squeezelite-armv6hf -D -v -o front:CARD=Device,DEV=0 -n usb_out -m 00:00:00:00:00:02 -s 192.168.1.189)
так вот на USB играет на пару тонов ниже... как будто бы замедленно
PS... в общем вот, что за ошибку пишет при попытке использовать параметр -G
Код: Выделить всё
Unable to determine hardware version. I see: Hardware : sun8i
,
- expecting BCM2708 or BCM2709.
If this is a genuine Raspberry Pi then please report this
to projects@drogon.net. If this is not a Raspberry Pi then you
are on your own as wiringPi is designed to support the
Raspberry Pi ONLY.
Последний раз редактировалось vova5049 08 янв 2017, 19:21, всего редактировалось 1 раз.
Re: Проектирование мультирума.
"-G" для squeezelite оказалось что работаеттолько на Raspberry Pi !!!
С замедлением на USB ничего не подскажу, может попробывать в alsa конфиге частоту задать одинаковую на обоиз звуковушках...
С замедлением на USB ничего не подскажу, может попробывать в alsa конфиге частоту задать одинаковую на обоиз звуковушках...
Re: Проектирование мультирума.
C замедлением решилось так (в проблеме так и не разобрался)... вот список звуковых устройств:MSapogov писал(а): С замедлением на USB ничего не подскажу, может попробывать в alsa конфиге частоту задать одинаковую на обоиз звуковушках...
[spoiler]
Код: Выделить всё
root@orangepizero:~# squeezelite-armv6hf -l
Output devices:
null - Discard all samples (playback) or generate zero samples (capture)
ossmix
default:CARD=audiocodec - audiocodec, - Default Audio Device
sysdefault:CARD=audiocodec - audiocodec, - Default Audio Device
dmix:CARD=audiocodec,DEV=0 - audiocodec, - Direct sample mixing device
dsnoop:CARD=audiocodec,DEV=0 - audiocodec, - Direct sample snooping device
hw:CARD=audiocodec,DEV=0 - audiocodec, - Direct hardware device without any conversions
plughw:CARD=audiocodec,DEV=0 - audiocodec, - Hardware device with all software conversions
default:CARD=sndhdmi - sndhdmi, - Default Audio Device
sysdefault:CARD=sndhdmi - sndhdmi, - Default Audio Device
dmix:CARD=sndhdmi,DEV=0 - sndhdmi, - Direct sample mixing device
dsnoop:CARD=sndhdmi,DEV=0 - sndhdmi, - Direct sample snooping device
hw:CARD=sndhdmi,DEV=0 - sndhdmi, - Direct hardware device without any conversions
plughw:CARD=sndhdmi,DEV=0 - sndhdmi, - Hardware device with all software conversions
default:CARD=Device - USB PnP Sound Device, USB Audio - Default Audio Device
sysdefault:CARD=Device - USB PnP Sound Device, USB Audio - Default Audio Device
front:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - Front speakers
surround21:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 4.0 Surround output to Front and Rear speakers
surround41:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - Direct sample mixing device
dsnoop:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - Direct sample snooping device
hw:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - Direct hardware device without any conversions
plughw:CARD=Device,DEV=0 - USB PnP Sound Device, USB Audio - Hardware device with all software conversions
при выводе на front:CARD=Device,DEV=0 или на default:CARD=Devic - тональность занижается
при выводе на dmix:CARD=Device,DEV=0 - все отлично !!!
Re: Проектирование мультирума.
Рано обрадовался. Положил в медиатеку тестовые wav файлы с 1 кГц и 8-9 кГц
При воспроизведении первого - вместо 1000 Гц выходит 1076...1098 Гц
При воспроизведении второго - вместо 8000 и 9000 выходит 9259 Гц и 10357 Гц
Есть ли какие то мысли по этому поводу?
При воспроизведении первого - вместо 1000 Гц выходит 1076...1098 Гц
При воспроизведении второго - вместо 8000 и 9000 выходит 9259 Гц и 10357 Гц
Есть ли какие то мысли по этому поводу?
Re: Проектирование мультирума.
Такс, начитавшись этой и аналогичных тем Михаила на других форумах не удержался и заказал пару апельсинок (Pi One и Pi Zero 512 с платой расширения), DAC и усилок - как приедут буду пробовать повторить конструкцию
Последний раз редактировалось SolarW 08 янв 2017, 23:35, всего редактировалось 1 раз.
Re: RE: Re: RE: Re: Проектирование мультирума.
Здравствуйте Михаил.MSapogov писал(а):PS: Данную реализацию я затеял после прочтения данной темы - http://orangepi.pp.ua/index ... 0.html
Но для меня главное было правильно настроить микширование сигналов от разных программ.
Приехали заказанные апельсинки и DAC (к концу недели и усилок должен доехать).
Есть к вам два вопроса, как к глубоко копавшему данную тему.
1. Есть какие-то тонкости если надо одновременно выводить звук от двух программ?
На пример сквиз играет музыку и одновременно идет звук от linphone (SIP-клиент)?
2. Есть ли какой-то вариант при наличии звука от linphone уменьшить громкость воспроизводимого сквизом?
Re: Проектирование мультирума.
SolarW
1. Для этого нужно настроить микширование (ALSA) - viewtopic.php?f=1&t=885&start=20#p24603
2. Это врятли, если linphone умеет во время своей работы запустить какойто скрипт, то можно будет через API Squeeze по http или telnet, уменьшить громкость или поставить на паузу.
PS: Стоп, если linphone , то атс у Вас своя? Если да, то можно сделать будет и средствами Asterisk, во время обработки входящего звонка запускаем выполнение скрипта (приглушающего или паузу), после окончания разговора (восстанавливаем громкость или снимаем паузу).
Для управления есть https://github.com/pssc/squeezy , но я непробывал.
1. Для этого нужно настроить микширование (ALSA) - viewtopic.php?f=1&t=885&start=20#p24603
2. Это врятли, если linphone умеет во время своей работы запустить какойто скрипт, то можно будет через API Squeeze по http или telnet, уменьшить громкость или поставить на паузу.
PS: Стоп, если linphone , то атс у Вас своя? Если да, то можно сделать будет и средствами Asterisk, во время обработки входящего звонка запускаем выполнение скрипта (приглушающего или паузу), после окончания разговора (восстанавливаем громкость или снимаем паузу).
Для управления есть https://github.com/pssc/squeezy , но я непробывал.
Re: Проектирование мультирума.
Ок, спасибо, направление поисков понятно.MSapogov писал(а):1. Для этого нужно настроить микширование (ALSA) - viewtopic.php?f=1&t=885&start=20#p24603
В документации сходу не нашел возможности запускать скрипты при начале/завершении разговора.MSapogov писал(а):2. Это врятли, если linphone умеет во время своей работы запустить какойто скрипт, то можно будет через API Squeeze по http или telnet, уменьшить громкость или поставить на паузу.
Поставлю, посмотрю более внимательно.
Об этом запасном варианте (рулить терминалами со стороны АТС) если не получится локально я уже думал.MSapogov писал(а):PS: Стоп, если linphone , то атс у Вас своя? Если да, то можно сделать будет и средствами Asterisk, во время обработки входящего звонка запускаем выполнение скрипта (приглушающего или паузу), после окончания разговора (восстанавливаем громкость или снимаем паузу).
Для управления есть https://github.com/pssc/squeezy , но я непробывал.
На паузу ставить наверное не оно (оповещение может идти не на все зоны, нарушится синхронность) а вот уменьшать/восстанавливать громкость на нужных терминалах - наверное самое то будет.
P.S. Усилитель приехал в город, на апельсинках засыхает термоклей которым радиаторы прицепил - осталось выкроить немного времени и можно заняться натурными экспериментами
Re: Проектирование мультирума.
Про установку DAC на OrangePI расписал более подробно на другом форуме - http://forum.iobroker.net/viewtopic.php?f=33&t=4983
Re: Проектирование мультирума.
А кто-нибудь пробовал chromecast использовать для организации мультирума?
Я так понимаю можно купить адаптеры Wi-Fi->analog audio, подключить их к усилителю (вот интересное решение - https://geektimes.ru/post/280560/) и, используя API (https://www.npmjs.com/package/chromecast-api) воспроизводить аудио контент на нужных адаптерах (в зависимости от нахождения людей в помещениях).
Хотя, я бы хотел сделать ПД на Ethernet... но доступных "коробочных" решений вроде как нет (не считая Ubiquiti AC-PRO-EDU за 25 т.р.).
Интересно, у мистера MSapogov какой-нибудь готовый удачный "коробочный" вариант с допиливанием нарисовался? Михаил, вопрос с фоном решил? Когда уже покажешь готовый вариант - Orange Pi+DAC+AMP с Passive POE и в корпусе? Созрел пойти по твоим стопам - теперь думаю что закладывать в помещениях под это дело - получается как минимум патчкорд до удобного размещения корпуса, от него пойдут 2 акустических кабеля на потолочные динамики...
А как же быть с будущим Джарвисом??? Он же должен слушать, а микрофона в Orange Pi One нет! Печалька...
Я так понимаю можно купить адаптеры Wi-Fi->analog audio, подключить их к усилителю (вот интересное решение - https://geektimes.ru/post/280560/) и, используя API (https://www.npmjs.com/package/chromecast-api) воспроизводить аудио контент на нужных адаптерах (в зависимости от нахождения людей в помещениях).
Хотя, я бы хотел сделать ПД на Ethernet... но доступных "коробочных" решений вроде как нет (не считая Ubiquiti AC-PRO-EDU за 25 т.р.).
Интересно, у мистера MSapogov какой-нибудь готовый удачный "коробочный" вариант с допиливанием нарисовался? Михаил, вопрос с фоном решил? Когда уже покажешь готовый вариант - Orange Pi+DAC+AMP с Passive POE и в корпусе? Созрел пойти по твоим стопам - теперь думаю что закладывать в помещениях под это дело - получается как минимум патчкорд до удобного размещения корпуса, от него пойдут 2 акустических кабеля на потолочные динамики...
А как же быть с будущим Джарвисом??? Он же должен слушать, а микрофона в Orange Pi One нет! Печалька...
Re: RE: Re: Проектирование мультирума.
MSapogov писал(а):Карты памяти использую Sandisk Ultra 10 class 16 Gb, считаю что это расходный материал. Всегда есть бэкап рабочей системы.
[spoiler][/spoiler]
Re: Проектирование мультирума.
В Orange Pi Zero есть (на плате расширения) и вроде как работает (по крайней мере сделав звонок на запущенный на апельсинке linphone я достаточно хорошо себя слышал).Alex_Jet писал(а): А как же быть с будущим Джарвисом??? Он же должен слушать, а микрофона в Orange Pi One нет! Печалька...
Но не уверен что хватит ресурсов постоянно слушать/распознавать...
P.S. Кстати насчет локальных кнопок для регулировки громкости и т.д.
На плате расширения к Orange Pi Zero стоит IR receiver, в базовом armbian'е уже lirc стоит...
Re: RE: Re: Проектирование мультирума.
А у меня Orange Pi из поставки от мистер MSapogov не запустилась ни от одной из двух имеющихся Sandisk (8Gb и 16Gb - E516G1541) и Qumo (MNCTR08GCBHY-MP), а зашелестела только от карточки Sony (SR-8UYA - Read up to 70MB/s). Еще прикупил одну Sony (SR-8UY3A - Read up to 90MB/s), но еще не испытывал с Orange Pi.SolarW писал(а):MSapogov писал(а):Карты памяти использую Sandisk Ultra 10 class 16 Gb, считаю что это расходный материал. Всегда есть бэкап рабочей системы.
Сейчас рассмотрел хорошую фотку Orange Pi One и эврика! Там есть контакты, помеченные как Line In, Mic In - можно подпаяться, все равно микрофон надо выносить. Вообще по моей задумке Orange Pi One должна выступать в роли шлюза Ethernet->Analog Audio с возможностью управления усилителем (вкл/выкл, громкость) и чувствительностью микрофона. Тот же sphincs надо разворачивать как минимум на Raspberri PI3.
А такой DAC никто не пробовал? - http://www.banggood.com/ru/HIFI-DAC-Aud ... 71974.html правда не бюджетно...надо еще посмотреть.
Последний раз редактировалось Alex_Jet 03 фев 2017, 05:13, всего редактировалось 1 раз.
Re: RE: Re: Проектирование мультирума.
https://ru.aliexpress.com/af/raspberry-pi-hifi-dac.html - вроде аналогичные подешевле светятся...Alex_Jet писал(а):А такой DAC никто не пробовал? - http://www.banggood.com/ru/HIFI-DAC-Aud ... 71974.html правда не бюджетно...надо еще посмотреть.
Re: Проектирование мультирума.
На второй странице свой первый пост я начал со слов
"Сначала проверял на Raspberry Pi2 (piCorePlayer) + PCM5122 + TDA7492, затем все удешивил до минимума."
Да, эта плата и rasperry pi2 (piCorePlayer) и TDA7492 живут у меня до сих пор.
Вот к ним дисплей 2004 (пришел ко мне вчера) и кнопки переделать не составляет труда... https://github.com/terba/slimmer
С DAC на PCM5122 можно смело взять сигнал управления усилком с резистора 13 рядом с зеленым светодиодом D2.
И подать его на нужную ногу TDA7492 (см. тут http://forum.iobroker.net/viewtopic.php ... 983#p50883)
Да там можно к чему угодно на плате подпаяться - http://forum.armbian.com/index.php/topi ... -receiver/
Питание PoE не использую, т.к. Усилок всеравно питать, а там минимум 12В 2А.
Хотя и можно если Orange Pi one + PAM8403 , то и DC-DC от 24В хватит заглаза (но незабываем, что без DAC правильно управлять усилком не получится).
Пока все без корпусов... На кухне на шкафах и в детской тоже на шкафах... Невидно и это главное .
"Сначала проверял на Raspberry Pi2 (piCorePlayer) + PCM5122 + TDA7492, затем все удешивил до минимума."
Да, эта плата и rasperry pi2 (piCorePlayer) и TDA7492 живут у меня до сих пор.
Вот к ним дисплей 2004 (пришел ко мне вчера) и кнопки переделать не составляет труда... https://github.com/terba/slimmer
С DAC на PCM5122 можно смело взять сигнал управления усилком с резистора 13 рядом с зеленым светодиодом D2.
И подать его на нужную ногу TDA7492 (см. тут http://forum.iobroker.net/viewtopic.php ... 983#p50883)
Да там можно к чему угодно на плате подпаяться - http://forum.armbian.com/index.php/topi ... -receiver/
Питание PoE не использую, т.к. Усилок всеравно питать, а там минимум 12В 2А.
Хотя и можно если Orange Pi one + PAM8403 , то и DC-DC от 24В хватит заглаза (но незабываем, что без DAC правильно управлять усилком не получится).
Пока все без корпусов... На кухне на шкафах и в детской тоже на шкафах... Невидно и это главное .
Re: Проектирование мультирума (ESP8266 remote control to Squeezebox server)
Решил переставить Вашему вниманию, еще один из способов управлять Вашим плеером, кроме хардварных кнопок (у кого они есть) и WEB интерфейсов и смартфонов.
Если у Вас имеется установленные Logitech Media Server, а также один или несколько плееров подключенных к нему, то вопрос локального управления этими плеерами у Вас когда нибудь да возникнет, как возник у меня.
Дети услышат музыку играющюю в столовой, попросят что-бы у них она тоже заиграла, берешь свой телефон и добавляешь их плеер в синхногруппу (для синхроного воспроизведения) со столовой. Все наслаждаются музыкой. Но их нежелание на телефоне самим управлять громкостью и воспроизведением меня начало бесить... Как говорится сам сделал, сам и включай и выключай музыку. Чем самым озадачил себя сделать локальное управление проигрывателями описаными здесь - http://forum.iobroker.net/viewtopic.php?f=33&t=4983
Т.к с неделя понять как заставить работать с кнопками (по прерываниям) в Orange Pi прошла безуспешно, то решил взять, то с чем у меня когда-то получалось это делать. Тем более в наличии еще и целая горсть ESP8266-12E.
Пока все параметры задаются в скетче, но постепенно буду дописывать и переделывать, что-бы можно было указать параметры wifi, сервер и плеер через WEB сервер ESP-шки. А в дальнейшем можно будет сделать и через меню на OLED дисплее с сохранем этих данных во Flash памяти.
Беглое изучение управления CLI (http://адрес_вашего_сервера:9000/html/docs/cli-api.html) привело к появлению на свет первого варианта вполне рабочего кода:[spoiler][/spoiler]
Для отладки использовал платку "ESP8266 Witty Cloud".
По тексту есть коментарии так, что можно понять как работает.
Пока работает так:
Включение/выключение - долгое удержание кнопки
Играть - короткое нажатие на кнопку
Пауза - двойное нажатие
Громкость +1 или -1 - крутилка энкодера (можно изменить на +-2,3,5 %)
Причем громкость передается только если состояние питания у проигрывателя - включено.
Будет добавлено еще 2 кнопки вперед и назад (это команды "playlist index +1" и "playlist index -1")
Ну и постараюсь добавить управление по MQTT.
Понимаю, что много необходимо оптимизировать, а может и условия проверять по другому, но пока сделал так, как умею.
PS: Очень хочется русского шрифта для библиотеки SSD1306 https://github.com/squix78/esp8266-oled-ssd1306
Если у Вас имеется установленные Logitech Media Server, а также один или несколько плееров подключенных к нему, то вопрос локального управления этими плеерами у Вас когда нибудь да возникнет, как возник у меня.
Дети услышат музыку играющюю в столовой, попросят что-бы у них она тоже заиграла, берешь свой телефон и добавляешь их плеер в синхногруппу (для синхроного воспроизведения) со столовой. Все наслаждаются музыкой. Но их нежелание на телефоне самим управлять громкостью и воспроизведением меня начало бесить... Как говорится сам сделал, сам и включай и выключай музыку. Чем самым озадачил себя сделать локальное управление проигрывателями описаными здесь - http://forum.iobroker.net/viewtopic.php?f=33&t=4983
Т.к с неделя понять как заставить работать с кнопками (по прерываниям) в Orange Pi прошла безуспешно, то решил взять, то с чем у меня когда-то получалось это делать. Тем более в наличии еще и целая горсть ESP8266-12E.
Пока все параметры задаются в скетче, но постепенно буду дописывать и переделывать, что-бы можно было указать параметры wifi, сервер и плеер через WEB сервер ESP-шки. А в дальнейшем можно будет сделать и через меню на OLED дисплее с сохранем этих данных во Flash памяти.
Беглое изучение управления CLI (http://адрес_вашего_сервера:9000/html/docs/cli-api.html) привело к появлению на свет первого варианта вполне рабочего кода:[spoiler]
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <Rotary.h> // Rotary-master https://github.com/brianlow/Rotary
#include <OneButton.h> // OneButton https://github.com/mathertel/OneButton
#include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306.h" // SSD1306 https://github.com/squix78/esp8266-oled-ssd1306
Rotary encoder = Rotary(D1, D2); // Выход энкодера GPIO5 и GPIO4
OneButton button(D5, true); // Кнопка энкодера GPIO 14
SSD1306 display(0x3c, D3, D4); // D3 (GPIO0) и D4 (GPIO2)
const char* ssid = "*******";
const char* password = "**********";
const char* server = "192.168.11.1";
const int port = 9090;
int power = 0;
int vol = 0;
//String player = "00%3A00%3A00%3A00%3A00%3A1f";
String player = "aa%3Aaa%3A5e%3A01%3Ad1%3A02";
WiFiClient client;
void connectWifi() {
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
display.clear();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_CENTER_BOTH);
display.drawString(DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, "Ready to work:\n" + WiFi.localIP().toString());
display.display();
}
// Подпрограмма передачи команды на сервер
void clitx(String cmd) {
Serial.print("Send to LMS: ");
Serial.print(player + " " + cmd + "\r\n");
// This will send the request to the server
client.print(player + " " + cmd + "\r\n");
}
// Подпрограмма обработки одиночного нажатия
void ClickFunction() {
Serial.println("Click.");
clitx("mode play");
digitalWrite(D6, 1);
delay(5);
digitalWrite(D6, 0);
}
// Подпрограмма обработки двойного нажатия
void DoubleclickFunction() {
Serial.println("Doubleclick..");
if (power) {
clitx("mode pause");
digitalWrite(D6, 1);
delay(5);
digitalWrite(D6, 0);
}
}
// Подпрограмма обработки долгого удержания
void LongPressStartFunction() {
Serial.println("LongPress start");
digitalWrite(D6, 1);
delay(5);
digitalWrite(D6, 0);
if (!power){
clitx("power 1");
power=1;
return;
}
if (power) {
clitx("power 0");
power=0;
return;
}
}
// Подпрограмма обработки удержания (не используется пока)
void LongPressFunction() {
Serial.println("LongPress...");
}
// Подпрограмма обработки отпускания после долгого удержания (не используется пока)
void LongPressStopFunction() {
Serial.println("LongPress stop");
}
// Подпрограмма обработки вращения против направления движения часовой стрелки
void LeftRotation() {
Serial.println("LeftRotation.");
if (power) {
clitx("mixer volume -1");
digitalWrite(D6, 1);
delay(5);
digitalWrite(D6, 0);
}
}
// Подпрограмма обработки вращения по направлению движения часовой стрелки
void RightRotation() {
Serial.println("RightRotation.");
if (power) {
clitx("mixer volume +1");
digitalWrite(D6, 1);
delay(5);
digitalWrite(D6, 0);
}
}
// Подпрограмма подписывания и получния текущих значений
void clisubscribe(){
delay(100);
client.connect(server, port);
delay(100);
//clitx("subscribe mode"); // подписываемся на оповещение об изменении статуса
//delay(10);
clitx("subscribe mixer,power,pause,play,stop"); // подписываемся на оповещение об изменении статуса
delay(10);
clitx("mixer volume ?"); // получаем текущие параметры
delay(10);
clitx("power ?");
delay(10);
clitx("mode ?");
delay(10);
clitx("playlist index ?");
delay(10);
}
void drawProgressBarVolume(int vol) {
display.clear();
//int vol = (vol / 5) % 100;
// draw the progress bar
display.drawProgressBar(0, 51, 127, 12, vol);
// draw the percentage as String
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(10, 30, "Громкость " + String(vol) + "%");
display.display();
}
void setup() {
power = 0; // присdаиваем питанию временное значение 0
pinMode(D8, OUTPUT); //POWER - Red led (статус питания плеера)
pinMode(D6, OUTPUT); //TX to LMS - Green led (вспыхивает когда передается команда на сервер)
Serial.begin(115200);
Serial.println("Power ON...");
Serial.println ("Connect to Router requested");
display.init();
display.flipScreenVertically();
display.setContrast(255);
display.setFont(ArialMT_Plain_10);
connectWifi(); // signal WiFi connected
Serial.print("Free Heap[B]: ");
Serial.println(ESP.getFreeHeap());
// give the WiFi a second to initialize:
delay(500);
Serial.print("connecting to ");
Serial.print(server);
Serial.print(":");
Serial.println("9090");
if (!client.connect(server, port)) {
Serial.println("connection failed");
return;
}
Serial.println("connection OK");
delay(10);
clisubscribe();
delay(100);
client.println();
delay(200);
if (client.available()) Serial.println("CLI available...");
digitalWrite(D6, LOW);
digitalWrite(D8, LOW);
button.attachClick(ClickFunction);
button.attachDoubleClick(DoubleclickFunction);
button.attachLongPressStart(LongPressStartFunction);
//button.attachLongPressStop(LongPressStopFunction);
//button.attachDuringLongPress(LongPressFunction);
//vol = 0;
//drawProgressBarVolume(vol);
}
void loop() {
button.tick();
unsigned char rotary = encoder.process();
if (rotary == DIR_NONE) {
// do nothing
}
else if (rotary == DIR_CW) {
LeftRotation();
}
else if (rotary == DIR_CCW) {
RightRotation();
}
while(client.available()){
String clirx = client.readStringUntil('\r\n');
Serial.println("Recieving: " + clirx);
if ( clirx == (player + " power 1 \r") ||
clirx == (player + " power 1\r") ||
clirx == (player + " power 1 1\r")) {
digitalWrite(D8, HIGH);
power = 1;
}
if ( clirx == (player + " power 0 \r") ||
clirx == (player + " power 0\r")) {
digitalWrite(D8, LOW);
power = 0;
}
if (clirx.startsWith(player + " mixer volume")) {
Serial.println("Change mixer volume " + clirx.substring(41));
if (clirx.substring(41).startsWith("-")) {
Serial.println("Volume -" + clirx.substring(42));
if (vol >= 0) vol = vol-clirx.substring(42).toInt();
if (vol < 0) vol =0;
drawProgressBarVolume(vol);
}
if (clirx.substring(41).startsWith("%2B")) {
Serial.println("Volume +" + clirx.substring(44));
if (vol <= 100) vol = vol+clirx.substring(44).toInt();
if (vol > 100) vol = 100;
drawProgressBarVolume(vol);
}
if (!clirx.substring(41).startsWith("-") && !clirx.substring(41).startsWith("%2B")) {
Serial.println("Volume set to " + clirx.substring(41));
vol = clirx.substring(41).toInt();
drawProgressBarVolume(vol);
}
}
// еще можно анализировать ответы...
}
String clirx="";
// проверка что есть соединение, если нет, то перезапуск
if (client.connected() != 1 || WiFi.status() != WL_CONNECTED)
{
Serial.print("Reconnect to CLI ");
client.connect(server, port);
while (!client.connect(server, port)) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Reconnect OK.");
//ESP.reset();
clisubscribe();
}
// идем дальше...
}
Для отладки использовал платку "ESP8266 Witty Cloud".
По тексту есть коментарии так, что можно понять как работает.
Пока работает так:
Включение/выключение - долгое удержание кнопки
Играть - короткое нажатие на кнопку
Пауза - двойное нажатие
Громкость +1 или -1 - крутилка энкодера (можно изменить на +-2,3,5 %)
Причем громкость передается только если состояние питания у проигрывателя - включено.
Будет добавлено еще 2 кнопки вперед и назад (это команды "playlist index +1" и "playlist index -1")
Ну и постараюсь добавить управление по MQTT.
Понимаю, что много необходимо оптимизировать, а может и условия проверять по другому, но пока сделал так, как умею.
PS: Очень хочется русского шрифта для библиотеки SSD1306 https://github.com/squix78/esp8266-oled-ssd1306
Re: Проектирование мультирума.
В ней очень красивые шрифты?
Уж очень прожорливый способ их формирования.
А что там сейчас вместо русских букв выводится?
Уж очень прожорливый способ их формирования.
А что там сейчас вместо русских букв выводится?
Re: Проектирование мультирума.
Да уж...хардкорно со скетчами то...
То есть это будет wi-fi автономная (на Li-Pol АКБ) мини управлялка каждой звуковой зоной? Блин, мне наоборот кажется, что в помещениях преимущественного пребывания людей необходимо просто поставить где-то постоянно включенный в дневное время планшет с развернутым на полный экран веб-браузером/приложением для управления всем домом!
Русские шрифты (2 вида, 2 размера) есть у Андрея в виде PHP-библиотеки:) можно подумать как подключить.
То есть это будет wi-fi автономная (на Li-Pol АКБ) мини управлялка каждой звуковой зоной? Блин, мне наоборот кажется, что в помещениях преимущественного пребывания людей необходимо просто поставить где-то постоянно включенный в дневное время планшет с развернутым на полный экран веб-браузером/приложением для управления всем домом!
Русские шрифты (2 вида, 2 размера) есть у Андрея в виде PHP-библиотеки:) можно подумать как подключить.
Re: Проектирование мультирума.
Сейчас там обычный Arial. Cейчас вместо русских букв то пустота, то непонятно что...k_w_m писал(а):В ней очень красивые шрифты?
Уж очень прожорливый способ их формирования.
А что там сейчас вместо русских букв выводится?
Есть компилятор шрифтов для этой библиотеки - http://oleddisplay.squix.ch, но Русского шрифта я там не нашел.
Это будет скорее всего обычный блок в подразетник с экраном и крутилкой с питанием 220В-5В.Alex_Jet писал(а):Да уж...хардкорно со скетчами то...
То есть это будет wi-fi автономная (на Li-Pol АКБ) мини управлялка каждой звуковой зоной? Блин, мне наоборот кажется, что в помещениях преимущественного пребывания людей необходимо просто поставить где-то постоянно включенный в дневное время планшет с развернутым на полный экран веб-браузером/приложением для управления всем домом!
Русские шрифты (2 вида, 2 размера) есть у Андрея в виде PHP-библиотеки:) можно подумать как подключить.
Уже подумал, что можно сделать что-то типа MQTT OLED дисплея... Например - https://www.youtube.com/watch?v=HE-3FGcSKfI
А то просто громкостью управлять уже не хочется, а хочу и температурой, вентиляцией, жалюзями, светом....
"И осталась старуха у разбитого корыта..." А.С. Пушкин.