一洪囤、背景
智能家居行業(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脐供。
本大作業(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界面:
主要功能:
手機(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è)框圖:
由上圖可知手機(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顯示屏
使用此模塊需要安裝以下的庫:
安裝方法:在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是一款開源快速硬件原型平臺(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ā)忧额。