【物聯(lián)網(wǎng)】基于MQTT的手機(jī)控制蜂鳴器放音樂

一洪囤、背景

智能家居行業(yè)經(jīng)過了十幾年的發(fā)展,就現(xiàn)在而言,還稱得上是方興未艾。在互聯(lián)網(wǎng)巨頭的介入下后得到快速提升,智能家居概念在市場中得到廣泛普及掏缎,而多項(xiàng)輔助技術(shù)也借此機(jī)會(huì)發(fā)展起來。

在許多行業(yè)都將目光投向智能化產(chǎn)業(yè)轉(zhuǎn)型的時(shí)候煤杀,不能忽視的是眷蜈,相關(guān)的技術(shù)必定是取得一定突破,才使智能化成為可能沈自。

物聯(lián)網(wǎng)酌儒,指利用各種信息傳感設(shè)備,如射頻識(shí)別裝置酥泛、紅外傳感器今豆、光掃描等種種裝置與互聯(lián)網(wǎng)結(jié)合起來而形成的一個(gè)巨大網(wǎng)絡(luò)嫌拣。它可以利用信息傳感設(shè)備將家居生活有關(guān)的各種子系統(tǒng)有機(jī)地結(jié)合在一起,并與互聯(lián)網(wǎng)連接起來呆躲,進(jìn)行監(jiān)控异逐、管理信息交換和通訊,實(shí)現(xiàn)家居智能化插掂。

一個(gè)最常見的物聯(lián)網(wǎng)場景
遠(yuǎn)在家里的硬件灰瞻,要發(fā)一個(gè)信息給我的手機(jī)。 實(shí)現(xiàn)方案是辅甥,硬件和手機(jī)連接同一個(gè)MQTT 代理服務(wù)器(mqtt broker)酝润,手機(jī)根據(jù)MQTT協(xié)議,注冊(cè)一個(gè)話題A璃弄,硬件根據(jù)MQTT協(xié)議要销,向代理服務(wù)器發(fā)送話題A,附上信息夏块。代理服務(wù)器疏咐,會(huì)轉(zhuǎn)發(fā)給手機(jī),至此完成物聯(lián)網(wǎng)通信,硬件就是NodeMCU脐供。

圖1浑塞、png

本大作業(yè)是基于MQTT協(xié)議的手機(jī)客戶端控制NodeMcu模塊的一個(gè)小鋼琴的實(shí)現(xiàn)。

基本上能夠?qū)崿F(xiàn)控制政己,通訊功能酌壕,由于其他同學(xué)做出的各種監(jiān)測溫濕度,燈泡控制的比較多歇由,所以我在上學(xué)期大作業(yè)的基礎(chǔ)上進(jìn)行了衍生卵牍,做到了通過APP中的鋼琴鍵來控制蜂鳴器發(fā)出不同的音符,而產(chǎn)生美妙的音樂印蓖,看起來也很酷炫辽慕。

二京腥、系統(tǒng)設(shè)計(jì)

APP界面:

圖2赦肃、APP界面設(shè)計(jì).jpg

主要功能:

手機(jī)APP上點(diǎn)擊鋼琴鍵1(do),2(re)公浪,3(mi)他宛,4(fa),5(sol)欠气,6(la)厅各,7(si),NodeMcu則控制蜂鳴器發(fā)出相應(yīng)的音調(diào)预柒,并且燈泡會(huì)在鋼琴鍵按下的時(shí)候閃爍一下队塘,可以根據(jù)給出的《兩只老虎》的簡譜來彈奏袁梗。

界面上下方已有曲目中,點(diǎn)擊《葫蘆娃》或者《天空之城》的按鈕憔古,蜂鳴器會(huì)發(fā)出一段完整的

曲子遮怜,并且在Oled顯示屏上顯示這首曲子的英文名

1鸿市、選擇的協(xié)議:MQTT

Android端實(shí)現(xiàn)消息推送的協(xié)議有很多種锯梁,而MQTT是一個(gè)輕量級(jí)的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶端的消息推送服務(wù)器的理想解決方案焰情。

MQTT的優(yōu)點(diǎn):

客戶機(jī)較小并且 MQTT 協(xié)議 高效地使用網(wǎng)絡(luò)帶寬陌凳,在這個(gè)意義上,其為輕量級(jí)内舟。MQTT 協(xié)議支持可靠的傳送和即發(fā)即棄的傳輸合敦。 在此協(xié)議中,消息傳送與應(yīng)用程序脫離验游。 脫離應(yīng)用程序的程度取決于寫入 MQTT 客戶機(jī)和 MQTT 服務(wù)器的方式蛤肌。脫離式傳送能夠?qū)?yīng)用程序從任何服務(wù)器連接和等待消息中解脫出來。 交互模式與電子郵件相似批狱,但在應(yīng)用程序編程方面進(jìn)行了優(yōu)化裸准。

