fumiLab

fumimakerが作ったもの、やったことについてのつらつら書いていきます。

Windows10でPython2.7を起動するとMicrosoftStoreが起動してしまう件について

問題

Windows10でPython2をインスコして使おうと思ったら,なぜかMicrosoftStoreが起動してPython2.7が起動しなかった.

f:id:fumimaker:20200222163351p:plain
何食わぬ顔で起動するStore

解決策

環境変数のmicrosoftStoreの部分を削除すれば起動するようになる.May2019のWindowsアップデートによってpythonと入力するとMicrosoftStoreが起動するように変更されているためである.

Python2.7をインストール

  1. ここからPython2.7のインストーラーをダウンロード

www.python.org

  1. ウィザード通り進めていくとインストール完了 f:id:fumimaker:20200222163452p:plain

  2. 環境変数設定を開く f:id:fumimaker:20200222163436p:plain

  3. ユーザー環境変数のPathを選択して編集をクリック f:id:fumimaker:20200222163443p:plain

  4. Pythonをインストールしたパスを新規から追加.C:\Python27 f:id:fumimaker:20200222163432p:plain

  5. pipが入ってるパスも新規から追加.C:\Python27\Scripts

普通はこれでOK.コマンドプロンプトを開いてpythonと入力... python

は? f:id:fumimaker:20200222163351p:plain

は??

f:id:fumimaker:20200222163351p:plain
やぁ!

原因調査

www.atmarkit.co.jp

この記事によると

通常のPythonのインストールと同様、IDLE(統合開発環境)やpip(パッケージ管理システム)も同時にインストールされる。

 この仕組みは簡単で、May 2019 Updateでは「python.exe」というMicrosoft StoreのPython 3.7配布ページを開く専用コマンドがプリインストールされているのだ。そのためコマンドプロンプトで「python」と入力して、[Enter]キーを押すと、以下のコマンドが実行され、Microsoft Storeが起動し、Python 3.7の画面が表示されるようになっている。

どうやら環境変数pythonを入力するとMicrosoftStoreが開くように書いてあるらしい.Microsoftくんさぁ...

f:id:fumimaker:20200222163456p:plain
選択されてるやつが原因
ということで一番上のmicrosoftStoreという文字列がある奴を削除.悪は滅びた.再度コマンドプロンプトpythonを入力.無事に起動.pipも認識されているようです.いやーよかったよかった.
f:id:fumimaker:20200222163501p:plain
削除後

もう一度python

f:id:fumimaker:20200222163504p:plain
ugoita
pippipも問題なく動いてるみたい.よかった.

結論

Microsoftの罠には気をつけよう!

pyenvでpython2系をインストールしようとするとMissin OpenSSL lib?と言われてしまう問題

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

f:id:fumimaker:20200218203208p:plain Pyenvで2系がインスコできない問題.**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?のようにエラーが出ます. バージョン管理ツールであるpyenv.最近Python2系をインストールしようとした時にエラーが出てつまずいたので同じ現象に悩んでいる人がいたら少しでも力になれば幸いです.

環境

状況

3系はインストール成功するのに2系だけインストールできない.

pyenvで2系をインストールしようとする

pyenv install 2.7.10

pyenv install 2.7.10

python-build: use openssl from homebrew

python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200217193102.1168

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200217193102.1168.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?と言われてしまっているようですね.wikiを見ろと言われているので見てみます.

github.com

トライ1

このように書いてあるので試してみます.

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.4.3

ダメでした.同じようなエラーが出ていますね.

...中略
rm -f /Users/fumi/.pyenv/versions/2.7.10/bin/python-config

(cd /Users/fumi/.pyenv/versions/2.7.10/bin; ln -s python2-config python-config)

test -d /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig || /usr/bin/install -c -d -m 755 /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig

rm -f /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig/python2.pc

(cd /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig; ln -s python-2.7.pc python2.pc)

rm -f /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig/python.pc

(cd /Users/fumi/.pyenv/versions/2.7.10/lib/pkgconfig; ln -s python2.pc python.pc)

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python2.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.7.1 python2.1)

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218103636.15430

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218103636.15430.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

この記事を見ると大丈夫そうなのにできない.環境の問題かなぁ.

qiita.com

トライ2

様々な記事を調べてみるとOpenSSL関連がおかしそう.バージョンが合わないとか,パスが通ってないとかかな.ということでOpenSSLのバージョンを調べてみる.面倒だったのでもう一度Brew Installしてみた.

brew install openssl

brew install openssl

Updating Homebrew...

==> **Auto-updated Homebrew!**

Updated 1 tap (homebrew/core).

==> **New Formulae**

libcbor

==> **Updated Formulae**

balena-cli         groovysdk         paket

bitlbee          gsettings-desktop-schemas pandoc-citeproc

cassandra         gsoap           plantuml

