🗂

ESP32-WROOM-32 開発ボードでRC-S620 FeliCaリーダを使用する

2022/07/10に公開

回路を作る

使用したもの

下の写真のように配線した。

画像のピッチ変換基板の左側からピンを数えていくと、以下の表のように結線した。

ピッチ変換基板 ESP32ボード
1 5V
2 17
3 16
4 GND

注意点としてはフラットケーブルの向きを正しく合わせること。青い端子部分が写真のように見えるように嵌め込む。本体側はフラットケーブルを入れにくいが、爪を使って青い端子部分を横から押すことで一応入れられる。私はケーブルの向きで長い時間を無駄にした。
LEDは面倒なので抵抗を繋げずに17番ピンとGNDに繋いだ。本当は抵抗を直列に繋いだ方が良い。LEDが壊れるから。

Arduino IDEでESP32のボードを使用できるようにする

Arduino IDEを用いてESP32に書き込むので、そのための設定をやっていない場合は、事前に
こちらの記事の通りIDEのセットアップを行う。
Arduino IDEで書き込める準備ができたらOK。

Sonyからライブラリを入手する

arduino-RCS620SというライブラリをSonyが提供しているので、こちらをダウンロードし、Arduino>libraries直下に保存する。

arduino-RCS620Sライブラリの修正

arduino-RCS620SはArduino Uno用に作られたライブラリなので、ESP32で使用するために修正を行う。
まず、Arduino用のライブラリが古いままなので書き換える。

- #include "Wprogram.h"
+ #include "Arduino.h"

次にESP32-WROOM-32 開発ボードで使用するシリアルに合わせて4箇所のSerialを修正する。
今回は3つあるシリアルポートSerial,Serial1,Serial2の内、Serial2を使用するように修正する。SerialはPCとの通信用として使用するため、Serial1は謎の挙動をするためSerial2を選択した。
以下が修正箇所。

- Serial.write(data, len);
+ Serial2.write(data, len);
- if (Serial.available() > 0) {
+ if (Serial2.available() > 0) {
-           data[nread] = Serial.read();
+           data[nread] = Serial2.read();
- Serial.flush();
+ Serial2.flush();

サンプルスケッチを動かしてみる

Arduino>libraries>arduino-RCS620S>examples>FelicaPush>FeliCaPush.pdeをArduinoIDEで開いて別名をつけて保存する。
ライブラリの修正で行なったように使用するシリアルを修正する。
SerialはPCとの通信(今回は使用していない)、Serial2はリーダーとの通信に使用する。
以下はsetup関数の修正箇所。loop関数は何も変更していない。

void setup()
{
  int ret;

  digitalWrite(LED_PIN, LOW);
  pinMode(LED_PIN, OUTPUT);
  
-   Serial.begin(115200);
+   Serial.begin(9600);
+   Serial2.begin(115200);
  
  ret = rcs620s.initDevice();
  while (!ret) {}
}

書き込んで動作を確認

書き込みが終わると1秒に1回17番ピンに繋いだ緑色のLEDが点灯する。Suicaカードをかざすと2秒に1回消灯するような周期での点灯に変化する。
とりあえずSuicaをかざしている状態を認識できるようになった。mobile Suicaも問題なく認識できる。Apple Watch、iPhoneのWalletが動いてないと反応してくれなかったのはなぜでしょう。エクスプレスカードに設定しているのに、、、

総括

今回ESP32のボードを使用したのはリーダーの要求するシリアル通信速度が115200と非常に早く、ハードウェアシリアルが必要だったためだ。Arduino Unoには1つのハードウェアシリアルしかない。これを使用すると、Arduino IDEからの書き込み時にリーダーを取り外す必要があるという手間が生じたため、どうせなら価格の安いESP32を使ってみようということで試してみた。結果としては問題なく動作させることができた。ここまでで5500円くらい使ってるので、市販のリーダーは妥当な値段なのかもしれない。

Discussion