首页资讯科技 双掌控板收发摩尔斯电码

双掌控板收发摩尔斯电码

山东省招远第一中学牟晓东作为国内开源硬件的杰出代表,掌控板是一款非常优秀的国产“创客”微控制器板,支持Python代码编程以及Mind+、mPython等主流图形化编程软件。使用单块掌控板进行编程,可以实现噪音计、身高测量仪、高温报警系统和…

山东省招远市第一中学牟晓东

控制板作为国产开源硬件的杰出代表,是一款优秀的国产“创客”微控制器板,支持Python代码编程,支持Mind+和mPython等主流图形化编程软件。使用单个控制板进行编程,就可以实现如噪音仪、测高仪、高温报警系统、黑暗中自动收衣系统等案例。如果有两块控制板,可以使用蓝牙和WiFi双无线通信,遵循MOTT(Message Queue Telemetry Transmission)协议,在SIoT开发平台(如Mind+的SIoT本地物联网和DFRobot的Easy IoT)或OneNET(移动物联网开放平台)等开放平台上设计更丰富的物联网应用创意项目,如谍战电影中的莫尔斯码收发。1.初步知识:莫尔斯电码

摩尔斯电码( Morse code)是一种通过不同的排列顺序来表达相关字符(比如26个英文字母)的数字化通信形式,它的最基本代码是“滴”和“嗒”,分别对应短促的“一个点”信号和“一个划”信号,“一划”相当于“三个点”的时长(如图1)。在各种故事情节中最为经典的摩尔斯电码应用,便是sos国际通用求救信号的发送——字母S的摩尔斯屯码是“滴、滴、滴”三个点,字母()的摩尔斯屯码是“嗒、嗒、嗒”三个划,通过开关手电筒控制电路通断以光的形式,或是单根手指连续敲击桌面以声的形式,都能够快速发送“三点、三划、三点”的SOS求救摩尔斯电码。

莫尔斯电码是一种以不同排列顺序表示相关字符(例如26个英文字母)的数字通信形式。它最基本的编码是“滴滴”和“Ta”,分别对应短的“一点”信号和“一划”信号,“一划”相当于“三点”的持续时间(如图1)。莫尔斯电码在各类故事情节中最经典的应用是sos国际求救信号的传递——字母S的莫尔斯电码是“滴、滴、滴”,字母()的莫尔斯电码是“咔嚓、咔嚓、咔嚓”。可以通过光的形式开关手电筒控制电路,也可以通过声音的形式单指连续轻敲桌面,快速发送。

2.收发操作方法的规划

每个控制面板都有A、B两个按键和P、Y、T、H、()和N六个触摸键供我们选择。在发送方控制板中编程,A键和B键分别设计为发送莫尔斯电码的“滴”和“滴”信号,触摸键P作为每组莫尔斯电码(即其所代表的某个字符)的结束信号,因为莫尔斯电码中实际的字母间隔是一个“滴”的时间(相当于三滴),字与字之间的间隔是七。此外,为了对按键和触摸键的按下和触摸给出即时反馈,应在闪光灯上添加RGB灯,蜂鸣器应播放音符,以模拟“掉落”和“点击”。比如三个RGB灯分别对应A键和B键以及触摸键P的“动作”。同时,在接收机的控制板中进行同样的编程控制方法,模拟莫尔斯顿码的发送和接收之间的“声光”同步响应,更加有趣。3.控制纸板发送器的mPython编程

通过数据线将一块控制板连接到联网电脑的USB接口上,然后运行rnPython编写程序。(1)通过WiFi模块将控制板连接到网络。

两块控制板正常收发信号的“对话”前提是网络连接顺畅,所以程序的初始设置必须是联网。从左边的WiFi中选择第一个模块语句“连接WiFi名称…密码…”然后添加完整的无线网络名称和密码信息(明文显示)。(2)设置“连接MQTT”

