首頁 > 評測 > 使用BLE來控制RPI3

使用BLE來控制RPI3

BLE   RPI3   藍(lán)牙   樹莓派   
  • 作者:SATURN
  • 來源:21ic
  • [導(dǎo)讀]
  • 可穿戴設(shè)備大多都是通過藍(lán)牙來進(jìn)行數(shù)據(jù)通信,實(shí)現(xiàn)設(shè)備間的數(shù)據(jù)交換。與Bluetooth Classic相比較而言,BLE的低功耗特性對于可穿戴設(shè)備而言,在電池消耗上更具優(yōu)勢。某種程度上可以說,BLE成就了今天的可穿戴市場,反過來,可穿戴市場的崛起,讓BLE更具生命力了!

樹莓派3和樹莓派2相比較,除了主頻的提升外,還添加了WIFI和藍(lán)牙模塊,大大的增強(qiáng)了無線連接功能,因而也更適合IoT平臺應(yīng)用。

可穿戴設(shè)備大多都是通過藍(lán)牙來進(jìn)行數(shù)據(jù)通信,實(shí)現(xiàn)設(shè)備間的數(shù)據(jù)交換。與Bluetooth Classic相比較而言,BLE的低功耗特性對于可穿戴設(shè)備而言,在電池消耗上更具優(yōu)勢。某種程度上可以說,BLE成就了今天的可穿戴市場,反過來,可穿戴市場的崛起,讓BLE更具生命力了!

在RASPBIAN中,默認(rèn)已提供了對藍(lán)牙的一些支持,提供了bluetoothctl等命令來進(jìn)行基本的藍(lán)牙操作,通過命令行的方式來對BLE設(shè)備進(jìn)行操作當(dāng)然可行,不過用程序來控制的話,一則更靈活,另一方面也顯得高大上。

RPI上對藍(lán)牙的開發(fā),大多以bluez為主,不過說實(shí)話,bluez看上去還是比較復(fù)雜的?紤]到j(luò)s的使用者比較多,另外nodejs對硬件的要求也不算高,很適合在RPI上使用。下面的操作結(jié)合nodejs及mraa硬件庫來操作RPI3,至于BLE部分的操作,則使用的是nodejs的bleno來操作。

只點(diǎn)一個(gè)燈,為的是了解基本操作步驟。

硬件使用的是RPI3,如果是RPI2或更老的版本,需要準(zhǔn)備一個(gè)Bluetooth Dongle,就是讓RPI具有藍(lán)牙通信功能就是了。

RPI3的系統(tǒng)下載及燒寫就不說了,漫天都是。

先準(zhǔn)備好nodejs環(huán)境,在PI上執(zhí)行如下命令

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install nodejs npm

nodejs是必須的,這是JS解釋器,非WEB端的那個(gè)解釋器,npm是用來安裝依賴組件的。

bleno是一個(gè)nodejs模塊,用來實(shí)現(xiàn)BLE外設(shè)功能,官方github地址為https://github.com/sandeepmistry/bleno,如果想要在PI上實(shí)現(xiàn)central功能,則要使用noble。

bleno依賴其它一些軟件框架,主要包括bluetooth及bluez。執(zhí)行如下命令安裝這些依賴

sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev

安裝完成后,可以使用hciconfig命令來查看設(shè)備信息,如下

pi@raspberrypi:~/iot $ hciconfig dev

hci0: Type: Primary Bus: UART

BD Address: B8:27:EB:93:37:B8 ACL MTU: 1021:8 SCO MTU: 64:1

UP RUNNING

RX bytes:10076 acl:287 sco:0 events:589 errors:0

TX bytes:12302 acl:287 sco:0 commands:363 errors:0

pi@raspberrypi:~/iot $

可以看到設(shè)備hci0,這個(gè)就是RPI3上的藍(lán)牙設(shè)備,另外也可以看到BD地址,BUS等其它硬件信息。

注意UP RUNNING信息,表明藍(lán)牙已啟用,否則需要使用命令hciconfig hci0 up來啟用藍(lán)牙設(shè)備。

接下來使用npm init命令來建立一個(gè)空的工程,package.json內(nèi)容如下

{

"name": "iot",

"version": "1.0.0",

"description": "iot for raspberry pi 3",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"keywords": [

"iot",

"nodejs",

"rpi3"

],

"author": "netlhx",

"license": "ISC",

"dependencies": {

"bleno": "^0.4.2",

"mraa": "^1.8.0"

}

}

這里的模塊依賴主要有兩個(gè),一個(gè)是bleno,實(shí)現(xiàn)BLE PERIPHERAL的功能由該模塊來實(shí)現(xiàn),另一個(gè)模塊是mraa,這是intel推出的一個(gè)低級硬件庫,包括C/PYTHON/NODEJS等實(shí)現(xiàn),除了支持intel自家的galileo及edison等硬件外,其它還支持包括RPI在內(nèi)的許多硬件。另外還有一個(gè)upm庫,支持大量的傳感器及輸出外設(shè)。

基本的環(huán)境準(zhǔn)備就緒,可以使用bleno自帶的測試腳本來測試硬件是否工作正常。測試方法見下圖

上圖輸出表明硬件工作正常,開始藍(lán)牙廣播并開啟相關(guān)的服務(wù)

使用nordic nrf connect應(yīng)用可以來連接并實(shí)現(xiàn)簡單的通信

這是掃描并連接到RPI3的情況,可以對各種預(yù)設(shè)的Characteristic進(jìn)行讀/寫操作并加以驗(yàn)證。

這個(gè)test.js程序也可以做為我們點(diǎn)燈程序的藍(lán)本,稍加修改就可以用來實(shí)現(xiàn)BLE點(diǎn)燈程序了。

先看基本的信息配置

var led = new mraa.Gpio(36);

led.dir(mraa.DIR_OUT);

var name = 'RPI3';

var service_rpi3_uuid = '98860000ca0011e7b3fcf714f9f939b3';

var charact_led_uuid = '98860001ca0011e7b3fcf714f9f939b3';

試驗(yàn)用到的LED燈連接在PIN36上面,注意使用了mraa庫來進(jìn)行操作,另外這里還定義了一些常量,其中包括設(shè)備名,服務(wù)及characteristic的UUID值,注意這是用戶自定義的服務(wù)類型,所以要使用128位的UUID值。

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項(xiàng)目外包 more+