利用 HDMI-CEC 协议唤醒电视,听起来是不是很神奇?本项目将展示如何通过 Amazon Alexa 语音指令操控电视,而核心硬件仅需一块 Raspberry Pi(树莓派)。
该项目本质上是让电视具备语音识别与控制能力。用户无需传统遥控器,只需通过树莓派即可远程管理电视的开关。其核心在于开发一个 Alexa 智能家居技能,将用户的语音指令转换为电视可解析的 HDMI-CEC 信号。

第 1 步 - 配置树莓派
基础配置很简单,首先安装 cec-utils 工具包:
$ sudo apt-get install cec-utils
试着发送开机指令:
$ echo 'on 0' | cec-client -s
此时系统会尝试与 CEC 适配器建立连接,并输出一系列调试日志。这些信息只是设备之间的握手通信,无需担心。例如你会看到类似这样的输出:
``` 打开与 CEC 适配器的连接... 调试:[125] 广播 (F):osd 名称设置为“广播” 调试:[126] 打开 - vc_cec 初始化 调试:[126] 逻辑地址更改为免费使用(e) 注意:[126]连接打开 调试:[127]处理器线程启动 调试:[127]<<广播(F)->电视(0):轮询 调试:[127]启动器'广播'不是CEC 适配器支持。改用“免费使用” TRAFFIC: [127] << e0 DEBUG: [187] >> POLL sent DEBUG: [187] TV (0): 调试:[187] << 请求“TV”(0)的供应商 ID 流量:[187] << e0:8c 流量:[382] >> 0f:87:08:00:46 调试:[382] 电视( 0):供应商=索尼(080046) 调试:[383]>>电视(0)->广播(F):设备供应商ID(87) ```
关闭电视同样便捷:
$ echo '待机0' | cec-client -s
执行上述命令后,电视即可响应开关指令。
第 2 步 - AWS IoT 设置
本示例依赖于 AWS IoT 设备实现云端通信。首先需要在 AWS IoT 控制台创建一个“Thing”(设备),并配置对应的证书与策略文件。创建完成后,务必添加设备状态,状态数据使用 JSON 格式,示例如下:
``` { "期望": { "命令": "tv_off", "计数器": 0 } } ```
第 3 步 - 配置树莓派
将 HDMI 线缆连接电视,然后从 GitHub 克隆项目源码:
$ cd /home/pi
$ git clone https://github.com/sparkgene/alexa-tv-controller.git
$ cd alexa-tv-controller/raspberrypi
将之前下载的证书文件复制到树莓派,统一存放至 /home/pi/alexa-tv-controller/raspberrypi/certs 目录下。
接下来,编辑 shadow.js 文件,配置与 AWS IoT 节点的连接。关键配置项如下:
``` var shadowName = "tv-controller" var thingShadows = awsIot.thingShadow({ keyPath: "/home/pi/alexa-tv-controller/raspberrypi/certs/private.pem.key", certPath: "/home/pi/alexa-tv-controller/raspberrypi/certs/certificate.pem.crt", caPath: "/home/pi/alexa-tv-controller/raspberrypi/certs/ca.pem", clientId: "tv-controller", 区域: "ap-northeast-1", 主机: "your-endpoint.iot.ap-northeast-1.amazonaws.com" }); ```
然后安装客户端库:
$ cd /home/pi/alexa-tv-controller/raspberrypi
$ sh setup.sh
接着运行客户端守护进程:
$ /usr/bin/node shadow_client.js
若成功,会看到连接与注册成功的提示。随后可在 AWS IoT 控制台中修改设备状态,例如将 "command" 设为 "tv_on" 或 "tv_off",客户端将立即响应并执行对应操作。
第 4 步 - 创建智能家居技能
创建 Alexa 智能家居技能时,务必使用 v3 版本的有效载荷。Lambda 函数充当 Alexa 与 AWS IoT 之间的桥梁,需要为其分配适当权限,以允许调用 iot:GetThingShadow 和 iot:UpdateThingShadow 操作。权限策略示例如下:
``` { "版本": "2012-10-17", "声明": [ { "效果": "允许", "操作": [ "日志: CreateLogGroup", "日志: CreateLogStream", "日志: PutLogEvents" ], "资源": "arn:aws:logs:*:*:*" }, { "效果": "允许", "操作": [ "iot:GetThingShadow", "iot:UpdateThingShadow" ], "资源": "*" } ] } ```
最后,将 Lambda 函数中的 friendlyName 属性修改为“living TV”,以确保 Alexa 能正确识别该设备。
第 5 步 - 在 Echo 设备上使用
所有配置完成后,在 Alexa App 中启用你创建的智能家居技能。此时,只需对 Echo 设备说出“Alexa,打开电视”,电视便会立即点亮。这正是物联网的魅力——通过简单的语音指令,让家电设备实现智能化控制。
