Amazon Echo + Broadlink RM Pro 遥控智能家居:ESP8266 模拟 Wemo 方式

在上面我们说到,ESP8266 可以模拟成 Wemo 设备,而 Wemo 可以直接由 Amazon Echo 识别。但是 Broadlink 直接与 Amazon Echo 配合,不可避免地出现了一些问题。在看到了python-broadlink 库,便想着是不是直接拿 flask 结合一下 broadlink 就可以实现一个简单的 HTTP 服务。随后,ESP8266 只需要几个请求吧,就能直接对家电进行控制。

步骤1: Broadlink HTTP Server

为了避免自己造底层的轮子,想在 GitHub 上寻觅了一番,找到 broadlink-http-rest 项目,修改成适合自己需求的代码,放在了 GitHub 上:https://github.com/phodal/broadlink-http-rest

实际上,我们所需要做的就是,修改自己的 settings.py 文件。并且这部分的内容可以直接由 API 来生成。搭建之前,先下载上面的代码:

git clone https://github.com/phodal/broadlink-http-rest

然后安装依赖:

pip install -r requirements.txt

再运行起服务: python server.py

然后访问:http://localhost:8080/learnCommand/tvon,就可以直接学习红外指令。

接着通过访问:http://localhost:8080/sendCommand/tvon,就可以发送相应的红外编码。

同时,它会在 settings.py 下生成相应的 tvon 命令及编码,如下:

[Commands]
tvon = 9bff369b8c9f94d6a2ec86e2b83749670662283a956794365cfb8ecf42d42cc41256a408c128a0bcbe56e6050b561e1436c998299ff9adc8a17d8350d55341e83eca9d5bb905472e5a23bc035f94dab944af2de6513b09502c17b385fca66090

同样的,对于关闭设备来说,我们就需要使用 tvoff。

以此类推,我们就可以录入所有的设备。

步骤2:使用 ESP8266 控制 Broadlink

打开 smart-home/emulator/esp8266-wemos/esp8266-wemos.ino 文件,写个负责发请求的方法:

void httpServer(String command) {
    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    // configure traged server and url
    //http.begin("https://192.168.1.12/test.html", "7a 9c f4 db 40 d3 62 5a 6e 21 bc 5c cc 66 c8 3e a1 45 59 38"); //HTTPS
    http.begin("http://192.168.199.170:8080/sendCommand/" + command); //HTTP

    Serial.print("[HTTP] GET...\n");
    // start connection and send HTTP header
    int httpCode = http.GET();

    // httpCode will be negative on error
    if(httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if(httpCode == HTTP_CODE_OK) {
            String payload = http.getString();
            Serial.println(payload);
        }
    } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }
}

对应的,我们只需要写相应的控制逻辑:

void tvOn() {
      httpServer("tvon");
}

void tvOff() {
      httpServer("tvoff");
}

void boxOn() {
      httpServer("mion");
}

void boxOff() {
      httpServer("mioff");
}


void airOn() {
      httpServer("airon");
}

void airOff() {
      httpServer("airoff");
}

便可以使用 ESP8266 控制 Broadlink。

最后,便是烧录程序,然后直接使用 Amazon Echo 控制。

步骤3:测试

现在,我们只需要对 Alexa 说:『alexa, turn on tv』 就可以打开电视,『alexa, turn on box』就能打开小米盒子

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.