该项目使用您的语音命令Alexa和NodeMCU板作为IR发射器,将远程红外信号发送到您的家庭电视或机顶盒。
我们该怎么做呢?我们项目的系统界面如下:
该项目有三个步骤:制作遥控器
将语音控制添加到遥控器
扔掉所有遥控器(可选)
当我们按下遥控器上的按钮时,它会通过红外线向我们控制的设备发送一些代码。我们按下遥控器上的每个按钮都会发送一个唯一的代码。
要制作遥控器,我们必须通过IR发射器电路发送遥控器的特定代码,为此,我们需要知道我们的电视和STB遥控器发送的信号用于不同的按钮。所以我们将首先使用IR接收器组装NodeMCU板和IR revceiver LED。
红外接收器电路:
红外接收器LED,如VS1838B也可以完成这项工作。
编程IR接收器:
Arduino Sketch IRremote8266有一个库,可以使用基于ESP8266的电路板(如NodeMCU)发送和接收多种协议的红外信号。您可以在上面的链接中找到安装说明。
现在,打开Arduino软件并在File> Examples> IRremote8266下打开“IRrecvDemo”草图
将代码上传到电路板,现在我们已准备好从任何遥控器获取信号。
草图上传到我们的NodeMCU板后,
转到工具>串行监视器,然后半导体按遥控器(电视或机顶盒)上指向红外接收器的任何按钮。
通过这种方式,您可以获得遥控器上所有按钮的十六进制代码,并将其写入某处。
您可以重复相同的过程来解码来自所需多个遥控器的信号。
我解码了我的电视遥控器和我的STB(塔塔天空)遥控器的红外信号。
以下是我使用IR接收器从电视和STB遥控器收到的代码列表。
注意:我在这里只提到了重要功能的代码。
现在我们有信号代码,我们准备通过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发射器,电路如下。
我使用了旧遥控器的红外发射器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密钥并将其保存在某处以备将来参考。
现在点击“ 智能家居设备 ” 下的“ 添加 ”
在弹出窗口中输入您的娱乐设备的名称。在这个例子中,我明确地将其命名为“TV”。您可以在描述中写任何内容,最后最重要的是为我们的设备分配“类型”。如果我们为它分配“Switch”类型,我们只能发送开/关命令。所以我们选择“电视”作为“类型”,这样我们就可以给它命令,如“改变频道”或“静音电视”等。
我们将重复上述过程并添加另一个设备,即机顶盒。我们将选择“TV”作为设备类型,因为我们还需要通道和音量控制。以下是仪表板的外观。
不要忘记在我们的代码中复制我们需要的两个设备的设备ID。
一旦我们在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设备控制它们。