前回、指紋認証モジュールを動かしましたがデフォルトの状態ではpython2で動いていました。
LED制御の前に、実装時にはpython3で動かしたいのでなんとかならないかと力技ですがパッケージをまるっとコピーしてみました。
中身がシリアル通信だけなのでまあ問題ないだろうと踏んで・・・
sudo cp -r /usr/lib/python2.7/dist-packages/pyfingerprint /usr/lib/python3/dist-packages/
実行
sudo python3 /usr/share/doc/python-fingerprint/examples/example_index.py
これですんなり動きました。
さて、指紋センサーのDY50は電源をつけると緑のLEDが点灯します。
指紋を読み取っていてもいなくても点灯しっぱなしです。しかも結構明るい!
LEDは省エネというもののこれではLEDの寿命が心配になりますし、屋外で使うとなると夜には目立ちすぎです。
この動画は読み取り完了時にLEDは消えてますよね、もともとそういう仕様?どうなってるんだろ?
今回の目標はこの明るすぎるLEDを消すことです。
おそらく同じ種類のモジュールと思われるコマンド一覧表を発見!
http://www.kyohritsu.jp/eclib/OTHER/DATASHEET/SENSOR/sen308fsm13sp.pdf
データシート
https://cdn-shop.adafruit.com/datasheets/ZFM+user+manualV15.pdf
これによると電源投入時の初期化に500msかかるそうですからできるだけ物理的に電源遮断はしたくありません。
読んでもLEDの制御に関する記述は無さそうです。
色々ググってもなかなかそれらしき記述がなくて最終的には物理的に電源遮断でLEDをOFFにする方向で考えないと駄目か・・・と諦めかけていましたが、このデータシートに
https://www.velleman.eu/downloads/29/infosheets/vma329_datasheet.pdf
このような記述を発見しました。
OpenLED,CloseLEDですと??
説明にはバックライトをOpenするのとCloseするとあります。バックライト?じゃないし・・点灯消灯ってOpen,Closeなんて表記するんだっけ???
そもそも写ってるモジュールの形が違うっぽい・・・
・・・なんか違う気がするけど試しにpyfingerprintライブラリにこのアドレスナンバーを移植してみました。
/usr/lib/python3/dist-packages/pyfingerprint/pyfingerprint.py
の変数宣言に
##LED
FINGERPRINT_CLOSELED = 0x51
FINGERPRINT_OPENLED = 0x50
と追記し、クラスの中に
def led_off(self):
packetPayload = (
FINGERPRINT_CLOSELED,
)
self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
receivedPacket = self.__readPacket()
def led_on(self):
packetPayload = (
FINGERPRINT_OPENLED,
)
self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
receivedPacket = self.__readPacket()
と追記(self.__readPacket()は使ってないけど入れとかないとエラーが出ます。)
で、サンプルの
/usr/share/doc/python-fingerprint/examples/example_index.py
をコピペ改造して
/usr/share/doc/python-fingerprint/examples/example_led_on_off.py
を作成
1が入力されたらアドレスナンバー50をシリアルで送信、0だと51を送信するというだけです。
実行!
なんと!ダメ元でしたが大成功!です。^^;まじか・・・
ということで前回のタッチセンサーとこのLED制御を組み合わせると「タッチされた時だけLEDを点灯させて読み取る」ということが出来るようになりますね。
他にもシステムのエラー時に点滅させたり割と自由に制御可能になります。
次回はタッチセンサーと組み合わせます。