×

WhatsApp地图和天气预报聊天机器人开源

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

吴湛

分享资料个

描述

描述

几个星期以来,我一直在使用 Twilio 的 API,尤其是 WhatsApp 消息传递,甚至创建了一个项目,将来自 NodeMCU 的变量发送到我的手机,您可以在此处找到该项目。但是,我以前的项目只是定期将数据包作为 WhatsApp 消息发送到我的手机。而且,我决心采用我的萌芽并通过使用 WhatsApp 响应消息和 MySQL 数据库来改进它,从而创建了这个项目。这样,当用户请求变量或通过 WhatsApp 从用户那里获取命令时,NodeMCU 会将变量作为 WhatsApp 消息传输到手机。为了管理它,我在 PHP 中创建了一个 Web 应用程序,它检测是否发送了 WhatsApp 消息并根据正文中的关键字响应消息。该应用程序名为 WhatsApp Two-Way Connection Hub,将从 NodeMCU 传输的所有变量和从 WhatsApp 接收的命令保存到专用的 MySQL 数据库,因此在请求时立即与用户和 NodeMCU 进行通信。

在这个项目中,我想制作一个远程测绘和天气预报机器人,在请求时将温度、压力、高度、纬度和经度作为 WhatsApp 响应消息发送,并通过 WhatsApp 发出命令来控制基地。为了收集数据,我决定使用 BMP180 压力和温度传感器和 GY-NEO6MV2 GPS 模块,为了使底座可远程控制,我使用了 L298N 电机驱动器和两个轮子和直流电机套件以及一个球形脚轮。

此外,您还可以通过 WhatsApp 在 Google 地图上查看 GPS 模块生成的位置。

首先,下载下面Arduino IDE所需的库,继续下面的步骤。

 
poYBAGOSqCaAPqE0AAP9woFa-Lc447.jpg
 

适用于 WhatsApp 的 Twilio

要通过 Twilio 的 API 发送 WhatsApp 消息,您唯一需要做的就是注册一个 Twilio 试用帐户。

注册后,使用您的 SID 和 Auth Token,您可以免费使用 WhatsApp 的 Twilio API。正如 Twilio 上所解释的那样,您需要将共享电话号码与您的手机连接起来才能启动 API 和 WhatsApp 模板消息。

重要提示:为了能够响应来自经过验证的手机的 WhatsApp 消息,您必须使用连接中心路径更改沙盒中 Twilio 应用程序的默认端点 URL。

如需更多信息并了解如何激活您的帐户,请单击下面的链接。

转到 Twilio。

您可以在此处使用我的推荐代码注册 Twilio

 
pYYBAGOSqCmAe7GYAAD1nkLbRcQ903.jpg
 
 
pYYBAGOSqCuAW03QAADm9szm354862.jpg
 
 
poYBAGOSqDCAL7PiAACfbXc1rA0115.jpg
 

如何创建连接集线器来管理数据传输

对于我网站的订阅者,我编写了一个名为 WhatsApp Two-Way Connection Hub 的 Web 应用程序,它允许您通过 Twilio 应用程序响应来自经过验证的电话号码的 WhatsApp 消息,以便从 NodeMCU 或任何其他设备获取变量可以发出 HTTP 请求,作为 WhatsApp 消息并向设备发送命令。

此应用程序将来自设备的数据临时保存到专用的 MySQL 服务器中,因此无需在每次用户请求数据时从设备调用当前变量。要从设备正确注册变量,您必须通过 HTTP 请求将变量发送到您唯一的连接集线器路径。

重要提示:为了能够使用该应用程序,您必须使用 TheAmplituhedron API 使用您的晶石生成的连接集线器路径更改沙盒中 Twilio 应用程序的默认端点 URL。

当您在 WhatsApp 上输入特定关键字时,您可以在下面看到专用数据库中每个数据的关键字,此应用程序将通过将与关键字关联的请求变量发送到您的手机或将命令传输到设备来响应该消息。

