- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在我的 Windows 笔记本电脑上设置一个基于 Nodejs 的演示,并使用额外的 BLE 适配器将我的笔记本电脑连接到另一个 BLE 设备 (Anki Overdrive)。我在互联网上看过这个演示,很好奇我是否也可以设置它。我已遵循所有说明,但失败了,因为原始演示是使用 MacBook 制作的,它使用不同类型的内置 BLE 适配器。我也用 MacBook 尝试过,效果非常好,但我想用 Windows 设备进行设置。我附加了一部分 Nodejs 代码,该代码应返回 BLE 设备的外设 ID:
//UUID for Anki Overdrive Car be15beef6186407e83810bd89c4d8df4
var noble = require('noble');
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
noble.startScanning();
setTimeout(function() {
noble.stopScanning();
process.exit(0);
}, 2000);
} else {
noble.stopScanning();
}
});
noble.on('discover', function(peripheral) {
var serviceUuids = JSON.stringify(peripheral.advertisement.serviceUuids);
if(serviceUuids.indexOf("be15beef6186407e83810bd89c4d8df4") > -1) {
console.log('Car discovered. ID: ' + peripheral.id);
}
});
到目前为止,我发现 MacBook 中的内置 BLE 会发回外设 ID。相比之下,Windows BLE 适配器仅返回来自其他 BLE 设备的 MAC 地址。谁能帮我?我真的不知道我能做些什么来解决这个问题。
为了进一步理解,我提供了使用 MacBook 设置的原始演示的链接。 https://github.com/IBM-Bluemix/node-mqtt-for-anki-overdrive .
提前非常感谢。
最佳答案
使用 Anki Overdrive 汽车总是很麻烦。
以下代码片段显示了与您的问题相关的代码。
免责声明:我创建了一个 WIP Anki Overdrive SDK [1],试图让生活变得更轻松(代码片段是从那里复制的)
module.exports = class Scanner {
constructor() {
this.peripherals = []
this.state = undefined
}
/**
* Set up noble listeners. Mandatory before scan.
*/
async setUpNoble () {
try {
await noble.on('discover', (peripheral) => {
const isAnkiDevice = function(peripheral) {
const serviceUuids = JSON.stringify(peripheral.advertisement.serviceUuids)
return (serviceUuids.indexOf("be15beef6186407e83810bd89c4d8df4") > -1)
}
if(isAnkiDevice(peripheral)) {
this.peripherals.push(peripheral)
}
})
await noble.on('stateChange', (status) => {
this.state = status
})
} catch (err) {
throw new Error(err)
}
}
/**
* Scans for devices and returns peripherals. Scans for 20 seconds before stopping.
*/
async scan() {
try {
let that = this
await waitUntil(() => {
return (that.state === 'poweredOn')
}, 20000)
console.log('Starting to scan...')
return await waitUntil(() => {
noble.stopScanning()
if(that.peripherals.length <= 0) {
console.log('Scanning...')
noble.startScanning()
} else {
console.log('Found ' + that.peripherals.length + ' devices.')
return that.peripherals
}
}, 20000, 4000)
} catch (err) {
throw new Error(err)
}
}
}
async scanDevices() {
try {
const that = this
const scanner = new Scanner()
scanner.setUpNoble()
const peripherals = await scanner.scan()
const devices = peripherals.map((peripheral) => {
return new Device(peripheral)
})
return devices
} catch (err) {
throw new Error(err)
}
}
module.exports = class AnkiDevice {
constructor (peripheral) {
this.peripheral = peripheral
this.id = peripheral.uuid
this.serviceUuids = JSON.stringify(peripheral.advertisement.serviceUuids)
....
connect() {
try {
const that = this
console.log('Connecting with ' + this.id)
const getService = function(services){
if (os.platform() === 'win32' || os.platform() === 'linux') {
return services[2]
} else {
return service[0] // macOS
}
}
const setCharacteristics = function(characteristics) {
for(let i in characteristics) {
const characteristic = characteristics[i]
if (characteristic.uuid == 'be15bee06186407e83810bd89c4d8df4') {
that.readCharacteristic = characteristic
}
if (characteristic.uuid == 'be15bee16186407e83810bd89c4d8df4') {
that.writeCharacteristic = characteristic
}
}
}
const onConnect = async function() {
const services = await that.peripheral.discoverServices([])
const service = await getService(services)
const characteristics = await service.discoverCharacteristics([])
await setCharacteristics(characteristics)
// Listen to own disconnect
that.peripheral.once('disconnect', () => {
mediator.private.emit('deviceDisconnected', this)
})
mediator.private.emit('deviceConnected', that)
}
this.peripheral.once('connect', onConnect)
this.peripheral.connect()
} catch(err) {
throw new Error(err)
}
}
activateSDKMode() {
console.log('Activating SDKMode for ' + this.id)
const that = this
if(!this.isConnected) {
return new Error('Car is not connected yet.')
}
const message = coder.encodeSDKActivation()
this._writeMessage(message)
.then(() => {
mediator.private.emit('SDKModeOn', that)
})
}
turnOnLogging() {
console.log('Turning logging on for ' + this.id)
let that = this
if(!that.isConnected) {
return new Error('Car is not connected yet.')
}
that.readCharacteristic.notify(true)
that.readCharacteristic.on('read', (data) => {
that._onMessage(data)
})
mediator.private.emit('loggingOn', that)
}
关于node.js - 无法将带有 BLE 适配器的 Windows 笔记本电脑连接到 BLE 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486526/
问题:将具有两个字符分隔符的数据文件加载到 Azure SQL Db 时,我们遇到以下错误。我们可能做错了什么以及如何解决这个问题? 在 Azure Databricks 中使用 Python 笔记本
我正在使用 ipython notebook 迈出第一步,我成功地将它安装在我的远程服务器上(通过 SSH),并使用以下命令启动它: ipython notebook --ip='*' ---pyla
我想知道对于一个网站来说,最好的数据库设计是什么,让用户(假设有 10k 个用户)给自己留下带有日期的注释。用户只能看到自己的笔记。 用户将看到的示例: 2014年9月28日 -去商店 -带狗去散步
我希望没有人会认为这个问题离题。我即将开始探索在 Jupyter 笔记本中使用 C# 内核。我看到有几种选择,有些似乎过时了。我对探索它们并不真正感兴趣,我只是想要一些能够很好地用于演示的东西。目的是
我已经使用此命令在 R 控制台中安装了 Rcpp,该命令直到现在通常用于安装要在 jupyter 笔记本上运行的软件包: install.packages('Rcpp', '/home/user/an
我已经使用更新了 Tornado sudo pip install --upgrade tornado 检查当前版本显示我已经有一个 4.0 以后的版本 找到命令的输出: pip 显示 Tornado
这个问题在这里已经有了答案: How can I share Jupyter notebooks with non-programmers? [closed] (6 个回答) 5年前关闭。 我安装了一
我有一个 IPython 笔记本,我不小心丢弃了一个巨大的输出 (15 MB),导致笔记本崩溃。现在,当我打开笔记本并尝试删除有问题的单元格时,笔记本又崩溃了——从而阻止了我解决问题并将笔记本恢复到稳
当我使用 ipython 笔记本(Windows 版本)运行任何 %R 代码时,输出在结果之前包含一个 480 x 480 的空白图像。我已经申请了fix #2433让 rmagic 在 Wind
大家好,我想使用新的.NET Jupyter笔记本,因此我准备了一个gitt的存储库,其中包含dockerfile(是正确的)和NuGet.config文件,例如: here the tuto 一切都
如何将本地镜像添加到 IJulia 笔记本?该图像与 IPYNB 文件位于同一本地网络文件夹中。该文件夹可通过符号链接(symbolic link)访问。我尝试过相对文件名和绝对文件名。 ![Ima
docs描述如何创建密码来保护您的 jupyter 笔记本。我希望能够创建并共享一个特定的笔记本,并为该笔记本设置特殊的密码。这可能吗? 最佳答案 不,这是不可能的。该密码保护整个 Jupyter 服
最近我了解到,使用 python 可以生成 IPython 笔记本 automatically .这看起来是个很酷的功能,我想用它来自动生成报告。但是用 julia 而不是 python。那么是否有一
我正在使用 Jupyter 笔记本,并且需要运行另一个 Jupyter 笔记本。这通常使用 %run 很简单,但另一个笔记本的路径是相对的并且包含空格。 这会产生以下错误: %run '..//../
我想在一个循环中运行完整的 Jupyter 笔记本,为笔记本的每次运行传递不同的参数。我可以使用插件传递参数,如下所述:Passing command line arguments to argv i
我真的很感谢这里的一些帮助,基本上我正在学习使用tensorflow,我决定最简单的方法是在VMware和/或Virtualbox上安装ubuntu,然后访问ipython笔记本(anaconda附带
有谁知道在执行单元格之前是否有选项(或建议的 hack)可以让 IPython 笔记本自动保存? 很多时候我一直在做一些事情而没有保存很长一段时间,然后我执行了一个愚蠢的命令,该命令在控制台上打印了如
我正在尝试在另一个文件中运行 .ipynb 文件。我想嵌套这两个的原因是因为在其中一个中,我安装了所有 conda 软件包、github 存储库,并且我不想为我将暂时使用的演示文件重做整个事情。我使用
我有多个相互链接的 Jupyter 笔记本,例如 Notebook1.ipydb 包含指向 Notebook2.ipydb 的链接,其 Markdown [Notebook2](Notebook2.i
我使用 jupyter python 中的 matplotlib 库生成了下图。正如你所看到的,我有两个不同的数据,一个是红色,另一个是绿色。我的问题是,有什么办法可以让我有一个小侧窗来说明每种颜色的
我是一名优秀的程序员,十分优秀!