SSブログ
前の10件 | -

Adafruit FT232H を使って python スクリプトで MCP27017 を使う

1. ここに書いた要領で anaconda に 32bit python2.7 を入れる
2. 販売元の解説通りドライバと Adafruit Python GPIO Library をインストール
3. ここにある接続で MCP23013 にLED、抵抗、電源等を接続
4. 販売元のi2cの解説を参考にしつつ、以下のように MCP23017 とつなぐ
- FT232H の D1 と D2 を接続し、 MCP23017 の SDA に接続
- さらに SDA に 4.7k ohm をつけて 5V につなぐ
- D0 を MCP23017 の SCL に接続
- 同じように D0 に 4.7k ohm をつけて 5V につなぐ
5. 次の python スクリプトで LED をつけてみる



Adafruit FT232H を anaconda で使う準備

Adafruit FT232H を見てやってみても import ftdi1 でエラーが出てしまった。
32bit 版の python 2.7 が必要だった(普通にインストールすると 64bit 版の python3.0 になっている)。

以下のコマンドで 32bit 版の 2.7 環境を作成


ついでに 64bit 版の 2.7 も作っておく



次回からは anaconda プロンプトを起動してから

で 32 bit の python 2.7 に切り替えられる

戻す時は



mac でシリアル接続

Windows では teraterm でシリアル接続をしていますが、
Mac ではどうするのか。調べると screen というターミナルの
アプリでやるみたい。

1. FTDI なんちゃらをUSBで接続
2. ls /dev/tty.usb* でデバイス列挙
私の場合は /dev/tty.usbserial-AL01O27E が見つかった
3. コマンドプロンプトで screen を起動
screen /dev/tty.usbserial-AL01O27E 115200

ここを参考にしました。

GR-KURUMIによる一緒に歌うチューニングメーター

16bitマイコンボードのGR-KURUMIで、自分の吹いた音を midi over ble で鳴らす電子工作です。自分の音ピッチがズレていても、midiの音は安定しているので、それに合わせて耳でチューニングするという物です。midiなので平均律ですが、そこは許して。

動画



回路図

ソースコード

FFTの練習 [C++]

FFT についてわかりやすいサイトA DFT and FFT TUTORIAL


FFT のバタフライダイアグラムのコードをみても、いまいち何をやって
いるのかわからない。なので、自分で書いてみました。
自分のコードとほかの人のコードはだいたい同じになったので、ここまで
やってやっと人のが読めそうな気がしてきました。手を動かすのは大事。

前述のサイトのバタフライダイアグラム をみながらコードにしてみました。
演算の中身はないです。画面に "回転因子はこれ" で "xとyをバタフライ"
というメッセージを出すだけ。

N=8 でのバタフライ演算(中身なし)のコード


output
0
twiddle(0, 2)
butterfly(0, 1)
2
twiddle(0, 2)
butterfly(2, 3)
4
twiddle(0, 2)
butterfly(4, 5)
6
twiddle(0, 2)
butterfly(6, 7)
0
twiddle(0, 4)
butterfly(0, 2)
twiddle(1, 4)
butterfly(1, 3)
4
twiddle(0, 4)
butterfly(4, 6)
twiddle(1, 4)
butterfly(5, 7)
0
twiddle(0, 8)
butterfly(0, 4)
twiddle(1, 8)
butterfly(1, 5)
twiddle(2, 8)
butterfly(2, 6)
twiddle(3, 8)
butterfly(3, 7)


VisualStudio2015 で glew-1.13.0 をビルド [C++]

1. glew のサイトからソースコード( glew-1.13.0.zip )をダウンロード
2. build\vc12\glew.sln を VisualStudio Community 2015 で開く
3. VC12 のソリューションなので変換
4. "VC++ コンパイラとライブラリをアップグレードします"ダイアログでOK
5. ビルド->バッチビルドを開いてすべてチェック
6. ビルド

であっさり完了。

bin, include, lib を置きたい場所にコピーすればOK

Hello wxWidgets

wxWidgets を VS2015 でビルドしましたが、ビルドできたか確認
するため、かつ1からお勉強するために、サンプルをビルドしました。

