問題だらけ。。。

色々な覚書(まとまっていないもの多数)

ラズパイでPC/SC仕様対応のカードリーダーを使う方法

まずPC/SCとは?

正式にはPersonal Computer/Smart Card
Windows環境でICカードを利用するための標準アプリケーションインターフェース仕様のこと。

なぜラズパイでPC/SC対応のカードリーダーを使う?

SonyPasoriという、ラズパイに簡単に繋げられてサンプルのたくさん転がっているカードリーダーがあるが、 いかんせん反応が良くない。
ある調査で見つけた反応の良いカードリーダーがPC/SC仕様だった為に必要となった。

ラズパイをPC/SC仕様対応にするために必要なもの

pcsc_liteというパッケージが必要らしく、これで低レベルのAPIやコマンドは提供される。 pythonの実装は、以下の2つを見つけた。

1. python-pcsc_liteパッケージ

これははMac OS Xだとバグがあり、ビルドできないらしい。 Windows, Linux, Max OS Xで汎用的に使うにはpyscardライブラリを使う方が良いとのこと。

2. pyscardパッケージ

こっちの方がドキュメントが充実していて、使いやすそう(直感)。

今回はpyscardライブラリを使用する方向に決定。

※ 単にPC/SC仕様カードリーダーがラズパイで動くかだけを確認するなら、pcsc_liteパッケージとPCSC Toolsを入れてコマンド実行すればよい。(参考1)
ちなみに参考内にあるlibusb++というパッケージは存在しないと言われインストール出来ないが、実行に問題はなかった。

ラズパイへのpyscardインストール方法

1. 必要なライブラリをインストール

sudo apt install python3-pyscard pcscd libacsccid1

2. Info.plistに使用するカードリーダーの情報を追加

2-1. Info.plistの場所を探す

sudo find / -name Info.plist

2-2. 使用するカードリーダーの情報を取得

lsusbコマンドで機器のベンダーIDと製品IDが分かるのでそれを取得。

2-3. Info.plistに機器のベンダーID、製品ID、名称(自由でOK)を追加

【記入例】
<key> ifdVendorID </key>
  <array>
      …
      <string> 0x0001 </string>
  </array>
<key> ifdProductID </key> 
  <array>
      …
      <string> 0x0001 </string>
  </array>
 <key > ifdFriendlyName </key>
  <array>
      …
      <string> HogeHogeReader </string>
  </array>

参考サイト

【参考1】 www.mutek.com 【参考2】 qiita.com

Actuonix リニアアクチュエータを使う

とりあえず、リニアアクチュエータと制御基板が必要。

 

Actuonix L16アクチュエータ 50mm 150:1 6V RC Controll

https://www.robotshop.com/jp/ja/actuonix-l16-actuator-50mm-1501-6v-rc-control.html

 

Actuonix リニアアクチュエータ制御基板

https://www.robotshop.com/jp/ja/actuonix-linear-actuator-control-board.html

 

動かすには、ロボットショップのHPよりLAC設定ソフトウェアが必要らしい。

 

1.Actuonixリニアアクチュエータのコントロールの種類

 

以下の3つがある。

P: Potentiometer Feedback
S: Limit Switches
R: RC Linear Servo

 

RシリーズはRCサーボモーターと同じく、PWM(パルス幅変調)で制御できるので

上記のアクチュエータ制御基板は必要なかったな。。。

Pシリーズのポテンショメータフィードバックなら必要だったんだけど。

 

ちなみにポテンショメータフィードバックの制御方法は?

 

 

2.電圧差をどうするか?

 

RaspberryPiの出力電圧はMax5Vだが、リニアアクチュエータの必要電圧は

6~12Vである。

零電にPWMの章があったと思うから要参照。

https://tech-blog.cerevo.com/adventcalendar2016/advent20/

 

 

 

 

 

 

USBへ送られている信号をロジックアナライザを使って解析する

今回はロジックアナライザとして、以下を使用する。

 

SODIAL(R)開発ボードUSB2.0 EZ-USB FX2LP CY7C68013A

https://www.amazon.co.jp/dp/B00OCEEIX0?tag=iotengineer22-22&linkCode=ogi&th=1&psc=1

 

アナライズソフトはsigrok pulseviewを使用する。

詳細は以下のサイトを参照。

https://tomosoft.jp/design/?p=6196

 

ここで問題。。。

pulseviewをインストールし、起動しようとしたら

"コンピューターにMSVCR100.dll がないため、プログラムを開始できません”と

エラー表示。

