はじめに
これは社内LTイベンント向けの資料です。
今日のお題「ガジェット」
- Maker's Fair Tokyo 2019 行ってきました
- 2019.08.03 - 08.04
- https://makezine.jp/event/mft2019/
- 買ったもの: ピクセルアートフレーム Divoom PIXOO
Divoom PIXOO
- ハード
- 16x16 の LEDパネル
- スピーカーは無し(付いている機種もある)
- Bluetooth接続
- WiFiは無し
- 16x16 の LEDパネル
- スマートフォンの専用アプリでコントロール
- Divoom (iTunes)
- 共有ギャラリーもある
Divoom アプリでできること
- 静止画の描画、PIXOOへの転送
- アニメーションの作成、PIXOOへの転送
- テキストから、簡易電光掲示板の作成
- つくった静止画/アニメーションの公開、他の人の作品のダウンロード
- 組み込みアプリの利用(ここでデモ)
- 時計、カレンダー、天気情報
- 通知の連携
- 各種VJ風アニメーション
- 音のビジュアライズ
PIXOO ハック!
- やりたいこと: パトランプ的に使いたい
- PC/Macから、自分のプログラムでコントロール
- 参考情報
- 解析情報 ... protocol (github/MarcG046/timebox)
- Bluetooth シリアルで 「01 04 00 45 00 49 00 02 」等を送る
- 解説動画 ... Timebox Hacks (youtube)
- Python ライブラリ ... derHeinz/divoom-adapter
- Node.js ライブラリ ... RomRider/node-divoom-timebox-evo
- 解析情報 ... protocol (github/MarcG046/timebox)
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 に接続
- Macで調べる
- [Apple]メニュー - [このMacについて] - [概要]タブ - [シルテムレポート]ボタン
- [ハードウェア] - [Bluetooth] を選び、右のリストで「Pixoo」のアドレスを探す
ハマりどころ2: サンプルコードが古い(動かない)
- Divoomライブラリのソースコード自体は結構新しい
- テストコードもある(シリアル通信は除く)
- readme.md にあるサンプルの説明があってない(古い)
- コードを読んでサンプルを直す
- テストコードと、ライブラリの実装
- 外部ライブラリ bluetooth-serial-port
まとめ
- PIXOO ちょっとしたディスプレイ装置として、おもしろい
- イベントごとの簡易電光掲示板にベスト
- スマートフォンアプリから、素直に使える
- ハックしても使えそう(が、まだ上手くは使えていない)
- 通信の確立に失敗することがある
- 動くコマンドと動かないコマンドがある
- 表示できる画像と、表示できない画像がある(違いは不明)
- → 気が向いたら調べます
- 積みガジェットを消化するには、LTに取り上げるのが良い
- 今回も買ったまま放置していたが、今回のネタとして調べてみた
おまけ: もう1つ買ったもの
- 木製ブロック玩具「もくロック」
- http://mokulock.com
- キッチリはまる感覚が心地よい