×

如何在通知程序上以动画的形式显示来自手机的通知

消耗积分:0 | 格式:zip | 大小:0.11 MB | 2023-02-08

好名字

分享资料个

描述

远离亲人呆在家里?在这个困难时期,这个有趣的小项目一定会让您的脸上露出笑容。

在本教程中,我将向您展示如何在通知程序上以动画的形式显示来自手机的通知。

让我们开始吧!

补给品:

ESP12E WiFi 模块 x1

WS2812B LED x27

AMS1117 3.3V 稳压器 x1

10k SMD (0805) 电阻 x4

100nF 贴片 (0805) 电阻 x1

用于 ESP12E 编程的 NodeMCU

第 1 步:计划

 
 
 
 
FYOHB6CK84NK4B3.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 2
 

计划是使用IFTTT (If This Then That)扫描手机上发生的特定事件,然后触发 Web 请求。Dweet用于从 IFTTT 发布数据,然后使用 ESP12E 获取相同的数据。

当我开始这个项目时,我的想法是制作一个通知程序,让我知道是否有来自特定人的消息、电话等。但后来我意识到使用 IFTTT 可以做更多的事情。因此,我决定添加低电量、按钮小部件和 Twitter 等通知。您可以从 IFTTT 添加更多事件。

第 2 步:它是如何工作的?

如果发生事件(消息、电池电量不足、通话等),则向 Dweet 发出 Web 请求并以 JSON 格式“发布”数据

例如,如果电池电量下降到 15% 以下,则会触发一个向http://dweet.io/dweet/for/mythingname?发出 Web 请求的事件。注意=电池这会将 "Noti":"batt" 添加到 JSON 代码中。Noti是“键”,batt是它的“值”。

{
"this":"succeeded",
"by":"getting",
"the":"dweets",
"with":
[{
"thing":"mythingname",
"created":"2020-03-25T09:13:17.566Z",
"content":{
"Noti":"batt"
}
}]
}

ESP12E 然后连接到 Dweet 并使用http://dweet.io/get/latest/dweet/for/mythingname “获取”发布的数据,并解析上述 JSON 以检查“ Noti ”的值。每个事件都被分配了一个不同的值,这就是 ESP12E 知道触发了哪个事件的方式。

然后 ESP-12E 会连续显示动画,直到您按下后面的按钮。

第 3 步:设置 IFTTT 和 Dweet

 

 
 
 
3_EDLC9T8beP.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 7
 

设置微博:

要检查它是否可用,

  • 你只需要为事物想一个名字。
  • 如果你得到如图所示的响应,那么它是可用的。

设置 IFTTT Applet:

网址 - http://dweet.io/dweet/for/indoorgeek?Noti=batt

  • 访问IFTTT并创建一个帐户
  • 单击“探索”,然后单击“从头开始制作您自己的小程序”
  • 单击“This”并从列表中选择“Android Battery”
  • 选择触发器 - “电池电量低于 15%”
  • 单击“那个”并从列表中选择“Webhooks”
  • 选择操作 - “发出网络请求”
  • 方法 - POST
  • 内容类型 - 文本/纯文本
  • 点击“创建动作”

下载 IFTTT Android/iOS 应用程序并登录您的帐户。该应用程序会根据创建的小程序自动要求您允许访问各种服务。否则,您必须手动授予权限。

在应用程序中,转到“设置”>“同步选项”并启用“更快地运行位置、Android 电池和 WiFi 连接”。

同样,您制作了许多小程序。只需更改粗体的 URL 

安卓电池 - batt

推特 - 推特

按钮 - 按钮

第 4 步:PCB 设计

 

 
 
 
dsc_5420_B28ByycVlC.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 5
 

您可以使用任何您喜欢的软件来设计 PCB。我用的是EasyEDA ,因为它适合像我这样的新手。我附上了原理图。单击此处下载 PCB 的 Gerber 文件。

确保 ESP-12E 模块的 WiFi 天线下方没有地平面。

出于编程目的,为 TX、RX、RST、D3 和 GND 提供了焊盘。

完成 PCB 设计后,从您选择的制造商那里制造它。我选择JLCPCB是因为它的快速服务。

我使用布烙铁通过回流焊焊接了 27 个 LED。我不得不手工焊接 ESP-12E 模块以及威廉希尔官方网站 板背面的一些其他 SMD 组件。

我做的错误:

  • 没有检查原理图,因此错过了与 LED 的 GND 连接。我不得不刮掉平面图上的阻焊层并桥接焊点。
  • 我没有在稳压器的输出端加一个100nF 的电容。ESP-12E 在连接 WiFi 时会消耗更多电流。在没有电容器的情况下,电压下降刚好足以重置 ESP-12E。

不用担心!我已经上传了PCB的修正文件。

第 5 步:编码时间

 

 
 
 
codeedit_P08vQfGowu.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 3
 

ESP-12E 可以通过多种方式进行编程。你可以在这里阅读它我将使用 NodeMCU 对其进行编程,这就是我为 RX、TX、RST、D3 和 GND 制作焊盘的原因。确保威廉希尔官方网站 板已通电(5V),以便 ESP-12E 可以使用 3.3V。按照威廉希尔官方网站 板上的标记连接到 NodeMCU。将 NodeMCU 的 EN(启用)引脚连接到 GND。这将禁用 NodeMCU 上的模块,以便可以对我们板上的模块进行编程。将 NodeMCU 连接到您的计算机并打开此处附加的 .ino 文件。

在上传之前,进行以下更改:

  • 输入您的 WiFi SSID
  • 输入您的 WiFi 密码
  • 输入您独特的 dweet“事物”名称。

从库管理器安装ArduinoJsonFastLED库。

注意:安装ArduinoJson时选择低版本(5.13.5)。

选择 Board>NodeMCU 1.0 并点击上传!

第 6 步:3D 打印

这里没什么好看的。只是一个简单的支架,身体呈心形。

支架包含一个通道,USB 电缆从该通道从底座移动到威廉希尔官方网站 板。我将主体设计为摩擦配合。

我仍在努力改进设计。完成后我会更新文件。

第 7 步:享受吧!

将它插入移动充电器,不错过任何通知!

谢谢你坚持到最后。希望你们都喜欢这个项目并且今天学到了一些新东西。如果你自己做一个,请告诉我。订阅我的YouTube 频道以了解更多此类项目。再一次谢谢你!

 


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

评论(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:'如何在通知程序上以动画的形式显示来自手机的通知',//标题 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);