解決策は以下のサイト。

64bitの場合は、これのx64の方をインストール。

https://www.bayashitv.com/2017/08/msvcr100dllwindows10.html#toc_headline_1

 

 

ただ、起動してもサイトのような画面にならない。

おそらくドライバが正しくインストールされてないみたい。

 

以下の手順で、解決!

参考サイト

https://tomosoft.jp/design/?p=6196

 

Zadigを起動して、プログラムメニューから USBドライバインストール用プログラムのseirok->Zadigを起動してOptions->List All Devices を選択してチェックを入れます。

バイスリストの中から先ほど確認したデバイス名を選択します。
※ここを間違えると別のデバイスドライバを上書きしてしまうので注意して下さい。

測定の基本設定:チャンネル、サンプル数、サンプリング周波数、トリガ

 

以上で走らせることはできたけど、動作がおかしい。

サンプル:50Mでサンプリング周波数:12MHzで測定時間が70msで終わる。

 

別のページを参考にもう一度設定してみる。

http://star.gmobb.jp/koji/cgi/wiki.cgi?page=EZ%2DUSB%A5%ED%A5%B8%A5%C3%A5%AF%A5%A2%A5%CA%A5%E9%A5%A4%A5%B6%A1%BC

 

また一度これをやってみて、信号がちゃんととれるか確認するのがいいと思う。

https://misoji-engineer.com/archives/python-serial.html

 

Open CVを使ってみよう

前にインストールしたOpen CVを全然使ってなかったので

一度ちょいと触ってみる。

 

OpenCVをインストールしてみよう

https://news.mynavi.jp/article/zeropython-34/

 

Eclipseでcv2は走ったので、次はラズパイで挑戦。

きれいにエラー。。

以下対策

 

pythonOpenCVを使うときにエラーでハマったので解決策を書いておく

https://creepfablic.site/2020/04/10/python-opencv-error/

 

こんなエラー分かるかい!!(怒)

 

とりあえず、ラズパイでcv2は使えるようになったので次。

 

Raspberry PiOpenCVをインストールし、RasPi-CAMの画像をリアルタイムに顔認識

https://qiita.com/NaotakaSaito/items/f1f1548c8b760629cd26

 

RasPi-CAM用ライブラリのインストールがうまくいかない。

↓以下エラー↓

パッケージ libhighgui-dev は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
しかし、以下のパッケージが置き換えます:
libopencv-dev

パッケージ libcv-dev は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
しかし、以下のパッケージが置き換えます:
libopencv-dev

E: パッケージ 'libcv-dev' にはインストール候補がありません
E: パッケージ 'libhighgui-dev' にはインストール候補がありません

 

make: *** 'libraspicamcv.a' に必要なターゲット 'objs/RaspiCamControl.o' を make するルールがありません. 中止.

-bash: Makefile: コマンドが見つかりません

まぁ、最後のエラーは論外だがw

 

一文ずつ解読してくか。。。

 

Open CVチュートリアルはこちら

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_tutorials.html

 

Flaskとopencvの連携はこちら

https://qiita.com/Gyutan/items/1f81afacc7cac0b07526

 

ここなんかよさげ

https://qiita.com/MuAuan/items/92f3b1004cfde071add6

 

サーバーとリアルタイムで通信したい

画像認識ログインをするのに、いちいちsnapボタンを押すのは面倒。

リアルタイムで画像取得して、パターンマッピングにかけたい。

 

方法としては、以下の3つぐらいが思いつく。

 

1. websocketを使用してサーバー&クライアントを常時接続状態で画像処理

2. opencv.jsを使用してクライアント上で画像処理を完結

3. Ajaxを取り入れ、見た目だけリアルタイム処理にする。

(実際は定期的なサーバーポスト)

 

個人的には1.をやってみたいが、サーバーの負荷が心配。

 

ちなみに「WebSocket」は、 サーバー側とユーザー側を常時接続状態にしておいて双方向通信ができるようにする技術のこと。

参考は以下のサイト。

 

Flaskとwebsocketを使った簡易的なチャットを開発する

https://note.com/shimakaze_soft/n/n99b47eccd915

 

サーバーはFlaskで建てるつもり。

 

とりあえず、必要なパッケージをインストール。

・ Flask-sockets

・ gunicorn

・ gevent

・ gevent-websocket

 

よくわからんのもいるので、ちょいと調べる。

 

gunicornはUNIX 向けの Python WSGI HTTPサーバー。

なんかflaskとかが持ってる内部サーバーより動作が速いらしい。

