Проектирование мультирума.

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: Проектирование мультирума.

Сообщение SolarW » 03 янв 2017, 12:12

MSapogov, интересная статья на тему как продлить жизнь одноплатнику.
https://geektimes.ru/post/283802/
Думаю что в статье и в коментах найдете интересное и для апельсинок.

vova5049
Сообщения: 26
Зарегистрирован: 05 мар 2014, 17:27

Re: Проектирование мультирума.

Сообщение vova5049 » 08 янв 2017, 18:46

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

Код: Выделить всё

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.
получалось ли у Вас использовать этот параметр на Orange Pi?
Последний раз редактировалось vova5049 08 янв 2017, 19:21, всего редактировалось 1 раз.

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума.

Сообщение MSapogov » 08 янв 2017, 19:21

"-G" для squeezelite оказалось что работаеттолько на Raspberry Pi !!!
С замедлением на USB ничего не подскажу, может попробывать в alsa конфиге частоту задать одинаковую на обоиз звуковушках...

vova5049
Сообщения: 26
Зарегистрирован: 05 мар 2014, 17:27

Re: Проектирование мультирума.

Сообщение vova5049 » 08 янв 2017, 20:45

MSapogov писал(а): С замедлением на USB ничего не подскажу, может попробывать в alsa конфиге частоту задать одинаковую на обоиз звуковушках...
C замедлением решилось так (в проблеме так и не разобрался)... вот список звуковых устройств:
[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
[/spoiler]

при выводе на front:CARD=Device,DEV=0 или на default:CARD=Devic - тональность занижается

при выводе на dmix:CARD=Device,DEV=0 - все отлично !!!

vova5049
Сообщения: 26
Зарегистрирован: 05 мар 2014, 17:27

Re: Проектирование мультирума.

Сообщение vova5049 » 08 янв 2017, 21:38

Рано обрадовался. Положил в медиатеку тестовые wav файлы с 1 кГц и 8-9 кГц
При воспроизведении первого - вместо 1000 Гц выходит 1076...1098 Гц
При воспроизведении второго - вместо 8000 и 9000 выходит 9259 Гц и 10357 Гц

Есть ли какие то мысли по этому поводу?

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: Проектирование мультирума.

Сообщение SolarW » 08 янв 2017, 23:35

Такс, начитавшись этой и аналогичных тем Михаила на других форумах не удержался и заказал пару апельсинок (Pi One и Pi Zero 512 с платой расширения), DAC и усилок - как приедут буду пробовать повторить конструкцию :-)
Последний раз редактировалось SolarW 08 янв 2017, 23:35, всего редактировалось 1 раз.

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: RE: Re: RE: Re: Проектирование мультирума.

Сообщение SolarW » 24 янв 2017, 17:19

MSapogov писал(а):PS: Данную реализацию я затеял после прочтения данной темы - http&#58;//orangepi&#46;pp&#46;ua/index ... 0&#46;html
Но для меня главное было правильно настроить микширование сигналов от разных программ.
Здравствуйте Михаил.

Приехали заказанные апельсинки и DAC (к концу недели и усилок должен доехать).
Есть к вам два вопроса, как к глубоко копавшему данную тему.

1. Есть какие-то тонкости если надо одновременно выводить звук от двух программ?
На пример сквиз играет музыку и одновременно идет звук от linphone (SIP-клиент)?

2. Есть ли какой-то вариант при наличии звука от linphone уменьшить громкость воспроизводимого сквизом?

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума.

Сообщение MSapogov » 25 янв 2017, 07:10

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 , но я непробывал.

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: Проектирование мультирума.

Сообщение SolarW » 26 янв 2017, 11:36

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. Усилитель приехал в город, на апельсинках засыхает термоклей которым радиаторы прицепил - осталось выкроить немного времени и можно заняться натурными экспериментами :-)

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума.

Сообщение MSapogov » 29 янв 2017, 11:43

Про установку DAC на OrangePI расписал более подробно на другом форуме - http://forum.iobroker.net/viewtopic.php?f=33&t=4983

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Проектирование мультирума.

Сообщение Alex_Jet » 02 фев 2017, 13:53

А кто-нибудь пробовал 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 нет! Печалька...

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: RE: Re: Проектирование мультирума.

Сообщение SolarW » 02 фев 2017, 14:20

MSapogov писал(а):Карты памяти использую Sandisk Ultra 10 class 16 Gb, считаю что это расходный материал. Всегда есть бэкап рабочей системы.
:-)
[spoiler]Изображение[/spoiler]

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: Проектирование мультирума.

Сообщение SolarW » 02 фев 2017, 14:27

