在本教程中,我们将向您展示如何使用 HDMI-CEC 和树莓派控制电视。
HDMI-CEC 是一种特殊协议,旨在让电视通过 HDMI 电缆与另一台设备进行通信。此协议允许电视控制另一个设备,同时也允许该设备控制电视。
大多数现代电视都实现了对该协议的支持,但是通常必须在电视设置中启用它。搜索电视的型号应有助于您查找此设置。
使用 HDMI -CEC 协议,您可以使用树莓派以各种不同的方式控制电视,例如关闭和打开电视或更改音量。
设备清单
以下是在树莓派上使用 HDMI -CEC 可能需要完成的本设备的设备。
推荐的
树莓派 1、 2 、 3 或 4
Micro SD 卡
电源
Ethernet Cord 或 * WiFi dongle (Pi 3 和 4 具有内置 WiFi)
HDMI 电缆
可选的
- 树莓派外壳
对于使用 HDMI -CEC 的本教程,我们正在运行在树莓派 4](https://pimylifeup) 上运行的最新可用 [Raspbian Buster 版本。 com/raspberry-pi-4 /)。
本教程应适用于较早的树莓派和较早版本的 Raspbian 操作系统。
将 cec -client 安装到您的树莓派
在本节中,我们将向您展示在树莓派上安装 cec-client
软件的简单步骤。
cec-client 是我们将在树莓派上使用的软件包,用于通过 HDMI -CEC 协议控制设备。
1 我们的首要任务是更新树莓派上的软件包列表并升级当前安装的软件包。
我们可以通过运行以下两个命令来完成此任务。
sudo apt update
sudo apt upgrade
第一条命令将更新软件包列表。第二条命令将升级已安装的软件包。
2 我们的下一步是安装 cec-utils
软件包。这个软件包包含 cec-client
软件,我们将在本教程的后面部分使用它。
我们可以通过运行以下命令将此软件包安装到树莓派中。
sudo apt install cec -utils
使用此软件包提供的工具,我们将能够使用 CEC 通过连接到树莓派的 HDMI 电缆发送命令。
使用树莓派通过 HDMI -CEC 与电视进行交互
在本节中,我们将向您展示使用 cec-client
软件与其他设备进行交互的各种方式。
在本节中,您会注意到,对于每个步骤,我们都会做几件事。
首先是使用 echo
和管道 (|
)。我们正在使用这两件事将命令直接传递给 cec-client
软件,而不必启动它。
此外,我们在 cec-client
软件中同时使用了 - s 和 - d 选项。
-s 选项告诉软件我们将发出单个命令。该软件将启动,发出命令,然后立即退出。
-d 1 选项设置软件的调试级别。通过将其设置为 1 ,cec-client 软件将仅显示错误。
此设置大大减少了将淹没控制台的文本量。
从树莓派扫描 HDMI -CEC 设备
1 您要做的第一件事是扫描广告中具有 CEC 功能的可用设备。
通过在树莓派上运行以下命令来扫描支持 HDMI -CEC 的设备。
echo "扫描"| cec-client -s -d 1
2 通过此命令,您应该看到树莓派现在可以访问的设备列表。
您需要确定要与之交互的设备。通常,”os string:” 和”vendor:” 字段将帮助您识别要与之交互的设备。
确定正确的设备后,记下” 地址:” 或” 设备号”**。
打开与 CEC 适配器的连接...
请求 CEC 总线信息...
CEC巴士资讯
===================
设备#0:电视
地址:0.0.0.0
活动来源:否
供应商:索尼
osd字符串:电视
CEC版本:1.4
电源状态:待机
语言:英语
设备#1:记录器 1
地址:1.0.0.0
活动来源:否
供应商:脉冲八
osd字符串:CECTester
CEC版本:1.4
电源状态:亮
语言:英语设备#4:播放 1 地址:3.0.0.0
活动来源:否
供应商:索尼
osd字符串:PlayStation 4
CEC版本:1.3a
电源状态:待机
语言: ???
请注意,本例中的” 设备 #1:记录器 1 “是树莓派自己的 CEC 连接,因此我们可以放心地忽略它。
3 例如,如果我们要控制”** Sony TV **”,我们可以看到设备编号为”0”,设备地址为”0.0”.0.0`”。
一旦有了” 设备号” 或” 设备地址”,就可以开始向其发送命令。
通过 HDMI -CEC 发送”** on **” 命令
使用”cec-client” 打开设备是一个相对简单的过程。
回显"在<DEVICEADDRESS>"| cec-client -s d 1
从上面可以看到,我们所需要做的就是发送命令”on”,后跟设备地址或设备编号。
通过 HDMI -CEC 打开设备的示例
例如,如果我们要打开地址为”0.0.0.0” 的索尼电视,则可以使用以下命令。
echo "在 0 .0.0.0"| cec-client -s -d 1
通过 HDMI -CEC 发送” 待机 “命令
如果您想使用树莓派关闭电视 (将其置于待机状态),则也可以使用 HDMI -CEC 轻松完成。
回显"待机<DEVICEADDRESS>"| cec-client -s d 1
要使电视处于待机状态,您需要做的就是发送” 待机” 命令,然后发送设备的地址或号码。
通过 HDMI -CEC 关闭设备的示例 **
使用此命令相对简单。
要使我们的索尼电视待机,我们需要做的就是发送” 待机”,然后发送设备地址”0.0.0.0”。
echo'standby 0.0.0.0 | cec-client -s -d 1
通过 HDMI -CEC 获取电源状态
您甚至可以在树莓派上使用”HDMI-CEC” 来检索设备的电源状态。
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
如果您的设备处于待机状态,您将在终端中看到类似我们下面的内容。
打开与 CEC 适配器的连接...
电源状态:待机
检索其他 CEC 客户端命令
如果您想查看可以使用 HDMI -CEC 从树莓派向电视发出的其他命令,则可以使用以下命令。
echo "h"| cec-client -s -d 1
该命令的作用是检索”cec-client” 软件知道如何处理的可用命令。
从该命令中,您应该获得命令列表,如下所示。
================================================== =============================
可用命令:
[tx] {bytes}在 CEC 线上传输字节。
[txn] {bytes}传输字节,但不等待传输 ACK 。
[on] {address}使用给定的逻辑地址打开设备的电源。
[standby] {address}将具有给定地址的设备置于待机模式。
[la] {逻辑地址}更改 CEC 适配器的逻辑地址。
[p] {设备} {端口}更改 CEC 适配器的 HDMI 端口号。
[pa] {physical address}更改 CEC 适配器的物理地址。
[as]使 CEC 适配器成为活动源。
[is]将 CEC 适配器标记为无效源。
[osd] {addr} {string}在指定设备上设置 OSD 消息。
[ver] {addr}获取指定设备的 CEC 版本。
[ven] {addr}获取指定设备的供应商 ID 。
[lang] {addr}获取指定设备的菜单语言。
[pow] {addr}获取指定设备的电源状态。
[name] {addr}获取指定设备的 OSD 名称。
[poll] {addr}轮询指定的设备。
[lad]列出了总线上的活动设备
[ad] {addr}检查指定的设备是否处于活动状态。
[at] {type}检查指定的设备类型是否处于活动状态。
[sp] {addr}使指定的物理地址处于活动状态。
[spl] {addr}使指定的逻辑地址处于活动状态。
[volup]向放大器发送音量调高命令
[voldown]将音量降低命令发送到放大器(如果存在)
[静音]向放大器发送静音/取消静音命令[自我]显示由 libCEC 控制的地址列表[扫描]扫描 CEC 总线并显示设备信息
[mon] {1 | 0}启用或禁用 CEC 总线监视。
[log] {1-31}更改日志级别。有关值,请参见 cectypes .h。
[ping]将 ping 命令发送到 CEC 适配器。
[bl]让适配器进入引导加载程序,进行升级
闪存 ROM 。
[r]重新连接到 CEC 适配器。
[h]或[help]显示此帮助。
[q]或[quit]退出 CEC 测试客户端并关闭所有
连接的 CEC 设备。
================================================== =============================
至此,您现在应该已经学习了如何在树莓派上使用”cec-client” 来控制支持”HDMI-CEC” 协议的设备。
如果您的树莓派上的 HDMI -CEC 有任何问题,请在下面发表评论。