Node.js로 Parrot의 미니 무인 항공기를 건너 뛰기 (async/await 사용)

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秒待つ->着陸

좋은 웹페이지 즐겨찾기