ESP32-WROOM-32 開発ボードでRC-S620 FeliCaリーダを使用する
回路を作る
使用したもの
- FeliCa リーダー・ライター RC-S620S
- FeliCa RC-S620S/RC-S730 ピッチ変換基板のセット(フラットケーブル付き)
- ESP32-DevKitC-32E ESP32-WROOM-32E開発ボード 4MB
- 緑色LED
下の写真のように配線した。
画像のピッチ変換基板の左側からピンを数えていくと、以下の表のように結線した。
ピッチ変換基板 | 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