使用BLE来控制RPI3
- [导读]
- 可穿戴设备大多都是通过蓝牙来进行数据通信,实现设备间的数据交换。与Bluetooth Classic相比较而言,BLE的低功耗特性对于可穿戴设备而言,在电池消耗上更具优势。某种程度上可以说,BLE成就了今天的可穿戴市场,反过来,可穿戴市场的崛起,让BLE更具生命力了!
树莓派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原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前