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

作者: shijielong
上传时间为: 2018-12-10 08:45 AM
2018-12-10
阅读:

之前介绍了如何在树莓派里搭建语音控制环境,在树莓派里搭建一个“桥梁”来连接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="&#x5F00;&#x706F;"></a>

<a href="./pin?light=off"><input type="button" value="&#x5173;&#x706F;"></a>

<a href="./pin?fengshan=on"><input type="button" value="&#x5F00;&#x98CE;&#x6247;"></a>

<a href="./pin?fengshan=off"><input type="button" value="&#x5173;&#x98CE;&#x6247;"></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=\"&#x5F00;&#x706F;\"></a><a href=\"./pin?light=off\"><input type=\"button\" value=\"&#x5173;&#x706F;\"></a><a href=\"./pin?fengshan=on\"><input type=\"button\" value=\"&#x5F00;&#x98CE;&#x6247;\"></a><a href=\"./pin?fengshan=off\"><input type=\"button\" value=\"&#x5173;&#x98CE;&#x6247;\"></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=\"&#x5F00;&#x706F;\"></a><a href=\"./pin?light=off\"><input type=\"button\" value=\"&#x5173;&#x706F;\"></a><a href=\"./pin?fengshan=on\"><input type=\"button\" value=\"&#x5F00;&#x98CE;&#x6247;\"></a><a href=\"./pin?fengshan=off\"><input type=\"button\" value=\"&#x5173;&#x98CE;&#x6247;\"></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语音控制也就完成了。谢谢!

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示