×

创建Bolt IoT支持的文本/语音到莫尔斯编码器

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

郭大

分享资料个

描述

摩尔斯电码是电信中使用的一种方法,用于将文本字符编码为两种不同信号持续时间的标准化序列,称为点和破折号,或滴和达。莫尔斯电码以电报的发明者之一塞缪尔·莫尔斯命名。

如果您想手动编码为 Morse,下面是一个可以派上用场的图表……

pYYBAGNs5e-AdoBEAAAhH0ZtUKA855.png
国际摩尔斯电码表
 

但是,为了现代技术,我创建了 Bolt IoT 支持的文本/语音到莫尔斯编码器,我还将向您展示如何创建它。让我们开始吧!

电路连接

这就是您需要进行电路连接的方式...

 

poYBAGNs5fOAXyGuAADDLPHDUVw769.png
电路连接图
 

 

方法

第 1 步:将电路板放在平坦的表面上。

poYBAGNs5fWAbezdAAApIBUxMgQ573.png
面包板
 

步骤 2:按以下方式连接电阻。

pYYBAGNs5fqAOK6LAAA5IXwz9TQ011.png
电阻连接
 

第 3 步:将 LED 的正极连接到电阻器,将负极连接到电路板的另一侧。

poYBAGNs5f2AG5sbAAA9TZSddhw382.png
LED 贴装
 
poYBAGNs5gCAMY9pAAAbbOsnD6A810.png
LED连接
 

第 4 步:将压电蜂鸣器的正极连接到电路板的正极,将负极连接到负极。

poYBAGNs5gOAZGZVAAApvcmxDvA212.png
蜂鸣器连接
 

第 5 步:现在我们必须按照以下方式进行连接,以便我们可以将蜂鸣器和 LED 的负极引脚连接到 BOLT Wi-Fi 模块的 GND 引脚。

pYYBAGNs5gaAOliIAABieF0l4KQ537.png
LED负极引脚连接
 
poYBAGNs5guAWghPAABxUeWqfeg198.png
蜂鸣器负极引脚连接
 
poYBAGNs5g2AVB5YAABo4cyi8uM848.png
LED 和蜂鸣器负极引脚一起连接到 GND 引脚
 

第 6 步:使用跳线将蜂鸣器的正极引脚连接到 Bolt Wi-Fi 模块上的 Pin-1。

poYBAGNs5hCAf-WyAABn-rN5L3k890.png
蜂鸣器正脚连接
 
pYYBAGNs5hKATAA6AABNGk4YJDI630.png
蜂鸣器正极引脚连接到 Pin-1
 

步骤 7:将与电阻串联的 LED 的正极引脚连接到 BOLT W-Fi 模块的 Pin-0。

poYBAGNs5hWAKCwnAAB2PsNU7n8149.png
LED正极引脚到电阻到引脚0的串联连接
 
pYYBAGNs5hmAP283AABUOys03Zo779.png
Pin-0 使用跨接电缆连接到电阻器和 LED 正极引脚
 

Step8:将Wi-Fi模块接入5V电源,连接云端。

poYBAGNs5hyAcg1JAAA73Jh-5qo591.png
连接电源
 
poYBAGNs5h-AQvVtAAB3X-AH51g495.png
BOLT 开启并连接到 BOLT Cloud
 

接下来是您需要 PyCharm 的编程部分。

连接到代码(在本地计算机上运行 Web 应用程序)

为此,请确保您已安装 PyCharm,并且无论操作系统如何,步骤都保持不变,但这仅在 Windows 10 和 Kali Linux 上进行了测试。

步骤1:在您的计算机上创建一个文件夹并输入它。

poYBAGNs5iGAPRb0AABMzRp0pUU402.png
步骤1
 

第 2 步:在该文件夹中克隆 Morser 存储库。

使用命令:

git clone https://github.com/lankabhedi/morser.git
pYYBAGNs5iSAeTdXAAB_Dsak2UE390.png
克隆 Morser App 存储库
 

