一、背景

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

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

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

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

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

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

二、系统设计

APP界面:

主要功能:

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

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

曲子,并且在Oled显示屏上显示这首曲子的英文名

1、选择的协议:MQTT

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

MQTT的优点:

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

协议具有许多不同的功能:

  • 它是一种发布/预订协议。

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

  • 它与消息内容没有任何关系。

  • 它通过 TCP/IP 运行,TCP/IP 可以提供基本网络连接。

  • 它针对消息传送提供三种服务质量:

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

  • **“**至少一次” 保证消息抵达,但可能会出现重复。

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

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

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

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

MQTT服务器的搭建在后面部分详细介绍。

2、硬件单元

硬件单元由NodeMcu,蜂鸣器,Oled显示屏,灯泡组成。

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

各个模块的控制方法在后面的部分有详细介绍。

3、软件单元

可自动连上MQTT服务器的APP。

APP连接服务器的方法在后面部分介绍。

4、整个框图:

由上图可知手机APP和NodeMcu通过MQTT服务器实现了相互通信。

实现方式:

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

蜂鸣器等部分:

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

三、硬件设计

1、 主要模块介绍:

1) OLED显示屏

使用此模块需要安装以下的库:

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

首先调用前面下载的库文件:

再定义接口:

Void Setup()中初始化:

实际使用的方法,此部分显示了当前播放的歌曲的名字:

2) 蜂鸣器模块

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

让蜂鸣器响起来,以下的函数pin表示引脚,frequency表示频率

停止发声:

当然不同的乐音有着不同的频率,下面贴出对应的乐音频率表:

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

3) NodeMCU

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

特点:开源,交互式,可编程,低成本,简单,智能,WI-FI硬件。

基于乐鑫esp8266的NodeMcu开发板,具有GPIO、PWM、I2C、1-Wire、ADC等功能,结合NodeMcu 固件为您的原型开发提供最快速的途径。

使用方法:

首先在Arduino IDE中安装固件,这样可以直接用c++来编程:

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

2、整个系统介绍

1、电路图:

2、模块之间的联系:

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

3、实物图:

四、软件设计

1、 主要通讯协议之MQTT

1)MQTT
服务器搭建

.在http://activemq.apache.org/apollo/download.html下载Apollo服务器,解压后安装。
.命令行进入安装目录bin目录下(例:E:>cd E:\MQTT\apache-apollo-1.7.1\bin)。
.输入apollo create XXX(xxx为创建的服务器实例名称,例:apollo create mybroker),之后会在bin目录下创建名称为XXX的文件夹。XXX文件夹下etc\apollo.xml文件下是配置服务器信息的文件。etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,默认为admin=password,即账号为admin,密码为password,可自行更改。
.进入XXX/bin目录,输入apollo-broker.cmd run开启服务器,看到如下界面代表搭建完成

之后在浏览器输入http://127.0.0.1:61680/,查看是否安装成功

输入:username:admin; password:password进入下面的界面:

2)MQTT安卓客户端的具体实现

基本概念:

导入jar包到安卓目录下的libs:

给软件添加权限:

连接设置(IP为本机的IP地址,在cmd中ipconfig/all中获得):

对于安卓连接MQTT服务器的方法以及代码在以下网址中有详细介绍:

http://blog.csdn.net/qq_17250009/article/details/52774472

一旦连接上服务器后,安卓端就可以向服务器中的topic发送消息了

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

举一个例子:在布局文件中有1(do)按钮,设置点击事件,当按下1时,将msg=“a“,再发送到topic-“lxr”,那么所以订阅了 “lxr”的设备均可以接受到“a”,从而产生不同的音调。

安卓中代码(D1为按钮1的id):

Arduino端的代码:

连上MQTT的时候订阅 topic “lxr”:

Void loop()中调用callback**:**

之后会不停的调用下图的函数,对收到的信息做出判断:

2、主要功能之蜂鸣器播放天空之城(葫芦娃)

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

节拍部分:

这里定义一个变量,后面用来表示共有多少个音符

整首曲子的音符的排列顺序单独放在一个数组内:

整首曲子的节拍部分排列顺序:

主体循环部分的代码:

将上述的代码封装在一个函数中,在callback函数中调用即可。

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

五、使用说明

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

2、将安卓代码运行,并且下装到自己手机上,会出现如下图所示的界面:

3、APP使用方法:

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

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

♻️ 资源

大小: 4.17MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87361743