cfn-lint          helmfile          root

clhep           libstfl          ruby

dialog           macvim           taskell

freeciv          manticoresearch      vim

frotz           mgba            visp

git-gui          mikutter          weechat

golang-migrate       mit-scheme         wpscan

gradle           mmctl           zola

groovy           netpbm

==> **Deleted Formulae**

gh



Warning: openssl@1.1 1.1.1d is already installed and up-to-date

To reinstall 1.1.1d, run `brew reinstall openssl@1.1`

バージョンはOpenSSL1.1らしい.何やらパスのことを言っている.

トライ3

一応パスを通してもう一度やってみた.echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc自分の環境ではzshを使ってるのでzshrcです.

pyenv install 2.7.10                         ✘ 1 

python-build: use openssl from homebrew

python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

**ERROR**: The Python ssl extension was not compiled. Missing the OpenSSL lib?



Please consult to the Wiki page to fix the problem.

https://github.com/pyenv/pyenv/wiki/Common-build-problems





**BUILD FAILED** (OS X 10.14.6 using python-build 1.2.16-4-g14871354)



Inspect or clean up the working tree at /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218105508.40215

Results logged to /var/folders/qx/_h8xypcx0kb8sj9q76rbwn2r0000gn/T/python-build.20200218105508.40215.log



Last 10 log lines:

rm -f /Users/fumi/.pyenv/versions/2.7.10/share/man/man1/python.1

(cd /Users/fumi/.pyenv/versions/2.7.10/share/man/man1; ln -s python2.1 python.1)

if test "xno" != "xno" ; then \

​     case no in \

​         upgrade) ensurepip="--upgrade" ;; \

​         install|*) ensurepip="" ;; \

​     esac; \

​      ./python.exe -E -m ensurepip \

​         $ensurepip --root=/ ; \

​ fi

ダメです.同じ現象ですね.

しばらく調べているとこのような記事を発見した. OpenSSL1.1で3系を動かしている.2系はもしかしてダメなのか?

qiita.com

結論(トライ4)

github.com

このような記事を見つけました.OpenSSL1.1はダメらしい.OpenSSL1.0を入れればいいようです.pyenvは賢いので必要なものがないと必要なものを入れるようになってる.opensslをUninstallしてpyenvでインストールします.

OpenSSLを1.0にしてみます.

brew uninstall openssl

依存があってダメだよって言われましたが強制的に消します.

brew uninstall --ignore-dependencies openssl

そしてpyenvを潜影蛇手

pyenv install 2.7.10

pyenv install 2.7.10

Downloading openssl-1.0.2k.tar.gz...

-> https://pyenv.github.io/pythons/6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0

Installing openssl-1.0.2k...

Installed openssl-1.0.2k to /Users/fumi/.pyenv/versions/2.7.10



python-build: use readline from homebrew

Downloading Python-2.7.10.tar.xz...

-> https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

Installing Python-2.7.10...

patching file ./Lib/site.py

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

Installed Python-2.7.10 to /Users/fumi/.pyenv/versions/2.7.10

これのおかげでできた.pyenvって必要なやつ勝手に入れてくれるんすねー,すごい.

結論として,OpenSSLが1.0じゃないといけないところ,1.1がインスコされていたためだったっぽい.2系はOpenSSL1.0なんだね.ちなみに3系はそのまま入ったので1.1でいいみたい.

後付け

OpenSSL1.0のままPython3をインストールしようとするとこのようになります.

pyenv install 3.8.1

Downloading openssl-1.1.0j.tar.gz...

-> https://www.openssl.org/source/openssl-1.1.0j.tar.gz

Installing openssl-1.1.0j...

Installed openssl-1.1.0j to /Users/fumi/.pyenv/versions/3.8.1



python-build: use readline from homebrew

Downloading Python-3.8.1.tar.xz...

-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz

Installing Python-3.8.1...

python-build: use readline from homebrew

python-build: use zlib from xcode sdk

Installed Python-3.8.1 to /Users/fumi/.pyenv/versions/3.8.1

無事にインスコ成功しますね.

このようにpyenvが自動でOpenSSL1.1にアップデートしてくれます.ありがたい.OpenSSL1.1じゃないとPython3系の動作で不具合が出るのでPython2のインストールが終わったらOpenSSLを新しくしてあげましょう.なお.OpenSSL1.1でもPython2は正常に動作します.インストールだけがダメみたい.

ちょっとややこしいけどPythonは環境構築が一番難しいってそれ言われてるから.

Zybo Z7-20でPcam 5Cを動かしたらIPが更新されなくてハマった

今回はちょっとニッチな内容です.この記事では,Digilentが公開しているZybo Z7 Pcam 5C Demoを実際に動かして,簡易的な画像処理を付けたしてみます.当方初心者なので勉強しながら備忘録として書きます.間違ってたらごめんね.