協(xié)議具有許多不同的功能:

  • 它是一種發(fā)布/預(yù)訂協(xié)議。

  • 除提供一對(duì)多消息分發(fā)外赔硫,發(fā)布/預(yù)訂也脫離了應(yīng)用程序炒俱。對(duì)于具有多個(gè)客戶機(jī)的應(yīng)用程序來說,這些功能非常有用爪膊。

  • 它與消息內(nèi)容沒有任何關(guān)系权悟。

  • 它通過 TCP/IP 運(yùn)行,TCP/IP 可以提供基本網(wǎng)絡(luò)連接推盛。

  • 它針對(duì)消息傳送提供三種服務(wù)質(zhì)量:

  • “****至多一次” 消息根據(jù)底層因特網(wǎng)協(xié)議網(wǎng)絡(luò)盡最大努力進(jìn)行傳遞峦阁。 可能會(huì)丟失消息。 例如耘成,將此服務(wù)質(zhì)量與通信環(huán)境傳感器數(shù)據(jù)一起使用榔昔。 對(duì)于是否丟失個(gè)別讀取或是否稍后立即發(fā)布新的讀取并不重要。

  • “****至少一次” 保證消息抵達(dá)瘪菌,但可能會(huì)出現(xiàn)重復(fù)撒会。

  • “****剛好一次” 確保只收到一次消息。 例如师妙,將此服務(wù)質(zhì)量與記帳系統(tǒng)一起使用诵肛。 重復(fù)或丟失消息可能會(huì)導(dǎo)致不便或收取錯(cuò)誤費(fèi)用。

  • 它是一種管理網(wǎng)絡(luò)中消息流的經(jīng)濟(jì)方式默穴。 例如怔檩,固定長度的標(biāo)題僅 2 個(gè)字節(jié)長度褪秀,并且協(xié)議交換可最大程度地減少網(wǎng)絡(luò)流量。

  • 它具有一種“遺囑”功能薛训,該功能通知訂戶客戶機(jī)從 MQTT 服務(wù)器異常斷開連接溜歪。請(qǐng)參閱“最后的消息”發(fā)布。

因此许蓖,我們使用MQTT作為本次大作業(yè)通信協(xié)議蝴猪,基本實(shí)現(xiàn)過程在后面的部分會(huì)詳細(xì)介紹。

MQTT服務(wù)器的搭建在后面部分詳細(xì)介紹膊爪。

2自阱、硬件單元

硬件單元由NodeMcu,蜂鳴器米酬,Oled顯示屏沛豌,燈泡組成。

NodeMcu為主控設(shè)備赃额,其他模塊接在NodeMcu上加派,由NodeMcu來控制其他模塊。

各個(gè)模塊的控制方法在后面的部分有詳細(xì)介紹跳芳。

3芍锦、軟件單元

可自動(dòng)連上MQTT服務(wù)器的APP。

APP連接服務(wù)器的方法在后面部分介紹飞盆。

4娄琉、整個(gè)框圖:

圖3、整體系統(tǒng)實(shí)現(xiàn)的框圖

由上圖可知手機(jī)APP和NodeMcu通過MQTT服務(wù)器實(shí)現(xiàn)了相互通信吓歇。

實(shí)現(xiàn)方式:

硬件和手機(jī)連接同一個(gè)MQTT 代理服務(wù)器(mqtt broker)孽水,手機(jī)根據(jù)MQTT協(xié)議,注冊(cè)一個(gè)話題A城看,硬件根據(jù)MQTT協(xié)議女气,向代理服務(wù)器發(fā)送話題A,附上信息测柠,代理服務(wù)器炼鞠,會(huì)轉(zhuǎn)發(fā)給手機(jī)。相反鹃愤,硬件部分可以訂閱一個(gè)話題B簇搅,手機(jī)向代理服務(wù)器發(fā)送信息到話題B完域,代理服務(wù)器软吐,會(huì)轉(zhuǎn)發(fā)給硬件,至此完成物聯(lián)網(wǎng)通信,硬件就是NodeMCU吟税。

蜂鳴器等部分:

由NodeMcu控制凹耙,在不同的消息下產(chǎn)生不同的反應(yīng)姿现,比如發(fā)出不同音符,顯示曲子名等肖抱。

三备典、硬件設(shè)計(jì)

1、 主要模塊介紹:

1) OLED顯示屏

顯示屏.jpg

使用此模塊需要安裝以下的庫:



安裝方法:在Arduino IDE中添加意述,項(xiàng)目->加載庫->管理庫->搜索上面兩個(gè)庫提佣,并下載:

首先調(diào)用前面下載的庫文件:

再定義接口:

Void Setup()中初始化:

實(shí)際使用的方法,此部分顯示了當(dāng)前播放的歌曲的名字:

2) 蜂鳴器模塊

將蜂鳴器VCC和GND口直接接入正負(fù)極荤崇,I/O信號(hào)口接入NodeMCU的D4接口

讓蜂鳴器響起來拌屏,以下的函數(shù)pin表示引腳,frequency表示頻率

停止發(fā)聲:

當(dāng)然不同的樂音有著不同的頻率术荤,下面貼出對(duì)應(yīng)的樂音頻率表:

實(shí)現(xiàn)音樂有兩個(gè)基本的要素倚喂,第一是音符,上面已經(jīng)給出瓣戚;第二是節(jié)奏端圈,也就是拍子,或者說音符時(shí)值子库。那么delay()函數(shù)可以用于延長這個(gè)音舱权,因此我們?nèi)绻?guī)定四分音符的時(shí)延,編寫一個(gè)時(shí)延數(shù)組就可以控制延長的時(shí)間仑嗅。這些在代碼中都運(yùn)用到了刑巧。

3) NodeMCU

NodeMcu模塊
NodeMcu模塊的引腳部分

NodeMcu是一款開源快速硬件原型平臺(tái),包括固件和開發(fā)板无畔,用幾行簡單的Lua腳本就能開發(fā)物聯(lián)網(wǎng)應(yīng)用啊楚。

特點(diǎn):開源,交互式浑彰,可編程恭理,低成本,簡單郭变,智能颜价,WI-FI硬件。

基于樂鑫esp8266的NodeMcu開發(fā)板诉濒,具有GPIO周伦、PWM、I2C未荒、1-Wire专挪、ADC等功能,結(jié)合NodeMcu 固件為您的原型開發(fā)提供最快速的途徑。

使用方法:

首先在Arduino IDE中安裝固件寨腔,這樣可以直接用c++來編程:

將NodeMcu用usb數(shù)據(jù)線接在電腦上速侈,并且在“工具“中選用NodeMcu開發(fā)板,這樣就可以進(jìn)行開發(fā)迫卢。

2倚搬、整個(gè)系統(tǒng)介紹

1、電路圖:

2乾蛤、模塊之間的聯(lián)系:

將硬件代碼燒錄在NodeMcu板上每界,NodeMcu利用WiFi功能連上手機(jī)熱點(diǎn)或者無線網(wǎng),再通過MQTT協(xié)議的功能來訂閱某一個(gè)特定的topic家卖,從而做到能從其他設(shè)備中(本項(xiàng)目中是我的手機(jī))受到消息盆犁,根據(jù)收到的消息的不同,從而來控制蜂鳴器發(fā)出的聲音的音調(diào)不同篡九,燈泡的亮滅和顯示屏是否顯示數(shù)據(jù)谐岁。

3、實(shí)物圖:

四榛臼、軟件設(shè)計(jì)

1伊佃、 主要通訊協(xié)議之MQTT

1)MQTT
服務(wù)器搭建

.在http://activemq.apache.org/apollo/download.html下載Apollo服務(wù)器,解壓后安裝沛善。
.命令行進(jìn)入安裝目錄bin目錄下(例:E:>cd E:\MQTT\apache-apollo-1.7.1\bin)航揉。
.輸入apollo create XXX(xxx為創(chuàng)建的服務(wù)器實(shí)例名稱,例:apollo create mybroker)金刁,之后會(huì)在bin目錄下創(chuàng)建名稱為XXX的文件夾帅涂。XXX文件夾下etc\apollo.xml文件下是配置服務(wù)器信息的文件。etc\users.properties文件包含連接MQTT服務(wù)器時(shí)用到的用戶名和密碼尤蛮,默認(rèn)為admin=password媳友,即賬號(hào)為admin,密碼為password产捞,可自行更改醇锚。
.進(jìn)入XXX/bin目錄,輸入apollo-broker.cmd run開啟服務(wù)器坯临,看到如下界面代表搭建完成

之后在瀏覽器輸入http://127.0.0.1:61680/焊唬,查看是否安裝成功

輸入:username:admin; password:password進(jìn)入下面的界面:

2)MQTT安卓客戶端的具體實(shí)現(xiàn)

基本概念:

導(dǎo)入jar包到安卓目錄下的libs:

給軟件添加權(quán)限:

連接設(shè)置(IP為本機(jī)的IP地址看靠,在cmd中ipconfig/all中獲得):

對(duì)于安卓連接MQTT服務(wù)器的方法以及代碼在以下網(wǎng)址中有詳細(xì)介紹:

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

一旦連接上服務(wù)器后赶促,安卓端就可以向服務(wù)器中的topic發(fā)送消息了

