电子产品世界 » 论坛首页 » 行业应用 » 消费电子 » 介绍一下语音控制电视


共1条 1/1 1 跳转至

介绍一下语音控制电视

菜鸟
2018-09-13 11:11:53    评分

该项目使用您的语音命令Alexa和NodeMCU板作为IR发射器,将远程红外信号发送到您的家庭电视或机顶盒。 

我们该怎么做呢?

我们项目的系统界面如下:

System_Schematic.png

图1

该项目有三个步骤:
  1. 制作遥控器

  2. 将语音控制添加到遥控器

  3. 扔掉所有遥控器(可选)

第1步:制作遥控器

当我们按下遥控器上的按钮时,它会通过红外线向我们控制的设备发送一些代码。我们按下遥控器上的每个按钮都会发送一个唯一的代码。

要制作遥控器,我们必须通过IR发射器电路发送遥控器的特定代码,为此,我们需要知道我们的电视和STB遥控器发送的信号用于不同的按钮。所以我们将首先使用IR接收器组装NodeMCU板和IR revceiver LED。

红外接收器电路:

红外接收器LED,如VS1838B也可以完成这项工作。

Writeup_IR_receiver_Circuit.jpg

图:2 IR接收器电路

编程IR接收器:

Arduino Sketch IRremote8266有一个库,可以使用基于ESP8266的电路板(如NodeMCU)发送和接收多种协议的红外信号。您可以在上面的链接中找到安装说明。

现在,打开Arduino软件并在File> Examples> IRremote8266下打开“IRrecvDemo”草图

将代码上传到电路板,现在我们已准备好从任何遥控器获取信号。

草图上传到我们的NodeMCU板后,

转到工具>串行监视器,然后半导体按遥控器(电视或机顶盒)上指向红外接收器的任何按钮。

通过这种方式,您可以获得遥控器上所有按钮的十六进制代码,并将其写入某处。

您可以重复相同的过程来解码来自所需多个遥控器的信号。

我解码了我的电视遥控器和我的STB(塔塔天空)遥控器的红外信号。

以下是我使用IR接收器从电视和STB遥控器收到的代码列表。

IR_Codes.png

图:3来自电视和机顶盒遥控器的红外信号

注意:我在这里只提到了重要功能的代码。

现在我们有信号代码,我们准备通过NodeMCU将信号发送到电视或STB。

使用IRremote8266库,可以轻松IC发送IR信号。要查看它是多么容易,打开Arduino软件并打开文件>示例> IRremote8266下的“ IRsendDemo ”草图

如果您浏览Sketch代码,您会发现发送IR信号代码有不同的模式或协议。大多数遥控器支持NEC协议。要了解不同的IR协议,请参阅此链接。对于我的机顶盒(Tata Sky),我将使用RC6协议,而对于电视(三星),我将使用内置的“SAMSUNG”协议。

例如:

irsend.sendRC6(0xC0000C,24); //将电源开/关信号发送到机顶盒

irsend.sendSAMSUNG(0xE0E0F00F,32) //向电视发送电源开/关信号

红外发射器电路:

现在我们将NodeMCU板配置为IR发射器,电路如下。

SendIR.png

图:4 IR发射器电路

我使用了旧遥控器的红外发射器LED,但你可以使用任何标准的940nm红外LED和NPN晶体管(2N3904)

第2步:添加语音控制

通过sinric我们可以免费将我们的ESP8266或Arduino板连接到Amazon Alexa或Google Home。

通过sinric.com将我们的ESP8266 NodeMCU板连接到Alexa

为了让Alexa能够识别我们的可控设备,我们需要在sinric.com上创建我们的设备

当我们在sinric.com上创建可控设备并在ESP8266板的代码中包含设备ID时,我们可以通过Alexa Smart home选项访问这些设备。一旦添加,我们可以说“Alexa,Switch on Light 1”,其中“Light 1”是我们在sinric.com上创建的设备的名称,并在我们的Arduino代码中使用了设备ID。

我们正在sinric.com创建两个设备,因为我们想要控制我们的电视和机顶盒。

去sinric.com

寄存器

