布尔诺
用于实施BLE(蓝牙低能)外围的Node.js模块.
需要BLE中央模块吗? 见 贵族。 。 。 .
说明: 从0.6 Bleno版本开始,基于ES6类,只支持Node.js 14.x和更高. 对于更古老版本的Node.js使用bleno 0.5.x.
说明: macOS / Mac OS X,Linux,FreeBSD和Windows是目前唯一被支持的OS.
先决条件
操作系统X
- 通过安装 XCode 命令行工具
xcode-select --install - 10.9 或以后时间
链接
- 3.6或以上内核版本
libbluetooth-devbluetoothd禁用,如果安装了 BlueZ 5.14 或以后安装。 使用sudo hciconfig hci0 up以在停止或失效后使蓝牙适配器启动bluetoothd。 。 。 .System V数字 :sudo service bluetooth stop(一次)sudo update-rc.d bluetooth remove(坚持重启)
systemdsudo systemctl stop bluetooth(一次)sudo systemctl disable bluetooth(坚持重启)
如果你在用的话 贵族 财务报告和审定财务报表 同时 Bleno,连接的 BLE 设备可能无法从 BLE 适配器取回服务列表. 看看高贵的 关于bleno相容性的文档
乌本图/德比安/拉斯比安
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev libusb-1.0-0-dev
确保 node 在你的路上,如果没有,一些选择:
- 符号链接
nodejs改为node数字 :sudo ln -s /usr/bin/nodejs /usr/bin/node - 使用节点源码包安装节点.js
Fedora/ 基于其他RPM
sudo yum install bluez bluez-libs bluez-libs-devel
爱迪生情报
见 为 Bluetooth LE (Smart) 开发配置信息爱迪生
免费BSD
确保您有 GNU Make :
sudo pkg install gmake
禁用默认蓝牙堆栈的自动加载 无怀疑.conf 输入 /usr/local/etc/devd/no-ubt.conf 并重新启动devd(sudo service devd restart) (中文(简体) ).
卸载 ng_ubt 如果已装入内核模块 :
sudo kldunload ng_ubt
请确认您已读取和写入权限 /dev/usb/* 与您的蓝牙适配器对应的设备.
窗口
- windows 的节点- gyp 要求
- Py 2.7
- 视觉工作室( E)快递(中文(简体) )
- 节点-蓝牙-hci-socket 先决条件
安装
npm install bleno@npm:@abandonware/bleno
使用量
var bleno = require('bleno');
见 示例文件夹 代码示例.
行动
广告
开始广告
注: bleno.state 必须是 poweredOn 在广告开始前. bleno.on('stateChange', callback(state)); 可用于状态更改事件.
var name = 'name';
var serviceUuids = ['fffffffffffffffffffffffffffffff0']
bleno.startAdvertising(name, serviceUuids[, callback(error)]);
说明:: 对UUID的名称和服务有限制
- 名称
- 最大 26 字节
- 服务UUUID
- 1 128 位服务 UUID
- 1 128位服务 UUID + 2 16位服务 UUID
- 7 16 位服务 UUID
开始广告iBeacon
var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';
var major = 0; // 0x0000 - 0xffff
var minor = 0; // 0x0000 - 0xffff
var measuredPower = -59; // -128 - 127
bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower[, callback(error)]);
注释:数字 :
- 操作系统X:
- 在iBeacon模式下, 您的外围无法连接 !
开始使用 EIR 数据进行广告(仅限 Linux(中文(简体) )
var scanData = Buffer.alloc(...); // maximum 31 bytes
var advertisementData = Buffer.alloc(...); // maximum 31 bytes
bleno.startAdvertisingWithEIRData(advertisementData[, scanData, callback(error)]);
- EIR 格式一节 蓝牙核心规格 数据格式.
停止广告
bleno.stopAdvertising([callback]);
设置服务
设置周边可用的初级服务.
var services = [
... // see PrimaryService for data type
];
bleno.setServices(services[, callback(error)]);
断开客户端
bleno.disconnect(); // Linux only
更新 RSSI
bleno.updateRssi([callback(error, rssi)]); // not available in OS X 10.9
小学
var PrimaryService = bleno.PrimaryService;
var primaryService = new PrimaryService({
uuid: 'fffffffffffffffffffffffffffffff0', // or 'fff0' for 16-bit
characteristics: [
// see Characteristic for data type
]
});
特征
var Characteristic = bleno.Characteristic;
var characteristic = new Characteristic({
uuid: 'fffffffffffffffffffffffffffffff1', // or 'fff1' for 16-bit
properties: [ ... ], // can be a combination of 'read', 'write', 'writeWithoutResponse', 'notify', 'indicate'
secure: [ ... ], // enable security for properties, can be a combination of 'read', 'write', 'writeWithoutResponse', 'notify', 'indicate'
value: null, // optional static value, must be of type Buffer - for read only characteristics
descriptors: [
// see Descriptor for data type
],
onReadRequest: null, // optional read request handler, function(offset, callback) { ... }
onWriteRequest: null, // optional write request handler, function(data, offset, withoutResponse, callback) { ...}
onSubscribe: null, // optional notify/indicate subscribe handler, function(maxValueSize, updateValueCallback) { ...}
onUnsubscribe: null, // optional notify/indicate unsubscribe handler, function() { ...}
onNotify: null, // optional notify sent handler, function() { ...}
onIndicate: null // optional indicate confirmation received handler, function() { ...}
});
结果代码
- 特征. RESULT SUCCESS
- 特征. RESULT INVALID OFFSET
- 特征. RESULT INVALID ATRIBUTE LENGTH
- 特征. RESULT UNLIKELY 错误
读取请求
可以通过构建器选项指定已读请求处理器, 或者通过扩展“ 读取请求” 的特性和压倒性来指定 .
处理器的参数为
offset(0x000- 0xffff) (中文(简体) )callback
callback 必须使用结果和数据(类型) Buffer) -可以是同音.
var result = Characteristic.RESULT_SUCCESS;
var data = Buffer.alloc( ... );
callback(result, data);
写请求
可以通过构建器选项或扩展特性和之上的 Write Request 指定写入请求处理器 .
处理器的参数为
data(压力)offset(0x000- 0xffff) (中文(简体) )withoutResponse(真伪)callback。 。 。 .
callback 必须使用结果代码调用 - 可以是同源代码.
var result = Characteristic.RESULT_SUCCESS;
callback(result);
通知订阅
可以通过构建器选项或通过扩展特性和主控程序指定通知用户处理器.
处理器的参数为
maxValueSize(最大数据大小)updateValueCallback(值改变时召回)
通知未订阅
可以通过构建器选项或扩展特性和对用户的压倒性来指定通知未订阅的处理器.
通知数值变化
打电话 updateValueCallback 调用( 请参见 Notify 订阅), 带有类型参数 Buffer
可通过建构器选项或通过扩展特性和压倒性通知方式指定已发送处理器.
说明
var Descriptor = bleno.Descriptor;
var descriptor = new Descriptor({
uuid: '2901',
value: 'value' // static value, must be of type Buffer or string if set
});
活动
适应器状态变化
state = <"unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn">
bleno.on('stateChange', callback(state));
广告开始
bleno.on('advertisingStart', callback(error));
bleno.on('advertisingStartError', callback(error));
广告停止
bleno.on('advertisingStop', callback);
服务设置
bleno.on('servicesSet', callback(error));
bleno.on('servicesSetError', callback(error));
接受
bleno.on('accept', callback(clientAddress)); // not available on OS X 10.9
断开连接
bleno.on('disconnect', callback(clientAddress)); // Linux only
RSSI 更新
bleno.on('rssiUpdate', callback(rssi)); // not available on OS X 10.9
在 Linux 上运行
说明: 确定你也检查过 Linux 先决条件
无根/ sudo 运行
运行以下命令 :
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
这允许 node 二进制 cap_net_raw 权限,因此可以开始/停止BLE广告.
说明: 上述命令要求 setcap 要安装,可以使用下列设备安装:
- 时间:
sudo apt-get install libcap2-bin - y:
su -c \'yum install libcap2-bin\'
多个适配器
hci0 默认使用以推翻设置 BLENO_HCI_DEVICE_ID 环境变量到接口编号.
示例,指定 hci1数字 :
sudo BLENO_HCI_DEVICE_ID=1 node <your file>.js
设置自定义设备名称
默认 bleno 使用主机名(require('os').hostname())作为设备名(0x2a00)字符isic的值,以匹配OS X的行为.
自定义设备名称可以通过设置 BLENO_DEVICE_NAME 环境变量 :
sudo BLENO_DEVICE_NAME="custom device name" node <your file>.js
或者说
process.env['BLENO_DEVICE_NAME'] = 'custom device name';
设置广告间距
bleno默认使用100ms的广告间隔.
设置自定义广告间隔可以指定 BLENO_ADVERTISING_INTERVAL 环境变量,以毫秒计:
sudo BLENO_ADVERTISING_INTERVAL=500 node <your file>.js
广告间隔必须在20至10 s(10,000 ms)之间.
有用工具/链接
- 工具
- 浅蓝色为 iOS系统编号 :操作系统X
- nRF 主控制面板(BLE) 用于 Android 的
- 支架 财务报告和审定财务报表
gatttool以 蓝色Z 用于 Linux
许可证
版权(C)2015 Sandep Mistry [email protected] (英语)
特此准许任何人免费获得本软件和相关文件文件("软件")的副本,不受限制地在软件中进行交易,包括不受限制地享有软件的使用、复制、修改、合并、出版、分发、分版和(或)销售的权利,并允许软件获得者这样做,但须符合下列条件: 1
上述版权通知和许可通知应载入软件的所有副本或大部分.
软件是提供的"AS IS", 没有任何种类的恐惧, 释放或被卷入, 包括但不限制在 危机的保障, 证明一个特定的目的和无关。 任何索赔、索赔或其他负债,无论是合同、交易或其他行为,产生于、产生于或涉及软件或软件的使用或其他交易的行为,都不得作为担保.