Web Bluetooth API를 통한 too 제어 시 응답(대상 모터 제어)

개시하다


로봇 장난감'toio'을 제어Web Bluetooth API할 때 제어 응답을 얻는 방법을 시도한 노트다.
구체적으로 다음과 같은'대표적 지정 모터 제어'를 사용할 때'대표적 지정 모터 제어에 대한 응답'을 얻기 위해 만든 내용이다.
  ● 모터too™핵심 입방체 기술 규격
다음 기사를 썼을 때 전동기 제어를 했지만 연속적인 전동기 제어를 할 때 전동기 제어가 완성되었는지 알아보기 위해 이번 기사의 내용을 시도해 봤다.
  ● 오디오용 Teachable Machine 머신으로 벨소리와 드럼 소리 배우기) - Qita
  ● 목표가 지정한 모터 제어 사양 확인 및 사용(#GW advent 달력 5/3) #재택 로봇 개발-Qiita

목표가 지정한 모터 제어를 가진 응답 규격


우선 도구의 모터 제어 응답 규격을 조사해 봅시다.
too의 모터 제어 규격을 보면 목표가 지정한 모터 제어를 하면 다음과 같은 응답을 받을 수 있다.

제어 유형의 부분은 고정되고 두 번째 제어 식별자는'목표 모터 제어를 할 때 지정한 값(이하 그림의 빨간 화살표와 같은 부분)'이다.

그 다음에 대답 내용에는 다음과 같은 임의의 답장이 있을 것이다.

대체로 응답하는 방법을 알아도 절차에 따라 처리한다.

웹 Bluetooth API의 Notifications


응답의 수용 방법에 대해 조금 조사해 봤는데 다음과 같은 구조를 활용할 것 같다.
 ●Web Bluetooth/Notifications Sample
   https://googlechrome.github.io/samples/web-bluetooth/notifications.html
이 같은 내용에는 과거 자신의 기사에서 작성한 프로그램 중 비교적 좋은 부분을 발췌했다.
우선 취득characteristic한 후 startNotifications부분을 더한 다음addEventListener통지characteristicvaluechanged를 받았을 때 처리하는 함수(이하'handleNotifications라고 함)를 이용하면 된다.
  .then(characteristic => {
    myCharacteristic = characteristic;
    return myCharacteristic.startNotifications().then(_ => {
      log('> Notifications started');
      myCharacteristic.addEventListener('characteristicvaluechanged',
          handleNotifications);
    });
  })
또한 통지를 받았을 때의 처리로 아래event.target.value 부분에서 응답을 받을 수 있습니다.
function handleNotifications(event) {
  let value = event.target.value;
  let a = [];
  // Convert raw data bytes to hex values just for the sake of showing something.
  // In the "real" world, you'd use data.getUint8, data.getUint16 or even
  // TextDecoder to process raw data bytes.
  for (let i = 0; i < value.byteLength; i++) {
    a.push('0x' + ('00' + value.getUint8(i).toString(16)).slice(-2));
  }
  log('> ' + a.join(' '));
}
이걸 프로그램에 편입해 보세요.

상술한 내용을 too의 제어에 편입해 보십시오


이전 기사게재된 프로그램에 대해 먼저 아래 두 줄의 처리를 추가해 보았습니다.
  .then(characteristic => {
    cube.motorChar = characteristic;
    console.log("characteristic", characteristic);
    cube.motorChar.startNotifications(); //追加1
    cube.motorChar.addEventListener('characteristicvaluechanged',handleNotifications); //追加2
  })
또한 상기 처리에 따른 추가handleNotifications도 절차에 추가된다.
처리는 우선 다음과 같이 해 보자.
// 以下の4行を追加
function handleNotifications(event){
  console.log(event);
  console.log(event.target.value);
}
이후 프로그램을 실행해 too의 짝짓기와 BLE를 통한 모터 제어를 시도했다.
이때 브라우저 컨트롤러의 출력을 보십시오. "이벤트."target.value'쪽에서 3바이트의 2진 데이터를 받을 수 있을 것 같습니다.

그리고 프로그램을 다음과 같은 내용으로 바꾸어 다시 한 번 시도했다.
function handleNotifications(event){
  console.log(event.target.value.getUint8(0));
  console.log(event.target.value.getUint8(1));
  console.log(event.target.value.getUint8(2));
}
이렇게 되면 모터 제어 처리를 한 후 완성될 때까지 기다린 경우와 모터 제어 처리에서 다음 제어를 한 경우 각각 다음과 같은 출력을 얻었다.
모터 제어가 끝날 때까지 기다리는 것은 다음과 같다.
첫 번째는 too의 규격0x81(10진법 131)에 따라 출력하고, 두 번째는 모터 제어 시 지정한 0 출력이다.또 세 번째와 관련해서는 모터 제어가 정상적으로 끝났을 때의 값 0이 출력돼 예기한 응답을 받았다는 것을 알 수 있다.

또한 모터 제어 처리에서 다음 모터 제어를 진행할 때 다음과 같은 내용과 상술한 내용을 출력하였다.
다음은 위에서 말한 세 번째 값과 달리 5의 값이다.상기 toio의 규격에서 이 값은'기타 쓰기 수리'를 표시하고 첫 번째 모터 제어에서 끝나기 전 두 번째 집행의 결과를 반영한다.2차 모터 제어가 정상적으로 끝났기 때문에 상술한 결과와 같은 출력 형식은 다음과 같다.

총결산


TOIO 목표물 지정이 있는 모터 제어를 할 때 이 제어가 정상적으로 진행되는지 등을 판단하기 위해 응답을 얻으려고 시도해 응답을 받았는지 확인한다.
앞으로 나는 이 응답을 잘 사용하여 연속적인 전동기 제어를 해 보려고 한다.

좋은 웹페이지 즐겨찾기