大量に Sample があって素晴らしいですが、 minimal という最小コード
っぽいのが入っていたのでこれを使いました。

1. VS2015 で minimal_vc9.vcxproj を開く
2. ビルド
3. 実行
4. ウインドウが出た!

hellowxwidgets.png

デフォルトでは構成が "Debug" になっていて、ビルドの設定は以下のように
なっていました。

Debug 構成

インクルードディレクトリ
.\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドデバッグ DLL(/MDd)

ライブラリディレクトリ
.\..\..\lib\vc_lib;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


Release 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッド DLL(/MD)

ライブラリディレクトリ
Debug 構成と同じ

追加の依存ファイル
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


DLL Debug 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドデバッグ DLL (/MDd)

ライブラリディレクトリ
.\..\..\lib\vc_dll;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


DLL Release 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドDLL(/MD)

ライブラリディレクトリ
.\..\..\lib\vc_dll;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


その他

DLL Debug でビルドした場合は、実行前に samples\minimal\vc_mswuddll に 上記 lib\vc_dll
ディレクトリから wxbase310ud_vc_custom.dll と wxmsw310ud_core_vc_custom.dl
を探してきてコピーする必要がありました。

インクルードディレクトリの samples は外してもビルド通りました。
ほかのサンプルでは使っているかもしれませんが、 miniumal では不要です。

追加の依存ファイルが大量なのと、プリプロセッサの設定が必要なのは
ハマりどころかもしれません。普通はインクルードとライブラリくらいしか設定しないので。

まとめ

自分でプロジェクトを作るときは次のように設定すればよい。

dll を使うとき

インクルード
- lib\vc_dll\mswud
- include
プリプロセッサ
__WXMSW__;_UNICODE;WXUSINGDLL
ライブラリパス
- lib\vc_dll
追加の依存ファイル
- デバッグ
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)

- リリース
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


static link するとき

インクルード
- lib\vc_lib\mswud
- include
プリプロセッサ
__WXMSW__;_UNICODE;
ライブラリパス
- lib\vc_lib
追加の依存ファイル
- 前述 dll を使うときと同じ


wxWidget を VS2015 でビルド [C++]

wxWidget を使ってみようと思いダウンロードすると VS2015 用の
プレビルドがなかったのでビルドしてみました。

まだ使っていないので、あっているかどうかわからないけど、ビルドは
通ったのでとりあえずメモ。 nmake のオプションは build\msw\config.vc
に説明が書いてあるのを参考にしました。

1. ソースコードダウンロード
git clone https://github.com/wxWidgets/wxWidgets.git

2. ビルドの設定が反映されるヘッダー?を作成
include/wx/msw/setup0.h を include/wx/msw/setup.h にリネーム

3. x86 版をビルド
VS2015 x86 Native Tools コマンドプロンプトで以下を実行



4. x64 版をビルド
VS2015 x64 Native Tools コマンドプロンプトで以下を実行


boost::property_tree の使い方メモ [C++]

Sony Camera Remote API の getEvent で取れる json のパースに
boost::property_tree を使うときに、いまいちよくわかってなかったので
メモ。

この api で返ってくる json は {{result:[{...},"null","",[...]}}
みたいなので、null になったり 空文字になったり状態によって変化する曲者。
なのでちゃんと処理しないと例外が出る。例外はデバッグのときに紛らわしい
ので、なるべく出さないようにしたいので、事前に判定したい。

ノードがあるかわからないときは optional で取得すれば例外を出さずに
判定できる。

ただの文字列("null" or "") か何か値が入っている ("{x:y}" or "[...]") かどうか
は child.size() をみればOK(たぶん)

code


output
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=2
----
e.first.data()=
e.second.data()=null
child.get_optional("")= null
child.size()=0
----
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=0
----
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=1
----


const array メンバの初期化 [C++]

メンバ関数のポインタを、配列でメンバ変数に持ちたい。
その配列は固定長なので const にしておきたい。
たまにしか使わないので、毎回つまづくからメモ。




前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。