×

使用Bolt的Google Assistant自动房间照明

消耗积分:0 | 格式:zip | 大小:0.37 MB | 2022-12-19

刘涛

分享资料个

描述

介绍:

对于像我这样的懒人来说,去总机开灯是一项艰巨的任务。但是,如果房间变暗时灯会自动打开,而房间明亮时会神奇地(阅读:自动)关闭灯怎么办?酷,不是吗。这正是这个项目的目的。

使用 Bolt Wifi 模块,我制作了一个威廉希尔官方网站 ,可以根据房间的暗/亮程度打开/关闭灯。它每 10 秒检查一次房间的亮度,并根据房间的亮度打开/关闭 LED。如果要更改房间的状态,那么我还会通过短信在手机上收到通知,房间很亮,所以灯被关掉了,或者房间很暗,所以灯被打开了。我已经为不需要打开灯的房间的通常亮度设置了上限和下限。如果亮度大于上限,则 LED 关闭,如果低于下限,则 LED 点亮。

如果房间足够亮,我不能开灯,但强度低于我设定的下限怎么办?好吧,这就是谷歌助手派上用场的地方。我要说的是,“Ok Google,关灯。” 它会立即这样做。

或者当它比上限更亮但稍微多一点的亮度会有所帮助时,然后我对我的 Google 助理说打开灯。

脚步:

脚步:

第 1 步:硬件连接

拿起面包板,将 LDR 和其中一个电阻串联起来。取另一个电阻器并将其与 LD​​R 电阻器串联连接分开连接到面包板。

然后将一根跳线分别连接到 Bolt 设备的 GND、3V3、引脚 0 和引脚 A0。

pYYBAGOANVSAQ55HAACG3Hq5HZo64.jpeg
Bolt Wifi 模块中出现的跳线
 

现在,按如下方式连接这些跳线:

1. 从 GND 到与 LDR 串联的电阻的另一端,在面包板上。

2. A0 中的那个要连接到我们串联 LDR 和电阻的点。

3.面包板上3V3到LDR另一端的那个。

 
 
 
poYBAGOX1JqAR1tBAAD78Z2SoJ877.jpeg
 
1 / 2面包板连接
 

现在将一根跳线分别连接到 LED 的两条腿上。从正极端子(较长的腿)到第二个电阻器(不与 LDR 串联)的一端出现的那个。LED 负极(较短的腿)的跳线与我们之前制作的 GND 连接串联。

最后,将引脚 0 线连接到第二个电阻器的另一端(不与 LDR 串联)。

pYYBAGOX1KGAZOxiAACM4DTZ37484.jpeg
整个威廉希尔官方网站
 

添加图像

删除此图像

通过 USB 电缆将 Bolt Wifi 模块连接到电源,瞧!硬件配置完成!

poYBAGOX1LCAHP4oAACkE3SWplY74.jpeg
连接到电源
 

添加图像

删除此图像

步骤 2:创建配置文件

我们将创建一个文件,其中包含我们将使用的资源的所有必要详细信息,例如,Bolt 模块的设备 ID 和 API 密钥。

您将在您的 Bolt 云帐户中找到您的 API 密钥和设备 ID。

然后在第三方 SMS 服务提供商 Twilio 上创建一个帐户。关闭手机上的免打扰(如果已启用),因为 Twilio 无法向已启用免打扰的号码发送短信。

请按照以下步骤创建您的 Twilio 帐户:

1. 打开https://www.twilio.com/

2.点击注册

3. 填写必要的详细信息。

4. 然后,您必须通过单击发送到您的电子邮件的链接来验证您的电子邮件。

5. 电子邮件验证后,您必须获得您想要接收验证消息的号码。通过选择您的国家(在我的情况下为印度)输入它。

5. 接下来,您将在产品选项卡下选择可编程短信和电话号码。

6. 完成后,单击继续。为您的项目命名。点击继续。

7. 当被要求邀请队友时,单击跳过此步骤。

8. 现在将创建项目,单击项目信息以查看您的帐户凭据。

9. 您需要复制 Account SID 和 Auth Token(它是隐藏的,点击查看,查看)。

10. 从下拉菜单中选择“可编程短信”。现在单击“开始”,它将生成您的号码。

11. 点击“获取号码”按钮。在出现的弹出窗口中,单击“选择此号码”。然后会出现一个弹出窗口,其中包含最终数字,复制它。

现在,这就是 Twilio。

注意:如果您在 IST 晚上 9 点之后尝试此步骤,您将不会收到消息。

启动您的 Ubuntu 服务器,无论是您通过 puTTy、VirtualBox 还是 VMware 访问的服务器。

现在使用以下命令创建一个文件:

须藤纳米conf.py

pYYBAGOX1LaAMJVFAABewTXHxfw386.png
conf.py 文件
 

conf.py 中使用的变量的值:

SSID= Twilio 帐户 SID

Auth_Token= 来自 Twilio 的身份验证令牌

From_no= 使用 Twilio 生成的数字

To_no= 链接 Twilio 以获取消息的号码

API_key= 来自 Bolt Cloud 的 Bolt API 密钥

