对吊扇启用 Alexa Control
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
应用和在线服务
| ||||
| ||||
|
关于这个项目
我将在这里详细介绍我如何通过集成 Amazon Alexa 来控制相同的速度,使我的普通吊扇成为一个智能吊扇。我们将使用 amazon alexa 技能集来启动速度更改,并且将是 ngrok 隧道服务将请求路由到我们本地的 RPi 服务器,它会告诉我们的 Arduino uno 打开相关的中继。
设置我们本地的树莓派服务器
我们需要以下服务来使用我们的服务器。
- Python PIP :安装python包,如果你使用的是python 2.7或3 pip 将默认安装,因此你可以避免这一步
sudo apt-get install python-pip
- Flask:Flask 是 Python 的服务器包,可帮助您轻松实现 Python 服务器。
pip 安装烧瓶
- flask ask:用于轻松创建 alexa 友好程序的烧瓶扩展。
pip install flask-ask
- pyserial:python 的串行通信模块
sudo apt-get install pyserial
- libpython2.7-dev
sudo apt-get intall libpython2.7-dev
所有必要的模块都安装它的时间来设置服务器运行。我们需要输入相同的python脚本
from flask import Flaskfrom flask_ask import Ask, statementimport requestsimport jsonimport serial ser =serial.Serial("/dev/ttyAMA0",9600)app =Flask(__name__)ask =Ask(app, '/')@ [email protected]("FanOn")def on():ser.write(b'1') return statement("Ceiling Fan opens.")@ask.intent("FanOff")def off() :ser.write(b'0') return statement("Ceiling Fan off.")@ask.intent("FanLevelUp")def up():ser.write(b'+') return statement("Ceiling Fan加速。")@ask.intent("FanLevelDown")def down():ser.write(b'-') return statement("Ceiling Fan speed down.")if __name__ =="__main__":app.run (debug=True)
运行这个python脚本,并将这个脚本加入到你的树莓派的自动启动列表中。
3.下载 Ngrok
Ngrok 是安全的隧道平台,可让您的设备在线。使用此平台,您可以以非常简单的方式使您的 Web 应用程序或任何应用程序上线。下载请到官网下载ARM版。
https://ngrok.com/
解压并进入解压目录。使用命令运行它
./ngrok http 5000
Alexa 技能
转到亚马逊开发者页面并注册您的开发者帐户
https://developer.amazon.com/
登录后进入开发者控制台,现在输入选择“Alexa技能包”
现在选择“添加新技能”
输入技能名称,然后输入调用名称。确保您的调用名称符合必要条件
保存并继续下一步
此处输入技能调用的意图,以及话语示例,即每个意图要启动的词组。
意图如下
{ "intents":[ { "intent":"FanOn" }, { "intent":"FanOff" }, { "intent":"FanLevelUp" }, { "intent":"FanLevelDown" }] }
样本话语
FanOn 说风扇 onFanOn 说 onFanOff 说 offFanOff 说风扇关闭FanLevelUp 说风扇水平上升FanLevelUp 说增加风扇速度FanLevelDown 说风扇水平下降FanLevelDown 说降低风扇速度
保存并进入下一阶段。在这里,您必须输入调用意图后希望将数据发送到的位置。
因为我们使用的是 ngrok , 选择 HTTPS, 并输入ngrok serve中生成的安全链接,保存并进行下一步
为 SSL 证书选择第二个选项,然后继续
检查我们的设置是否正常工作。确保您的 ngrok 服务器正在运行并且 Python 脚本也在运行,否则它将无法运行。
我们可以看到服务器正在接收请求并更新它。
Arduino代码
上传随附的 arduino 草图并将其连接到 raspberry pi,如原理图中所述。
int Fan[] ={13,12,11,10,9,8}; int n=0;void reset();void set(char);void setup() { // 把你的设置代码放在这里,运行一次: for(int i=0;i<6;i++){ pinMode(Fan [i],输出); Serial.begin(9600); } void loop() { char x;if (Serial.available()){ x=Serial.read();重启(); set(x);}}void reset(){ for(int i=0;i<6;i++) { digitalWrite(Fan[i], LOW); }}void set(char x){ switch (x) { case '1':n=1;休息;案例“+”:n++;休息; case '-':n--;休息;案例'0':n =0;休息; } digitalWrite(Fan[n],HIGH);}
硬件
按照原理图连接硬件
快乐制作。以类似方式激活任何其他设备的语音:)
代码
- arduino 草图
- Python 服务器代码
arduino SketchArduino
将此代码上传到您的arduino并将其连接到您的树莓派服务器int Fan[] ={13,12,11,10,9,8}; int n=0;void reset();void set(char);void setup() { // 把你的设置代码放在这里,运行一次: for(int i=0;i<6;i++){ pinMode(Fan [i],输出); Serial.begin(9600); } void loop() { char x;if (Serial.available()){ x=Serial.read();重启(); set(x);}} void reset(){ for(int i=0;i<6;i++) { digitalWrite(Fan[i], LOW); }}void set(char x){ switch (x) { case '1':n=1;休息;案例“+”:n++;休息; case '-':n--;休息;案例'0':n =0;休息; } digitalWrite(Fan[n],HIGH);}
Python 服务器代码Python
设置 ngrok 后,在您的 spython 中取消此代码以便接收数据from flask import Flaskfrom flask_ask import Ask, statementimport requestsimport jsonimport serial ser =serial.Serial("/dev/ttyAMA0",9600)app =Flask(__name__ )ask =Ask(app, '/')@[email protected]("FanOn")def on():ser.write(b'1') return statement("吊扇打开了。")@ ask.intent("FanOff")def off():ser.write(b'0') return statement("Ceiling Fan turn off.")@ask.intent("FanLevelUp")def up():ser.write (b'+') return statement("Ceiling Fan speed up.")@ask.intent("FanLevelDown")def down():ser.write(b'-') return statement("Ceiling Fan speed down." )if __name__ =="__main__":app.run(debug=True)
示意图
这就是您将设备连接在一起的方式制造工艺