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