使用BLE來控制RPI3
- [導(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
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗(yàn),暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前