【物联网】基于MQTT的手机控制蜂鸣器放音乐

一、背景

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

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

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

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

图1、png

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

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

二、系统设计

APP界面:

图2、APP界面设计.jpg

主要功能:

手机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、整个框图:

图3、整体系统实现的框图

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

实现方式:

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

蜂鸣器等部分:

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

三、硬件设计

1、 主要模块介绍:

1) OLED显示屏

显示屏.jpg

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



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

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

再定义接口:

Void Setup()中初始化:

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

2) 蜂鸣器模块

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

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

停止发声:

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

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

3) NodeMCU

NodeMcu模块
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种。这两首歌点击按钮,蜂鸣器即可演奏出美妙的音乐。

需要全部代码的留言一下,可私发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容