はじめに
今回obniz 1Yをいただいたので,記事を書くことになりました.内容としましては,タイトルにもある通り,obnizとRFID-RC522を使った簡易入退出通知システムです.詳しく言いますとobnizとRFID-RC522を接続して,そこにRFIDカードを近づけるとSlackの方に通知してくれます.では早速作っていきます.
RFID-RC522をobnizと接続
公式のドキュメントがありますので,参照しました.注意点としてRFID-RC522くんは3.3Vの入力が必要なのですが,obnizは3Vピン設定は十分ではないようなので,5Vピン設定をレギュレータで降圧してくれ,と書いてありました.僕はそういう電子部品は持ち合わせていないので今回はRaspberryPiから3.3Vの電源をとるようにしています(くそ邪魔なので絶対おすすめしません)ピンの対応表とその写真を示します.
obniz board 1Y | RFID RC-522 |
---|---|
0(CS) | SDA |
1(CLK) | SCK |
2(MOSI) | MOSI |
3(MISO) | MISO |
5(GND) | GND |
6(RST) | RST |
RFID-RC522の3.3Vピンに3.3Vの入力をしましょう.(何度も言いますがobnizの5Vピン設定をレギュレータで降圧してください.ここの表には記載されていませんが,特に難しくはないと思います)
写真はRaspberryPiから電源をとっているせいでくそみたいな配線になっています.レギュレータさえあればこんな状態になりませんので,ご安心を(また研究室のくそ北汚いソファで撮影したので背景が汚いですが,その点もご了承ください.)
SlackからWebhookを使って通知できるよう設定
くそ簡単です.Webhookで通知を送りたいSlackワークスペースの(多分)管理者であることが前提です.ここからアプリをWSに追加して,メッセージを送信するためのWebhook URLを取得します.メッセージを送信したいチャンネルを選択し,その後表示されるWebhook URLを控えてください.あとからプログラムの中で書き換えます.
これで設定完了です.
ソースコード
ではソースコードを示します.先ほど取得したURLにする部分があるので注意してください.
main
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<h1>カードを検出する</h1>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
var mfrc522 = obniz.wired("MFRC522", { cs: 0, clk: 1, mosi: 2, miso: 3, gnd: 5, rst: 6 });
while (true) {
try {
let card = await mfrc522.findCardWait();
console.log("カードが検出されました。");
console.log("UID : " + card.uid);
console.log("PICC Type : " + card.PICC_Type);
sendToSlack();
sample_func();
} catch (e) {
// Not Found or Error
console.error("カードは検出されません。", e.message);
}
}
};
function sendToSlack(temp) {
let url = "<ここにWebhookのURLを記入>";
let data = {
text: "入退出の発生"
};
let dataJson = JSON.stringify(data);
$.ajax({
type: "POST",
dataType: "json",
url: url,
processData: false,
data: "payload=" + dataJson
}).then(
function (data) { },
function (XMLHttpRequest, textStatus, errorThrown) {
console.log("post to bot");
}
);
}
function sample_func() {
if (!is_ready()) {
setTimeout(sample_func, 1000); // wait 100ms and execute sample_func() again
return;
}
do_something();
}
</script>
</body>
</html>
実行結果
このように近づけると,
Slackに通知が行きます!
今後の展望
RFIDカードのIDを利用して,データベースを用いて誰が入室したか退室したか細かく識別できるようになったらよりよいものになりそうです.これで終わります!
- sora さんが 2021/05/08 に 編集 をしました。 (メッセージ: 初版)
- sora さんが 2021/05/13 に 編集 をしました。
- sora さんが 2021/05/13 に 編集 をしました。
投稿者の人気記事