使用 Alexa 控制您的电视!
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
应用和在线服务
|
关于这个项目
使用 Alexa 控制您的电视!
简介: 所以这个项目将讨论如何使用你的 Alexa 发送命令并通过与它交谈来控制你的电视。您的电视遥控器可以做的任何事情,您的 Alexa 都可以做。我们要做的是记录远程 IR 信号,并在发出语音指令时使用 Alexa 重新发送这些相同的信号。以下是实现此目的或观看此 YouTube 视频所需的步骤:
第 1 步:下载必备库
下载以下库并将它们放入您的 Arduino IDE 库中:
- ESPAsyncTCP - https://github.com/me-no-dev/ESPAsyncTCP
- ESPAsyncUDP - https://github.com/me-no-dev/ESPAsyncUDP
- FauxMoESP - https://bitbucket.org/xoseperez/fauxmoesp> 下载> 下载存储库
第 2 步:编程 NodeMCU(Wi-Fi 模块)
打开 ESP8266-Alexa.ino 草图并将其上传到您的 NodeMCU(从 Arduino IDE 的 Board Manager 下载板信息)。您只需要更改 Wi-Fi 凭据和设备名称即可。
您可以自定义 ESP8266-Alexa.ino 草图中的设备名称和 IR-Alexa-Send.ino 草图中发出的信号:
第 3 步:从电视遥控器读取红外信号
将 IR_REMOTE_read.ino 草图上传到您的 Arduino 以读取远程信号命中并记录您收到的红外信号以供稍后参考,如本教程所示:
第 4 步:编程 Arduino 以通过 Alexa 发送电视红外信号
接下来,在 Arduino IDE 中打开 IR-Alexa-Send.ino 并将其上传到您的 Arduino Uno(确保将上传板信息更改为 UNO)。
将电源连接到两个模块和之间的连接线。确保 IR 发射器连接到 UNO 的端子 3。有关详细信息,请参阅随附的示意图:
第 5 步:使用 Alexa 测试项目
现在在您的移动设备或 PC 上进入您的 Amazon Alexa 应用程序,转到您的智能家居并按“添加设备”以查找您在 ESP8266-Alexa.ino 草图中设置的每个命令。
找到它们后,您可以使用以下命令结构之一对其进行测试:
- “Alexa,打开设备名称 "
- “Alexa,转设备名称 在”
- “Alexa,打开设备名称 在”
- “Alexa,打开设备名称 "
代码
- ESP8266-Alexa.ino
- IR-Alexa-Send.ino
- IR_REMOTE_read.ino
ESP8266-Alexa.inoC/C++
这将被写入 NodeMCU 芯片以通过 Arduino IDE 模拟“WEMO”设备#include#include #include "fauxmoESP.h"// ----- -------------------------------------------------- ----------------------// Wifi 凭据// ---------------------- -------------------------------------------------- -----#define WIFI_SSID "linksys"#define WIFI_PASS ""#define SERIAL_BAUDRATE 115200fauxmoESP fauxmo;// -------------------------- -------------------------------------------------- -// 无线上网// - - - - - - - - - - - - - - - - - - - - - - ---------------------------------void wifiSetup() { // 设置 WIFI 模块为 STA 模式 WiFi.mode( WIFI_STA); // Connect Serial.printf("[WIFI] 连接到 %s ", WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASS); // 稍等片刻 (WiFi.status() !=WL_CONNECTED) { Serial.print(".");延迟(100); Serial.println(); // 连接的! Serial.printf("[WIFI] STATION Mode, SSID:%s, IP address:%s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); }// ----------------------------------------------- ------------------------------// 初始化引脚// -------------- -------------------------------------------------- -------------#define RELAY_PIN1 13#define RELAY_PIN2 2#define RELAY_PIN3 14#define RELAY_PIN4 15void setup() { //初始化继电器引脚pinMode(RELAY_PIN1, OUTPUT);数字写入(RELAY_PIN1,低); pinMode(RELAY_PIN2, OUTPUT);数字写入(RELAY_PIN2,低); pinMode(RELAY_PIN3, OUTPUT);数字写入(RELAY_PIN3,低); pinMode(RELAY_PIN4, OUTPUT);数字写入(RELAY_PIN4,低); // 初始化串口并清理垃圾 Serial.begin(SERIAL_BAUDRATE); Serial.println(); Serial.println(); Serial.println("FauxMo 演示草图"); Serial.println("连接后,让Alexa/Echo'打开像素'或'关闭'或'打开继电器'或'关闭'"); // Wifi wifiSetup();// ----------------------------------------- ------------------------------------// Alexa 设备名称// ------- -------------------------------------------------- -------------------- // Fauxmo fauxmo.addDevice("TV"); fauxmo.addDevice("GregsNetflix"); fauxmo.addDevice("睡眠"); fauxmo.addDevice("Office"); fauxmo.onMessage(callback);}// ---------------------------------------- -------------------------------------// Alexa 操作调用// ------ -------------------------------------------------- ---------------------void callback(uint8_t device_id, const char * device_name, bool state) { Serial.printf("[MAIN] %s state:%s \n", device_name, state ? "ON" :"OFF"); if ( (strcmp(device_name, "TV") ==0) ) { // 立即调整继电器! if (state) { digitalWrite(RELAY_PIN1, HIGH); } else { digitalWrite(RELAY_PIN1, HIGH); } } if ( (strcmp(device_name, "GregsNetflix") ==0) ) { // 立即调整继电器! if (state) { digitalWrite(RELAY_PIN2, HIGH); } else { digitalWrite(RELAY_PIN2, LOW); } } if ( (strcmp(device_name, "Sleep") ==0) ) { // 立即调整继电器! if (state) { digitalWrite(RELAY_PIN3, HIGH); } else { digitalWrite(RELAY_PIN3, LOW); } } if ( (strcmp(device_name, "Office") ==0) ) { // 立即调整继电器! if (state) { digitalWrite(RELAY_PIN4, HIGH); } else { digitalWrite(RELAY_PIN4, LOW); } }}void loop() { fauxmo.handle();延迟(500);数字写入(RELAY_PIN1,低);数字写入(RELAY_PIN2,低);数字写入(RELAY_PIN3,低);数字写入(RELAY_PIN4,低);}
IR-Alexa-Send.inoC/C++
这是上传到 Arduino UNO 以从 NodeMCU 读取信号并通过红外发射二极管发送适当的红外信号#includeIRsend irsend;#define a 4#define b 5#define c 6#定义 7void setup() { Serial.begin(9600); pinMode(a, 输入); pinMode(b, 输入); pinMode(c, 输入); pinMode(d, INPUT);}void loop() { if (digitalRead(a) ==HIGH) { irsend.sendNEC(0x57E3E817, 32); //电源代码Serial.println("TV");延迟(500); } if (digitalRead(b) ==HIGH) { irsend.sendNEC(0x57E354AB, 32); //输入键延迟(2000); irsend.sendNEC(0x57E39867, 32); //向上键延迟(1000); irsend.sendNEC(0x57E39867, 32); //向上键延迟(1000); irsend.sendNEC(0x57E39867, 32); //向上键延迟(1000); irsend.sendNEC(0x57E3B44B, 32); //右键延迟(1000); irsend.sendNEC(0x57E354AB, 32); //输入延迟(2000); irsend.sendNEC(0x57E354AB, 32); //输入Serial.println("办公室");延迟(500); } if (digitalRead(c) ==HIGH) { irsend.sendNEC(0x57E38679, 32); //选项按钮延迟(1500); irsend.sendNEC(0x57E3CC33, 32); //向下键延迟(700); irsend.sendNEC(0x57E3CC33, 32); //向下键延迟(700); irsend.sendNEC(0x57E3CC33, 32); //向下键延迟(700); irsend.sendNEC(0x57E3CC33, 32); //向下键延迟(700); irsend.sendNEC(0x57E3B44B, 32); //右键延迟(700); irsend.sendNEC(0x57E3B44B, 32); //右键延迟(900); irsend.sendNEC(0x57E38679, 32); //选项按钮Serial.println("睡眠定时器");延迟(500); } if (digitalRead(d) ==HIGH) { irsend.sendNEC(0x57E34AB5, 32); //Netflix 代码 Serial.println("Greg 的 Netflix");延迟(500); }}
IR_REMOTE_read.inoC/C++
在您的 Arduino 上使用此代码读取从遥控器到红外接收器的 Clicker Hits。//2017.06.22#include#include /* HOW TO WIRE UP LCD SCREEN从左到右引脚,顶部有引脚 * * GND - VCC - POT MIDDLE - 12 - GND - 11 - NONE - NONE - NONE - NONE - 5 - 4 - 9 - 2 - VCC - GND * * POT 必须有 5V 和GND 在它上面,可以旋转旋钮来改变 LCD 对比度 */ LiquidCrystal lcd(12, 11, 5, 4, 9, 2); //9 而不是 3 (NEED FOR TRANSMITTER)int receiverpin =10;IRrecvirrecv(receiverpin);decode_results results;void setup() { lcd.begin(16, 2); pinMode(receiverpin, INPUT); Serial.begin(9600); irrecv.enableIRIn();}void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX);简历.resume();液晶显示器(); lcd.print(results.value, HEX);延迟(150); }}
示意图
这是连接 Arduino 和 NodeMCU(Wi-Fi 模块)的最终原理图制造工艺