FeliCaリーダー・ライターRC-S620SをM5StickC(ESP32)でGrove接続で使う

概要

去年に購入して、積んでいたシリーズです。M5StickCに接続してiPhoneのSuicaを読み取ってみました。

RC-S620Sとは?

FeliCaを開発したソニー株式会社が販売しているリーダー・ライターです。USB接続のものが主流ですが、組み込み系や電子工作用にシリアル接続ができるRC-S620Sが販売されています。

現状USB接続以外のNFCリーダーで、電波法的に確実にOKなのはこの機種ぐらいのはずです。上の写真の右側にある緑色の部分が本体で、鉄板の穴を使って固定できます。

[スイッチサイエンス] FeliCa RC-S620S ピッチ変換基板のセット(フラットケーブル付き)
スイッチサイエンス
¥550(2021/02/02 11:04時点)
ソニー株式会社の「FeliCa リーダー・ライター RC-S620S」をブレッドボードで使うためのピッチ変換基板と、FFC(0.5mm)6P(フラットケーブル)のセットです。

本体にはフラットケーブルなどの付属品はなにもありません。そのため上記にある変換基板とフラットケーブルのセットを購入しています。これはピンヘッダはついていませんので自分で取り付ける必要があります。この商品でなくても0.5mmの6ピンフラットケーブルに対応していれば利用できます。

変換基板の下は自作のGrove接続への変換基板になります。

上記を購入して利用しました。変換基板はこれ以外でも大丈夫ですが、まずはセットで購入したほうがいいと思います。

接続方法

M5StickC(ESP32)Grove Ship変換基板(RC-S620S)
GNDGNDGND
NCReserve
GNDGNDGND
GPIO33(RX)SIG2TXD
GPIO32(TX)SIG1RXD
5VVCCVDD

こんな感じに接続しています。今回はM5StickCのGrove端子で接続しています。UARTでの接続ですので端末側とRC-S620SでTXとRXがクロスで接続する必要があるので注意してください。

自作のGrove Shipは単にジャンパケーブルを使うのが面倒なので利用しているだけで、通常はブレッドボードにジャンパケーブルで結線をすれば問題ありません。個人的にはジャンパケーブル好きじゃないので非常に気に入っています。

ライブラリ

上記に紹介されているソニーが作成したArduino用純正ライブラリが存在しています。しかし10年以上前のライブラリで、Arduino UNO用に作られているのであまり使い勝手はよく有りません。とくにSerialを使ってRC-S620Sと接続をしているのでESP32では手を入れる必要があります。

そこで、Serialを指定できるようなに修正したものを上記に作ってみました。上記のライブラリをZIPでダウンロードするか、リリースにあるZIPファイルをArduino IDEでインストールすることで利用できるようになります。

スケッチ例

#include "RCS620S_ESP32.h"

RCS620S rcs620s(Serial1);

#define COMMAND_TIMEOUT  400
#define PUSH_TIMEOUT     2100
#define POLLING_INTERVAL 500

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200, SERIAL_8N1, 32, 33);
  delay(1000);

  int ret = rcs620s.initDevice();
  Serial.print("RCS620S Init = ");
  Serial.println(ret);
}

void loop() {
  // Polling
  rcs620s.timeout = COMMAND_TIMEOUT;
  int ret = rcs620s.polling();
  Serial.print("RCS620S polling = ");
  Serial.println(ret);
  if (ret) {
    Serial.print("idm = ");
    for (int i = 0; i < 8; i++) {
      Serial.print(rcs620s.idm[i], HEX);
    }
    Serial.println();

    Serial.print("pmm = ");
    for (int i = 0; i < 8; i++) {
      Serial.print(rcs620s.pmm[i], HEX);
    }
    Serial.println();
  }

  rcs620s.rfOff();
  delay(POLLING_INTERVAL);
}

ライブラリのスケッチ例にあるサンプルです。Serial1.begin()で接続しているPINを指定して初期化していますので、ここを書き換えることで他のボードでも利用可能だと思います。またM5StickCでも最新型の5V INが青いバージョンはM5.begin()を呼び出さないとGrove端子に5Vが出力されず、動作しませんので注意してください。

実行して、Suicaをリーダーに近づけるとIDが取得できるはずです。

まとめ

IDを取得するだけであれば比較的かんたんに利用できると思います。ただし、細かい処理を行おうとすると自分で資料を調べて確認する必要があるのでちょっと面倒ですね。整備されたライブラリがあればいいのですがそれなりの価格がするのと、日本以外ではあまり需要がない気もするので仕方ないですね。

コメント

タイトルとURLをコピーしました