5
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?

More than 5 years have passed since last update.

ピクセルアートフレーム Divoom PIXOO で遊んでみた

Last updated at Posted at 2019-10-01
1 / 13

はじめに

これは社内LTイベンント向けの資料です。


今日のお題「ガジェット」

divoom_pixoo.png

Divoom PIXOO

  • ハード
    • 16x16 の LEDパネル
      • スピーカーは無し(付いている機種もある)
    • Bluetooth接続
      • WiFiは無し
  • スマートフォンの専用アプリでコントロール
    • Divoom (iTunes)
    • 共有ギャラリーもある

Divoom アプリでできること

  • 静止画の描画、PIXOOへの転送
  • アニメーションの作成、PIXOOへの転送
  • テキストから、簡易電光掲示板の作成
  • つくった静止画/アニメーションの公開、他の人の作品のダウンロード
  • 組み込みアプリの利用(ここでデモ)
    • 時計、カレンダー、天気情報
    • 通知の連携
    • 各種VJ風アニメーション
    • 音のビジュアライズ

PIXOO ハック!


Node.js でやってみる

不安定だが、限定的に動作

  • 接続できないことがある
  • 一部の機能しか使えない

(1) 接続

const TIMEBOX_ADDRESS = "xx:xx:xx:xx:xx:xx"; // Bluetoothアドレス

const btSerial = new (require('bluetooth-serial-port')).BluetoothSerialPort();
const Divoom = require('node-divoom-timebox-evo');

btSerial.findSerialPortChannel(TIMEBOX_ADDRESS, function (channel) {
  btSerial.connect(TIMEBOX_ADDRESS, channel, function () {
    console.log('connected');
    btSerial.on('data', function (buffer) {
      console.log(buffer.toString('ascii'));
    });

    showTime(); // <-- ここのタイミングで、表示処理を呼び出す
    //sendImage();

  }, function () {
    console.log('cannot connect');
  });
}, function () {
  console.log('found nothing');
});

Node.jsで時刻を表示

(2) 時刻を表示


function showTime() {
  const d = new Divoom.TimeChannel;
  const buf = d.messages[0].asBinaryBuffer()[0];
  //console.log(buf);

  btSerial.write(buf,
    function (err, bytesWritten) {
      if (err) console.log(err);
      else {
        console.log('bytes sent=' + bytesWritten);
      }
      btSerial.close();
    }
  );
}

Node.jsでイメージを表示

(3) イメージ表示
なぜか、表示できるイメージとできないイメージがある

const imageFile = 'img16x16.png';
function sendImage() {
  const d = new Divoom.DisplayAnimation;
  d.read(imageFile)
    .then(result => {
      result.asDivoomMessages().forEach((message /*: TimeboxEvoMessage*/, index /*: number*/) => {
        const buf = message.asBinaryBuffer()[0];
        console.log(buf);

        btSerial.write(buf,
          function (err, bytesWritten) {
            if (err) console.log(err);
            else {
              console.log('bytes sent=' + bytesWritten);
            }
            btSerial.close();
          }
        );
      })
    })
    .catch(err => {
      console.error('read ERROR:', err);
    })
}

ハマりどころ1: デバイスのbluetoothアドレスが見つからない

  • スマートフォンとの接続を解除
  • Macに接続
    • システム環境設定 - Bluetooth - Pixoo に接続
system-bluetooth.png
  • Macで調べる
    • [Apple]メニュー - [このMacについて] - [概要]タブ - [シルテムレポート]ボタン
    • [ハードウェア] - [Bluetooth] を選び、右のリストで「Pixoo」のアドレスを探す
system-report.png

ハマりどころ2: サンプルコードが古い(動かない)

  • Divoomライブラリのソースコード自体は結構新しい
    • テストコードもある(シリアル通信は除く)
  • readme.md にあるサンプルの説明があってない(古い)
  • コードを読んでサンプルを直す
    • テストコードと、ライブラリの実装
    • 外部ライブラリ bluetooth-serial-port

まとめ

  • PIXOO ちょっとしたディスプレイ装置として、おもしろい
    • イベントごとの簡易電光掲示板にベスト
  • スマートフォンアプリから、素直に使える
  • ハックしても使えそう(が、まだ上手くは使えていない)
    • 通信の確立に失敗することがある
    • 動くコマンドと動かないコマンドがある
    • 表示できる画像と、表示できない画像がある(違いは不明)
    • → 気が向いたら調べます
  • 積みガジェットを消化するには、LTに取り上げるのが良い
    • 今回も買ったまま放置していたが、今回のネタとして調べてみた

おまけ: もう1つ買ったもの

  • 木製ブロック玩具「もくロック」
5
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
5
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?