基于MQTT和nodeMCU的音乐弹奏APP【100010341】相关推荐

  1. 基于MQTT和nodeMCU的音乐弹奏APP设计

    目录 一.背景 1 二.系统设计 1 1.选择的协议:MQTT 3 2.硬件单元 3 3.软件单元 3 4.整个框图: 4 三.硬件设计 4 四.软件设计 12 1. 主要通讯协议之MQTT 12 2 ...

  2. 基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览

    基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览 首先这也是学习过程中开发的一个练手项目,基于百度音乐Api,api在网上搜的,如果想看他的实现,可以下载我的项目来参考.风格 ...

  3. 单独上线音乐直播APP,“LOOK直播”能给网易云音乐带来什么?

    文|曾响铃 来源|科技向令说(xiangling0815) 作为移动互联网时代用户量数一数二的产品形态,在线音乐一直没有停止过在运营.模式上的探索. 最近,网易云音乐上线音乐直播产品"LOO ...

  4. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  5. [任务书+论文+PPT+源码]基于Android与多媒体的英文学习APP的设计与实现

    第1页 毕业设计(论文)题目:基于ANDROID与多媒体技术的英文学习APP的设计与实现设计(论文)要求及原始数据(资料):1.综述国内外移动互联现状及前景:2.了解ANDROID系统,理解ANDRO ...

  6. 基于Android与多媒体的英文学习APP的设计

    毕业设计(论文)任务书 第1页 毕业设计(论文)题目:基于Android与多媒体技术的英文学习APP的设计与实现设计(论文)要求及原始数据(资料):1.综述国内外移动互联现状及前景:2.了解Andro ...

  7. 基于MQTT协议的WZ指令开发V3.0版本支持onenet

    title: 基于MQTT协议的WZ指令开发V3.0版本支持onenet tags: WZ指令 date: 2019-02-18 10:53:00 视频讲解:(V3.0版本)-https://www. ...

  8. STM32F103代码远程升级(五)基于MQTT协议WiFi远程升级代码的实现

    文章目录 一.WiFi模块的选用与介绍 二.ESP8266的固件擦除与烧写 1.ESP8266 Flash擦除工具的安装与使用. 2.ESP8266固件烧写 (1)在线获取固件文件 (2)获取SDK ...

  9. 区块链毕业_基于.NET Core的在线音乐系统的设计与实现

    摘要 市场调研发现,移动互联网的高速发展和4G网络的全面普及,高速移动网络下提供单一功能的在线音乐服务已经无法满足用户日益增长的需求,侧重互动社交服务的音乐类平台的市场占有率.用户访问量和用户粘度等均 ...

最新文章

  1. openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old
  2. UI培训教程分享:APP图标设计的6种风格都有哪些?
  3. antd 中 Tree 的使用-默认选中问题
  4. Linux配置vlan网关
  5. SpringBoot中使用Thymeleaf常用功能(三):测试Thymeleaf循环取数据
  6. 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
  7. as3调用java_关于openamf我用as3链接java程序,并调用相关的方法,但是能够连上,却不能够调用是怎么回事...
  8. 【转载】App.config/Web.config 中特殊字符的处理
  9. In和exists使用及性能分析(一):in的使用
  10. 网络安全之iptables 实验篇一
  11. 不生效_离婚协议签订后,对方反悔不生效,但证据价值巨大!
  12. 在python中对文件操作的一般步骤是_文件操作(一) 笔记------python
  13. 紧急重要四象限软件用哪款便签软件?
  14. select添加提示语
  15. Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)
  16. X书app数美-sid分析
  17. DAOS整体设计分析 (二)
  18. 2021年三季度中国医疗服务行业A股上市企业营收排行榜:国际医学于1月17日起戴帽,简称变更为“ST国医”(附热榜TOP37详单)
  19. linux串口通讯延时,linux下串口通讯参数设置
  20. 腾讯WiFi码推广,扫码连WiFi小程序代理入驻后如何推广使用教程!

热门文章

  1. ROS机器人技术课程大作业,机器人基础实例
  2. binutils学习笔记
  3. QT+OpenGL模型加载 - Assimp
  4. docker和kubernete
  5. Flutter 音频转码Mp3文件插件
  6. ElasticSearch实战(二十一)-任务管理
  7. Elasticsearch:rollup - 索引管理
  8. 知识图谱创新FinTech,一览群智携手浪潮力推智能反洗钱
  9. mysql--MGR
  10. 德玛吉DMG海德汉五轴机床操作仿真视频教程