在mPython的“扩展”一“MOTT”中提供了若干种MOTT模块,以其中的“MOTT-Easy IoT”为例(其他的用法基本类似),这是由DFRobot提供的物联网MOTT服务,需要从浏览器访问网站(https://iotdfrobot.com cn/)先进行免费注册,然后登录进入自己账号的“工作间”;左侧有两处关键信息,一是“IoUd( user)”(即用户名),将其值“XNbxt3rMR”复制粘贴至mPython编程中“MOTT-Easy IoT”模块语句中的第三项“Iot_id”中;二是“Iot_ pwd(password)”(即密码),可点击“小眼睛”图标进行显示,将其值“uHxxpqrGRz”复制粘贴至第四项“Iot_pwd”中(前两项“服务器”和“Client ID”均保持默认值)。在“工作间”中执行三次“添加新的设备”操作,分别重命名为“mPython_l”、“mPython_2”和“rnPython_3”,对应三个Topic“主题”的数值,可分别复制并粘贴至记事本中保存,这些信息在收报方掌控板中也要用到(如图2)。

MPython的“扩展”——“MOTT”提供了多个MOTT模块,以“MOTT-易物联”为例(其他用法基本类似),是DFRobot提供的一项物联网MOTT服务。您需要从浏览器访问网站(https://iotdfrobot.com cn//)进行免费注册,然后登录您的帐户的“车间”。左边有两条关键信息,一条是“IoUd( user)”(即用户名),将其值“XNbxt3rMR”复制粘贴到mPython编程中MOTT-Easy IoT模块语句的第三项“Iot_id”中;第二个是“Iot_ pwd(password)”(密码),点击“小眼睛”图标即可显示,其值“uHxxpqrGRz”可以复制粘贴到第四项“Iot_ pwd”中(前两项“服务器”和“客户端ID”保持默认值)。在“车间”中执行三次“添加新设备”操作,分别重命名为“mPython_l”、“mPython_2”和“rnPython_3”。三个题目“主题”对应的值可以复制粘贴到记事本中保存,这些信息也会用到接收机的控制板中(如图2)。

再次回到mPython编程界面,从“MOTT”中选择“连接MOTT”模块语句,添加到“MOTT-EasyIoT”模块语句的后面,用于根据之前的设置连接MOTT。(3)设置有机发光二极管显示屏的显示提示信息

先从左侧的“显示”中选择“OLED显示‘清空…模块语句;再使用两次“OLED第¨行显示¨模式‘普通‘不换行…,控制OLED显示屏的第1行、第2行分别显示“连接MOTT-Easy IoT!”和“长江长江,我是黄河!”提示信息;最后要添加“OLED显示生效”模块语句(如图3)。

首先从左边的“显示”中选择“有机发光二极管显示‘clear空…模块语句”;使用“有机发光二极管的行显示”两次(模式‘正常’无换行…),控制有机发光二极管显示的第一行和第二行显示“连接MOTT-Easy IoT!”“长江长江,我是黄河!“提示信息;最后,添加“有机发光二极管显示生效”模块语句(如图3所示)。

(4)定义字典变量mv_dict并初始化数据。

为了分解重组莫尔斯电码,可以用莫尔斯电码的“滴”和“喀”的一一映射,将二进制码“0”和“1”组合编码。比如字母“A”的莫尔斯电码是“Didi,Ta”,在字典中键设为“01”,值为“A”;再比如:字母8B是“咔嚓、咔嚓、咔嚓、咔嚓”,字典里的键是“1000”。根据莫尔斯电码的编码规则,定义并初始化字典变量my_dict,完成26个大写英文字母“0”和“1”的编码映射(如图4)。

(5)编译a _ fune、b_Fune和p_func_函数

为了使主程序结构更加条理清晰,编写a_fune、bjune和pjune三个函数来分别实现当按下按键A、B和触摸P时所触发的“动作”:声音提醒、RGB灯闪烁提醒等。注意我们建立message、my_string和morse三个变量的作用。变量message的作用是用来生成“()”或“1”,这个值取决于操作者按下的是A键还是B键:A键对应“0”,B键对应“1”;变量my_string相当于Python中的“列表”,它的作用是将变量message依次生成的“0”或“1”单个值通过“追加文本”的方式不断有序地“补充”组合;当生成的最终组合值在字典my_dict中进行“键”的搜索时,如果有对应的“键”,则将变量morse的值设定为字典中该“键”所对应的“值”,即某一个英文字母(如图5)。

为了让主程序结构更加清晰,编写了a_fune、bjune、pjune三个函数,分别实现按下A、B键和触摸P键时触发的“动作”:声音提醒、RGB灯闪烁提醒等。注意三个变量的作用:message,my_string,morse。变量消息的作用是产生“()”或“1”,取决于操作者按的是A键还是B键:A键对应“0”,B键对应“1”;变量my_string相当于Python中的“list”,其作用是通过追加文本的方式,连续有序地“补充”变量message生成的“0”或“1”单值的组合;当生成的最终组合值在字典my_dict中搜索“key”时,如果有对应的“key”,则在字典中将变量morse的值设置为这个“key”对应的“value”,即一个英文字母(如图5)。

比如:先按一次B键、再按一次B键、再按一次A键、最后按一次P键的操作.变量message中就会依次存储“1”、“1”和“()”;当这三个数据按生成的先后次序追加至变量my_string中时,组合值就是“110”;将“110”与字典my_dicT,中的26个“键”去查找“配对”,找到对应的“值”是字母“G”,接下来就将字母“G”保存至变量morse中,表示发送的摩尔斯电码是字母“G”。在p_fune函数中又一次控制OLED显示屏进行显示输出,其中变量l的作用是控制多个连续发送的摩尔斯电码能够依次显示(通过后面的“将变量l的值增加10”的语句实现),对应的是OLED显示屏横坐标X的数值(如图6)。

比如按一次B键,再按一次B键,再按一次A键,最后按P键。变量message会依次存储“1”、“1”和“()”;当这三个数据按生成顺序追加到变量my_string后,组合值为“110”;将“110”与字典my_dicT中的26个“键”进行匹配,发现对应的“值”是字母“G”。然后在变量morse中保存字母“G”,表示发送的莫尔斯电码是p_fune函数中的字母“G”,控制有机发光二极管显示屏再次显示输出,其中变量L用于控制多个连续发送的莫尔斯电码依次显示(通过下面“将变量L的值增加10”的语句实现),对应有机发光二极管显示屏横坐标x的值(如图6)。

注意:在主程序中,对于文本数据要先设置变量message、my_strmg、morse的“空 value”,变量1的初始值要设置为整数数据1(1:而在a_fune、b_fune、Pjune三个函数中,每次获取对应数据时都要根据情况“清零/[/k0”变量值。(6)设置三个“发送”话题的循环。

建立一个“一直重复执行”的循环结构,注意在循环体最后要添加一条“等待0 01秒”的模块语句(防止程序运行过快而消耗过多的系统资源):循环内是一个三分支的选择结构,当检测到A键被按下时,调用执行a_f unc函数并且发布值为“ON”的数据至第一个主题“Mqj-t39Gg”;当检测到B键被按下时,则调用执行b_fune函数并且也发布值为“ON”的数据,但对应的是第二个主题“qagfpq9Gg”;当检测到P被触摸时,调用执行的是pjune函数,发布值为“ON”的数据至第三个主题“wP_0-69GR”;注意此处需要添加内层选择结构,对字典变量my_dict中的“键”是否与变量my_string的值进行匹配检测(如图7)。

建立一个“一直重复执行”的循环结构,注意在循环末尾增加一个“等待0.01秒”的模块语句(防止程序运行过快,消耗过多的系统资源):循环中有一个三分支选择结构。当检测到A键被按下时,调用并执行a_f unc函数,将值为“on”的数据发布到第一个主题“Mqj-t39Gg”当检测到B键被按下时,调用b_fune函数,也发布值为“on”的数据,但对应的是第二个主题“qagfpq 9 gg”;当检测到P被触摸时,调用并执行pjune函数,将值为“on”的数据发布到第三个话题“wP _ 0-69GR”;注意,这里需要添加一个内部选择结构来检查字典变量my_dict中的“key”是否与变量my_string的值匹配(图7)。

这三个不同主题中存储的“ON”消息值是第二块控制板(接收方)响应动作的触发条件,只有在接收方控制板中执行了“订阅”相应主题消息等一系列操作后才会生效。4.控制板接收机的mPython编程

将第二块控制板通过数据线连接到第二台联网电脑的USB接口上,运行mPython编写程序。

与发报方掌控板的程序基本一致,包括WiFi联网和MOTT设置(其中的Client ID须改动至少一位数字),OLED显示屏的显示提示信息稍作改动——“黄河黄河,我是长江!”;字典变量my_dicT,的定义与数据初始化,ajune、b_fimc:相p_fune三个函数的编写,以及变量message、my_string和morse、l等的初始赋值均完全一致(如图8)。

和发送方控制板的程序基本相同,包括WiFi联网和MOTT设置(其中客户端ID至少要更改一位数),有机发光二极管显示屏的显示提示信息略有变化——“黄河黄河,我是长江!”;字典变量my_dicT的定义,完全符合数据初始化,ajune,b_fimc: phase p_fune三个函数的编译,以及变量message,my_string,morse,L等的初始赋值。(图8)。

最大的区别是取消了三个主题发送的循环结构,但同样是新建了一个极为类似的循环结构。先从左侧“循环”和“扩展”一“MOTT”中分別选择“一直重复执行”和“等待主题消息以‘阻塞模式”模块语句,接着进行三个主题的同步“监听”,其中的主题名与发报方的三个主题是一一对应的,这就相当于进行主题的订阅:当收到对应主题有“ON”消息值到达时,分别调用执行对应的a_fune、b_f unc和p_fune函数,与发报方进行摩尔斯电码发报时的响应完全相同(如图9)。

最大的区别是取消了发送三个话题的循环结构,但是也创建了一个非常相似的循环结构。首先分别从左循环和“扩展-MOTT”中选择“保持重复执行”和“等待主题消息处于阻塞模式”的模块语句,然后进行三个主题的同步“监控”,其中主题名称与发送方的三个主题一一对应,相当于订阅主题:当对应主题的消息值“ON”分别到达时

5.测试莫尔斯电码的发送和接收。

程序写好后保存,然后点击发送方和接收方的rnPython编程界面上方的“刷入”按钮,右下角控制台区域会出现“代码刷入36%”、“刷入成功”、“连接WiFi”等提示信息。很快,“连接MOTT-轻松物联网!”将显示在两个控制板的有机发光二极管显示屏的第一行。Tips,而第二行是表明自己身份的信息(“黄河”、“长江”)。

在发报方掌控板上进行sos国际通用求救信号的发送操作:先连续接三次A键、碰一下触摸键P.显示出字母“S”,同时在收报方掌控板上也同样会有字母“S”出现,而且都会有“滴”声响起和RGB灯闪烁:接着再连续按三次B键、碰一下触摸键P,又显示出字母“O”;然后重复第一次的操作,字母“S”再次出现,在收报方掌控板的OLED显示屏上也是正常显示出了完整的“sos”信息(如图10)。

在发送方的控制面板上发送sos国际通用求救信号:首先连续按下A键三次,触摸触摸键p,字母“S”也会出现在接收方的控制面板上,会有“滴滴”声和RGB灯闪烁。然后,连续按三次B键并触摸触摸键P,字母“O”将再次显示。然后重复第一次操作,字母“S”再次出现,接收机控制面板的有机发光二极管显示屏上正常显示完整的“sos”信息(如图10所示)。

同样,如果再收发其他字母,比如最简单的字母“e”和“t”,分别是“drop”和“click”,对应的操作是按A再摸P,按B再摸P,测试都正常,这样就完成了用双控制板“every 空”编程mPython收发莫尔斯码实验项目的设计。6.改进和提升本实验的设想。

编程和测试结束后,感觉并不完美,还有一些需要改进和升级的地方:

(1)发送方和接收方单向通信,接收方控制板收到sos求救信号后无法回复发送方控制板,比如用“OK”再发送一次。在双方的程序中添加相应的功能模块,发送方需要添加主题订阅,接收方需要添加主题发送。另外,在“双向”响应的基础上,可以考虑一对多升级、多对一升级甚至多对多升级,即多个控制板可以组成一个独立的系统,可以收发莫尔斯码。

(2)程序中的字典my_dict只包含26个英文大写字母,还可以根据国际莫尔斯电码添加10个阿拉伯数字、斜线、括号等标点符号,可以传递和表达更多的信息。除了这些通用的国际莫尔斯电码,还可以考虑字典的白定义扩展,比如一些使用频率极高的汉字。只要每个控制板程序使用的字典相同,并进行“键”和“值”的唯一对应编码,就可以直接发送和接收汉字的莫尔斯码。

(3)收发莫尔斯电码时,是“明文”,保密性几乎为零。其实可以添加各种加密算法尝试发送和接收莫尔斯密码,比如凯撒加密,相当于计算字典文件中“key”和“value”的偏移量。解密过程是逆操作。

(4)在实验项目中,使用控制面板的触摸键P作为每个莫尔斯电码的结束符号。如果用标准的莫尔斯电码发送消息,也就是只分别给A键和B键分配了“放下”和“点击”两个对应的操作。但是相邻两个信号之间的间隔一定要控制好,比如点与划之间的停顿,字与字之间的停顿,句与句之间的长停顿。详情请参阅莫尔斯电码标准操作规范。这个时候程序就简单多了,比如省略一个主题,简化p_fune函数,使用变量。只是运营商发送消息的方式要求更高,但会更酷。你不妨试一试。

本文来自网络,不代表管理窝立场。转载请注明出处: https://www.guanliwo.com/a/zx/26688.html
上一篇“市值管理”遭污名化,抱团更理直气壮?
下一篇 跑赢通胀,基金投资正当时之进阶篇
管理窝

作者: 管理窝

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部