双掌控板收发摩尔斯电码

来源 :电脑报 | 被引量 : 0次 | 上传用户:ESC_liangzi
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  作为国内开源硬件的杰出代表,掌控板是一款非常优秀的国产“创客”微控制器板,支持Python代码编程以及Mind+、mPython等主流图形化编程软件。使用单块掌控板进行编程,可以实现噪音计、身高测量仪、高温报警系统和天黑自动收衣服系统等案例;如果有两块掌控板,就可以借助蓝牙与WiFi双无线通讯,遵循MOTT(消息队列遥测传输)协议在SIoT开发平台(如Mind+的SIoT本地物联网、DFRobot的Easy IoT)或OneNET(移动物联网开放平台)等开放平台上进行更为丰富的物联网应用创意项目设计,比如实现谍战影视片中摩尔斯电码的发送与接收。

1.预备知识:摩尔斯电码


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


2.收发操作方法规划


  每个掌控板都有A和B两个按键和P、Y、T、H、()、N六个触摸键供我们选用。在发报方掌控板中进行编程,将按键A和B分别设计对应发送摩尔斯电码的“滴”和“嗒”信号,而将触摸键P作为每组摩尔斯电码(即所表示的某一个字符)的结束信号,因为真实地用摩尔斯屯码发报字母间隔是一个“嗒”的时长(相当于3个“滴”),单词间间隔是7个“滴”,这需要专门训练才能做好,对于初学者来说操作难度较大,而简单地“碰”一下触摸键的动作则非常方便。另外,为了对按键和触摸键的按下与触摸操作进行即时反馈,还要添加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-EasyIoT”模块语句后面,作用是根据之前的设置进行MOTT连接。