この過程でDemoのIPを編集して機能を追加しますが,IPを編集して論理合成しても反映されない問題が発生したのでその記録を残します.

f:id:fumimaker:20200206000932j:plain
ZyboとPcam

FPGAとは

FPGAは回路記述を行うことで自由な動作を実現できる論理回路の塊みたいな感じです.

実行環境

  • Windows 10 Pro
  • Vivado 2017.4.1
    • 影響ないと思うけど4.1にアップデートしておきました.

使うもの

  • Digilent Zybo Z7-20
    • ZynqとArmが入ってる優れもの.最近のFPGAはPSも入ってるやつが流行ってるらしい.
  • Digient Pcam 5C
    • MIPI CSI-2インターフェイスで使えるカメラ.RaspiとかもCSIコネクタついてるので刺さると思う.(LinuxDriverにPcamのOV4650があったら動くと思う)
  • 5VACアダプタ
    • 最初これを忘れて動かなかった.USB給電では動かないので注意.1Aくらいあればなんでも大丈夫だと思います.自分は手持ちの3Aのやつを使いました.

DIGILENT zybo z7 : zynq-7000アーム/ FPGA Soc開発ボード Zybo Z7-20

DIGILENT zybo z7 : zynq-7000アーム/ FPGA Soc開発ボード Zybo Z7-20

  • 出版社/メーカー: Digilent
  • メディア: Personal Computers

秋月でカメラとZyboセットで安く売ってるのでこっちの方がいいかも. akizukidenshi.com

f:id:fumimaker:20200206000944j:plain
動かしている時の様子

動かし方

動いてる仕組みとかはとりあえず置いといてとりま動かしてみます.

0 Vivadoをインストール

FPGAに書き込んだり論理合成するIDEのVivadoをインストールしてください.今回は2017.4を選択しました.もう2017はversionsに表示されてないのでアーカイブをクリックして2017.4を選択します.Vivado Design Suite - HLx Edition - 2017.4 Full Product Installationってやつです.インストーラのダウンロードにはXilinxアカウントが必須なので持っていない人は作りましょう.

インストーラを開くとまたログインを求められますのでログインしてください.その後インストールするエディションを選択させられます.今回は無償版でも大丈夫なのでWebPack版を選択しました.

1 プロジェクトをクローンしてくる

ここから2017をダウンロードしてきてください.ZIPを解凍しておきましょう.

2 プロジェクトを生成する

いよいよVivadoを使った作業が始まります.ちょっとわかりにくいですが,このでもプロジェクトはプロジェクトファイルが最初から入っているわけではなく自分で作成する必要があります.でも大丈夫,一つのコマンドだけで作成できます.

Vivadoを開くと下にTCL Consoleというのがあると思います.これを使ってプロジェクトを作ります.

f:id:fumimaker:20200206001022p:plain
TCLコンソール

Type a tcl...っというところで自分が先ほど展開したデモプロジェクトの/projまで移動します.自分はCドライブ直下にGitHubフォルダを作ってそこに展開したので

cd C:/Github/Zybo_Pcam/Zybo-Z7-20-pcam-5c/proj

と入力しました.WindowsではディレクトリをC:\hoge\hugaというように表現しますが,TCLではLinuxMacのように/hoge/hugaと表現するので注意しましょう.要はバックスラッシュをスラッシュに置き換えて入力してください.

続いてプロジェクト生成を行います.

source ./create_project.tcl

と入力して実行します.しばらく待つとプロジェクトが作成されます.

3 論理合成する

プロジェクトができたらこのような画面になります.これがこれから死ぬほどみていく画面になります.

f:id:fumimaker:20200206001029p:plain
プロジェクトが生成されたところ

左のFlow Managerの一番下にあるGenerate Bitstreamをクリックします.このように聞かれますがYesをクリックしてください.

f:id:fumimaker:20200206001038p:plain
Yesをおす

次にこのようになります.これもデフォルトのままOKをクリックします.これで論理合成が始まります.右上のReadyがRunnig…となることがわかります.

JOB数は使用環境によって変わってくるので気にしないでください.論理合成は環境によって5分〜30分程度かかることがあります.コーヒーブレイクでもしてください.パワフルなPC欲しくなりますね?

f:id:fumimaker:20200206001045p:plain
OKで論理合成スタート

完了するとBitstream Successの表示がでます.ここでOKを押したくなりますが,Implementationは別にみたくないのでCancelで閉じます.

f:id:fumimaker:20200206001048p:plain
Cancelをおす

4 SDK

続いてSDKを起動します.ツールバーからFile-Export-Export Hardwareをクリック,Include BitstreamをチェックしてOKを押します.

続いて同じくFile-Launch SDKをクリックします.ダイアログはデフォルトのままOKを押します.立ち上がるとこんな感じ.

f:id:fumimaker:20200206001052p:plain
SDK外観

