|
Использование HDMI-CEC на Raspberry Pi
В этом руководстве мы покажем вам, как управлять телевизором с помощью HDMI-CEC и Raspberry Pi. HDMI-CEC - это специальный протокол, предназначенный для связи телевизора с другим устройством по кабелю HDMI. Этот протокол позволяет телевизору управлять другим устройством, а также позволяет этому устройству управлять телевизором. В большинстве современных телевизоров реализована поддержка этого протокола, но ее часто приходится включать в настройках телевизора. Поиск модели вашего телевизора должен помочь вам найти то, что называется этой настройкой.
Используя протокол HDMI-CEC, вы можете использовать Raspberry Pi для управления телевизором множеством различных способов, таких как включение и выключение или изменение громкости.
Установка cec-client на Raspberry Pi
В этом разделе мы покажем вам простые шаги по установке cec-clientпрограммного обеспечения на Raspberry Pi. cec-client - это программный пакет, который мы будем использовать на Raspberry Pi для управления устройством по протоколу HDMI-CEC.
1. Наша первая задача - обновить список пакетов на Raspberry Pi, а также обновить установленные в данный момент пакеты.
Мы можем решить эту задачу, выполнив следующие две команды.
sudo apt update
sudo apt upgrade
Первая команда обновит список пакетов. Вторая команда обновит установленные пакеты.
2.Наш следующий шаг - установить cec-utilsпакет. Этот пакет содержит cec-clientпрограммное обеспечение, которое мы будем использовать позже в этом руководстве. Мы можем установить этот пакет на наш Raspberry Pi, выполнив следующую команду.
sudo apt install cec-utils
Используя инструменты, предоставляемые этим пакетом, мы сможем отправлять команды с помощью CEC через кабель HDMI, подключенный к нашему Raspberry Pi.
Взаимодействие с телевизором через HDMI-CEC с помощью Raspberry Pi
В этом разделе мы покажем вам различные способы использования cec-clientпрограммного обеспечения для взаимодействия с другими устройствами. В этом разделе вы заметите, что на каждом этапе мы будем делать несколько вещей. Первый - это использование echoи pipe ( |). Мы используем эти две вещи, чтобы передать команду напрямую cec-clientпрограммному обеспечению без необходимости его запуска. Кроме того, мы используем в программном обеспечении как опции, так -sи -dопции cec-client. Эта -sопция сообщает программе, что мы собираемся выполнить одну команду. Программное обеспечение запустится, выдаст команду и сразу же выйдет. -d 1Параметр устанавливает уровень отладки для программного обеспечения. Если установить его 1, cec-clientпрограмма будет отображать только ошибки. Этот параметр значительно уменьшает объем текста, который будет заливать консоль.
Сканирование устройств HDMI-CEC с вашего Raspberry Pi
1. Первое, что вам нужно сделать, это просканировать доступные устройства, которые заявляют, что имеют возможность CEC. Выполните поиск устройств с поддержкой HDMI-CEC, выполнив следующую команду на своем Raspberry Pi.
echo 'scan' | cec-client -s -d 1
2. С помощью этой команды вы должны увидеть список устройств, к которым ваш Raspberry Pi теперь имеет доступ. Вам необходимо определить устройство, с которым вы хотите взаимодействовать. Обычно поля « os string:» и « vendor:» помогут вам определить устройство, с которым вы хотите взаимодействовать. После того, как вы определили правильное устройство, запишите « address:» или номер устройства .
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #0: TV
address: 0.0.0.0
active source: no
vendor: Sony
osd string: TV
CEC version: 1.4
power status: standby
language: eng
device #1: Recorder 1
address: 1.0.0.0
active source: no
vendor: Pulse Eight
osd string: CECTester
CEC version: 1.4
power status: on
language: eng
device #4: Playback 1
address: 3.0.0.0
active source: no
vendor: Sony
osd string: PlayStation 4
CEC version: 1.3a
power status: standby
language: ???
Обратите внимание, что « device #1: Recorder 1» в этом примере - это собственное CEC-соединение Raspberry Pi, поэтому мы можем игнорировать его.
3.Например, если мы хотим управлять нашим телевизором Sony TV , мы можем увидеть, что номер устройства будет « 0», а адрес устройства - « 0.0.0.0». Как только у вас будет номер или адрес устройства , вы можете начать посылать ему команды.
Отправка команды включения через HDMI-CEC
Использование cec-clientдля включения устройства - относительно простой процесс.
echo 'on <DEVICEADDRESS>' | cec-client -s -d 1
Как видно из вышеизложенного, все, что нам нужно сделать, это отправить команду, onза которой следует адрес устройства или номер устройства.
Пример включения устройства через HDMI-CEC
Например, если мы хотим включить телевизор Sony с адресом « 0.0.0.0», мы воспользуемся командой, как показано ниже.
echo 'on 0.0.0.0' | cec-client -s -d 1
Отправка команды режима ожидания через HDMI-CEC
Если вы хотите выключить телевизор (перевести его в режим ожидания) с помощью Raspberry Pi, вы также можете легко сделать это с помощью HDMI-CEC.
echo 'standby <DEVICEADDRESS>' | cec-client -s -d 1
Чтобы перевести телевизор в режим ожидания, все, что вам нужно сделать, это отправить команду « standby», за которой следует адрес или номер устройства.
Пример выключения устройства через HDMI-CEC
Использовать эту команду относительно просто.
Чтобы перевести телевизор Sony в режим ожидания, все, что нам нужно сделать, это отправить « standby», а затем адрес нашего устройства « 0.0.0.0».
echo 'standby 0.0.0.0 | cec-client -s -d 1
Получение статуса питания через HDMI-CEC
Вы даже можете использовать его HDMI-CECна своем Raspberry Pi для получения статуса питания устройства.
echo 'pow <DEVICEADDRESS>' | cec-client -s -d 1
С помощью powкоманды вы можете узнать, включено ли устройство, к которому вы подключаетесь, или находится в режиме ожидания. Эта команда может быть полезна при принятии решения о том, нужно ли вам включать или выключать телевизор, особенно при удаленном управлении устройством.
Пример получения статуса питания через HDMI-CEC
Как и большинство команд HDMI-CEC, это относительно легко использовать. Все, что вам нужно сделать, это ссылка, powза которой следует адрес устройства.
echo 'pow 0.0.0.0' | cec-client -s -d 1
Если ваше устройство находится в режиме ожидания, вы увидите в своем терминале что-то вроде того, что показано ниже.
opening a connection to the CEC adapter...
power status: standby
Получение дополнительных команд CEC-Client
Если вы хотите проверить, какие другие команды вы можете отправить на свой телевизор с Raspberry Pi с помощью HDMI-CEC, вы можете использовать следующую команду.
echo 'h' | cec-client -s -d 1
Эта команда извлекает доступные команды, которые cec-clientпрограмма умеет обрабатывать. Из этой команды вы должны получить список команд, как показано ниже.
================================================================================
Available commands:
[tx] {bytes} transfer bytes over the CEC line.
[txn] {bytes} transfer bytes but don't wait for transmission ACK.
[on] {address} power on the device with the given logical address.
[standby] {address} put the device with the given address in standby mode.
[la] {logical address} change the logical address of the CEC adapter.
[p] {device} {port} change the HDMI port number of the CEC adapter.
[pa] {physical address} change the physical address of the CEC adapter.
[as] make the CEC adapter the active source.
[is] mark the CEC adapter as inactive source.
[osd] {addr} {string} set OSD message on the specified device.
[ver] {addr} get the CEC version of the specified device.
[ven] {addr} get the vendor ID of the specified device.
[lang] {addr} get the menu language of the specified device.
[pow] {addr} get the power status of the specified device.
[name] {addr} get the OSD name of the specified device.
[poll] {addr} poll the specified device.
[lad] lists active devices on the bus
[ad] {addr} checks whether the specified device is active.
[at] {type} checks whether the specified device type is active.
[sp] {addr} makes the specified physical address active.
[spl] {addr} makes the specified logical address active.
[volup] send a volume up command to the amp if present
[voldown] send a volume down command to the amp if present
[mute] send a mute/unmute command to the amp if present
[self] show the list of addresses controlled by libCEC
[scan] scan the CEC bus and display device info
[mon] {1|0} enable or disable CEC bus monitoring.
[log] {1 - 31} change the log level. see cectypes.h for values.
[ping] send a ping command to the CEC adapter.
[bl] to let the adapter enter the bootloader, to upgrade
the flash rom.
[r] reconnect to the CEC adapter.
[h] or [help] show this help.
[q] or [quit] to quit the CEC test client and switch off all
connected CEC devices.
================================================================================
На этом этапе вы должны были узнать, как использовать cec-clientRaspberry Pi для управления устройствами, поддерживающими HDMI-CECпротокол.