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接続のリーダが利用できるようになりました。


2021年6月1日火曜日

RFID対応の Alexaガジェットを作る

 MANICAモバイルのゲートを作るというのを以前やったんですが、これをちゃんと作りたいということで何で作ろうかと考えたんですが、やっぱり手頃なのがなくてそういえばアレクサとか Google Nest とか最近どうなってるんだろうと思ったら、アレクサのガジェットが作れるようになっていました。

詳細はこちらに詳しく記載されておりますので参照くださいませ。

ESP32をAlexa Gadgets Toolkitデバイスにしよう

RFIDリーダとガジェットを直接接続するのは無理ですが、ESP32とRFIDリーダを接続すればガジェットとして使えそうです。ちなみにガジェット自体は上記リンクの内容で問題なく動いたんですが、なぜかスキル側でエンドポイントの取得が全然できなくて一旦諦めたんですが数日後にやってみたらあっさり取得できたので進めることができました。

こんな構成になります。

   アレクサとESP32はBLE、ESP32とRFIDリーダはSPPで接続します。

まずは家の中で使う想定で、これを使ってカギとかサイフとかを探せるようにしてみたいと思います。

・・・


というわけで作成してみたんですが、実用レベルには至らなそうな結果になってしまいました。

私「アレクサ、ICタグでカギを探して。」

アレクサ「わかりました。」 ここでリーダが自動で読み取りを開始する

アレクサ「ありませんね」

アレクサ「ありませんね」

アレクサ「反応あり」 (タグが読めた)

アレクサ「反応あり」

アレクサ「近い」 (RSSIが大きくなった)

アレクサ「近い」

アレクサ「そこ!」 (RSSIがさらに大きくなった)

アレクサ「そこ!」

私「あった」

アレクサ「よかったですね!」 ここでリーダの読み取りは停止