SDKのFileからImportをクリック,ダイアログではGeneral-Existing Projects…を選択してNEXTをクリック. f:id:fumimaker:20200206001101p:plain

ディレクトリBrowseしてデモプロジェクトを展開した場所の/sdkを選択してOKを押します.copy into wordspaceにチェックを入れてFinish.するとSDKのProject managerに/sdkがインポートされます.

f:id:fumimaker:20200206001104p:plain

5 Zyboに書き込む

ようやくZyboに書き込みます.ZyboにHDMIケーブルを接続,ACアダプタを接続,PCとUSB接続します.電源選択のジャンパはACAdapterにしておかないとUSB給電のままになってしまいます.

SDKのProgram FPGAをクリック,そのままOKで書き込みます.USB接続しておけば認識されます.

f:id:fumimaker:20200206001110p:plain
Program FPGA

次にProject managerのfsblを右クリックからrun asでlaunch on hardwareを選択します.書き込みが終わったら同様にcam_vdma_hdmiを右クリックからrun asでlaunch on hardwareを選択します.

これでPcamの映像がHDMI出力されるはずです.ちょっと色がおかしいかも.自分はセピア調っぽくでました.あとで色調調整しないとダメだね.露光もオーバー気味.

f:id:fumimaker:20200206000859j:plain
ちょっとセピアっぽい?

6 カスタムする

さてここまでは普通にdemoをやっただけなので誰でもできるはず.ここからが問題です.ここでは,簡易的なカラーキーができるように改造してみることにします.

カラーキーっていうのはある指定した色のみを見えなくすることで,背景を透過することができるものです.クロマキーとかルミナンスキーとか色々あります.ニコニコとかでBB素材(Blue Background)とかGB素材(Green Background)とかあるじゃないですか.ああいうやつですね.今回はデモを改造してクロマキーとは言わずとも,ある特定の色にオーバーライドして色をつけられるようにしてみます.

で,できたのがこちらです.(3分クッキング感)これは白っぽいところを赤く上書きして表示しています.露光オーバーのところが塗りつぶされてる感じですね.背景が若干抜けてるように見えるのでカラーキーということにしておいてください.

f:id:fumimaker:20200206000957j:plain
露光オーバーしてるところが赤くなっている

BayerToRGBをいじる

このようなカラーキーをやるためにはいろいろやり方が考えられますが,今回はUser IPの中のBayerToRGBを改造することにします.RTL Diagramでいうとこのハイライトされてるやつですね. f:id:fumimaker:20200206001113p:plain

まずProject ManagerにあるIP Catarogを開きます.Video&…のBayerToRGBを右クリックしEdit in Packagerを選択するともう一個Vivadoが開きます. f:id:fumimaker:20200206001118p:plain

開いたVivadoでAXI_BayerToRGB.vhdを開くとこのようになります.これがIPの本体ですね.ここで買いた内容が反映されるというわけです.

f:id:fumimaker:20200206001124p:plain

実際に編集しな内容はGithubにあげてあるのでみてください.制約ファイルの関係や自分は他にも機能を追加しているのでちょっとコードが違うかもしれないですが,やりたい機能を追加してみてください.

github.com

IPを編集しても反映されない問題について

ここでVivadoの罠があります.IPを編集して保存して論理合成してやったーできたーとそうやすやすといきません.このまま論理合成やってみるとIPで書いた内容が何も反映されません.なんで?

しばらく調べてみるとこのような記事を発見しました.なるほど,そのまま論理合成するだけでは前のファイルが使われてしまって書き換えたファイルが使われずダメらしい.ここで提案されているようにやってみます.

Package IPする

このステップが非常に重要で,Versionを書き換えることでVIvadoに別ファイルであることを認識させます.これを書き換えないとVIvadoはIPが編集されていようと更新しません.やばすぎる...

PackageIPタブに行ってVersionを適当に書き換えます.1.0だったので1.1にしておきました.

f:id:fumimaker:20200206001138p:plain
Versionを変える

そしてPorts and Interfacesの上の方にあるIP has been modifiedをクリックします.なんかクリックしてほしそうにしてるじゃん?クリックするとPackaging stepsがチェックになると思います.基本的にこのステップに沿ってやっていけばいいです. f:id:fumimaker:20200206001142p:plain

f:id:fumimaker:20200206001147p:plain
チェックになった

最後にreview and packageの下の方にあるPackage IPをクリックします.これでIP編集内容が反映されます.IP編集用のVivadoが閉じて元に戻りました.

IPを再生成する

そうすると戻った先の上にまたクリックしてほしそうな奴があるのでReport IP Stausをクリックします. f:id:fumimaker:20200206001153p:plain

するとさっき編集したIPをUpgradeしろってなるのでチェックされてることを確認してUpgradeをクリック.そうするとIPをGenerateするダイアログが出てくるのでクリック.これで再生成が行われます.

