紙の名刺を交換するとき、いつどこで交換したかを知りたくなることはありませんか?
今回は、名刺を受け取った人が下の動画のような感じでスマホを名刺にあてると、いつどこで受け取ったのかを確認できるしくみを作ってみました。
名刺交換したときに日時と場所を書き込んでおくと便利かもしれない pic.twitter.com/IeSOMWFlDg
— ミクミンP/Kazuhiro Sasao (@ksasao) December 11, 2022
しくみ
名刺の裏にあらかじめRFIDタグを貼っておきます。オレンジ色のデバイス(M5StickC Plus2とUnit RFID2)で RFIDタグに NDEF(NFC Data Exchange Format)に従ってURLを書き込んでおくと、対応するスマートフォンをかざすだけで、ブラウザが起動しそのURLにアクセスできます。Android や iPhone はこのフォーマットに対応しているので、追加のアプリをインストールすることなく内容を確認できます。

URLに時刻や位置情報を含めておき、その内容に応じて表示内容を変えるようなWebページを用意しておけば、サーバー側でデータを保持する必要はなくなります。例えば、
https://ksasao.github.io/MomentStack/?p=%4035%2C135.%2C15z&t=2025-12-18%2012%3A34%3Cbr%3EHello
のようなURLを渡すとこのような感じで表示するものを作ればOKです。

名刺交換では、GPSの電波が入りにくかったり、メッセージも固定で十分であることが多いので、あらかじめ位置情報とメッセージ(例えばイベント名など)はスマートフォンで設定できるようにしました。一方、交換した時刻はデバイスが持っている RTC (Real Time Clock) の値を参照して、交換した時刻を反映できるようにしています。
位置情報とメッセージの書き換え
以下のような仕組みでデバイスとスマートフォンを接続し設定を書き換えられるようにしました。
- スマートフォンのテザリングを有効にし、デバイスからスマートフォンにWi-Fi接続する
- デバイス上のボタンを押すとデバイスの画面に設定用のQRコードが表示される。そのQRコードをスマートフォンで読み取るとブラウザが開き、設定画面が表示される
- 設定を行いUpdateボタンを押すとデバイスの設定が書き換えられる
表示用のファイルと設定用のファイルは同じもので、引数でモードを切り替えられるようにしています。なお、ブラウザ上で現在地を取得できるようにするためには、localhostもしくは https の Webサイトにファイルを配置する必要があるため、次のようなトリッキーなことをしています。
- デバイスでQRコードを表示するタイミングで、デバイス側でWebサーバーを起動しそのローカルIPアドレスを引数に含めた外部のHTTPSサーバー上のURLを発行
- ブラウザ上でUpdateボタンを押すと、ローカルIPアドレスに向かってデータをPOST
- デバイス側のWebサーバーはPOSTされたデータを受け取り、本体の設定情報を更新した後、外部のHTTPSサーバーのURLにリダイレクト
今回使ったデバイスではHTTPSサーバーを立てることはリソース的に困難なためこのような仕組みになっています。
ソースコード
HTTPSサーバーに配置する index.html と、M5StickCPlus2 に書き込む Arduino IDE 向けの RFID2_URL_Writer_StickCPlus2.ino があります。Apache-2.0 license です。
https://github.com/ksasao/MomentStack
用意するもの
- M5StickC Plus2 x 1
- M5Stack用WS1850S搭載 RFID 2ユニット x 1
- StickC Bridge x 1 ← なくても可ですが配線がスッキリします
- NFCタグ NFC215 ← 504バイトと容量の大きいタグです
- 名刺
利用方法
M5StickC Plus2とM5Stack用WS1850S搭載 RFID 2ユニットを付属のケーブルまたはStickC Bridgeで接続した後、Arduino IDE を利用し、M5StickC Plus2 に RFID2_URL_Writer_StickCPlus2.ino を書き込みます。この際、以下の ssid と password はご自分のテザリング環境に合わせて修正してください。サーバー上には情報を保持しない(できない)構成のため、kConfigPageUrl の URLは変更せず使っていただいても問題ありません(著者は利用状況を把握できません)。docs/index.html を他のWebサーバーに配置した場合にはそのURLに修正してください。
const char* ssid = "your-ssid";
const char* password = "your-password";
const char* kConfigPageUrl = "https://ksasao.github.io/MomentStack/";
