5 posts tagged

Logitech Media Server

Управление LMS on the OrangePI при помощи энкодера

Дополнение для Logitech Media Server (LMS) on the OrangePI PC

Регулирует громкость и при нажатии кнопки энкодера включает паузу.
Энкодер с кнопкой удалось подключить без использования подтягивающих резисторов, работает на прерываниях очень стабильно, cpu вообще не грузит, загрузка памяти 0.1%, наводки на монтаж отсутствуют.
Проверял с проводами к энкодеру в 20 см.

Тестировал на ARMBIAN 5.31 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepipc:~# uname -a
Linux orangepipc 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux

Используем библиотеку WiringOtherPi
ставим WiringOtherPi :

git clone https://github.com/lanefu/WiringOtherPi.git
cd WiringOtherPi
sudo ./build
cd ..

в основе код drogonа, автора Wiring Pi с форума https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=125225

#include <stdio.h>
#include <errno.h>
#include <wiringPi.h>

#define   PIN_A   8
#define   PIN_B   9
#define BUTTON_PIN 7

#define   DEBOUNCE   5

static volatile int counter ;
// -------------------------------------------------------------------------
// the event counter
volatile int eventCounter = 0;

void myInterrupt(void) {
  eventCounter++;
}

// -------------------------------------------------------------------------
void encoder (void)
{
  static unsigned int debounce = 0 ;

// If PIN_A is high then ignore it
//   This may be due to bouncing, or a bug/feature of the edge detect

  if (digitalRead (PIN_A) == HIGH) return ;

// Ignore multiple interrupts inside our debounce time

  if (millis () < debounce) return ;
  if (digitalRead (PIN_B) == LOW)   // Anti-clockwise
    --counter ;
  else
    ++counter ;
  debounce = millis () + DEBOUNCE ;
}

