M5StickCとRFIDリーダーで出退勤システムを考える

概要

コメント欄で問い合わせをもらいましたが、メールアドレスが間違っていたようで連絡が取れないのでブログ記事にしたいと思います。

システム概要

M5StickCとかのESP32にRFIDカードリーダーをつけて、Suicaとかで出退勤つけれたら便利ですよね?

ESP32

おすすめはブザーがついているM5StickC Plusです。やっぱりピッて音がしないと微妙ですよね。

M5StickCにスピーカーHATでもいいとは思います。ATOM Echoでもいいかな。M5Stack系は全部音がでるので大丈夫だと思います。

  • M5StickC+スピーカーHAT
  • M5StickC Plus
  • M5Stack BASIC
  • M5Stack Core2
  • ATOM Echo

あたりがおすすめです。M5Stack GrayとかFireの機能は使わないのでBASICかタッチパネルのCore2の方がいいと思います。

RFIDリーダー

実は選択肢はほとんどありません!

上記で利用しているSONYのRC-S620S以外は電波法的に微妙です。

上記のとか、M5Stack純正でもRFIDリーダーはありますがスイッチサイエンスさんで発売されていないってことは電波法的に怪しいってことだと思います。

似たような認証としては指紋認証もあります。とはいえ、コロナ禍で接触系はちょっと微妙ですよね?

データ送信方法

プッシュ型

M5StickCからサーバーに対してデータを送信するタイプです。この構成が一般的な気もします。

REST通信

GETやPOSTでデータを送信するHTTP通信です。サーバーにPHPなどでスクリプトを設置して、ESP32で個人認証をしたところでサーバーに認証結果を送信します。

基本的な処理はサーバー側にあって、ESP32は認証したらデータを飛ばすだけの役割にしたほうがシンプルになると思います。

サーバーをインターネット上に公開することで複数の拠点でも同じ仕組みが利用できます。閉じたローカルネットワークの場合にはラズパイなどを設置してサーバーにすることもできます。ただし、リーダーが1台しかないのであればラズパイとかにUSBでRFIDリーダーをつけたほうがシンプルな構成になります。

MQTT通信

IoTっぽく作るのであればMQTTがおすすめです。こちらもインターネットかローカルネットワークにMQTTサーバーを用意して個人認証が確認できたらMQTTで送信します。

MQTTはメッセージキューのサービスになるので、サーバーにMQTTメッセージが保存されます。溜まったデータを別システムから読み取って処理を行います。MQTTサーバーはデータを一時的にためるだけであり、何らかの方法でデータを処理する必要があります。

個人的にはAWSなどの仕組みを使う以外だと逆に面倒になると思っています。

プル型

ESP32にデータを保存しておき、定期的にサーバーからデータ取得する方法です。

REST通信

ESP32はWebサーバーになることもできますので、HTTPでサーバーから定期的にデータを取得して処理をします。入退出だと微妙ですが、出退勤であればそこまでリアルタイムでデータが反映されている必要もないと思います。

SDカード

M5Stack BASICなどではSDカードがありますのでローカルのSDカードに保存します。定期的にSDからデータを取り込むことでデータを取得します。ちょっと面倒ですが紙のタイムカードと比べるとこちらの方がちょっとだけ楽な場合もあると思います。

スタンドアロン型

ESP32の内部にデータを保存して、Webサーバーとしても動いており、データの閲覧や修正ができるようにします。

個人的にはおすすめしません。ESP32はWebサーバーとしても動かせますが、ArduinoだとC言語ですのでテンプレート系の動きが弱く、結構実装が面倒です。MicroPythonとかの方がいいのかもしれません。

とはいえ、スタンドアロンだったらESP32でがんばるよりラズパイとかのほうがUSB接続のRFIDリーダーが使えるので絶対に楽です。データベースも使えますし、各種スクリプト言語で開発が可能です。

まとめ

個人的にはESP32を使うのはおすすめしません!

電波法を考えると3,666円ぐらいのRC-S620Sともろもろ必要なのでもろもろでたぶん7千円ぐらいはかかります。電波法を考えないのであれば結構安くなりますので、複数ばらまいてインターネット上にサーバーがあるような環境であればいいのかもしれません。。。

あと安いAndroid端末とかを使ったほうがいい可能性もあります。。。

Raspberry Pi Zero WHとUSB接続のPaSoRiの方がたぶん開発は楽です。suicaじゃなくてNFCでいいんであればもっと安いUSB RFIDリーダーも使えます。。。

ESP32が優位に立てる状況で考えると、RFIDリーダーを使うのをやめてスマホのBluetooth信号を受信したら通知みたいなアプローチだと思います。こちらであればM5stack ATOM Liteのような画面がない端末だけおいておけば動くようなきがします。

ただしピッてフィードバックがないので本当に受信しているかはちょっとわかりにくいです。画面上に最近認識した人の一覧を表示するなどをしたほうがいいのかもしれません。あとはスマホ側設定でBluetooth信号を出す必要があるのでそこは注意が必要です。

LINE Beaconとかで調べると似たようなことが実現できるかも???

コメント

  1. そーたメイ より:

    SUICA対応であればRC-S620Sと下記SDKがおススメです(後者は使ったことないです)

    C# (win)
    https://www.sony.co.jp/Products/felica/business/products/ICS-D004.html

    webアプリ (win/mac)
    https://www.sony.co.jp/Products/felica/business/products/ICS-DCWC1.html

    ホストマイコンには¥1万くらいの中古windowsタブレットがおススメです。

    • たなかまさゆき より:

      RC-S620SよりUSB接続のPaSoRiの方がなにかと使いやすいんですよね、、、
      AndroidとかWindowsがやっぱり楽なんですよね、、、

      Web NFC APIもありますし(笑)

  2. そーたメイ より:

    失礼しました、私が使ったのはRC-S380でした。RC-S620S使うの面倒そうですね。