Device_ID= 您的 Bolt 模块的设备 ID,从 Bolt 云获取。

按 CTRL+X,按 Y,然后按 Enter。

配置文件是您的 python 文件和 bolt、Twilio 帐户之间的链接。

现在我们将创建 python 文件,它将使项目活跃起来。

第 3 步:Python 文件

 
 
 
poYBAGOX1LyACfSJAADViJCiZIQ126.png
 
1 / 2代码(第 1 部分)
 
pYYBAGOX1L-ANRzqAADdzvMTt1I965.png
 

代码说明:

我们首先导入我们的配置文件、模块 time 和 json。除了这些,boltiot python 库的 Sms 和 Bolt 模块已被导入。

接下来,我设置了房间通常亮度的下限和相同的上限。

API 密钥和设备 ID 作为参数传递给 Bolt 函数,结果存储在 mybolt 变量中。

Twilio 详细信息作为参数传递给 Sms 函数并存储在变量 SMS 中。

初始化变量标志以检查 LED 的状态:开或关。如果状态为 0 即关闭,则标志为零,如果状态 = 1 即打开,标志 =1。

现在我们进入一个无限循环,我们将在其中检查传感器以决定是打开还是关闭 LED。

如果传感器的值高于上限并且 LED 处于开启状态,我们请求 Twilio 服务器发送一条消息,通知用户手机上的房间足够亮,因此应该关闭灯。

因此,以下代码也会关闭灯(使用 digitalWrite())并重置标志。我们还记录从 Twilio 收到的响应。

否则,如果传感器的值小于下限并且标志 =0 即 LED 熄灭,我们请求 Twilio 服务器在我们的手机上发送一条消息,表明房间很暗,因此灯被打开。

因此,此请求代码后面的代码打开灯(使用 digitalWrite())并设置标志。我们还记录了从 Twilio 收到的回复。

如果发生错误,代码会跳转到 except 块并打印错误详细信息。

循环中的最后一个元素是设置计时器,即自上次记录传感器值以来经过 10 秒后收集传感器数据。

终端上的输出是:

pYYBAGOX1MeAfFy1AADT8OLWs0I260.png
终端输出
 

手机提示信息:

poYBAGOX1MqAdUEdAABcABUVe8089.jpeg
短信形式的电话提醒
 

第 4 步:将系统连接到 Google Assistant

首先,我们需要记下/复制使 Bolt 模块打开和关闭灯的 GPIO 命令。

前往螺栓云。滚动到主页上的文档部分。

在文档页面上,转到 API 文档,从那里转到 GPIO 命令,您必须在其中选择写入数字输出选项卡。

此命令将打开 LED。

要关闭 LED,只需将上述 URL 中的 state 属性值替换为 LOW。

保存这两个链接。

现在,我们将使用 IFTTT 和 Webhooks 将 Bolt 模块与 Google Assistant 集成。

按着这些次序:

1. 使用与您的 Google 助理相关联的 Gmail 帐户在 IFTTT 上创建一个帐户。

www.ifttt.com

2.然后通过URL创建一个新的小程序:

ifttt.com/create

3. 点击+这个

4.选择谷歌助手>说一个简单的短语

pYYBAGOfvEWAP_w7AABd_JNs1qc488.png
选择服务
 

5. 输入将触发动作的短语,以多种方式指定触发短语,以便更容易调用 GA。

poYBAGOfvEqAP29_AABzj75L-V8472.png
选择触发器的类型
 
poYBAGOfvFCAaQQRAAA6oihsmsk325.png
对触发器及其响应进行编程
 

6. 输入 GA 在确认您的请求时应该说的响应。

7. 单击创建触发器。

8. 现在,点击“+那个”。

pYYBAGOfvFOAdl32AAAkkmM-36o508.png
 

9. 选择 Webhook。

poYBAGOfvFeAXA4cAAAqGB-LN2Y168.png
 

10.选择发出网络请求,它将带您到另一个页面。在新页面上,输入 API URL 以打开您从 Bolt Cloud 上的文档中保存的 LED。

poYBAGOfvFqAKt6vAAAm3lrvgMk372.png
为 Webhook 选择操作
 
pYYBAGOfvFyASB47AABF2QFRw1w713.png
对 Webhook 进行编程
 

11. 选择“GET”方法。从下拉列表中选择 application/json 作为您的内容类型。

12. 单击创建操作。它将带您到一个可以查看它的页面,如果您满意并确定,请单击“完成”。

pYYBAGOfvF-AElCfAAA0rNFS6k0900.png
 

从步骤 2 到 12 重复上述过程以关闭 LED。这次请记住使用 URL 来关闭 LED。

而且,就是这样!现在,尝试对您的 GA 说“Ok Google”并说出您的一个触发短语,它会回复响应短语,瞧!LED 的行为也一样!

pYYBAGOfvGKANJOfAADDidliMGo22.jpeg
硬件输出
 

添加图像

删除此图像

poYBAGOfvGWABMCCAAAZSjeJZwM02.jpeg
给出 GA 语音命令及其输出
 

注意:让 LDR 远离 LED 光源,以免 LED 灯干扰您的程序。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用Bolt的Google Assistant自动房间照明',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);