obnizを使用して、ドアセンサーを作った[obniz用コードとハードウェア編]

今回は、作ったドアセンサーの obniz 用のコードとハードウェアの話

完成品から

ドアセンサーに使用するために obniz を使用した、こんなデバイスを作った。

それではハード、ソースコードの順で解説

目次

ハードウェア

回路図

次のような回路で作ることにした。

(人に見せる回路図ってどう描くのがベストなのかわからないなぁ。)

この回路を考えるとき、そもそも LED の使い方など調べていたら、
LED の使い方 マルツオンライン
に詳しく「やってはいけないこと」が書いてあってわかりやすかった。

回路実装

考えた回路を次のように実装した。

抵抗のカラーコードはこちらの抵抗のカラーコード(抵抗値)の読み方を見ながら確認した。

それとカバーも作った件

obniz を使ってときそのまま裸で使っていくの少し危ないかもと思ってカバーを作った。

アクリル板と、スペーサーで大体 1000 円くらいで作成
部品調達ができればもっと安く作れるだろうと思われ。


L 字のピンヘッダを二つ使って、下の回路ユニットと obniz を個別に交換できるのがポイント。

ハードウェアについてはここまで。

ソースコード

  1. ドアのステータス OPEN or CLOSE が mqtt ブローカーに 1 秒毎に送信
  2. 動作監視(目視確認)用に 0.5 秒ごとに LED を点滅

この 2 点を実現させるため、以下のコードを作成した。

obnizdoor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const Obniz = require("obniz");
const Mqtt = require("mqtt");
const obniz = new Obniz("XXXX-XXXX", { access_token: "[アクセストークン]" });

obniz.onconnect = async function () {
console.log("connect");

//mqtt初期化
var client = Mqtt.connect("[mqttブローカーのアドレス]", {
clientId: "[クライアント名]",
username: "[ユーザー名]",
password: "[パスワード]",
});

//ドア状態オブジェクト作成
let ob = {};
ob.data = {};
ob.data.door = "";

//io0から出力開始
obniz.io0.output(true);
//ドア状態取得用処理
obniz.io5.output(false);
setInterval(async () => {
obniz.io0.output(true);
let result = await obniz.io5.inputWait();
obniz.io5.output(false);

ob.data.door = result == false ? "OPEN" : "CLOSE";
console.log(ob.data.door);

str = JSON.stringify(ob);
client.publish("[トピック名]", `${str}`, {
retain: true,
});
}, 1000);

//LEDステータス変数
let LED = 1;
//動作確認用Lチカ処理
obniz.io1.output(true);
obniz.io3.output(false);
setInterval(() => {
obniz.io1.output(LED > 0 ? 1 : 0);
LED *= -1;
}, 500);
};

obniz.onclose = async function () {
console.log("disconnect");
};

クライアントのコードは特別なことはなく、素直に書くとこうなるかなという感じ。
mqtt への送信は、以前の「ヤルキスイッチ」と同じくやり取りがしやすいのでどうしても json 文字列にして、
受信側でデコードする構成をとりがちなのだけど、一般的にどうしているのか興味がある。

obniz 用コードとハードウェア編はここまで。

次はメール送信クライアント編で。

ではでは。