数据库中的数据持有者:Data_1、Data_2、Data_3、Data_4、Data_5、Data_6、Command

关键字(预定义和集成):

  • 温度 -> 获取数据_1
  • 压力 -> 获取数据_2
  • 高度 -> 获取 Data_3
  • 日期 -> 获取数据_4
  • 时间 -> 获取 Data_5
  • 纬度和经度 -> 获取 Data_6
  • 地图位置 -> 使用 GPS 信息获取 Google 地图链接
  • Go Straight -> 将自身作为命令发送到设备
  • 返回 -> 将自身作为命令发送到设备
  • 向右走 -> 将自身作为命令发送到设备
  • 向左走 -> 将自身作为命令发送到设备
  • 暂停 -> 将自身作为命令发送到设备
  • 编程者
  • 关于
  • 你好吗?
  • 更多信息
  • 接触
  • 蜘蛛侠 -> 测试媒体传输
  • 蝙蝠侠 -> 测试媒体传输
  • 帮助 -> 打印所有关键字

有关此应用程序和获取自动生成的双向连接集线器的更多信息,请单击下面的链接。

转到 WhatsApp 双向连接中心。

提醒:WhatsApp 双向连接中心是开源的。如果您不想在您的项目中使用 TheAmplituhedron 而不是本地主机或您的服务器,您可以下载下面的源代码,从而通过在您的服务器上创建连接中心应用程序来专门化关键字。

但是,要管理它,您必须从此处在您的目录中下载 Twilio PHP Helper Library

 
poYBAGOSqDuACyF8AAJqj5dfC1k161.png
 
 
pYYBAGOSqE-AdZXxAAMOihDU01g979.png
 
 
poYBAGOSqGGADYtYAANSY7UaFpk136.png
 
 
pYYBAGOSqICAOh-UAAPnLwyZaVk161.png
 

特征

1) 收集GY-NEO6MV2 GPS模块生成的日期、时间、纬度和经度信息。

 
poYBAGOSqIWAMkzoAACiWLG-RkM172.jpg
 

2) 从 BMP180 压力传感器获取温度、压力和高度。

 
poYBAGOSqIeAGssZAADB0kiEcBM798.jpg
 

3) 发出HTTP Get Request 将变量传输到数据库并从数据库接收命令作为响应。

 
poYBAGOSqI-AcbsCAACoKf4DI-A750.jpg
 

4) 根据指令,控制一个L298N电机驱动器。

 
pYYBAGOSqJKAJBD3AACAQh0vtXc383.jpg
 

5) 在串口监视器上监视所有进程。

 
poYBAGOSqJSAHDrcAACXb_L8qmk482.jpg
 

6) 根据 WhatsApp 的请求,获取响应消息以显示保存到数据库的变量,或者通过在 WhatsApp 上发送命令来向设备发出命令。

 
pYYBAGOSqKuALN3AAAXcmvbbY0k118.jpg
 

连接

NodeMCU GPIO 引脚连接在下面的代码中有很好的解释。如下图所示进行硬件连接。

我只是使用热胶枪将所有组件固定到一个旧的圆柱形金属盒上,并用烙铁焊接一些组件。

注意:我使用带盖的 8-AA 电池座作为外部电源为设备和组件供电,因为它很容易与底座屏蔽连接。

 
 
 
 
poYBAGOSqMSAcQyTAAhC1J2L0Ho874.jpg
 
1 / 5
 
 
 
 
 
poYBAGOSqPCADWgWAAuZyZYIPN8023.jpg
 
1 / 5
 
 
poYBAGOSqQCAZemoAASVf6pUdHc209.jpg
 

影片

串行监视器演示 | WhatsApp 地图和天气预报聊天机器人

 

使用关键词 | WhatsApp 地图和天气预报聊天机器人

 

现场测试 | WhatsApp 地图和天气预报聊天机器人

 

 


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

评论(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:'WhatsApp地图和天气预报聊天机器人开源',//标题 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);