并且灯泡会在钢琴键按下的时候闪烁一下
发布时间:2019-01-17 20:59

  智能家居行业经过了十几年的发展,就现在而言,还称得上是方兴未艾。在互联网巨头的介入下后得到快速提升,智能家居概念在市场中得到广泛普及,而多项辅助技术也借此机会发展起来。

  在许多行业都将目光投向智能化产业转型的时候,不能忽视的是,相关的技术必定是取得一定突破,才使智能化成为可能。

  物联网,指利用各种信息传感设备,如射频识别装置、红外传感器、光扫描等种种装置与互联网结合起来而形成的一个巨大网络。它可以利用信息传感设备将家居生活有关的各种子系统有机地结合在一起,并与互联网连接起来,进行监控、管理信息交换和通讯,实现家居智能化。

  一个最常见的物联网场景:远在家里的硬件,要发一个信息给我的手机。 实现方案是,硬件和手机连接同一个MTT 代理服务器(mqtt broker),手机根据MTT协议,注册一个话题A,硬件根据MTT协议,向代理服务器发送话题A,附上信息。代理服务器,会转发给手机,至此完成物联网通信,硬件就是NodeMCU。

  本大作业是基于MTT协议的手机客户端控制NodeMcu模块的一个小钢琴的实现。

  基本上能够实现控制,通讯功能,由于其他同学做出的各种监测温湿度,灯泡控制的比较多,所以我在上学期大作业的基础上进行了衍生,做到了通过APP中的钢琴键来控制蜂鸣器发出不同的音符,而产生美妙的音乐,看起来也很酷炫。

  手机APP上点击钢琴键1(do),2(re),3(mi),4(fa),5(sol),6(la),7(si),NodeMcu则控制蜂鸣器发出相应的音调,并且灯泡会在钢琴键按下的时候闪烁一下,可以根据给出的《两只老虎》的简谱来弹奏。

  界面上下方已有曲目中,点击《葫芦娃》或者《天空之城》的按钮,蜂鸣器会发出一段完整的

  Android端实现消息推送的协议有很多种,而MTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

  客户机较小并且 MTT 协议 高效地使用网络带宽,在这个意义上,其为轻量级。MTT 协议支持可靠的传送和即发即弃的传输。 在此协议中,消息传送与应用程序脱离。 脱离应用程序的程度取决于写入 MTT 客户机和 MTT 服务器的方式。脱离式传送能够将应用程序从任何服务器连接和等待消息中解脱出来。 交互模式与电子邮件相似,但在应用程序编程方面进行了优化。

  除提供一对多消息分发外,发布/预订也脱离了应用程序。对于具有多个客户机的应用程序来说,这些功能非常有用。

  “****至多一次” 消息根据底层因特网协议网络尽最大努力进行传递。 可能会丢失消息。 例如,将此服务质量与通信环境传感器数据一起使用。 对于是否丢失个别读取或是否稍后立即发布新的读取并不重要。

  “****刚好一次” 确保只收到一次消息。 例如,将此服务质量与记帐系统一起使用。 重复或丢失消息可能会导致不便或收取错误费用。

  它是一种管理网络中消息流的经济方式。 例如,固定长度的标题仅 2 个字节长度,并且协议交换可最大程度地减少网络流量。

  它具有一种“遗嘱”功能,该功能通知订户客户机从 MTT 服务器异常断开连接。请参阅“最后的消息”发布。

  因此,我们使用MTT作为本次大作业通信协议,基本实现过程在后面的部分会详细介绍。

  NodeMcu为主控设备,其他模块接在NodeMcu上,由NodeMcu来控制其他模块。

  硬件和手机连接同一个MTT 代理服务器(mqtt broker),手机根据MTT协议,注册一个话题A,硬件根据MTT协议,向代理服务器发送话题A,附上信息,代理服务器,会转发给手机。相反,硬件部分可以订阅一个话题B,手机向代理服务器发送信息到话题B,代理服务器,会转发给硬件,至此完成物联网通信,硬件就是NodeMCU。

  由NodeMcu控制,在不同的消息下产生不同的反应,比如发出不同音符,显示曲子名等。

  安装方法:在Arduino E中添加,项目-加载库-管理库-上面两个库,并下载:

  将蜂鸣器CC和GND口直接接入正负极,I/O信号口接入NodeMCU的D4接口

  实现音乐有两个基本的要素,第一是音符,上面已经给出;第二是节奏,也就是拍子,或者说音符时值。那么delay()函数可以用于延长这个音,因此我们如果规定四分音符的时延,编写一个时延数组就可以控制延长的时间。这些在代码中都运用到了。

  NodeMcu是一款开源快速硬件原型平台,包括固件和开发板,用几行简单的Lua脚本就能开发物联网应用。

  将NodeMcu用usb数据线接在电脑上,并且在“工具“中选用NodeMcu开发板,这样就可以进行开发。

  将硬件代码烧录在NodeMcu板上,NodeMcu利用WiFi功能连上手机热点或者无线网,再通过MTT协议的功能来订阅某一个特定的topic,从而做到能从其他设备中(本项目中是我的手机)受到消息,根据收到的消息的不同,从而来控制蜂鸣器发出的声音的音调不同,灯泡的亮灭和显示屏是否显示数据。

  下图为发送消息到topic-“lxr“的代码,修改msg的内容即可实现发送不同的控制信息

  如下图,按照本报告中的硬件设计中的音调部分把每个需要的音符和频率值对应起来:

  由天空之城这首曲子的例子可知,我们能用这种方法写出的曲子的音符节拍的排列顺序,这样就可以把他们播放出来,葫芦娃就是用了同样的方法,其他的歌曲也都可以。

  1、将NodeMcu通上电源,连好电路,确保无接触不良,然后运行代码,连上WiFi以及MTT。

  可弹曲目表示: 1(do),2(re),3(mi),4(fa),5(sol),6(la),7(si)键分别代表着不同的音调,根据所示的简谱点击按键会演奏出两只老虎的音乐。对照着网上很多其他的曲谱也可以弹出一些比较简单的音乐。

  已有曲目:有天空之城和葫芦娃,这些是我事先写在代码的音乐,tone函数中调用了大概20多种频率,不只是上面图中所示的7种。这两首歌点击按钮,蜂鸣器即可演奏出美妙的音乐。