soraのアイコン画像
sora 2021年05月08日作成 (2021年05月13日更新)
製作品 製作品 閲覧数 1405
sora 2021年05月08日作成 (2021年05月13日更新) 製作品 製作品 閲覧数 1405

obnizとRFID-RC522を使った簡易入退出通知システム

  • obniz
  • obniz IoT コンテスト 2021

はじめに

今回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を利用して,データベースを用いて誰が入室したか退室したか細かく識別できるようになったらよりよいものになりそうです.これで終わります!