f:id:fumimaker:20200206001157p:plain f:id:fumimaker:20200206001202p:plain

再度Bitstreamを生成する

最初のようにFlow Navigaterから再度BitStreamを生成します.再生成したIPを使ってBitstreamが生成されます.

再度SDKで書き込む

最初のようにSDKFPGAに回路を書いて,run as からArmを動かします.これで反映される..はずです.

やっぱり反映されない場合

やっぱり反映されない場合もあります.実際自分がやっている中でも反映されないことがありました.辛い.こういう時は一度生成されたIPを編集してない奴した奴もろとも削除してやって全部再生成することで解決する場合があります.ただしこのやり方は全部消して最初からやり直すので生成に時間がかかります.

Sourcesのsystem.bdを右クリック,Reset Output Productsをクリックします.これで生成されたIPやらが全部消えます.

f:id:fumimaker:20200206001206p:plain
Reset

削除が全部終わったら再度system.dbを右クリック,generate output productをクリックします.これでもう一度全部再生成されます.とても時間がかかりますが,コーヒー飲みましょう.実機ではなくシュミレートする大事さがわかりますね.大掛かりな回路になると論理合成するだけで6時間くらいかかるんだとか.

Vivadoが落ちたりするかもしれないけどめげずに頑張りましょう.自分は1日に30回以上落としてました.IP再生成してる時に落ちると,最悪,変な状態で更新が止まってどうにもならなくなることがあるので定期的にGitなどにコミットしておきましょう,怖いぞ.(1敗)

余談ですが自分は仮想環境でWindowsを動かしています.仮想環境が正しくシャットダウンできず,再度起動しようとしたら仮想環境のディスクが壊れました.もちろんVivadoもろともWindowsごと飛びました.ホストはMacBookなのでTimeMachineで差分バックアップ毎日取ってたおかげで命拾いしました...Vivado2017 on Windows 10 on Parallels on MacBook Proは流石にやばい.

ちなみに壊れたのは発表4日前で流石に肝を冷やしました.仮想環境使ってる各位は気を気をつけましょう!!!コードはGitにあげる!バックアップは毎日とる!ハードウェアはサブ機を持つ!これだけでだいぶ心の余裕が違います.

論理合成

ResetしてGenerateした後は同様にBItstreamを生成してSDKFPGAに書き込んでArmを動かします.これで動くようになるはず.これは赤っぽいところを全部真っ赤に塗りつぶした奴.ちゃんと意図した動作になってますね.FPGAピクセルを受信すると同時に色が処理されるので遅延が0フレームです.これで世界最速のカラーキーシステムができました.やったね.

f:id:fumimaker:20200206000921j:plain
赤っぽいところを全部真っ赤に塗りつぶす

【Arduino】まだLチカで4行も書いてるの?1行でLチカを記述する

>>「まだLチカで4行も書いてるの?」<<

f:id:fumimaker:20200107172235j:plain
Arduino
 Arduinoに始まるプロトタイピングボードはハードウェアに近い部分を理解せずともやりたいことを書くだけで使えるため、現在では広く普及しています。思いついたらサッとカバンからArduinoを取り出してすぐに試せるのはとても魅力的です。ラピッドプロトタイピングなんて呼ばれたりもします。

 Arduinoなどのマイコンをいじる上で初心者上級者かかわらず必ずやることがあります。そう、Lチカですね。マイコンにLEDを接続し、点滅させることで正常にプログラムが動作することを確認します。Lチカができなければ回路がおかしい、プログラムが書き込めていないなど様々なことを探ることとなります。

 前、マックにいたら女子高生が「まだLチカで4行も使ってるの?あんなの1行でかけるじゃん」と言っていましたせんでした。

確かにONーwaitーOFFーwaitと馬鹿正直に書くのは少しスマートではないように見えます。ここで一つかっこよくLチカを書いてみようというわけです。…というのは言い訳でただの備忘録です。

なお、本稿ではArduino Unoを題材にして記述されています。

従来のLチカ

従来のLチカはこんな感じです。これはArduinoのサンプルスケッチBlinkです。

www.arduino.cc

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

LED_BUILTINはボードごとの内蔵LEDのマクロです。Unoの場合はD13なので13と書き換えても動作します。直接ポート書かなくても動くのすごいよね…。

このコードでも問題なく動作しますが、少し野暮ったい印象を受けませんか?もっとスマートに書いてみます。

ワンライナーでLチカ

Lチカをよりスマートに書くとこのようになります。

github.com

void setup(){
  pinMode(LED_BUILTIN, OUTPUT); //出力に設定
}

void loop(){
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //出力を反転
  delay(1000);  //1000ms遅延
}

はい、1行じゃないですねすみません。delayがある分行数が増えてしまいしました。点滅のロジックは1行だから許して

