1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

obnizAdvent Calendar 2023

Day 12

obnizのパーツをリモート開発してみた

Last updated at Posted at 2023-12-11

obnizのパーツライブラリにしたいパーツありますか?って募集をかけたら、
「PLAYBULB candle」を教えてもらいました。

しかし、教えてもらったものの、デバイスの入手ができないので、@youtoyさんのもってるデバイスを遠隔で開発に使わせてもらいました 

リモート開発

obnizはインターネット越しでも遠隔操作できるので、遠隔で開発させてもらうのにお願いしたのはこの項目です。

SS20231210192319.png

事前準備

日程調整して当日を迎えるまでの間に、できるだけMTG時間を短縮しようと、ある程度ベースを作っておきました。

PLAYBULB candleのドキュメント / SDK

上記ドキュメントを見つつ、実機がないので、妄想を膨らませながら下記の関数を実装していきます

  • isDevice
  • getDeviceNameWait
  • setColorWait
  • setEffectWait

例えば、peripheralが対象デバイスかどうかを判定するisDeviceはこんな感じ。

  static _deviceAdvAnalyzerType = new BleAdvBinaryAnalyzer()
    .addTarget('flag', [0x02, 0x01, 0x06])
    .groupStart('manufacture')
    .addTarget('length', [3])
    .addTarget('type', [3])
    .addTarget('candle_service_uuid', [0x02, 0xff])
    .groupEnd();

  public static isDevice(peripheral: BleRemotePeripheral): boolean {

    const advData = PLAYBULB_candle._deviceAdvAnalyzerType.getAllData(
      peripheral.adv_data
    );

    return advData != null;
  }

isDevice以外の関数はすべて接続して行うので、接続チェックをしつつ、numberの配列を書き込むようにします

  public setColorWait(r: number, g: number, b: number) {
    if (!this._peripheral.connected) {
      throw new Error(`Device is not connected`);
    }
    if (!this._candleColorCharacteristics) {
      throw new Error(`no characteristic found`);
    }
    const data = [0x00, r, g, b];
    return this._candleColorCharacteristics.writeWait(data, false);
  }

作成途中に PLAYBULB candleの仕様を踏まえたコードを出してくるGithubCopilotさん、流石です。
SS20231210194532@2x.png

リモート開発

さて、MTGを繋いでプログラムをデバッグします。

カメラを準備してもらってる姿
SS20231210211811.png

obnizIDを教えてもらって、遠隔でBLEのスキャンをすると、あっさり見つかりました。
接続も無事に成功。
1Stepずつエラーになる場所はないかな、と見ていきましたが、エラーは出るものの微修正の範囲で収まりました。

途中、Webカメラがちらつく!とか、ちょっとカメラ的に光がよくわからない!とかもありましたが、
事前準備したプログラムが8割はそのまま使えたので、微修正だけしてそのままスムーズにデバッグ完了。

なんと30分で終わりました笑

↓30分後に動いている姿。光が見にくいよねということで、デバイスを横向きにしてる
SS20231210213219.gif

というわけで

@youtoy さんに協力してもらいながら遠隔でobnizの「PLAYBULB candle」のパーツ対応をしました!
(協力ありがとうございました)

コード全体像はまた1月ぐらいにgithubに上げる予定です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?