通過(guò)使用結(jié)合全雙工實(shí)時(shí)通信的Bluetooth Smart
由XSockets.NET的創(chuàng)始人兼首席執(zhí)行官(CEO)Uffe Bjorklund?所創(chuàng)。自2009年以來(lái)他一直致力于圍繞實(shí)時(shí)通信的開(kāi)發(fā)工作。
?
?
?
?
來(lái)自德州儀器(TI)的SimpleLink?多標(biāo)準(zhǔn)CC2650無(wú)線MCU是一種令人驚奇的硬件,該硬件作為中央單元的外設(shè),可通過(guò)藍(lán)牙低能耗設(shè)備進(jìn)行通信。基于CC2650的SimpleLink SensorTag擁有很多服務(wù),能在全球任何地方訪問(wèn)套件,真的很棒。
任務(wù)
在本文中,我們將看看如何能擴(kuò)展與CC2650無(wú)線MCU的通信(通過(guò)在藍(lán)牙低能耗中央設(shè)備后面添加全雙工通信層),以便我們能在全球任何地方對(duì)CC2650進(jìn)行讀取和寫入操作。因?yàn)檫@可能讓人感覺(jué)有點(diǎn)兒抽象,所以提供了下圖,或許有助于讓我們將要做的事情形象化。
有許多連接到外圍Bluetooth Smart設(shè)備的方法,但在本文中,我們將用Raspberry Pi 2作為藍(lán)牙低能耗(BLE)中央設(shè)備。
?
?
該圖表明:CC2650無(wú)線MCU通過(guò)藍(lán)牙低能耗設(shè)備與RaspberryPi進(jìn)行通信。接著該P(yáng)i與XSockets(在這個(gè)實(shí)例中用的是NodeJS)建立TCP/IP連接,以便能采用全雙工模式發(fā)送/接收數(shù)據(jù)。然后XSockets將能從任何TCP/IP連接處發(fā)送/接收數(shù)據(jù),這樣我們就可以在任何地方對(duì)CC2650進(jìn)行讀取和寫入操作了。在上圖中,客戶端的幾個(gè)代表是經(jīng)過(guò)挑選的,但實(shí)際上客戶端可以是具有TCP/IP的任何東西。
物聯(lián)網(wǎng)(IoT)和實(shí)時(shí)通信
在物聯(lián)網(wǎng)(IoT)世界中,實(shí)時(shí)通信幾乎是必不可少的。最流行的IoT協(xié)議采用全雙工通信,而且有很好的理由。IoT通常涉及以高頻率發(fā)送數(shù)據(jù)或在有事發(fā)生時(shí)接收數(shù)據(jù)。借助請(qǐng)求響應(yīng)驅(qū)動(dòng)架構(gòu)解決這一問(wèn)題往往并非良策。而采用半雙工技術(shù),您要冒這樣的風(fēng)險(xiǎn):得到的解決方案很不正式卻開(kāi)銷巨大;收到的信息是在不需要時(shí)發(fā)來(lái)的。
為實(shí)時(shí)通信建立Raspberry Pi
?
由于我們用來(lái)與Raspberry Pi的SensorTag進(jìn)行通信的庫(kù)是基于NodeJS的,因此我們也將使用NodeJS進(jìn)行實(shí)時(shí)通信。
安裝NodeJS
在Raspberry Pi上安裝NodeJS非常容易。
sudo wget
sudo dpkg -i node_latest_armhf.deb
然后,您可通過(guò)運(yùn)行(這可能會(huì)輸出v0.12.0或更高版本)來(lái)驗(yàn)證該版本
節(jié)點(diǎn)v
解決方案
?
本文的任務(wù)是展示如何在全球任何地方采用全雙工模式對(duì)CC2650進(jìn)行讀取/寫入操作。為了能做到這一點(diǎn),我們需要三種部件。
Raspberry Pi上的傳感器客戶端,該器件可與藍(lán)牙低能耗設(shè)備進(jìn)行通信,并且還能以全雙工方式連接到我們的實(shí)時(shí)服務(wù)器。
實(shí)時(shí)服務(wù)器,該器件能向監(jiān)控傳感器的客戶端發(fā)送信息,還能在監(jiān)控客戶端想要將數(shù)據(jù)寫入到傳感器時(shí)向傳感器客戶端發(fā)送信息。
監(jiān)控客戶端(可以是多種類型的),該器件可顯示傳感器數(shù)據(jù),并通過(guò)實(shí)時(shí)服務(wù)器向傳感器客戶端發(fā)送指令。
這三個(gè)實(shí)施方案將在下面提及。
傳感器客戶端
Raspberry Pi上的傳感器客戶端(NodeJS)很容易建立。
設(shè)置
?
創(chuàng)建一個(gè)名為CC2650的文件夾并導(dǎo)航到它。
安裝SensorTag庫(kù)
?
npm install sensortag
安裝xsockets.net庫(kù)
?
npm install xsockets.net
代碼
?
用于客戶端的完整代碼(?70行)可在github庫(kù)中找到,但重要的部分在這里介紹。只需將app.js文件放在您安裝上述程序包的文件夾中即可。
連接到服務(wù)器,注意此處的IP和端口只用于開(kāi)發(fā)。當(dāng)部署到Azure時(shí),該IP和端口將被替換為公共端點(diǎn)。
//連接到XSockets
var conn = new xsockets.TcpClient('192.168.1.3', 4502, ['sensor']);
//獲取傳感器控制器
//該控制器用來(lái)接收數(shù)據(jù)和發(fā)送數(shù)據(jù)
var sensorcontroller = conn.controller('sensor');
當(dāng)sensortag上的溫度變化時(shí)
tagInstance.on('irTemperatureChange', function (ot, at) {
//call server method 'irTempChange' and pass new value
sensorcontroller.send('irtempchange', { obj: ot, amb: at });
});
當(dāng)監(jiān)控客戶端啟用紅外溫度服務(wù)時(shí)
sensorcontroller.on('enableirtemp', self.enableIrTemperature);
當(dāng)世界某個(gè)地方的監(jiān)控客戶端禁用紅外溫度服務(wù)時(shí)
sensorcontroller.on('disableirtemp', self.disableIrTemperature);
實(shí)時(shí)服務(wù)器
?
由于XSockets.NET是有形態(tài)的,因此您可連接任何東西,它允許您跨協(xié)議等進(jìn)行對(duì)話。建立服務(wù)器端通信將非常輕松。
傳感器控制器
?
評(píng)論
查看更多