nativescript-mip-ble
NativeScript 插件,允许控制 Mip 机器人。
npm i --save nativescript-mip-ble

NativeScript-mip-ble

此插件旨在与 WowWee MiP 机器人通信。它提供扫描、连接和发出各种命令的功能。

安装插件

从项目的根目录调用以下命令。

tns plugin add nativescript-mip-ble

入门

以下是使用此插件的简要概述。有关更高级的示例,请参阅:简单的 ng2 示例 JS Core 示例 ng2 示例

连接到您的 MiP

在您控制 MiP 之前,您需要先找到它。我们将使用 BluetoothScanner 来实现这一点,它将为我们提供所有可用的 MipDevice 对象。

导入

将以下导入添加到您的 TypeScript 代码中

import { BluetoothScanner } from "nativescript-mip-ble/bluetooth.scanner";
import { MipDevice } from "nativescript-mip-ble/mip-device";

扫描

扫描函数需要一个回调,当发现每个 ble 设备时会被触发,并在扫描完成时返回一个回调。

您可以按如下方式调用它

var devices: Array<MipDevice> = [];
var scanner = new BluetoothScanner();

scanner.scan( (mip) => devices.push(mip))
.then(() => {
console.log("Finished Scanning");
})

这将填充 devices 数组,包含该区域内的所有 ble 设备。

每个 MipDevice 对象包含:nameUUIDstatus,您可以用这些信息在屏幕上显示。

在尝试扫描设备之前,请确保您的设备已启用 Bluetooth

连接到设备

您只需获取您想要连接的 MipDevice 对象,并调用 connect()。此函数接受一个回调函数,用于在设备断开连接时触发,并在连接建立时返回一个承诺。

您可以按如下方式调用它

var selectedIndex = 0;
var selectedDevice: MipDevice = devices[selectedIndex];

selectedDevice.connect( (mip) => {
console.log("disconnected from: " + mip.name);
})
.then(() => {
console.log("connected to: " + selectedDevice.name);
})

发送指令

现在您已连接到 MiP,您应该能够调用各种指令来使其移动、更改胸部 LED 的颜色或使其说话。为此,只需使用 mipControllerMipDevice

以下是一些示例

import { Direction, TurnDirection } from "nativescript-mip-ble/mip-types";

// --- MOVE ----
var distance = 10;
//move Fwd
selectedDevice.mipController.distanceDrive(Direction.Forward, distance, TurnDirection.Left, 0);

// move Bwd
selectedDevice.mipController.distanceDrive(Direction.Backward, distance, TurnDirection.Left, 0);

// --- TURN ----
var turnAngle = 45;
//turn left
selectedDevice.mipController.turnLeftByAngle(angle / 5, 0);

//turn Right
selectedDevice.mipController.turnRightByAngle(angle / 5, 0);

// --- SOUND ---
//mute
selectedDevice.mipController.setVolume(0);

//set max volume
selectedDevice.mipController.setVolume(7);

//make noise
var soundIndex = 10; // value from 1 - 106
selectedDevice.mipController.playOneSound(soundIndex, 0, 0);

// --- LED ---
//set Led to red
selectedDevice.mipController.setChestLED(255, 0, 0);
}
//set Led to green
selectedDevice.mipController.setChestLED(0, 255, 0);
}
//set Led to blue
selectedDevice.mipController.setChestLED(0, 0, 255);
}

连续移动

控制机器人运动的最佳方式是使用 drive 函数,该函数指示机器人向给定方向移动一段短时间(50ms)。您需要每隔 50ms 调用此函数,连续发送新指令。

一个很好的例子是使用 nativescript-accelerometer 插件。

以下是使它工作的代码

import { MipDevice } from "nativescript-mip-ble/mip-device";
import {startAccelerometerUpdates, stopAccelerometerUpdates} from "nativescript-accelerometer"

export class AccelerometerComponent {
private turnSpeed: number = 0;
private speed: number = 0;

private selectedDevice: MipDevice;

constructor(mip: MipDevice) {
this.selectedDevice = mip;
}

public startAccelerometer() {

startAccelerometerUpdates( data => {
this.turnSpeed = data.x; // lean left (0 to -1) / right (0 to 1)
this.speed = data.y; // lean forward (0 to -1) / back (0 to 1)
} )

this.startContinousMove();
}

public startContinousMove() {
setInterval( () => {
this.selectedDevice.drive(this.speed, this.turnSpeed);
}, 50);
}
}

修改插件

如果您想修改插件,首先需要正确设置您的环境。首先在根目录下运行,这样您就可以使用示例项目了。

tns install

为 JavaScript core demo 项目重建插件

npm run preparedemo

为 angular demo-ng 项目重建插件

npm run preparedemo-ng

运行示例项目

cd demo

tns platform add android
tns run android

and/or

tns platform add ios
tns platform run ios

运行 demo-ng 示例项目

cd demo-ng

tns platform add android
tns run android

and/or

tns platform add ios
tns platform run ios