やっていることは大して難しくありません。digitalWriteの中でLEDの状態を読みとり、反転させたものをポートに出力することでLチカを実現しています。これ自体は普通に行われていることで、なんならdigitalWriteの中身でもポートのレジスタ反転してHIGHとLOWを切り替えていたりします。PICやAVRやっている人ならポート操作はお馴染みですね。(むしろポート操作を必要としないArduinoが特殊です)

まとめ

というかんじで、よりスマートなLチカを書いてみました。コーナーで差をつけたくなるのはオタクの心理なので仕方ない。他のArduino使いにLチカから差をつけろ!

今回はそんな感じです。

スタイリッシュ精密電動ドライバー:Xiaomi WOWSTICK 1F+を試す

お久しぶりです。fumiです。前回の記事を投稿してから1ヶ月経ちましたという通知が来て驚きました。最近時間が立つのが早くない...?学業の方が大変でしばらく記事を書くのをお休みしていました。ぼちぼち再開していこうと思います。

文字を書くリハビリということで誕生日プレゼントでいただいた良さげな精密電動ドライバについてレビューしてみようと思います。

f:id:fumimaker:20191208144019j:plain
WOWSTICK 1F+

かっこいい精密電動ドライバー。

いただいたのはXiomi WOWSTICK 1F+。とてもスタイリッシュな外観の小型の精密電動ドライバーです。金属製で細身、卓上におけるスタンドも付属しています。MicroUSBで充電可能で汎用性に優れます。 細身なのでペンケースに入れて持ち運ぶことも可能。専用の持ち運びケースもついてきます。 LEDを搭載し、暗い状況でも作業がしやすいです。

外観

外箱はこんな感じです。どことなくAppleを意識してるような感じですね。同じ中国のDJIもそうでしたがApple的な広告戦略を取っているところが多い気がしますね。

f:id:fumimaker:20191208150915j:plain
外箱

オープン

開けたところです。まずマグネットシート(?)、その下にドライバ本体やビット、アクセサリー類が入っていました。箱にイラストが添えられてて可愛い。

f:id:fumimaker:20191208150936j:plainf:id:fumimaker:20191208150946j:plainf:id:fumimaker:20191208150956j:plain
色々入ってる

本体

こちら本体です。ガンメタルって感じの渋い色です。MacBookのスペースグレーよりも濃い色合いです。金属製で冷たい。本体にはWOWSTICKの刻印がありました。サイドには回転ボタン、底部にはMicroUSBの充電口があります。充電中はLEDが光ります。

f:id:fumimaker:20191208151017j:plain
本体
f:id:fumimaker:20191208151007j:plain
刻印
f:id:fumimaker:20191208151028j:plain
充電

付属ビット

56本という大量の付属ビットがあります。円筒状のケースに入っており、本体の大きさと同じです。蓋を引っ張り出すことによりずるーっと出てきます。見たこともないようなビットもあり、これさえあれば何でもネジ締めできそうです。わかる範囲で入っているビットの種類を列挙します。

f:id:fumimaker:20191208151106j:plain
ビット

  • プラスビット
    • P0000
    • P000
    • P00
    • P0
    • P1
    • P2
  • プラスロングビット
    • P0
    • P1
  • マイナスビット
    • SL1.0
    • SL1.5
    • SL2.0
    • SL2.5
    • SL3.0
    • SL3.5
    • SL4.0
  • マイナスロングビット
    • SL2.0
  • 六角ビット
    • H0.7
    • H0.9
    • H1.3
    • H1.5
    • H2.0
    • H2.5
    • H3.0
    • H4.0
  • 六角ロングビット
    • H2.0
  • トルクスビット
    • T2
    • T3
    • T4
    • T5
    • T6
    • T7
    • T8
    • T9
    • T10
    • T15
    • T20
  • 星型(5)ビット
    • P2
    • P5
    • P6
  • Y型(3)ビット
    • Y0.6
    • Y1.0
    • Y2.0
    • Y2.5
    • Y3.0
  • 四角(4)ビット
    • SQ0 /
    • SQ1.0 /
    • SQ2.0
  • 三角ビット
    • 2.0 /
    • 2.3 /
    • 2.5 /
    • 3.0
  • U型ビット
    • U2.0 /
    • U2.6 /
    • U3.0
  • SIMカード用ピン0.8

その他アクセサリー

ビットと本体をしまうケース、マグネットが内蔵されたマット、吸盤などがあります。用途はよくわからん...

f:id:fumimaker:20191208151118j:plain
アクセサリー
f:id:fumimaker:20191208151204j:plainf:id:fumimaker:20191208151217j:plainf:id:fumimaker:20191208151238j:plain
f:id:fumimaker:20191208151153j:plain
こんな感じに入ります

早速使ってみる

