×

使用Arduino来查看来电显示并接听这些电话

消耗积分:2 | 格式:zip | 大小:0.03 MB | 2022-12-09

h1654155275.6483

分享资料个

描述

 
 
 
 
pYYBAGOShUmAWacZAAMJX_S2p-I423.jpg
 
1 / 3
 

有些日子,电话似乎永远不会停止响铃。来电显示总是显示“免费电话”或其他一些废话。我想要一种方法来挂断这些电话。我打算使用 Arduino 来查看来电显示并接听这些电话中的每一个。我在看录音机模块,但后来我得到了一个 Linkit One。凭借其内置的音频 mp3 播放器,它非常完美。

最好的部分是,如果您播放官方的“此号码已断开连接”消息,大多数电话推销员的拨号机会在开头识别出三声软管并将您从他们的活动拨号列表中删除......

第 1 步:找到所有零件

 
 
 
 
pYYBAGOShVKAWABnAAHfNEsJZWI609.jpg
 
1 / 7
 

我在家里使用 VOIP 系统,但它在其 POTS 线路上提供标准来电显示信号。如果你打算在 PSTN 上使用它,你可能想要使用 FCC 批准的接口,或者只是拿一个旧的 US Robotics 调制解调器,但我不必担心,所以我选择了 HT9032D。我从 Tayda Electronics 那里得到这些。真的很便宜,但他们只库存表面贴装封装。你可以花更多的钱从另一家供应商那里得到一个浸渍包,但我手头有一些古怪的适配器板……

我用一块空白的 Shield 原型板来固定所有部件。我在零件柜中有一些 RJ-11 连接器和 600 欧姆匹配变压器。我有大量购买这种东西的习惯......

第 2 步:理解数据

 
pYYBAGOShWKAZQk4AACkz2qddsk474.jpg
来自我的 PBX 的实时数据转储
 

很久以前,我从 MeLabs 得到了一块名为 Lab-XT 的开发板。它用于 pic 微控制器,并且具有支持 DTMF 和 CallerID 的芯片。我很惊讶没有人真正拥有 Arduino 世界的任何例子。那里有一个,重复了很多次,但它对我不起作用。

使用MeLabs 来电显示信息页面作为指南,我着手构建一个简单的状态机来解析传入的数据包。它可能看起来并不简单,但我试图将事情扩展开来,以便您可以按照代码进行操作。我只实施了 MDMF,因为那是我家里的东西。SDMF 更简单,但没有实际的转储可供参考。

如果有人向我发送 SDMF 消息的终端日志,我会将其添加到代码中。我可以将转储重播到解码器中进行测试。

这是要做的第一件事。获取数据转储。我使用 Prolific USB 转串行分线板来监控数据输​​出引脚。我使用 Putty 记录了一些呼叫,并使用 Midnight Commander 以 HEX 格式查看日志。还有很多其他终端和查看器。用你最喜欢的。

线路上有很多噪音,但不会误认为连续 30 个 U。以防万一我错过了一些我测试了 > 25 U's received。然后我查找 MDMF 数据包的 0x80 标识符。如果您还想进行 SDMF 解码,您可以在此处查找 0x04。

然后我保存数据包长度,这样我就知道什么时候完成了。

有 5 个消息 ID 需要注意,我分别处理每一个。它以校验和结尾,但我暂时忽略了它。也许以后。我宁愿看到一个乱码的名字也不愿看到一条错误信息....

日期消息似乎是提供商本地的。一个本地 voip 服务器关闭了 1 小时,但这是服务器本身的夏令时错误。

我尝试了几个不同的提供者,但消息并不总是以相同的顺序出现。有时它是“日期 - 姓名 - 号码”,而在其他情况下它是“日期 - 号码 - 姓名”。YMMV

第 3 步:原理图和代码

 
poYBAGOShX6AQ1zFAAHrTDMaNyc904.jpg
 

这里有很多部件,但它实际上是一组非常简单的威廉希尔官方网站 块。从数字 I/O 引脚驱动继电器的晶体管、模拟调制解调器芯片和支持组件、I2C 显示器的接头以及常用的去耦电容器和保护二极管。

我为屏蔽设计了一块威廉希尔官方网站 板,但我还没有时间验证设计。我为这个盾牌的未来项目添加了一个电源插孔。我可以为我的朋友做一些......

第 4 步:组装防护罩

 
 
 
 
poYBAGOShYOAdIzpAAFNYW3Q_rQ434.jpg
 
1 / 4
 

我手工连接了原型。它可能不漂亮,但它有效。如果我有一些安静的时间,我会在版本 2 上工作。我正在制作两个不同的板。一种用于 Dip 芯片版本,另一种用于我的古怪有线适配器板。蓝色便利贴显示了这些适配器的奇怪引脚。在 eBay 上购买时要小心。有时 50 件 2 美元并不划算.....

第 5 步:启动电源

 
 
 
 
pYYBAGOShZyAMguKAAGRgBOAT58741.jpg
 
1 / 5
 

由于我计划断开我在家庭监控系统中使用的现有 PC 电源,因此我从一个破旧的 PC 风扇中获得了一个软盘驱动器 molex 电源连接器。只要确保将电源引脚从 +12V 侧换到 +5V 侧即可。

第 6 步:安装它

 
 
 
 
pYYBAGOShZ-ATvIzAAFWhjki_nc560.jpg
 
1 / 3
 

我在地下室的墙上挂着一个旧警报器。它装有一个 PIC 微控制器监控板,通过 IP 到串行转换器与我的服务器通信。它已经存在了十多年,可能需要更新。也许很快就会有第二个 Linkit One 进入这个柜子……

第 7 步:测试它

 
 
 
 
pYYBAGOShaSAe2qUAABwRtZl_MA995.jpg
 
1 / 3
 

我在顶部添加了一个 define 用于调试。如果将其设置为 true,它会在启动前等待串行控制台。

底部还有一个 I2C 端口,您可以将 LCD 与 I2C 背包连接。如果您制作桌面版本,这是一个不错的功能。

调试输出遵循机器状态并显示每条消息的长度。我可能应该在每个 serial.print 周围加上“if (debug)”,但我很懒,它似乎并没有打扰 Linkit One

现在它只是硬编码列表中的一条消息。只需向被阻止的调用者函数添加更多检查。您可以为每个被阻止的号码使用单独的消息

借助 Linkit One 的功能,我可以轻松升级它以使用 SD 卡并保留所有呼叫的日志,并添加一个包含被阻止号码与 mp3 文件名的 csv 文件。我只需要编写一个例程来处理 csv 文件,然后可能是一个网络更新表单.....

每个号码都有一条独特的消息,我可以确定来电者越烦人,他们收到的消息就越合适!

第 8 步:未来?

 
 
 
 
poYBAGOShbSATxypAAGUWcBcCpY278.jpg
 
1 / 3
 

还有什么?

我真的不喜欢小显示器。我将其更改为使用 20x4。好一点,但我仍然会无头地运行它。这使得它作为桌面设备更有用。

最近,我注意到社区血液服务中心每次献血时都会连续三次给我打电话。可能会限制每天的通话数量?因为我们都是 O 型,所以他们似乎喜欢我们,但我只需要一个电话,因为我们确实会互相交谈。

也许添加第二个继电器来驱动压电警报器,为高优先级呼叫者发出本地警报。它不会接收和播放任何东西,只会把我吵醒或引起我对商店噪音的注意。

 
pYYBAGOShUmAWacZAAMJX_S2p-I423.jpg
 

 


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

评论(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:'使用Arduino来查看来电显示并接听这些电话',//标题 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);