第 3 步:在 PyCharm 中打开此目录。

使用命令:

pycharm .
pYYBAGNs5ieABfgtAAI2Zka2Fic629.png
打开 PyCharm
 

第 4 步:打开 Pipfile 并选择安装插件。

poYBAGNs5iuAIX_eAAGT6ogHzfE077.png
安装插件
 
poYBAGNs5i-ARR2WAABaO8hFE-g275.png
接受安装
 

第 5 步:选择终端并运行以下命令。

pip install -r ./morser/requirements.txt
pYYBAGNs5jSANpsyAAJ2zHSv74M306.png
安装应用程序要求
 

第 6 步:在同一终端中,运行以下命令。

python ./morser/app.py
pYYBAGNs5kCAcyCdAAIWRFwGKJk812.png
运行应用程序
 

第 7 步:单击蓝色的 IP 地址,您的应用程序将在您的默认 Web 浏览器中打开。

poYBAGNs5kWASoCOAAIPDz0fbgY222.png
打开网络应用程序
 
pYYBAGNs5kiAXFYYAADPV4AaGuU849.png
莫塞尔
 

输入您的详细信息,然后按“发送到螺栓”。

poYBAGNs5k2AFVFKAABpLyAL17o231.png
成功画面
 

如果您的螺栓设备离线,它将显示错误屏幕。

pYYBAGNs5lGAA4J-AABjARXTsog596.png
错误屏幕
 

连接 IFTTT 由 Google Assistant 控制

出于测试目的,我在 Heroku 上部署了这个应用程序。

网站:http://morser-app.herokuapp.com/

poYBAGNs5lSAKeIKAADYyfOYMkQ209.png
 

我为此开发了一个 API,我们需要将其连接为 IFTTT 网站上的 Webhook。由于我的应用程序托管在“免费层”上,因此您的 API 请求可能会超时。

API 请求的格式为:

https://morser-app.herokuapp.com/api?api_key=bolt-api-key&device_id=bolt-device-id&message=your-message

您需要用您自己的值替换“bolt-api-key”、“device-id”和“your-message”。

根据设备状态,它将为您提供以下输出。

{
"device_status": "offline",
"message_passed": "no",
"morse_code": ""
}
poYBAGNs5lmABQ8kAAAydbO1qIQ473.png
POSTMAN 应用程序的屏幕截图
 
{
"device_status": "online",
"message_passed": "yes",
"morse_code": ".. "
}
pYYBAGNs5luAf3toAAA340ZN7nU384.png
POSTMAN 应用程序的屏幕截图
 

请注意,除非设备打开,否则“morse_code”不会返回任何内容。

要将其与 Google Assistant 一起使用,请按照给定的步骤操作。

第 1 步:登录您的 IFTTT 帐户,然后单击“创建”。

网站:https://ifttt.com/home

pYYBAGNs5mOACfEVAAD99jLaZRY604.png
IFTTT 创建新小程序
 

第 2 步:单击“添加”。

pYYBAGNs5maAFG2GAAEJffvIboc301.png
IFTTT 创建小程序
 

第三步:点击“谷歌助手”。

poYBAGNs5mmADWPmAACWkrrEQyE775.png
选择 Google 助理
 

第 4 步:选择以下选项。

poYBAGNs5m2AUu53AAKA-xfbFWY772.png
成分屏幕
 

第 5 步:输入以下值。

pYYBAGNs5nGAEO2pAACPL0icFUg186.png
触发编辑页面
 

第 6 步:点击“添加”

poYBAGNs5nSAJWDEAAEhV7Gayg0105.png
然后那个页面
 

第 7 步:选择“网络钩子”。

poYBAGNs5neAXJrFAACeYjgy3UY101.png
选择 Webhook
 

第 8 步:选择“发出网络请求”。

pYYBAGNs5nuAY7AUAAEI5C8y-Kk180.png
选择“发出网络请求”
 

