2021年6月7日月曜日

ESP32マイコンで USB接続の RFIDリーダを動かす

 前回のアレクサガジェットのときは、ESP32 マイコンと RFID リーダは Bluetooth の SPP で接続していました。ESP32 は Bluetooth も内蔵しているので、そのままで SPP や BLE のリーダを使うことが出来ます(通信仕様は調べる必要がありますが)。

その後いろいろありまして、今度は USB 接続のリーダを利用する必要が出てきました。もちろん ESP32 マイコンには USB ホストコネクタありませんので、USB ホストのモジュールを使う必要があります。

モジュールはいくつかあるようなんですが、スイッチサイエンスさんにM5Stack用のシールドがありましたのでこれなら情報もそれなりにありますし何とかなるだろうと思って使ってみることにしました。

USB Host Shield for M5Stack

回路図とにらめっこしながら作成したのがこれ。

プログラムはライブラリの USB_Host_Shield_2.0 がそのまま使えるということでサンプルプログラムの USBFTDILoopback を使います(つないでいるUSBのリーダがFTDIなので。このリーダはSPPだけでなく、USB接続して仮想COMポートで制御できます)。このサンプルでは特定のデータを送信して受信するのを繰り返すようになっています。そこで送信するデータを下記のリーダのバージョン取得コマンドに書き換えておきます(65行目)。

char strbuf[] = "~rv\r\n";

早速動かしてみると、動いてはいるようですがコマンドを投げているような気配はありません。何が起きているのかわからないのでデバッグモードにしてデバッグ出力するようにします。settings.h の42行目あたりの次の値を0から1に変更すればいいようです。

/* Set this to 1 to activate serial debugging */
#define ENABLE_UHS_DEBUGGING 1

これで動かしてみると、

FTDI Init
FTDI Init: Product not supported
Expected VID:00000403
Found VID:0403
Expected PID:6001
Found PID:6015

このような表示でました。どうも PID が合ってないようです。ということでソース側のPIDを変更します(cdcftdi.h の29行目あたり)。

もう1回動かします。

FTDI Init
Addr:01
NC:01
Conf.Val: 01
Iface Num: 00
Alt.Set: 00
Endpoint descriptor:
Length: 07
Type: 05
Address: 81
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
Conf.Val: 01
Iface Num: 00
Alt.Set: 00
Endpoint descriptor:
Length: 07
Type: 05
Address: 02
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
NumEP:03
Conf:01
baud_value:001A
baud_index:0000
FTDI configured
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2
.~Rv0000bl-7.2.6.2

キター!リーダからバージョン情報のリプライが来ています。これで ESP32 マイコンからUSB接続のリーダが利用できるようになりました。


0 件のコメント:

コメントを投稿