Alex_Jet писал(а): А как же быть с будущим Джарвисом??? Он же должен слушать, а микрофона в Orange Pi One нет! Печалька...
В Orange Pi Zero есть (на плате расширения) и вроде как работает (по крайней мере сделав звонок на запущенный на апельсинке linphone я достаточно хорошо себя слышал).
Но не уверен что хватит ресурсов постоянно слушать/распознавать...

P.S. Кстати насчет локальных кнопок для регулировки громкости и т.д.
На плате расширения к Orange Pi Zero стоит IR receiver, в базовом armbian'е уже lirc стоит...

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: RE: Re: Проектирование мультирума.

Сообщение Alex_Jet » 02 фев 2017, 14:39

SolarW писал(а):
MSapogov писал(а):Карты памяти использую Sandisk Ultra 10 class 16 Gb, считаю что это расходный материал. Всегда есть бэкап рабочей системы.
:-)
А у меня 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.
Сейчас рассмотрел хорошую фотку 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 раз.

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: RE: Re: Проектирование мультирума.

Сообщение SolarW » 02 фев 2017, 15:20

Alex_Jet писал(а):А такой DAC никто не пробовал? - http://www.banggood.com/ru/HIFI-DAC-Aud ... 71974.html правда не бюджетно...надо еще посмотреть.
https://ru.aliexpress.com/af/raspberry-pi-hifi-dac.html - вроде аналогичные подешевле светятся...

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума.

Сообщение MSapogov » 02 фев 2017, 16:20

На второй странице свой первый пост я начал со слов
"Сначала проверял на 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 правильно управлять усилком не получится).
Пока все без корпусов... На кухне на шкафах и в детской тоже на шкафах... Невидно и это главное :-).

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума (ESP8266 remote control to Squeezebox server)

Сообщение MSapogov » 06 фев 2017, 06:28

Решил переставить Вашему вниманию, еще один из способов управлять Вашим плеером, кроме хардварных кнопок (у кого они есть) и 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]

Код: Выделить всё

#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();
       }
  // идем дальше...

}
[/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

k_w_m
Сообщения: 98
Зарегистрирован: 19 июл 2013, 13:41

Re: Проектирование мультирума.

Сообщение k_w_m » 06 фев 2017, 13:58

В ней очень красивые шрифты?
Уж очень прожорливый способ их формирования.
А что там сейчас вместо русских букв выводится?

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Проектирование мультирума.

Сообщение Alex_Jet » 06 фев 2017, 14:52

Да уж...хардкорно со скетчами то...
То есть это будет wi-fi автономная (на Li-Pol АКБ) мини управлялка каждой звуковой зоной? Блин, мне наоборот кажется, что в помещениях преимущественного пребывания людей необходимо просто поставить где-то постоянно включенный в дневное время планшет с развернутым на полный экран веб-браузером/приложением для управления всем домом!

Русские шрифты (2 вида, 2 размера) есть у Андрея в виде PHP-библиотеки:) можно подумать как подключить.

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Проектирование мультирума.

Сообщение MSapogov » 06 фев 2017, 14:57

k_w_m писал(а):В ней очень красивые шрифты?
Уж очень прожорливый способ их формирования.
А что там сейчас вместо русских букв выводится?
Сейчас там обычный Arial.
IMG_182457.jpg
IMG_182457.jpg (106.6 КБ) 5925 просмотров
IMG_182307.jpg
IMG_182307.jpg (78.61 КБ) 5925 просмотров
Cейчас вместо русских букв то пустота, то непонятно что...
Есть компилятор шрифтов для этой библиотеки - http://oleddisplay.squix.ch, но Русского шрифта я там не нашел.
Alex_Jet писал(а):Да уж...хардкорно со скетчами то...
То есть это будет wi-fi автономная (на Li-Pol АКБ) мини управлялка каждой звуковой зоной? Блин, мне наоборот кажется, что в помещениях преимущественного пребывания людей необходимо просто поставить где-то постоянно включенный в дневное время планшет с развернутым на полный экран веб-браузером/приложением для управления всем домом!

Русские шрифты (2 вида, 2 размера) есть у Андрея в виде PHP-библиотеки:) можно подумать как подключить.
Это будет скорее всего обычный блок в подразетник с экраном и крутилкой с питанием 220В-5В.
Уже подумал, что можно сделать что-то типа MQTT OLED дисплея... Например - https://www.youtube.com/watch?v=HE-3FGcSKfI
А то просто громкостью управлять уже не хочется, а хочу и температурой, вентиляцией, жалюзями, светом....
"И осталась старуха у разбитого корыта..." А.С. Пушкин.

Ответить