早速使ってみました。今使っているMacBookのネジが今にも取れそうなくらい緩んでいたので早速ドライバを使って増し締めします。MacBookは星型ネジを採用しているため早速特殊ビットの出番です。 トルク感は特に問題ありません。精密ネジなので合わないビットを使わなければ舐めることはないと思います。LEDが光っていい感じ。

f:id:fumimaker:20191208151418j:plain
増し締め

まとめ

なかなかいい感じの精密電動ドライバだと思います。スタンドもついているので机の上に置いておくことにしました。結構ベタ誉めだったのでひとこと改善してほしい点をいうとすると、ビットのケースが開けづらい点ですね。黒いゴムを引っ張り出すのですが、これが少しやりづらくストレスになることがありました。また、付属ケースには本体+ビットセットが1本までしか入らないのでせっかくだったらビットセットが全部入るようにして欲しかった。(そうすると大きくなっちゃうから仕方なかったんだと思うけど)

f:id:fumimaker:20191208151250j:plain
結構便利
それでも家に1個あると非常に重宝するこのは間違いないです。100円の精密ドライバーを無限に買うよりはこれ一個あった方が...いいよね?

今日はそんな感じです。

Raspberry Piの電源は2.5A以上も必要なのか?

f:id:fumimaker:20191101203359j:plain

みんな大好きRaspi
 

https://www.amazon.co.jp/RASPBERRY-PI-TSI-PI018-Clear-Raspberry-Pi3-Model/dp/B01D1FR29M

今日の目次

っていうかそんなにパワフルな電源必要なの?

最近Raspiをよく使います。名刺サイズでLinuxが動き、GPIOも操作できて電子工作的なことも簡単にできてしまうとても便利なアイテムです。

Raspiを使う上で重要なのが電源問題。電源のせいでまともに起動しない、動作が不安定になることもしばしばあります。このため、2.5A以上供給できる電源を使うことが公式に推奨されています。

www.raspberrypi.org

実際に公式が販売しているRaspiセットに同梱されている電源アダプタも5V2.5A(?)のものです。

 

ここで、果たしてそんなに電源必要なのか疑問に思います。身の回りにUSB-MicroB 2.5Aなんて供給できる電源なんてそうそうありません。本当に必要であれば手軽にラズパイを動かすこともままならないかもしれません。

この記事ではRaspi3において、Stressコマンドを用いてCPUに負荷を与えた際に流れる電流を測定することで必要な電源の考察を行います。

 

 

そもそもUSBは電源を供給するものじゃない

 このブログを読んでいる人ならご存知かと思いますが、そもそもUSBは電源を供給するものではなく、通信をするための規格です。ユニバーサルシリアルバスの略でUSBです。だからたくさん電流を流すようにできてないんですね。

http://sdphca.ucsd.edu/lab_equip_manuals/usb_20.pdf

USBはエゴネーションをすることによって5V500mAの電流を供給することができます。実はVDDとGND繋げば電源が取れるという単純なものではないです。(この仕組みを無視して使って言う場合がさいきんではほとんどなわけです...)

USBの規格を使って、2007年に画策されて以来現在でもバリバリ使われているBatteryCharge、9V,12Vの電圧をかけて電力を稼いだQuick chargeや、最大100Wも供給できるPowerDeliveryなども最近は搭載されているデバイスも多いですね。

話は逸れましたが、USB-Cによって物理形状と規格が一致しないというケースがぐんぐん増えました。全部USB-Cって便利なように見えますが、一体どんな規格を使って何をしているのか理解しなければ思い通りに動かないケースが増えトラブルの原因になるのではないかと個人的に思っています。

さて、話を戻すとRaspiはMicroBコネクタで給電しています。回路図を見た限り、ただ電源供給のコネクタとしてUSBの形状を使っているだけでエゴネーションなどの正しい手続きは踏まれていないように見えます。(そもそも正しいことやってたら2.5Aも出ないはずなんですが..)

 

Raspiの回路

電源事情を語る上で欠かせないのがRaspiの回路図。どんな回路で電源を供給するのかみてみました。

https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3b_1p2_reduced.pdf

これを見てみるとヒューズがまず入っていて、DCDCで降圧して...なるほどこれは勉強になります。Arduinoなどもそうですが、オープンハードウェアのデバイスの回路をみることは非常に勉強になります。

実験

前置きが長くなりましたが、いよいよ実験していきます。Raspi3B+において、Stressコマンドを用いてCPUに負荷を与えた際に流れる電流を測定します。

Stressコマンドをインストールします。

sudo apt-get install stress

ストレスコマンドを実行するには以下を実行します。

sudo stress --cpu 4

測定には電流電圧チェッカーを用いました。一目で必要な情報が見えれて非常に便利です。ちょっと気になった時に使えるので一つ持ってて損ないですよ!

 また、電源供給には2種類のUSBChargerで検証しました。

1つ目の充電器はAppleの5W充電器です。皆さんも家に転がっていますね?1A給電ですがこれでも耐えれるのか検証します。

