RESASハッカソン 岩手で記事書いてます。
#RESAS
Node.jsでParrotのミニドローンのBLE情報を探すの続きです。
rolling-spiderのサンプルをasync/awaitで利用できるように書いてみました。
このサンプルだとキー入力で制御でしたが、何秒後にこれを実行
みたいな処理を同期的に書きたかった感じです。
準備
npm i --save rolling-spider
コード
app.js
'use strict';
const RollingSpider = require('rolling-spider');
const DRONE_UUID = process.env.DRONE_UUID || ``; //各々書き換えましょう。
const drone = Promise.promisifyAll(new RollingSpider({uuid:DRONE_UUID}));
const STEPS = 5;
let activeFlag = true;
const cooldown = () => {
activeFlag = false;
setTimeout(() => activeFlag = true, STEPS);
}
// Promise化
const droneConnectAsync = () => new Promise(resolve => drone.connect(resolve('connect success!')));
const droneSetupAsync = () => new Promise(resolve => drone.setup(resolve('setup success!')));
const droneFlatTrimAsync = () => new Promise(resolve => drone.flatTrim(resolve('trim success!')));
const sleep = msec => new Promise(resolve => setTimeout(resolve, msec)); // async/awaitでのSleep処理
// メインの処理
const main = async () => {
//ドローンとの接続/セットアップ
console.log('connecting...');
let res = await droneConnectAsync();
console.log(res);
res = await droneSetupAsync();
console.log('Configured for Rolling Spider! ', drone.name);
res = await droneFlatTrimAsync();
console.log(res);
drone.startPing();
res = await droneFlatTrimAsync();
console.log(res);
console.log(drone.name + ' => SESSION START');
activeFlag = true;
// 離陸
await sleep(5000);
drone.takeOff();
// 5秒待って前進
await sleep(5000);
drone.forward({steps:10});
cooldown();
// 5秒待って着陸
await sleep(5000);
drone.land();
// 10秒後に接続解除
await sleep(10000);
console.log('disconnect');
drone.disconnect();
process.stdin.pause();
process.exit();
};
main();
実行
$ DRONE_UUID=xxxxxxxxxxxx node app.js
これで離陸->5秒待つ->前進->5秒待つ->着陸
ができました。