登录后,您可以看到如下所示的仪表板

API Key.png

图:5 sinric.com仪表板

复制API密钥并将其保存在某处以备将来参考。

现在点击“ 智能家居设备 ” 下的“ 添加 ”

在弹出窗口中输入您的娱乐设备的名称。在这个例子中,我明确地将其命名为“TV”。您可以在描述中写任何内容,最后最重要的是为我们的设备分配“类型”。如果我们为它分配“Switch”类型,我们只能发送开/关命令。所以我们选择“电视”作为“类型”,这样我们就可以给它命令,如“改变频道”或“静音电视”等。

添加Device.png

图:6在sinric.com上添加设备

我们将重复上述过程并添加另一个设备,即机顶盒。我们将选择“TV”作为设备类型,因为我们还需要通道和音量控制。以下是仪表板的外观。

不要忘记在我们的代码中复制我们需要的两个设备的设备ID。

Devices_Added.png

图:添加了6个设备

一旦我们在sinric.com上创建了设备,我们可以通过在我们的Alexa应用程序中添加“Sinric”技能来连接Alexa和Sinric。

  • 转到您的Alexa应用程序中的主页>技能部分,搜索“ Sinric ”技能并启用它。

  • 现在转到主页>智能家居,然后单击“ 添加设备 ”。

  • 它将显示所有可用设备(在我们的例子中为两个)。

现在我们将使用Arduino Sketch对我们的NodeMCU板进行编程以发送IR信号。

我们将告诉NodeMCU充当IR遥控器,它取代了电视和机顶盒的遥控器。

假设您已经在Sketch中安装了IRremote8266和sinric所需的所有库,并参考了本教程中给出的链接,我们就可以对NodeMCU板进行编程。

代码说明:

当我们要求Alexa做某事时,Alexa处理语音并通过sinric.com将响应消息传递给我们的NodeMCU板。该消息是一个名为payload的JSON格式字符串。

我们对Alexa说的话:Alexa,打开电视

Alexa的回答:好的

我们的NodeMCU板收到的消息(有效负载):

 { “的DeviceID”: “5b2cbb1d77f4f95806b2dbd3”, “动作”: “的setPowerState”, “值”: “ON”}

因此,我们通过连接的IR LED发送用于接通设备的IR信号(代码)(具有上述设备ID,例如输出电视)。代码行是:

irsend.sendSAMSUNG(0xE0E040BF,32);

sendSAMSUNG()具体功能由三星电视的IR库提供。您可以在IRremote8266库的示例中获得其他电视机型的类似功能。

E0E040BF是用于电源按钮的三星电视远程红外代码

我的Tata Sky遥控器的电源按钮将发送代码C0000C

irsend.sendRC6(0xC0000C,24);

这里sendRC6是RC-6 IR协议的功能。

您可以浏览草图代码,找出可以发送到电视和机顶盒的不同信号。

您甚至可以通过说明更改机顶盒上的频道

Alexa,在我的机顶盒上的国家地理的 tatasky //频道号码上将频道改为708

Aleaxa将通过sinric.com向NodeMCU板发送以下有效载荷

{ “的DeviceID”: “5b2cbb1d77f4f95806b2dbd3”, “动作”: “ChangeChannel”, “值”:{ “信道”:{ “号”: “708”}, “channelMetadata”:{}}}

我们的NodeMCU板上运行的代码将读取JSON并通过IR LED发送通道编号键。

同样,我们可以说

Alexa,改变通往国家地理的通道

评论:接收到的响应虽然chanel的名字来自下channelMetadata 净荷{ “的DeviceID”: “5b2cbb1d77f4f95806b2dbd3”, “动作”: “ChangeChannel”, “值”:{ “信道”:{}, “channelMetadata”:{ “名称”:”国家地理”}}}

我们的NodeMCU板上运行的代码将读取JSON并通过IR LED发送相应的通道号键。这样我们甚至不必记住频道的频道号码,因为我们在代码中包含了这些号码。

第3步:测试你的新语音遥控器

这就对了。您现在可以在家中包含多个遥控器的代码,并通过Alexa设备控制它们。





关键词: 语音控制电视    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]