下圖為發(fā)送消息到topic-“l(fā)xr“的代碼,修改msg的內(nèi)容即可實(shí)現(xiàn)發(fā)送不同的控制信息

舉一個(gè)例子:在布局文件中有1(do)按鈕挟炬,設(shè)置點(diǎn)擊事件鸥滨,當(dāng)按下1時(shí)嗦哆,將msg=“a“,再發(fā)送到topic-“l(fā)xr”爵赵,那么所以訂閱了 “l(fā)xr”的設(shè)備均可以接受到“a”,從而產(chǎn)生不同的音調(diào)吝秕。

安卓中代碼(D1為按鈕1的id):

Arduino端的代碼:

連上MQTT的時(shí)候訂閱 topic “l(fā)xr”:

Void loop()****中調(diào)用****callback****:

之后會(huì)不停的調(diào)用下圖的函數(shù)泊脐,對(duì)收到的信息做出判斷:

2空幻、主要功能之蜂鳴器播放天空之城(葫蘆娃)

如下圖,按照本報(bào)告中的硬件設(shè)計(jì)中的音調(diào)部分把每個(gè)需要的音符和頻率值對(duì)應(yīng)起來:

節(jié)拍部分:

這里定義一個(gè)變量容客,后面用來表示共有多少個(gè)音符

整首曲子的音符的排列順序單獨(dú)放在一個(gè)數(shù)組內(nèi):

整首曲子的節(jié)拍部分排列順序:

主體循環(huán)部分的代碼:

將上述的代碼封裝在一個(gè)函數(shù)中秕铛,在callback函數(shù)中調(diào)用即可。

由天空之城這首曲子的例子可知缩挑,我們能用這種方法寫出更多的曲子的音符節(jié)拍的排列順序但两,這樣就可以把他們播放出來,葫蘆娃就是用了同樣的方法供置,其他的歌曲也都可以谨湘。

五、使用說明

1芥丧、將NodeMcu通上電源紧阔,連好電路,確保無接觸不良续担,然后運(yùn)行代碼擅耽,連上WiFi以及MQTT。

2物遇、將安卓代碼運(yùn)行乖仇,并且下裝到自己手機(jī)上,會(huì)出現(xiàn)如下圖所示的界面:

3询兴、APP使用方法:

可彈曲目表示: 1(do)乃沙,2(re),3(mi)诗舰,4(fa)崔涂,5(sol),6(la)始衅,7(si)鍵分別代表著不同的音調(diào)冷蚂,根據(jù)所示的簡譜點(diǎn)擊按鍵會(huì)演奏出兩只老虎的音樂。對(duì)照著網(wǎng)上很多其他的曲譜也可以彈出一些比較簡單的音樂汛闸。

已有曲目:有天空之城和葫蘆娃蝙茶,這些是我事先寫在代碼的音樂,tone函數(shù)中調(diào)用了大概20多種頻率诸老,不只是上面圖中所示的7種隆夯。這兩首歌點(diǎn)擊按鈕,蜂鳴器即可演奏出美妙的音樂。

需要全部代碼的留言一下蹄衷,可私發(fā)忧额。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愧口,隨后出現(xiàn)的幾起案子睦番,更是在濱河造成了極大的恐慌,老刑警劉巖耍属,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件托嚣,死亡現(xiàn)場離奇詭異,居然都是意外死亡厚骗,警方通過查閱死者的電腦和手機(jī)示启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领舰,“玉大人夫嗓,你說我怎么就攤上這事〕寤啵” “怎么了舍咖?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劳跃。 經(jīng)常有香客問我谎仲,道長,這世上最難降的妖魔是什么刨仑? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任郑诺,我火速辦了婚禮,結(jié)果婚禮上杉武,老公的妹妹穿的比我還像新娘辙诞。我一直安慰自己,他們只是感情好轻抱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布飞涂。 她就那樣靜靜地躺著,像睡著了一般祈搜。 火紅的嫁衣襯著肌膚如雪较店。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天容燕,我揣著相機(jī)與錄音梁呈,去河邊找鬼。 笑死蘸秘,一個(gè)胖子當(dāng)著我的面吹牛官卡,可吹牛的內(nèi)容都是我干的蝗茁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼寻咒,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼哮翘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毛秘,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤饭寺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熔脂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佩研,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柑肴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年霞揉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晰骑。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡适秩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硕舆,到底是詐尸還是另有隱情秽荞,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布抚官,位于F島的核電站扬跋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凌节。R本人自食惡果不足惜钦听,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倍奢。 院中可真熱鬧朴上,春花似錦、人聲如沸卒煞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畔裕。三九已至有咨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斥难,已是汗流浹背货葬。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贴届,地道東北人靠粪。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓蜡吧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親占键。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昔善,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容