int main ()
{
  int last ;
  last = counter = 0 ;
  wiringPiSetup () ;
    pinMode(PIN_A, INPUT);
    pinMode(PIN_B, INPUT);
    pullUpDnControl(PIN_A, PUD_UP);
    pullUpDnControl(PIN_B, PUD_UP);
// -------------------------------------------------------------------------
  pinMode(BUTTON_PIN, INPUT);
  pullUpDnControl (BUTTON_PIN, PUD_UP) ;
  wiringPiISR (BUTTON_PIN, INT_EDGE_FALLING, myInterrupt) ;
 // -------------------------------------------------------------------------

  wiringPiISR (PIN_A, INT_EDGE_FALLING, encoder) ;

  printf ("\nRunning... \n") ;

  for (;;)
  {
// -------------------------------------------------------------------------
    if (eventCounter != 0) system("curl http://192.168.0.3:9000/status.html?p0=pause");
    eventCounter = 0;
// -------------------------------------------------------------------------
    if (counter != last)
    {
    if (counter > last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=%2B5'");
    if (counter < last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=-5'");
    last = counter ;
    }
// -------------------------------------------------------------------------
    delay( 100 ); // wait 0.1 second
// -------------------------------------------------------------------------
    
  }

  return 0 ;
}

Для компиляции этого кода скачаем исходник:

wget https://raw.githubusercontent.com/ua3nbw-cf/gpiokey/master/encoder.c

меняем в коде 192.168.0.3 на свой IP адрес и компилируем:

gcc -o encoder encoder.c -lpthread -lwiringPi -lwiringPiDev

запуск

./encoder
2017   armbian   GPIO   Logitech Media Server   OrangePI PC

LMS on the OrangePI (Armbian Ubuntu xenial)

Logitech Media Server (LMS) Ставил на Armbian_5.25_Orangepipc_Ubuntu_xenial_default_3.4.113_desktop

apt-get update && apt-get upgrade -y

Ночные сборки Logitech Media Server: Debian Installer Package (ARM)
http://downloads.slimdevices.com/nightly/?ver=7.9

последнюю сборку можно установить автоматом выполнив скрипт в терминале:

latest_lms=$(wget -q -O - "http://www.mysqueezebox.com/update/?version=7.9.1&revision=1&geturl=1&os=deb")
mkdir -p /tmp/sources && cd /tmp/sources
wget $latest_lms
lms_deb=$(echo $latest_lms|cut -d "/" -f8)
dpkg -i $lms_deb
service logitechmediaserver stop
wget http://ua3nbw.ru/files/deb/CPAN.tar.gz
tar -xzvf CPAN.tar.gz -C /usr/share/squeezeboxserver

в файл /etc/rc.local вставляем строку:


chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver


запуск сервера:

chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver
service logitechmediaserver start

рулим сервером: http://Ip_вашей_OrPI:9000/

squeezelite для Ubuntu

Аудио плеер squeezelite с дополнительными опциями – поддержка ffmpeg, lirc, DSD over PCM (DoP).

встроена опция -S Absolute path to script to launch on power commands from LMS
для вкл/выкл плеера в LMS. Что-бы включать выключать усилитель мощности.

wget http://ua3nbw.ru/files/deb/squeezelite_ubuntu.tar.gz
tar xzvf squeezelite_ubuntu.tar.gz
mv squeezelite /usr/bin
mv gpiopower.sh /usr/local/bin
apt install libflac8 libmad0 libvorbisfile3 libfaad2 libmpg123-0 libavcodec-ffmpeg56 libavformat-ffmpeg56

запуск плеера с опцией S

squeezelite -o hw:CARD=audiocodec,DEV=0 -S /usr/local/bin/gpiopower.sh

редактируя скрипт gpiopower.sh , можно менять GPIO_OUT.
по умолчанию используется 28 нога гребёнки.
логическая единица на этом gpio – сигнал выключения усилителя.

Тут про установку squeezelite на debian Аудио плеер squeezelite с дополнительными опциями.

2017   armbian   Logitech Media Server   OrangePI PC

Аудио плеер squeezelite с дополнительными опциями.

Дополнение для Logitech Media Server (LMS) on the OrangePI PC
Собрал squeezelite с гита: squeezelite
с опциями: LINUX ALSA EVENTFD RESAMPLE FFMPEG VISEXPORT IR GPIO DSD LINKALL

поддержка ffmpeg, lirc, DSD over PCM (DoP).
встроена опция -S Absolute path to script to launch on power commands from LMS
для вкл/выкл плеера в LMS. Что-бы включать выключать усилитель мощности.
по умолчанию используется 28 нога гребёнки.
тестировал на

uname -a
Linux orangepipc 3.4.113-sun8i #10 SMP PREEMPT Thu Feb 23 19:55:00 CET 2017 armv7l GNU/Linux

Установка плеера squeezelite:

apt upgrade
apt install ffmpeg libmad0 libvorbisfile3 libfaad2  libmpg123-0 libavcodec56  libavformat56  liblircclient0 
wget http://ua3nbw.ru/files/squeezelite-armv6hf.tar.gz
tar xzvf squeezelite-armv6hf.tar.gz
mv squeezelite-armv6hf /usr/bin
mv gpiopower.sh /usr/local/bin

запуск плеера с опцией S

squeezelite-armv6hf -o hw:CARD=audiocodec,DEV=0 -S /usr/local/bin/gpiopower.sh

редактируя скрипт gpiopower.sh , можно менять GPIO_OUT.
логическая единица на этом gpio – сигнал выключения усилителя.

2017   armbian   ffmpeg   GPIO   Logitech Media Server   OrangePI PC

Энкодер и кнопки мыши для OrangePi

Несколько кнопок и колесо от старой мыши легко приспособить для управления например плеером.
Правда используем гнездо USB, зато просто и без пайки. Работает и с беспроводной мышью.

форкнул keybinder

проверим, есть ли устройство ввода:
cat /proc/bus/input/devices ищем номер event

cat /proc/bus/input/devices
[...]
I: Bus=0003 Vendor=0603 Product=1605 Version=0110
N: Name="USB Device HID Compliant Device"
P: Phys=usb-sunxi-ehci-1.1/input1
S: Sysfs=/devices/platform/sunxi-ehci.4/usb4/4-1/4-1.1/4-1.1:1.1/input/input4
U: Uniq=
H: Handlers=kbd mouse1 event4
B: PROP=0
B: EV=17
B: KEY=c 0 0 0 0 1f0000 0 2020000 3878 d801d001 1e0000 0 0 0
B: REL=143
B: MSC=10
[...]

наш event4
тестируем:
evtest /dev/input/event4
жмакаем кнопками мыши

evtest /dev/input/event4

Event: time 1488402140.580578, -------------- EV_SYN ------------
Event: time 1488402140.700410, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1488402140.700424, type 1 (EV_KEY), code 273 (BTN_RIGHT), value 0
Event: time 1488402140.700509, -------------- EV_SYN ------------
Event: time 1488402143.244422, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1488402143.244440, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Event: time 1488402143.244520, -------------- EV_SYN ------------
Event: time 1488402143.396276, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1488402143.396288, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 0
Event: time 1488402143.396323, -------------- EV_SYN ------------

ставим keybinder

git clone https://github.com/ua3nbw-cf/keybinder
cd keybinder
make install

смотрим Keycode мыши:
снова жмакаем кнопками мыши и крутим колёсико мыши
keybinder /dev/input/event4

keybinder /dev/input/event4

Reading key input from /dev/input/event4 (USB Device HID Compliant Device)
Loaded config items
Keycode 3 pressed
Keycode 1 pressed
Keycode 172 pressed
Keycode 173 pressed
Keycode 174 pressed

...............................................
Идем /etc/ правим keybinder.conf

3,amixer set “Lineout volume control” 1+
1,amixer set “Lineout volume control” 1-
173,echo none | sudo tee “/sys/class/leds/red_led/trigger”
172,echo heartbeat | sudo tee “/sys/class/leds/red_led/trigger”
................................................
тест:keybinder /dev/input/event4
колесом управляем громкостью, а кнопками играем красным светодиодом на плате :).

Для автозапуска после перезагрузки
Идем /etc/ правим rc.local ……………..
до строки exit
добавляем строку

/usr/local/bin/keybinder /dev/input/event4 >/dev/null &

2017   armbian   Logitech Media Server   mouse

Logitech Media Server (LMS) on the OrangePI PC

Для прослушивания музыкальных файлов сетевые плееры линейки Squeezebox
используют собственный сервер Logitech Media Server (LMS) (ранее SlimServer, SqueezeCenter, Squeezebox Server).

Преимущества:
•бесплатное и чисто программное решение
•поддержка интернет радиостанций
•поддержка обложек
•поддержка библиотеки iTunes
•поддержка .flac и HiRes
•онлайн радио
•можно дополнительно установить squeezebox emulator for linux

Возможность приема WEB радио
Возможность мультизонности
Возможность синхронизации зон в любом сочетании
Возможность подгрузки всяких плагинов и сервисов.
Красочный и широфункциональный WEB интерфейс и интерфейсы утилит управления под iOS и Android.
(наличие WEB интерфейса это возможность дистанционного управление мультирум системой извне , из интернета)

Installing Logitech Media Server (LMS) on the OrangePI PC

apt-get update && apt-get upgrade -y
apt-get install libpng12-0 libgif4 libexif12 -y

Ночные сборки Logitech Media Server: Debian Installer Package (ARM)
http://downloads.slimdevices.com/nightly/?ver=7.9

Копируем адрес ссылки Logitech Media Server: Debian Installer Package (ARM)
на момент написания поста это:
http://downloads.slimdevices.com/nightly/7.9/sc/a519d5e/logitechmediaserver_7.9.1~1504317335_arm.deb

wget http://downloads.slimdevices.com/nightly/7.9/sc/a519d5e/logitechmediaserver_7.9.1~1504317335_arm.deb
dpkg -i logitechmediaserver_*.deb

рулим сервером: http://Ip_вашей_OrPI:9000/

Installing Squeezelite (squeezebox emulator for linux) on the OrangePI PC

Управление проигрыванием осуществляется через WEB-интерфейс программы-сервера или программой-пультом управления на планшете/телефоне с Андроидом или iOS.
Выполним в консоли:

apt-get install flac libflac-dev libfaad2 libmad0 libasound2-dev libmad0-dev libvorbis-dev libvo-aacenc-dev libmpg123-dev -y
wget https://raw.githubusercontent.com/Hypfer/squeezelite-downloads/master/squeezelite-armv6hf
mv squeezelite-armv6hf /usr/bin
cd /usr/bin
chmod u+x squeezelite-armv6hf

запуск squeezebox emulator (Вывод звука на встроенную звуковуху)

squeezelite-armv6hf -o hw:CARD=audiocodec,DEV=0

запуск на Mainline ядре armbian:

amixer -c 0 -q set "Line Out"  100%+ unmute
amixer -c 0 -q set "DAC"  100%+ unmute
squeezelite-armv6hf -o hw:CARD=Codec,DEV=0

Про более функциональный плеер Аудио плеер squeezelite с дополнительными опциями.

Создаем service-файл squeezelite.service в директории /lib/systemd/system/

[Unit]
Description=Squeezelite (squeezebox emulator for linux)
After=multi-user.target
[Service]
Type=simple
ExecStart= /usr/bin/squeezelite-armv6hf -o hw:CARD=audiocodec,DEV=0 -n AUD_Orangeri -m 00:00:00:00:00:01
[Install]
WantedBy=multi-user.target

в PuTTY выполните:

systemctl daemon-reload

Включить только что созданный файл сервиса в автозагрузку и запустить squeezelite:

systemctl enable squeezelite.service
systemctl start squeezelite.service

JiveLite – cut down squeezebox control application on the OrangePI PC

управление сервером , через сенсорный экран подкюченный к OrPi через hdmi
Для задач, критичных по времени, имеется JIT-компилятор Lua — luajit:

установка библеотек:

apt-get install git make gcc libsdl1.2-dev libsdl-ttf2.0-dev libsdl-image1.2-dev libsdl-gfx1.2-dev libexpat1-dev -y
инсталяция и сборка luajit:
git clone http://luajit.org/git/luajit-2.0.git
cd luajit-2.0
make
make install
ldconfig
cd ..

инсталяция и сборка jivelitet:

git clone https://github.com/ralph-irving/jivelite.git
cd jivelite
make
cd ..

для первого запуска и настройки к OrPi подключаем hdmi или (vga монитор через переходник) клавиатуру или мышь
запуск jivelitet из консоли PyTTy

/root/jivelite/bin/jivelite

Включить jivelitet в автозагрузку

nano /lib/systemd/system/jivelite.service

nano /lib/systemd/system/jivelite.service


[Unit]
Description=jivelite (jivelite squeezebox emulator for linux)
After=logitechmediaserver.service
[Service]
Type=simple
ExecStart= /root/jivelite.sh
[Install]
WantedBy=multi-user.target


Сохраняем изменения в файле (ctrl + o) и закрываем файл (ctrl + x).

nano start_jivelite.sh

#!/bin/bash
{
#Exit path for non-root logins.
if (( $UID != 0 )); then
clear
echo -e “\n ERROR: You do not have root privileges.\n Please login as root, or, use:\n sudo /root/login\n”

exit
fi
sudo -u root /root/jivelite/bin/jivelite >>/dev/null 2>>/dev/null
exit
}


Сохраняем изменения в файле (ctrl + o) и закрываем файл (ctrl + x).

chmod +x start_jivelite.sh

Now start the Desktop and Jivelite :

systemctl daemon-reload
systemctl enable jivelite.service
systemctl start jivelite.service
reboot

Подключение и настройка
Тема на форуме orangepi.pp.ua
Имидж LMS, модули I2S встроены в ядро
password orangepi
управление LMS по адресу http://orangepi:9000/
Управление LMS on the OrangePI при помощи энкодера

2016   armbian   Logitech Media Server   OrangePI PC