(詳しくはまた別記事で...)

 

さらに、WSGI(Web Server Gateway Interface)とは、サーバーとWebアプリケーションをつなぐ共通のインターフェースをPythonで定義したもの。

 

gevent は libev を元にした並行ライブラリ。

 

socket(s)は察して。

 

上記のサイトで一通り組んだが一か所エラーが出たため修正。

 

server = WSGIServer(
host_port,
app,
handler_class=WebSocketHandler
)
server.serve_forever()

 

上記を

with make_server('localhost', 8080, app) as httpd:
print("Serving HTTP on port 8080...")
httpd.serve_forever()

と修正。

元々は

make_server('localhost', 8080, app, handler_class=WebSocketHandler)~

としていたが、一切動かなかったのでハンドラーをなくした。

これでうまくいくか!?

 

エラーなく走ったが、なぜかlocalhost:8080/にアクセスしても

接続されない。

 

 

 

 

JSで画面をコロコロ切り替える方法やら、レイアウトやら

CSS Grid Layout を極める!(基礎編)

https://qiita.com/kura07/items/e633b35e33e43240d363

 

ブラウザを自動的にリロードするいくつかの方法

https://www.mitsue.co.jp/knowledge/blog/frontend/201806/29_1525.html

 

 JavaScriptで画面表示をパカパカ切り替えるボタン

http://www.02320.net/tech/clickable-switch-javascript/

 

Javascriptのタイマー処理 setIntervalとsetTimeout

https://qiita.com/chihiro/items/b105a901bbfd6c5b483c

Git(Github)を使ってプロジェクトを共有する

家のEclipseと会社のEclipseでプロジェクトを共有したい。

欲をいうと、RaspberryPiでも共有したい。

共有にはGit(Github)を使おうと思う。

 

以下のように段階を追って実験。

 

1.家のEclipseGithubの連携

2.会社のEclipseからGithubにアクセスし、リポジトリを取得

3.会社のEclipseからpushして、家のEclipseリポジトリ取得する

4.RasbperryPiのGitでGithubからリポジトリを取得し、変更を加えpushする

 

まずはGitとは何か知らないと始まらないため以下説明サイト

https://qiita.com/nnahito/items/e546b27f73e7be131d4e

 

また、githubのアカウント作成も済ませておくこと。

やり方は以下を参照

https://qiita.com/kooohei/items/361da3c9dbb6e0c7946b

 

1.家のEclipseGithubの連携

 

1-1. EclipseにEGitをインストールする

https://www.blog.danishi.net/2019/04/30/post-866/

このサイトにEclipseを用いてのステージ⇒コミット⇒プッシュまでの手順も

書かれている。

 

【キーワード】

・Gitステージング

・ステージ

・コミット

・(ブランチの)プッシュ

 

1-2.GitHubEclipseの連携

https://qiita.com/komikcomik/items/207794a332aa581c22d4

 

問題なく完了!

 

2.会社のEclipseからGithubにアクセスし、リポジトリを取得

 

一部既存のプロジェクトを使ったが、これも問題なく完了。

会社のPCからプッシュまで完了。

 

4.RasbperryPiのGitでGithubからリポジトリを取得し、変更を加えpushする

 

(もしラズパイにgitが入ってない場合は、インストールすること。詳細はググれ。)

 

以下の記事を参照

https://takashin10mura.blogspot.com/2015/03/raspberrypigit.html

 

これの「2.SSHの鍵の設定」と「3.SSHで接続してみる。」を飛ばし設定

 

Githubからのリポジトリ取得&変更を加えpushまで完了。

 

【キーワード】

・git config --global user.name(もしくはuser.email) "~"

・git clone "~"

・git add "~"

・git commit -m "~"

・git push

 

基本的なことは問題なかったので、実践として

今までvimで書いていたラズパイ内のプログラムをGithubにpushして

Eclipseで編集し、再度pushしてみる。

 

1.Github上で空のリポジトリを作成。

2.ラズパイ側で空のリポジトリをクローン(git clone)し、そこに既存のファイルを

追加(git add)。そして再度push。

 

3.Eclipseへ再度pushしたリポジトリをクローン

 

この時Eclipseプロジェクト形式になっていない為、リポジトリ右クリックし

「プロジェクトをインポート」を実施。

これで、pydevパースペクティブに表示されるようになる。

 

ただ、一個問題が。

pydevパースペクティブからpydevモジュールを追加しようとすると、

ソースフォルダも何もかも空で、何も作れない。

 

ここらはちょっと調査要。