はじめに
Raspberry PiでFeliCaのidmを読みたかったのですが、
手元のPaSoRiはlibpafeの未対応のRC-S380でした。
なのでFelicaモジュールからidmを読み込むようにしました。
この記事では次のようなことをしています。
- Raspberry Piを使います
- OSはRaspbianを使います
- FelicaモジュールはRC-S620Sを使用します
- Arduino UnoをRC-S620Sのドライバ代わりに使用します
- Raspberry Piでidmを読めるようにすることが目標です
- 値の読み出しのみでWebに連携するなどは行なっていません
FeliCa リーダー・ライター RC-S620S
ArduinoでFeliCaを読めるようになるモジュールです。
サンプルコードは何故かArduinoのD0(RX)とD1(TX)に接続していて、UARTが塞がってしまっています。
また接続先をSoftwareSerialに書き換えると動かなかったのでハードウェア的に罠が多そうです。
さらにArduino Leonardoではサンプルコードは動作しませんでした。
かなり癖のあるモジュールのようです。
サンプルコードを書き換えれば直接Raspberry Piからでも動かせそうですが、
Arduino Unoを間に挟んだほうが無難そうです。
(サンプルコードを書き換えたものはライセンス的に引っかかって公開できなさそう)
参考サイト
アプローチと配線
RC-S620SとArduino Unoはサンプルコードで指定されている通りに接続します。
Arduino UnoとRaspberry PiはSoftwareSerialで接続します。
Arduino Unoには弄ったサンプルコードを入れます。Push処理を消して、読み取ったidmをSoftwareSerialに出力させるように変えます。
Raspberry PiのGPIOのUARTにArduino UnoのSoftwareSerialに指定したピンを接続します。
Raspberry Piの設定
RaspbianのUARTは標準でシリアルコンソールに設定されているため、そのままでは普通のUARTとして使用できません。
設定を書き換える必要があります。
/boot/cmdline.txtの修正
次のコマンドで
$ sudo vi /boot/cmdline.txt
次のように書き換えます。
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
↓
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
/etc/inittabの修正
次のコマンドで
$ sudo nano /etc/inittab
次の行をコメントアウトします。
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
参考サイト
動作確認
$ cu -s 9600 -l /dev/ttyAMA0
Connected.
01290001xxxxxxxx ←タッチすると読み込まれたカードのidmが表示される
01120212xxxxxxxx
01160500xxxxxxxx
01100A10xxxxxxxx
おわりに
できたといっていいのか怪しいですが、Raspberry Piでidmが読めました。
正直libpafeに対応したPaSoRiを買ってきたほうが早いような気がします。
間にArduinoを挟まずにできたらもう少しスッキリするので、その辺りは今後の課題ということにします。