📺

Firebaseのデータをobnizのディスプレイに反映させる

2021/10/12に公開

Firebaseのデータをobnizのディスプレイに反映させます。

今回は

Node.jsでobniz スイッチからFirebaseにデータを保存しよう

をベースに進めます。こちらで動作している前提です。

Firebaseのデータの準備

protoout/studio/obniz/display のデータを監視します。

image.png

Realtime Database に protoout/studio/obniz/display データを作ります。

obnizのソースコード

今回、obnizで動作させる firebase_data_obniz_display.js のソースは以下のようになっています。

var admin = require("firebase-admin");

// 1. サービスアカウント鍵を生成しserviceAccountKey.jsonでリネームしてfirebaseフォルダ直下に配置
var serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    // 2. Realtime DatabaseのページでdatabaseURLを確認して反映
    databaseURL: "https://<databaseURL>.firebaseio.com"
});

var db = admin.database();
// protoout/studio/obniz/display のデータを監視する
var ref = db.ref("protoout/studio/obniz/display");
ref.on("value", function (snapshot) {
        console.log("value Changed!!!");
        console.log(snapshot.val());
        obniz.display.clear();
        obniz.display.print(snapshot.val());
    },
    function (errorObject) {
        console.log("failed: " + errorObject.code);
    }
);

// obnizの処理
var Obniz = require("obniz");
var obniz = new Obniz("Obniz_ID");
obniz.onconnect = async function () {
    obniz.display.clear();
    obniz.display.print("Firebase > Obniz display");
}

値を監視しているところはこちらです。

var ref = db.ref("protoout/studio/obniz/display");

で狙いを定めて

ref.on("value", function (snapshot) {
        console.log("value Changed!!!");
        console.log(snapshot.val());
        obniz.display.clear();
        obniz.display.print(snapshot.val());
    },
    function (errorObject) {
        console.log("failed: " + errorObject.code);
    }
);

で監視しています。

動かしてみる

2019-08-28_11h08_50.jpg

起動するを「----」というあらかじめ設定しているデータがすぐに反映されます。

image.png

さきほどの Firebase のデータを「Hello obniz」に変更します。

2019-08-28_11h08_55.jpg

監視された値が変化して obniz のディスプレイに反映されます!

2019-08-28_11h12_57.jpg

ちなみに値に日本語を加えてしまうと、バックエンドでのNode.jsからの実行の場合は日本語フォントが無いため文字化けするので、英数字で行いましょう。(obniz Cloud で実行する場合はブラウザとフロントエンドの力で日本語も表示できます。)

Discussion