第 9 步:将“bolt-api-key”和“device-id”替换为您自己的。

poYBAGNs5n6AKjABAACtCfUfC9M093.png
编辑操作字段
 

第 10 步:选择“继续”。

pYYBAGOIJlyAWHxuAADRmN6SREM733.png
选择“继续”
 

第 11 步:查看并单击“完成”。

poYBAGOIJl-AIbruAADB5aIl3TM010.png
审查并完成
 

您将看到您的小程序,如下所示。

poYBAGOIJmKASdMRAADwGM2o_rc513.png
我的小程序页面
 

命令行应用程序代码

如果您不想使用任何 Web 应用程序并且只想从单个 python 脚本运行它,您可以使用以下代码。

from boltiot import Bolt
import time as t

api_key = input("Enter your API key:")
device_id = input("Enter your Bolt Device ID:")
mybolt = Bolt(api_key, device_id)

MORSE_CODE_DICT = { 'A':'.-', 'B':'-...',
                    'C':'-.-.', 'D':'-..', 'E':'.',
                    'F':'..-.', 'G':'--.', 'H':'....',
                    'I':'..', 'J':'.---', 'K':'-.-',
                    'L':'.-..', 'M':'--', 'N':'-.',
                    'O':'---', 'P':'.--.', 'Q':'--.-',
                    'R':'.-.', 'S':'...', 'T':'-',
                    'U':'..-', 'V':'...-', 'W':'.--',
                    'X':'-..-', 'Y':'-.--', 'Z':'--..',
                    '1':'.----', '2':'..---', '3':'...--',
                    '4':'....-', '5':'.....', '6':'-....',
                    '7':'--...', '8':'---..', '9':'----.',
                    '0':'-----', ', ':'--..--', '.':'.-.-.-',
                    '?':'..--..', '/':'-..-.', '-':'-....-',
                    '(':'-.--.', ')':'-.--.-'}


def encrypt(message):
    cipher = ''
    for letter in message.upper():
        if letter != ' ':
            cipher += MORSE_CODE_DICT[letter] + ' '
        else:
            cipher += ' '

    return cipher

def main():
    message = input("Enter you message:")
    result = encrypt(message.upper())
    print(message.upper())
    print(result)

    mybolt.digitalWrite("1", "LOW")
    mybolt.digitalWrite("1", "HIGH")
    t.sleep(0.01)
    mybolt.digitalWrite("1", "LOW")
    mybolt.digitalWrite("1", "HIGH")
    t.sleep(0.01)
    mybolt.digitalWrite("1", "LOW")
    mybolt.digitalWrite("1", "HIGH")
    t.sleep(0.01)
    mybolt.digitalWrite("1", "LOW")
    mybolt.digitalWrite("1", "HIGH")
    t.sleep(0.01)
    mybolt.digitalWrite("1","LOW")

    for char in result:

        if(char == "-"):
            mybolt.digitalWrite("0", "LOW")
            mybolt.digitalWrite("0", "HIGH")
            t.sleep(3)
            mybolt.digitalWrite("0", "LOW")

        elif(char == "."):
            mybolt.digitalWrite("0", "LOW")
            mybolt.digitalWrite("0", "HIGH")
            t.sleep(1)
            mybolt.digitalWrite("0", "LOW")

        elif(char == " "):
            mybolt.digitalWrite("1", "LOW")
            mybolt.digitalWrite("1", "HIGH")
            t.sleep(0.2)
            mybolt.digitalWrite("1", "LOW")
            t.sleep(0.1)

        else:
            continue


if(__name__ == '__main__'):
    main()

请确保boltiot在终端窗口中使用以下命令安装模块。

pip install boltiot
pYYBAGOIJmWAIPCJAAHMCAi-VHY829.png
安装 BoltIot 模块
 

结论

如果你坚持到底,高五!

 

 


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

评论(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.lene-v.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 IoT支持的文本/语音到莫尔斯编码器',//标题 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.lene-v.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);