查看: 198|回复: 0

树莓派3B+测评(三)Siri语音控制

[复制链接]

主题

好友

1004

积分

进士

  • TA的每日心情
    奋斗
    2019-4-13 22:01
  • 签到天数: 42 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-12-10 08:45:38 |显示全部楼层
    之前介绍了如何在树莓派里搭建语音控制环境,在树莓派里搭建一个“桥梁”来连接Siri和小家电,现在“桥梁”已经建好了,接下来就是连接控制端的硬件设备。
    硬件准备:esp8266开发板一个、5v继电器两个、数据线一条、杜邦线若干、苹果设备一个;
    软件准备:arduino软件;
    在电脑上安装好arduino后,还要配置一下。
    配置arduino软件
    打开arduinoide->首选项->“附加开发板管理器网址”输入https://wechat.doit.am/package_esp8266com_index.jso...

    然后 重启arduino软件,打开:工具->开发板->开发板管理

    稍等一会儿,然后拉到最下面,安装 esp8266 by ESP8266 Community
    安装成功后,根据所用的开发板情况,选择合适的开发板,后插入开发板,还要选择你开发板的端口。

    我用的是这种esp8266开发板,可以选择D1 mini Pro

    至此,软件开发工具准备就绪,接下来先编写个网页控制代码;
    将下面代码保存为html格式;
    <!DOCTYPE html>
    <html lang="en">
    <head>
         <meta charset="UTF-8">
         <title>Document</title>
    </head>
    <body>
         <a href="./pin?light=on"><input type="button" value="开灯"></a>
          <a href="./pin?light=off"><input type="button" value="关灯"></a>
          <a href="./pin?fengshan=on"><input type="button" value="开风扇"></a>
          <a href="./pin?fengshan=off"><input type="button" value="关风扇"></a>
    </body>
    </html>
    打开后的效果

    说明一下,因为这个简单的网页代码不能识别汉字,所以要将汉字转成UTF-8

    除此之外,还得将网页代码压缩一下;
    <!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>Document</title></head><body><a href=\"./pin?light=on\"><input type=\"button\" value=\"开灯\"></a><a href=\"./pin?light=off\"><input type=\"button\" value=\"关灯\"></a><a href=\"./pin?fengshan=on\"><input type=\"button\" value=\"开风扇\"></a><a href=\"./pin?fengshan=off\"><input type=\"button\" value=\"关风扇\"></a></body></html>
    这个压缩后的代码要用在arduino上。
    接下来就是编写arduino代码,这个代码要烧写进esp8266里
    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>
    #include <ESP8266mDNS.h>
    const char* ssid = "01";//你的wifi名
    const char* password = "123456789";//你的wifi密码
    ESP8266WebServer server(80);
    String html = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>Document</title></head><body><a href=\"./pin?light=on\"><input type=\"button\" value=\"开灯\"></a><a href=\"./pin?light=off\"><input type=\"button\" value=\"关灯\"></a><a href=\"./pin?fengshan=on\"><input type=\"button\" value=\"开风扇\"></a><a href=\"./pin?fengshan=off\"><input type=\"button\" value=\"关风扇\"></a></body></html>";//压缩后的代码
    void pin(){
      if(server.arg("light")=="on"){
          digitalWrite(D4, LOW);
          server.send(200, "text/html",html);
      } else if(server.arg("light")=="off"){
              digitalWrite(D4, HIGH);
              server.send(200, "text/html",html);
      }
    if(server.arg("fengshan")=="on"){
          digitalWrite(D5, LOW);
          server.send(200, "text/html",html);
      } else if(server.arg("fengshan")=="off"){
              digitalWrite(D5, HIGH);
              server.send(200, "text/html",html);
      }
    }
    const int led = 13;
    void handleRoot() {
      digitalWrite(led, 1);
      server.send(200, "text/html",html);
      digitalWrite(led, 0);
    }
    void handleNotFound(){
      digitalWrite(led, 1);
      String message = "File Not Found\n\n";
      message += "URI: ";
      message += server.uri();
      message += "\nMethod: ";
      message += (server.method() == HTTP_GET)?"GET":"POST";
      message += "\nArguments: ";
      message += server.args();
      message += "\n";
      for (uint8_t i=0; i<server.args(); i++){
        message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
      }
      server.send(404, "text/plain", message);
      digitalWrite(led, 0);
    }
    void setup(void){
      pinMode(D4, OUTPUT);
      pinMode(D5, OUTPUT);
      digitalWrite(led, 0);
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      Serial.println("");
      // Wait for connection
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
      if (MDNS.begin("esp8266")) {
        Serial.println("MDNS responder started");
      }
      server.on("/", handleRoot);
      server.on("/pin", HTTP_GET, pin);
      server.on("/inline", [](){
        server.send(200, "text/plain", "this works as well");
      });
      server.onNotFound(handleNotFound);
      server.begin();
      Serial.println("HTTP server started");
    }
    void loop(void){
      server.handleClient();
    }
    将开发板连接电脑,选定正确的端口,烧进开发板里就可以了。
    按开发板rst键,打开arduino的串口监视器
    工具》串口监视器

    查看esp8266是否连上无线网
    连上了,就可以用网页进行简单的控制,局域网下输入开发板的ip都可以控制

    点击开灯,就会有对应的开灯网址,上一篇的控制台灯的网址也就是这个

    同理,其他的控件也是如此。
    接下来就是将继电器和esp8266连接,我用的是D4和D5引脚,D4控制台灯,D5控制风扇


    D4继电器连接台灯,D5继电器连接风扇。我用的是5V低电平触发。
    至此,硬件部分完成,打开树莓派,输入homebridge,打开桥梁,用苹果设备的homekit 扫描二维码添加小家电

    点击台灯,台灯亮了

    点击台灯和风扇,台灯和风扇都打开了
    最重要的是你也可以用Siri打开台灯和风扇
    https://v.youku.com/v_show/id_XMzk0NTIwNzI2NA==.ht...
    也可以将继电器接到220V来控制家里的点灯和风扇,为了安全我就简单的连接小家电,至此,整个Siri语音控制也就完成了。谢谢!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条

    手机版|电路城

    GMT+8, 2019-6-27 01:02 , Processed in 0.077555 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部