という動きになるんですが、なんともリアルタイム性が無いので探しづらいです(笑

ESP32側ではリアルタイムに判定できるんですが、その結果をガジェットで上げるとクラウドのスキルまでいって、そこから話すことばを選んでアレクサに降りてきてようやく話すという感じなので判定からアレクサが喋るまでどうしてもラグが出来てしまいます。

アレクサは言葉のやり取りをする前提なのでリアルタイム性を求めるのは難しいかもしれません。何かもうひと工夫必要ですね。


2021年4月28日水曜日

インターネット共有を使って、VPN経由で通信してみる

 前回、Windows PC上でWi-Fi Directを使って、VPN経由で通信してみました。今回はmacOS上でインターネット共有を使って、VPN経由で通信してみようと思います。短いです。RFID関係ありません。

使ったもの

  • MacBook Pro macOS Big Sur
  • iPhone 7

手順

まず、VPN接続を設定します。設定し、接続が完了するとこんな風に表示されると思います。




次にシステム環境設定から共有を開きます。ここで、共有する接続経路に接続中のVPNを選択します。相手のコンピュータでのポートは今回はUSBケーブルで接続しているので、iPhone USBを選択します。この状態でインターネット共有にチェックを入れると、ダイアログが表示されiPhoneからVPN経由で通信が行えるようになります。設定済みの画面はこんな感じです。



まとめ

Windowsと比べると、端末との通信方式が色々選べるところが違うようです。MacでWi-Fi経由でVPN接続しておけば、試してないですが、有線LANで接続した機器がVPN経由で通信できるようになると思います。あとは機器やiPhoneごとにVPN接続する必要がなくなるので、VPN資源の削減になりそうです。

2021年4月1日木曜日

EPCの謎に迫る その4

 このシリーズもかなり間が空いてしまいました。前回の「EPCの謎に迫る その3」は2016年ですから何と5年も! お久しぶりです。大変恐縮でございます。

しかしだからといって謎が無いわけではありません。いっぱいあります。今回は謎の多いマスクについて迫りたいと思います。

マスク機能は標準で付いてる機能で、例えばEPCがXXXXで始まるものだけ応答させるとかそんな風に使います。わけのわからないタグがいっぱいあるところで、必要なタグだけ読みたいという感じですね。もちろん全部読んじゃって、受け取ったあとでソフトウェア側で無視するということもできますがタグがワサワサあるところでは使った方がいいんじゃないかと思われます。

マスク機能がどのように働いているのかは結構謎だったりしますよね。しかも結構複雑だったりします。

例えばこれ









RF-BlasterというUHFリーダのデモ用アプリでマスクの設定をしようとするとこんな画面が出てきます。Bank とか Offset とか Mask とかは何となくわかりますが、Selection Flag とか Action とか、は?って言うのが出てきます。Action に至っては A / B とか Not / A とかおいおーい!って感じの選択を迫られるわけです。

タグは2つのフラグを持っています。1つは Inventoriedフラグと呼ばれるもので、AまたはBの状態を持ちます。もう1つは SLフラグと呼ばれるもので、セットまたはリセットの状態を持ちます。

この2つのフラグ、動作的にはすごく似ていて同じでもいいんじゃないかという気もしますがいちおう分かれているようです。

リーダがタグを読み取るとき、SDKとかでは Inventory コマンド一発とかで読取りしますが、実際は Select コマンドを投げてから読取りをしています。この Select コマンドのときに上のフラグを操作して、読取りの際に特定のフラグのものだけ読み取るという動作になっています。

Inventoriedフラグはインベントリのときに利用して、SLフラグをマスクの用途で利用するという棲み分けになっているようです。

そんなわけでマスクの動作とは簡単に言うと、Select で対象のタグの SLフラグをセットの状態にする→インベントリで SLフラグがセットされたものだけを読み取るという流れになります。

じゃぁこの Action は何なんだということになるわけですが、Selectコマンド時に各タグが自分のフラグをどう変更するかの指示になってます。まず / で左と右に別れますが、これは左が「マスクにヒットするタグ」で右が「マスクにヒットしないタグ」の動作になります。Aは Inventoriedフラグだったら A にして、SLフラグだったらセットにします(Inventoried と SL のどっちを変えるかは一番上の Target で指定します)。Bは Inventoriedフラグは B にして SLフラグはリセットにします。Not は何もしない、Negate はフラグを反転します。

通常は A / B でいいと思いますが、他の設定がどんな使い方を想定しているのか大変気になるところでもあります。

マスクなので SLフラグだけ変えればいいと思うのですが、Inventoriedフラグも変えることができるのでこれはいったい何に使うのかという妄想が膨らみますねー。謎です。


2021年2月2日火曜日

One Drive上にExcelToolのファイルを保存できるようにしてみた

棚卸パッケージをOne Driveの設定されたPCにインストールして使おうとしたところ、問題が起こったので、調べてみました。


問題点

  • デスクトップ上の「MANICA EXCEL TOOL」のショートカットを開くと、「MANICAExcelTool.xltx [読み取り専用]」として開かれる


  • 保存したxlsxファイルを開こうとすると、「場所が信頼できる場所の一覧に含まれていないため~」というエラーダイアログが表示される


使ったもの

  • 棚卸パッケージ Ver. 2.5.0
  • One DriveのセットアップされたWindows 10 PC
  • Excel 2019


解消方法

デスクトップなど、One Drive配下に置いたファイルを一度開いてください。「Microsoft Office ドキュメントのカスタマイズ」というダイアログが表示されたら、OKボタンを押してください。

ファイルの「最近使ったファイル」のところに、こんな感じで、上で開いたファイルが表示されていると思います。右クリックして「パスをクリップボードにコピー」してください。



「その他...」の「オプション」をクリックしてください。

左の列で「トラストセンター」を選び、右にある「トラストセンターの設定」をクリックしてください。(セキュリティセンターという名前になっているかもしれません)


左の列で「信頼できる場所」選んで、「自分のネットワーク上にある信頼できる場所を許可する(推奨しません)」にチェックしてください。「新しい場所の追加」ボタンをクリックしてください。

パスのところに先ほどクリップボードにコピーした内容をペーストしてください。その際、「https://d.docs.live.net/XXXXXXX/」の後ろは消してしまってください。「この場所のサブフォルダーも信頼する」にチェックを入れてください。

あとは、OKを押していっていただき、ダイアログをすべて閉じたら、一度Excelをすべて終了し、再度開いてみてください。ショートカットを開いて、[読み取り専用]となってしまう件も、エラーダイアログが出て機能が使えない件も解消されると思います。