首页 > 评测 > 吹客

使用BLE来控制RPI3

BLE   RPI3   蓝牙   树莓派   
  • 作者:SATURN
  • 来源:21ic
  • [导读]
  • 可穿戴设备大多都是通过蓝牙来进行数据通信,实现设备间的数据交换。与Bluetooth Classic相比较而言,BLE的低功耗特性对于可穿戴设备而言,在电池消耗上更具优势。某种程度上可以说,BLE成就了今天的可穿戴市场,反过来,可穿戴市场的崛起,让BLE更具生命力了!
  • PIC32-PINGUINO-OTG
  • Genuino101 (Arduino101)
  • CY8CKIT-040 PSoC 4000先锋开发套件
  • OM11074
  • CC3220SF LaunchPad (CC3220SF-LAUNCHXL)
  • Arduino 树莓派扩展板
  • LPC General Purpose Shield (OM13082)
  • Curiosity开发板 (DM164137)

树莓派3和树莓派2相比较,除了主频的提升外,还添加了WIFI和蓝牙模块,大大的增强了无线连接功能,因而也更适合IoT平台应用。

可穿戴设备大多都是通过蓝牙来进行数据通信,实现设备间的数据交换。与Bluetooth Classic相比较而言,BLE的低功耗特性对于可穿戴设备而言,在电池消耗上更具优势。某种程度上可以说,BLE成就了今天的可穿戴市场,反过来,可穿戴市场的崛起,让BLE更具生命力了!

在RASPBIAN中,默认已提供了对蓝牙的一些支持,提供了bluetoothctl等命令来进行基本的蓝牙操作,通过命令行的方式来对BLE设备进行操作当然可行,不过用程序来控制的话,一则更灵活,另一方面也显得高大上。

RPI上对蓝牙的开发,大多以bluez为主,不过说实话,bluez看上去还是比较复杂的。考虑到js的使用者比较多,另外nodejs对硬件的要求也不算高,很适合在RPI上使用。下面的操作结合nodejs及mraa硬件库来操作RPI3,至于BLE部分的操作,则使用的是nodejs的bleno来操作。

只点一个灯,为的是了解基本操作步骤。

硬件使用的是RPI3,如果是RPI2或更老的版本,需要准备一个Bluetooth Dongle,就是让RPI具有蓝牙通信功能就是了。

RPI3的系统下载及烧写就不说了,漫天都是。

先准备好nodejs环境,在PI上执行如下命令

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install nodejs npm

nodejs是必须的,这是JS解释器,非WEB端的那个解释器,npm是用来安装依赖组件的。

bleno是一个nodejs模块,用来实现BLE外设功能,官方github地址为https://github.com/sandeepmistry/bleno,如果想要在PI上实现central功能,则要使用noble。

bleno依赖其它一些软件框架,主要包括bluetooth及bluez。执行如下命令安装这些依赖

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

安装完成后,可以使用hciconfig命令来查看设备信息,如下

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 $

可以看到设备hci0,这个就是RPI3上的蓝牙设备,另外也可以看到BD地址,BUS等其它硬件信息。

注意UP RUNNING信息,表明蓝牙已启用,否则需要使用命令hciconfig hci0 up来启用蓝牙设备。

接下来使用npm init命令来建立一个空的工程,package.json内容如下

{

"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"

}

}

这里的模块依赖主要有两个,一个是bleno,实现BLE PERIPHERAL的功能由该模块来实现,另一个模块是mraa,这是intel推出的一个低级硬件库,包括C/PYTHON/NODEJS等实现,除了支持intel自家的galileo及edison等硬件外,其它还支持包括RPI在内的许多硬件。另外还有一个upm库,支持大量的传感器及输出外设。

基本的环境准备就绪,可以使用bleno自带的测试脚本来测试硬件是否工作正常。测试方法见下图

上图输出表明硬件工作正常,开始蓝牙广播并开启相关的服务

使用nordic nrf connect应用可以来连接并实现简单的通信

这是扫描并连接到RPI3的情况,可以对各种预设的Characteristic进行读/写操作并加以验证。

这个test.js程序也可以做为我们点灯程序的蓝本,稍加修改就可以用来实现BLE点灯程序了。

先看基本的信息配置

var led = new mraa.Gpio(36);

led.dir(mraa.DIR_OUT);

var name = 'RPI3';

var service_rpi3_uuid = '98860000ca0011e7b3fcf714f9f939b3';

var charact_led_uuid = '98860001ca0011e7b3fcf714f9f939b3';

试验用到的LED灯连接在PIN36上面,注意使用了mraa库来进行操作,另外这里还定义了一些常量,其中包括设备名,服务及characteristic的UUID值,注意这是用户自定义的服务类型,所以要使用128位的UUID值。

  • 本文系21ic原创,未经许可禁止转载!

网友评论