(3)设置OLED显示屏的显示提示信息


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


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


  为了进行摩尔斯电码的分解与重组,可以将二进制代码“0”和“1”与摩尔斯电码的“滴”和“嗒”一一映射进行组合编码。比如:字母“A”的摩尔斯电码是“滴、嗒”,在字典中为它设置“键”( Key)为“01”,“值”( Value)为“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)。



  比如:先按一次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)。



  注意:在主程序中要将变量message、my_strmg和morse先进行文本型数据的“空值”设定,变量1的初值则设置为整型数据1(1:而在a_fune、b_fune和Pjune三个函数中,每次获取对应的数据后还要根据情况进行变量值的“清空”或是“自增”操作。

(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)。



  这三个不同的主题所存储的“ON”消息值,是第二块掌控板(收报方)的响应动作触发条件,要在收报方掌控板中进行对应主题消息的“订阅”等一系列操作后才会起效。

4.掌控板收报方的mPython编程


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



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


5.测试摩尔斯电码的发报与接收


  程序编写完毕后进行保存,接着分别在发报方和收报方的rnPython编程界面点击上方的“刷入”按钮,右下角的“控制台”区会有“代码刷入36%”、“刷入成功”和“Connection WiFi”等提示信息。很快,两块掌控板的OLED显示屏第一行都会显示“连接MOTT-Easy IoT!”提示信息,第二行则是表明自己身份的信息(“黄河”与“长江”)。
  在发报方掌控板上进行sos国际通用求救信号的发送操作:先连续接三次A键、碰一下触摸键P.显示出字母“S”,同时在收报方掌控板上也同样会有字母“S”出现,而且都会有“滴”声响起和RGB灯闪烁:接着再连续按三次B键、碰一下触摸键P,又显示出字母“O”;然后重复第一次的操作,字母“S”再次出现,在收报方掌控板的OLED显示屏上也是正常显示出了完整的“sos”信息(如图10)。



  同样,如果再进行其他字母的发送与接收测试,比如最简单的字母“E”和“T”,分别是“滴”和“嗒”,对应的操作是按A再碰P、按B再碰P,测试均正常,完成双掌控板mPython编程“隔空”收发摩尔斯电码实验项目的设计。

6.对本实验的改进与升级设想


  在编程和测试结束之后,感觉并不完美,仍有若干需要改进和升级的地方:
  (1)发报方与收报方是进行“单向”通信的,收报方掌控板在收到“sos”求救信号后并不能对发报方掌控板做出同应,比如再发送同“OK”。将双方的程序各自进行对应功能模块的添加,发报方需要添加主题订阅,收报方需要添加主题发送。另外,在“双向”响应的基础之上还可以考虑进行“一对多”、“多对一”甚至是“多对多”的升级,也就是将多块掌控板组成一个彼此独立但又能相互进行摩尔斯电码的发报与接收的系统。
  (2)程序中的字典my_dict只包含了26个英文大写字母,可以根据国际摩尔斯电码将10个阿拉伯数字、斜杠和括号等标点符号也进行添加,可以传输表达更多的信息。除了这些通用的国际摩尔斯电码之外,我们还可以考虑对字典进行白定义式扩充,比如若干使用频率极高的汉字,只要各掌控板程序中使用的字典是相同的,并且均进行了“键”、“值”的唯一对应编码,就可以直接进行汉字的摩尔斯电码发报与接收。
  (3)在进行摩尔斯电码的发报和接收时均为“明文”,保密性几乎为零。其实可以添加各种加密算法来尝试摩尔斯密码的发报与接收,比如凯撒加密,相当于对字典文件中的“键”、“值”进行不确定量的偏移计算,解密的过程就是将该运算进行逆运算即可。
  (4)实验项目中是将掌控板的触摸键P作为每个摩尔斯电码的结束标志,如果按照标准的摩尔斯电码发报操作,也就是只有对应“滴”和“嗒”的兩种操作,正好分别分配给按键A和B。只不过相邻两个信号的问隔必须要控制好,比如点与划之问的停顿、单词问的停顿,还有句子问的长停顿,具体可查阅摩尔斯电码的标准操作规范。此时的程序就简单了很多,比如省略掉一个主题、精简p_fune函数,变量的使用也简单不少,只不过对操作者的发报操作方法要求比较高,但会更酷一些,大家不妨一试。
其他文献
上世纪80年代的游戏权利金制度  随着微软新世代主机Xbox Series XIS陆续在全球市场发售,无数玩家翘首以待的微软国行游戏主机在天猫、京东平台正式开售。预售期快速告罄的火爆场面,也让玩家们经历了一次“手慢无”的抢购体验。  随着Xbox Series XIS的发售,越来越多玩家加入到Xbox阵营,而每一位拿到新主机的玩家所需要做的一项重要功课就是了解和开通Xbox游戏通行证订阅服务Xbo
期刊
站长点评:针对准大学生暑期的装机需求,前几周站长给大家推荐了几套基于AMD锐龙处理器的配置。考虑到部分玩家想购买Intcl平台的产品,所以本期站长就为大家带来一套中端的高性能配置,供大家在装机时参考。  对于追求高性能的玩家来说,在装机时自然要选择第11代酷睿i5当中的旗舰型号——酷睿i511600KF。這款处理器依然是6核12线程的规格,虽说3.9GHz的基础频率、4.9GHz的最高频率以及4.
期刊
每到暑期就是全家一起旅游的旺季。出门在外,要是手机续航时间不够长,没用多久就没电了怎么办呢?只要随身携带了这些充电神器,就能让你的手机有充足的电量可以使用。航嘉20W PD快速充电器  参考价格:69元  一有机会就给手机充电,是很多用户对抗手机续航不足的主要方法,所以你得准备一款充电速度怏的充电器。夏天大家都穿得比较少,特别是很多女生只会背一个小包包出门,这就对快速充电器的尺寸提出了较高的要求。
期刊
批量完成图片的压缩  虽然网上有很多图片压缩服务,但是这些服务最大的问题就是只能一张一张图片进行压缩操作。如果用户要想批量操作的话.那么只能借助于其他图片压缩工具,而Imagine就是一个不错的选择。  先通过浏览器打开这款工具软件的官方网站(https://github.com/meowtec/Imagine),点击右侧的Releases链接后,在打开的网页列表中下载Imagine-0.6.1.
期刊
寄宿的少女  要说放置游戏,男女通杀的“呱儿子”——《旅行青蛙》就以简约而颇具新意的旅行玩法,让不少玩家沉迷其中,对养了这样一个“儿子”可是百般关照,不仅早早给他备好食物,更是时时刻刻要去看看他回来没,给你带了些什么?甚至不少人还调侃比关心自己家孩子还要在意“呱儿子”的情况,真是让人无法自拔。  可惜的是,这样一个高光游戏,最终还是昙花一现,包括后面出来的中国版本依旧如此。你要说它不吸引人吗?非也
期刊
高端平台对电源要求较高  高端处理器、显卡因为规格高,功耗自然降不下来。就拿Intel最新的第11代醋睿来说,其采用的14nrn工艺潜力已经挖掘殆尽,可产品又要冲击高频率,所以只得大幅牺牲功耗来实现这一点。别看酷睿i9 11900K的TDP只有125W,似乎并不高,但是开启ABT技术,将温度墙限制放宽到100℃,从而实现全核5.1GHz的睿频频率之后,其满载功耗会达到300W以上。而就算是中端旗舰
期刊
找次品是一道经典的小学奥数题,通过“找次品”理解优化思想,培养推理能力,让学生充分感受到数学与日常生活的紧密联系,以往我们是通过画图、列表的形式来进行解答,现在我们要通过Scratch编程来完成解题,这需要对问题有清晰的认识,学会建立合适的数学模型。  找次品:7个零件中有一个次品(次品重一些),假如用天平称重,至少称几次能保证找出次品呢?  称重方法:(1)将7个零件分成3份(3,3,1),天平
期刊
作為一个每天服务上百甚至数百购机咨询的公众号,我们注意到有非常多的读者关心笔记本的键盘手感。很多咨询者都会在需求描述中加一句“键盘手感要好”。所以,在这里,我们对各家笔记本键盘的情况做一个简要的盘点。  先说说市场占有率最高的联想。联想的笔记本键盘水平总体上比较高,虽然旗下的ThinkPad品牌在键盘手感上相比早年有所下降(无论哪个系列都比较明显),但目前与其他厂商横向比较来看,依然是相对较好的,
期刊
在数学史上,有很多未被证明的猜想和定理,它们也成了著名的数学难题,而其中关于数论的问题有很多,今天我们用Python来求解德·梅齐里亚克的砝码问题。以后还将不定期地发布类似问题,欢迎关注。一、德·梅齐里亚克的砝码问题  一位商人有一個40磅的砝码,由于跌落在地而碎成4块。后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物。问这4块砝码碎片各重多少?二、算法分
期刊
电脑上的分享和协作  如果是一份比较复杂的演示文档,为了方便同事们之间进行共享编辑,可以使用WPS演示的分享功能。具体的操作和WPS表格类似,在WPS中打开需要共享的文档,点击右上角的“分享”,然后按提示创建分享的链接发给同事即可(图1)。  这样同事只要在浏览器中打开上述分享的链接。就可以直接进行在线编辑了。在线协作使用的金山在线文档的服务,协作者可以在此新建、删除幻灯片文档。所有操作都是实时保
期刊