www.apple.com

 

2つ目の充電器はAnkerのPowerPort4です。2A出力が謳われている製品ですね。

 結果をいかに示します。

f:id:fumimaker:20191101135224p:plain

実験結果

Apple 5W USB充電器

平常時は0.2-0.3A、負荷時は0.5-0.7A、負荷+外部デバイス(バスパワーHDD)の場合は0.8A-1.0Aでした。(瞬間的に1Aを超えることもあった)

Appleはバッチリ電圧が5Vに張り付いており安定感抜群です。さすがAppleです。1Aしっかり出し切れているのはすごいです。大体のUSB充電器は表記されている電流出し切れないですので...ただし、1A出力時の出力電圧は4.9Vと約0.1Vの電圧降下が見られました。
定常時、負荷時では低電圧警告もなく全く問題ありませんでしたがHDD接続の突入電流で電圧が4.7V程度まで下がりましたが直ぐに回復しました。HDD接続時も低電圧警告は出ませんでした。

Anker Powerport4

Ankerは最初から電圧少し高めでいきなり5.1V出ていました。電流もしっかり吐き出せており、負荷時でも安定していました。HDD接続時では瞬間的に1.2A超えてきたこともありました。また、1A程度電流が流れていた際は電圧が5.2V程度となり若干のオーバーシュートが見られました。0.2Vであればギリギリ許容範囲内ですかね。

エクストラ実験

エクストラ実験としてバスパワーHDDとセルフパワーHDDを繋いでみました。

繋いだ瞬間、Appleの場合は低電圧警告が出て電流が1.1A, 電圧が4.3Vとなっていました。明らかにパワー不足ですね。

Ankerの場合は低電圧警告も出ず問題なく動作しました。電流は1.5A程度流れていました。負荷時と同様電圧は若干オーバーシュート気味でした。

 

考察

今回の実験では1A内しか観測できませんでしたが、Ankerについては瞬間的には2A近く行っていることも考えられます。HDDを繋いだ際には瞬間的に大電流が求められるため電圧が低下したと考えられます。シャント抵抗など使ってオシロでしっかり電流の監視をしたい。

また、ケーブルの抵抗値がバカにならないです。もし200mohrmあったら1A*0.2=0.2Vも電圧降下します。やっぱりUSBケーブルは粗悪なものや規格に沿わないものも存在するのでちゃんとパフォーマンスを求める、もしくは信頼性を求めるような場合はGPIOに直接電源を供給する方が良いと考えます。

今回はCPUと外部デバイスのみの検証でしたが、GPUを使うとさらに電流が増える可能性もあるのでGPUを使う場合は1A以上の電源が安心だと思います。

ただの簡易USBテスター使っての検証だったの測定誤差などあるかもしれません。少し適当な検証になってしまって反省。(深夜の1時くらいに突然思いついて実験やり始めたので許して)

結論

普通に使う場合はAppleの5W充電器でも十分だが、外部デバイスGPUを使う場合は2A以上供給する方が安心。また、USBは当たり外れが多いのでパフォーマンスをより求めるにはGPIOに直接電流を供給する方が良い。

 

今日はそんな感じです。

プライバシーポリシー

個人情報の保護について

https://fumimaker.hatenablog.com/」(以下、当サイト)を利用される方は、以下に記載する諸条件に同意したものとみなします。

個人情報の収集について

利用者は匿名のままで、当サイトを自由に閲覧する事ができます。お問合せ等、場合によっては、利用者の氏名やメールアドレスなどの個人情報の開示をお願いする事があります。しかし、利用者の個人情報を利用者の許可なく、当サイトから第三者へ開示・共有する事はありません。

広告の配信について

当サイトでは、Amazon.co.jpアソシエイトの広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 「Cookie」(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。ご了承ください。

ウェブサーバの記録

当サイトのウェブサーバは、利用者のコンピュータのIPアドレスを自動的に収集・記録しますが、これらは利用者個人を特定するものではありません。利用者が自ら個人情報を開示しない限り、利用者は匿名のままで、当サイトを自由に閲覧する事ができます。

免責事項

利用者は、当サイトを閲覧し、その内容を参照した事によって何かしらの損害を被った場合でも、当サイト管理者は責任を負いません。また、当サイトからリンクされた、当サイト以外のウェブサイトの内容やサービスに関して、当サイトの個人情報の保護についての諸条件は適用されません。 当サイト以外のウェブサイトの内容及び、個人情報の保護に関しても、当サイト管理者は責任を負いません。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。修正された最新のプライバシーポリシーは常に本ページにて開示されます。

初出掲載:2019年10月29日

運営者情報

運営者: fumi
HatenaId: fumimaker
Twitter: @fumi_maker
ブログURL: https://fumimaker.hatenablog.com/
お問い合わせはこちら