×

使用Twilio的短信按钮

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

吴藩

分享资料个

描述

本教程是与Twilio团队一起为 2019 年圆周率日制作的!我们正在为PyLadies SF 活动举办一个研讨会:Pi Day + RasPi + Python + 真正的可食用馅饼……有什么不值得爱的?

项目名称不言自明,让我们开始吧!

设置您的 Twilio 帐户

如果您还没有这样做,请前往Twilio并创建一个新帐户。您将获得一些用于连接电话号码的免费信用额度——您甚至可以搜索您想要的电话号码!

现在是从帐户仪表板(主页图标)获取您的帐户 SID 和授权令牌的好时机。保护他们的安全!

 
pYYBAGOuN5GACmNfAALa7xq_lqQ397.png
Twilio 仪表板欢迎屏幕
 

通过串口线连接你的树莓派(可选)

如果您没有备用显示器、键盘和鼠标,您可以通过 USB 串行电缆通过 SSH 连接到您的 Pi,这就是我们将在研讨会上进行的操作。这可能需要您在 Raspberry Pi 的首选项中启用 UART,我们已经设置好了。

您可能还需要在本地计算机上下载并安装驱动程序(如果遇到问题,请尝试同时下载 Prolific 和 SiLabs 驱动程序……向软件之神挥拳

通过其“PWR IN”微型 USB 端口(靠近边缘的端口)为 Pi 供电。如果您已经将 Pi 设置为通过 SSH 无头运行,则可以改为这样做。

否则,假设您已经在您的 Pi 上安装了操作系统,拿起您的串行电缆按照这些说明将您的 Pi 连接到您的计算机并通过 SSH 连接到它(您可以忽略页面上的先前说明)。

 
pYYBAGOuN5SACyxQAAG79FVVQGw294.png
TTL 串行 USB 电缆连接
 

该过程的简要总结,通过命令行:

  • 列出您的 USB 设备以查找 Pi 所在的端口:ls /dev/tty*
  • 找到看起来像/dev/tty.usbserial的那个——后面可能有一些数字
  • 将其插入此命令,然后运行:screen /dev/tty.usbserial 115200
  • 一旦系统提示您登录,请使用默认登录名 pi和密码raspberry (稍后您可能想要更改这些)。您现在已登录到您的 Pi!

使用 ssh 连接在你的 Pi 上设置 wifi,使用内置的 Raspberry Pi 配置工具:

$ sudo raspi-config

完成后,您可以通过 ping Google 测试连接:

$ ping google.com

您应该看到连接定期发生;按 Ctrl+c 停止。

在 RasPi 上使用 Twilio 设置 Python 并测试

按照这些官方说明在您的 Pi 上创建您的第一个 Python 程序并从中发送短信。您需要从此链接安装帮助程序库(如果你正在参加我们的 PyLadies 研讨会,它应该已经安装在你的 MicroSD 卡上。)在 Pi Zero W 上安装 Twilio 库可能需要一段时间,所以现在是向下滚动到构建部分并放置的好时机一切都在一起。

您还可以从主计算机测试 API 代码。我发现这超级友好!请务必将您的*帐户* SID 放在适当的字段中,而不是电话号码的 SID。

 
poYBAGOuN5eAUTfdAAIw9Z_0Qmo144.jpg
Alex 手机的屏幕截图,显示“PyLadies Rock!” 来自她的 Twilio 试用帐户的通知
 

身体素质

按钮的妙处在于,哪根线是哪根线都没有关系!该按钮在按下时仅连接两根电线,因此无论以何种方式插入,它都可以工作。

将母对母跨接导线切成两半,剥去切割端,并用焊料镀锡。将一根电线末端焊接到按钮的每个端子上——如果您使用的电线有两条以上的腿,请使用万用表检查以找到按下按钮时将连接的一对。(当然也可以用面包板代替,如下图。)

将母头连接到 Pi,在引脚 18 和 GND 上。这是一个很棒的引脚参考您还可以向下滚动以查看设置的 Fritzing 图。

……大功告成!

 
 
 
 
pYYBAGOuN5mAQQfUAAFnNfLfbyo073.jpg
 
1 / 2按钮通过焊接母跳线连接到 Pi
 

 

 
pYYBAGOuN52AQWAnAAR8y6Ea-R8289.jpg
以下是连接某些类型的街机按钮的方法(因为街机按钮是最好的)。
 

添加按钮代码

现在,使用该项目底部的代码作为参考,了解如何通过按下按钮触发短信。此代码是 Twilio 的 SMS 代码和Inderpreet Singh 的按钮演示的混搭

要调整此脚本,请在 Pi 上运行:

$ nano sms-button.py

...在具有该文件名的新文档上打开 Nano 编辑器。然后,粘贴代码。最后,替换所有个性化字段:您的帐户 SID、授权令牌、Twilio 号码和个人电话号码。按 Ctrl+o,然后输入,然后按 Ctrl+x,保存并退出。(首先在您的个人计算机上以纯文本文件进行这些编辑,然后通过 SSH 粘贴它可能更容易。)

运行脚本

将代码保存为sms-button.py并运行:

$ python sms-button.py

按下按钮并检查您的手机!

按 Ctrl+c 终止脚本。

 

故障排除

我在运行脚本时遇到了这个错误——“ RuntimeError: Failed to add edge detection ”。这篇文章建议降级到以前版本的 RPi.GPIO,他们的说明对我也很有效。

如果遇到 OpenSSL 错误,请尝试在 Pi 上运行:

pip uninstall pyOpenSSL

...然后再试一次。

延迟:Pi Zero 似乎需要一分钟来启动此脚本,因此如果第一次按下按钮需要一段时间才能响应,这并不罕见。它应该会在一段时间后加速。

 


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

评论(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:'使用Twilio的短信按钮',//标题 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);