謝文蘭
(廣東培正學院 數(shù)據(jù)科學與計算機學院,廣東 廣州 510830)
用電設(shè)備是每個家庭中必不可少的家居設(shè)備,比如電燈、電視機、洗衣機等。以前人們對于電源的控制都是通過電源的開關(guān)來實現(xiàn)。這就要求人們必須走到開關(guān)面前才能觸碰開關(guān),會給人們的生活帶來一些不便。比如晚上人們想睡覺時,一般都要先關(guān)了燈才能睡覺。床離燈的開關(guān)有一定的距離,關(guān)燈后,人們要摸黑一段距離才能回到床上。晚上醒來想開燈時,也要摸黑走到開關(guān)附近才能開燈。隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,人們也希望對電源設(shè)備的控制越來越方便,越來越簡捷。最好能夠?qū)崿F(xiàn)隨時隨地控制電源設(shè)備?;诖?,筆者將設(shè)計一個手機小程序,它可通過藍牙通信發(fā)送命令來實現(xiàn)二極管的開和關(guān)。
藍牙是一種支持設(shè)備短距離通信的無線電技術(shù)。提到藍牙,人們一般先想到的是藍牙耳機。我們可以通過藍牙耳機播放手機中的音樂或者接聽電話。其實這一過程就是通過藍牙技術(shù)在手機和耳機中交換數(shù)據(jù)。藍牙、Wi-Fi和ZigBee都是目前無線短距離通信技術(shù)的主流。藍牙能在手機和相關(guān)外設(shè)等眾多設(shè)備之間進行無線信息交換,具有方便快捷、靈活安全、低成本和低功耗等特點。只要在設(shè)備中安裝藍牙模塊,就可以接收和發(fā)送數(shù)據(jù)。Wi-Fi技術(shù)傳輸數(shù)據(jù)速率較快,傳輸距離也比藍牙技術(shù)要遠,但是技術(shù)相對比較復(fù)雜,功耗比藍牙也要大。ZigBee技術(shù)更適合在成千上萬的傳感器中組建無線傳感網(wǎng)絡(luò)。在智能家居的應(yīng)用中,家居設(shè)備的距離一般都比較近,人們一般都選擇用藍牙通信技術(shù)來交換數(shù)據(jù)。本文也是通過藍牙通信實現(xiàn)對發(fā)光二極管的開和關(guān)。
硬件由STC89C52微控制器、藍牙模塊和LED燈模塊三部分組成。STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS 8位微控制器,具有8 kB系統(tǒng)可編程Flash存儲器。STC89C52具有以下標準功能:8 kB Flash,512 B RAM,32位I/O口線,看門狗定時器,內(nèi)置4 kB EEPROM,MAX810復(fù)位電路,3個16位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。STC89C52的8個I/O端口(P1.0-P1.7端口)和LED燈模塊的8個LED燈相連。藍牙模塊為BT06模塊。BT06模塊的輸入電壓在3.6 V~6 V之間。通信距離在空曠環(huán)境下為10 m左右。BT06模塊的工作頻段為2.4 GHz,通信協(xié)議為藍牙2.0。BT06模塊的VCC引腳接+5 V電源,GND引腳接地。藍牙模塊的RXD端口連接到STC89C52的TXD端口。藍牙模塊的TXD端口連接到的STC89C52的RXD端口。藍牙模塊上的狀態(tài)指示燈用于指示藍牙模塊的工作狀態(tài)。當LED燈均勻慢速閃爍時,表示藍牙模塊正在等待配對。當LED燈長亮時,表示藍牙模塊已經(jīng)成功建立連接。其中STC89C52電路圖如圖1所示,藍牙模塊如圖2所示。
圖1 STC89C52電路圖
圖2 藍牙模塊
2017年騰訊公司推出微信小程序。這幾年,小程序得到了很大的發(fā)展,相比App,小程序不需要下載,用戶只需要搜索小程序便可以加載,無須過多占用手機內(nèi)存,使用更加方便簡捷。并且小程序官方為藍牙通信提供了眾多的函數(shù)。搜索藍牙設(shè)備的流程可分為4步。①初始化小程序藍牙模塊,可以調(diào)用open Bluetooth Adapter函數(shù)。②開始搜尋附近的藍牙外圍設(shè)備,可以調(diào)用start Bluetooth Devices Discovery函數(shù)。③獲取在小程序藍牙模塊生效期間所有已發(fā)現(xiàn)的藍牙設(shè)備,可以調(diào)用get Bluetooth Devices函數(shù)。④連接指定名稱的藍牙設(shè)備,可以調(diào)用create BLE Connection函數(shù)。
綜合上述原因,本次設(shè)計采用了小程序作為手機控制界面。設(shè)計界面比較簡單,只設(shè)計了藍牙開啟、搜索和連接設(shè)備、獲取設(shè)備信息、控制各個LED燈開和關(guān)這些功能。當點擊“請開啟藍牙”按鈕,可以進行手機藍牙是否開啟測試。如果手機藍牙尚未開啟,會提示開啟藍牙。藍牙開啟后,便可以和硬件進行藍牙連接。在這里,硬件的藍牙設(shè)備取名為“ZNJJ”,并且設(shè)備名已經(jīng)寫在小程序中。當點擊連接按鈕后,手機藍牙會自動搜索“ZNJJ”,并試圖與硬件開發(fā)板進行連接。在這個過程中,會發(fā)生以下幾種情況:①連接成功;②可以找到連接設(shè)備,但連接失?。虎壅也坏竭B接設(shè)備,連接失敗。每種情況都會有相應(yīng)的提示。用戶可以根據(jù)相應(yīng)的情況提示解決問題。連接成功后,還有一個按鈕可以獲取相關(guān)的設(shè)備信息。因為硬件上有8個發(fā)光二極管,所以控制界面上對應(yīng)有8個二極管的開與關(guān)。以發(fā)光二極管1為例,當點擊界面上的“LED1開”,LED模塊中第一個發(fā)光二極管就會亮。當點擊界面上的“LED1關(guān)”,LED模塊中第一個發(fā)光二極管就會熄滅??刂平缑嫒鐖D3所示,發(fā)送指令相關(guān)代碼如下所示:
圖3 小程序控制界面
onSendCommand(){
let that=this;
if(that.data.serviceId && that.data.characteristicId) {
wx.writeBLECharacteristicValue({
deviceId:that.data.deviceId,
serviceId:that.data.serviceId,
characteristicId:that.data.characteristicId,
value:that.str2ab(that.data.command),
success:function(res){
//setTimeout(function(){
//send(i+1)
//},20)
console.log("發(fā)送LED開指令成功");
wx.showToast({
title:′發(fā)送成功′,
icon:′none′
}) },
fail:function(res){
console.warn("發(fā)送指令失敗",res)
}})
}else{
wx.showModal({
title:′提示′,
content:′請先獲取設(shè)備信息′,
showCancel:false
})}},
測試結(jié)果在小程序真機調(diào)試下完成。手機和硬件開發(fā)板在同一個房間內(nèi)。通過控制界面可以實現(xiàn)手機藍牙的開啟。當開啟手機藍牙后,點擊搜索和連接藍牙,可以連接上硬件開發(fā)板。當發(fā)送開和關(guān)的指令時可以控制LED的開關(guān)。
本次設(shè)計實現(xiàn)了一個基于藍牙控制的發(fā)光二極管,可以通過手機小程序控制LED的開關(guān)。但此次設(shè)計的功能比較簡單,下次可以嘗試比較復(fù)雜的功能,比如由藍牙通信控制玩具車的行駛等。