Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。

前回では、mono(c#)でGPIOから矩形波を読み込んでみました。

今回は、mono(C#)とPythonで比較してみます。


Arduinoから矩形波を出力しラズパイのGPIOで読み込みます。

Pin.No 名称1 用途 利用 IN/OUT Arduino Pin 周波数
16 GPIO23 GPIO23 パルス1 IN 13 5Hz
18 GPIO24 GPIO24 パルス2 IN 12 50Hz
20 GND GND GND GND
22 GPIO25 GPIO25 パルス3 IN 11 500Hz

Pythonのバージョンは、3.5.0  monoはWindows10のVisualStudio Communicationで、.Net4.5.2コンパイルしてみます。 ラズパイは、800MHzで動かしています。

GPIO23,24,25を連続で1秒間に何回くらいループするかを見てみます。

Python3.5.0
Wiribpi2
Python3.5.0
Rpi.GPIO
Python2.7.10
Wiringpi2
Python2.7.10
Rpi.GPIO
mono
.Net4.5.2
62,650回 58,500回 104,000回 94,750回 88,150回

Python3よりはmonoの方が4割くらい早いですね。でもPython2にはかないません。
もう少し、monoが早いかと思っていましたがそれほどではありません。

以下 サンプルプログラムです。

 


第 1回 Raspberry Pi 2 の初期設定をしてみる-1
第 2回 Raspberry Pi 2 の初期設定をしてみる-2
第 3回 Raspberry Pi 2 の初期設定をしてみる-3
第 4回 Raspberry Pi 2 にWifiの設定をする
第 5回 Raspberry Pi 2 不要サービス停止
第 6回 Raspberry Pi 2 RAMディスクの設定
第 7回 Raspberry Pi 2 コンソールの設定
第 8回 Raspberry Pi 2 にウォッチドッグタイマーを導入する
第 9回 Raspberry Pi 2 でPythonの設定をする。
第10回 Raspberry Pi 2 でSambaの設定をする。
第11回 Windows10でPythonの開発環境を構築する。
第12回 Raspberry Pi 2のPython3でGPIOのパルスを取得する。
第13回 Raspberry Pi 2のPythonでGPIOを調べてみる。
第14回 Raspberry Pi 2のPythonでGPIOの割り込み処理をする。
第15回 Raspberry Pi 2のPython3でI2Cを設定する。
第16回 Raspberry Pi 2のPython3で加速度センサーを動かす。
第17回 Raspberry Pi 2にmonoをインストールしてC#を利用する。
第18回 Raspberry Pi 2にgoをインストールしてみる。
第19回 Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。
第20回 Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。

Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。

前回では、ラズパイにGoogleのgoをインストールしました。
今回は、Pythonと比較するためにmono(c#)でGPIOから矩形波を取得してみます。


Pythonで取得した時と同じように、Arduinoから矩形波を出力しラズパイのGPIOで受けます。

Pin.No 名称1 用途 利用 IN/OUT Arduino Pin 周波数
16 GPIO23 GPIO23 パルス1 IN 13 5Hz
18 GPIO24 GPIO24 パルス2 IN 12 50Hz
20 GND GND GND GND
22 GPIO25 GPIO25 パルス3 IN 11 500Hz

IDEは、前にインストールした VisulaStudio 2015 community を利用します。
GPIOの取得用ライブラリーは、NuGetから[Raspberry.IO.GeneralPurpose]をインストールして利用します。
125
プロジェクト作成後、「プロジェクト」-「NuGetパッケージの管理」で、検索に[Raspberry]と入力します。
インストール後の参照設定は以下のようになります。
126
Pythonで作成した時と同じような感じでプログラムを作成してみます。Wait用の[Thread.sleep]入れずに、CPUをぶん回します。

正確な時間計測がほしいのですが、[DateTime]を利用してみます。
ビルドは、VS上でそのままコンパイルします。monoは、PC上でコンパイルが可能です。
コンパイルしたプログラムをフォルダーごと、そのままラズパイにコピーします。

127

不要なファイルはありますが、ま~良しとして、 exeファイルを起動します。

128

矩形波の、HIGH/LOWの両方を取得していますので、カウント値は2倍になっています。
パルス取得ループ回数、5Hz取得、50Hz取得、500Hz取得です。

当然、シングルCPUが100%の負荷でぶん回っています。

monoは、PC上でビルドできるのが楽ですね。


 

利用したライブラリーの[Raspberry# System]のマニュアルを見て、割り込み処理が可能か調べてみます。

ホームページのRaspberry.IO.GeneralPurpose.GpioConnectionSettingsを見てみると、[DefaultPollInterval]の項目があって、標準で50msと書かれています。Raspberry.IO.GeneralPurpose.GpioConnectionのマニュアルでは、[PinStatusChanged]の項目があるのですが、githubでダウンロードできるサンプルプログラムを見てみると、まずポーリングのタイミング設定してからイベントで、ステータスチェンジをつかんでいるようで、最小の間隔が、1msでは少し足りないかなと思う次第です。ま、高精度タイマーを利用して自分で作れば良いのですが、ラズパイのmonoでは、なかなか思うように動いてくれません。

次回は、速度の比較をしてみます。


第 1回 Raspberry Pi 2 の初期設定をしてみる-1
第 2回 Raspberry Pi 2 の初期設定をしてみる-2
第 3回 Raspberry Pi 2 の初期設定をしてみる-3
第 4回 Raspberry Pi 2 にWifiの設定をする
第 5回 Raspberry Pi 2 不要サービス停止
第 6回 Raspberry Pi 2 RAMディスクの設定
第 7回 Raspberry Pi 2 コンソールの設定
第 8回 Raspberry Pi 2 にウォッチドッグタイマーを導入する
第 9回 Raspberry Pi 2 でPythonの設定をする。
第10回 Raspberry Pi 2 でSambaの設定をする。
第11回 Windows10でPythonの開発環境を構築する。
第12回 Raspberry Pi 2のPython3でGPIOのパルスを取得する。
第13回 Raspberry Pi 2のPythonでGPIOを調べてみる。
第14回 Raspberry Pi 2のPythonでGPIOの割り込み処理をする。
第15回 Raspberry Pi 2のPython3でI2Cを設定する。
第16回 Raspberry Pi 2のPython3で加速度センサーを動かす。
第17回 Raspberry Pi 2にmonoをインストールしてC#を利用する。
第18回 Raspberry Pi 2にgoをインストールしてみる。
第19回 Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。
第20回 Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。

Raspberry Pi 2にgoをインストールしてみる。

前回では、ラズパイにmonoをインストールしました。
今回は、Googleのgoをインストールしてみます。並列処理に強いということで期待しています。


まずは、[apt-get]でインストールしてみます。

以下の画面が表示されますので、そのまま[OK]でenterしてインストールを続けます。
119

インストール後、バージョンを確認します。

120
Ver.1.0.2です。最新版はVer1.5ですので、面白くないので最新版を手動でインストールします。
ここを参考にしました。

build中は、4つのCPUを気持ちよく使ってくれます。一時間ぐらいはかかるでしょう。

122

PATHにgoのフォルダーを登録します。$HOMEに置いておくのも嫌なので、[/opt]にでも移動しましょう。PATHは、zshrcを利用しているので $HOME/.zshrc を書き換えます。

シェルを再起動後、バージョンを確認します。

123
Ver. 1.5.1になっています。

動かしてみます。

124

はい、動きました。

次回は、monoで、GPIOを取得してみます。

第 1回 Raspberry Pi 2 の初期設定をしてみる-1
第 2回 Raspberry Pi 2 の初期設定をしてみる-2
第 3回 Raspberry Pi 2 の初期設定をしてみる-3
第 4回 Raspberry Pi 2 にWifiの設定をする
第 5回 Raspberry Pi 2 不要サービス停止
第 6回 Raspberry Pi 2 RAMディスクの設定
第 7回 Raspberry Pi 2 コンソールの設定
第 8回 Raspberry Pi 2 にウォッチドッグタイマーを導入する
第 9回 Raspberry Pi 2 でPythonの設定をする。
第10回 Raspberry Pi 2 でSambaの設定をする。
第11回 Windows10でPythonの開発環境を構築する。
第12回 Raspberry Pi 2のPython3でGPIOのパルスを取得する。
第13回 Raspberry Pi 2のPythonでGPIOを調べてみる。
第14回 Raspberry Pi 2のPythonでGPIOの割り込み処理をする。
第15回 Raspberry Pi 2のPython3でI2Cを設定する。
第16回 Raspberry Pi 2のPython3で加速度センサーを動かす。
第17回 Raspberry Pi 2にmonoをインストールしてC#を利用する。
第18回 Raspberry Pi 2にgoをインストールしてみる。
第19回 Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。
第20回 Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。

Raspberry Pi 2にmonoをインストールしてC#を利用する。

前回では、ラズパイに加速度センサーをとりつけてみました。
今回は、Raspberry Pi 2にmonoを導入して、C#を利用できるようにしてみます。


これまでは、Pythonでプログラムを組んできましたが、monoをインストールしてC#でGPIOを利用したプログラムを組む準備をします。

こちらを参考にしました。

mono自体は、[apt-get]でインストール可能です。

最初に公開キーを入れて、Monoのリポジトリを追加して、UPDATEした後に、monoをインストールします。これだけでOKです。

バージョンを確認します。

115
Ver.4.0.4が導入されたようです。


最新のバージョンを調べてみます。

116

Ver 4.2.1.60があるようですので、手動でインストールしてみます。

monoのインストール用フォルダーを作成して、最新版をダウンロード・展開して、インストールします。すごい時間がかかります。3時間ぐらいかかります。

インストールが終わったら、再起動後バージョンを確認してみます。
117
Ver. 4.2.1がインストールされました。

簡単なプログラムをコンパイルしてみます。

118

こんな感じです。

次回は、Googleのgoをインストールしてみます。

第 1回 Raspberry Pi 2 の初期設定をしてみる-1
第 2回 Raspberry Pi 2 の初期設定をしてみる-2
第 3回 Raspberry Pi 2 の初期設定をしてみる-3
第 4回 Raspberry Pi 2 にWifiの設定をする
第 5回 Raspberry Pi 2 不要サービス停止
第 6回 Raspberry Pi 2 RAMディスクの設定
第 7回 Raspberry Pi 2 コンソールの設定
第 8回 Raspberry Pi 2 にウォッチドッグタイマーを導入する
第 9回 Raspberry Pi 2 でPythonの設定をする。
第10回 Raspberry Pi 2 でSambaの設定をする。
第11回 Windows10でPythonの開発環境を構築する。
第12回 Raspberry Pi 2のPython3でGPIOのパルスを取得する。
第13回 Raspberry Pi 2のPythonでGPIOを調べてみる。
第14回 Raspberry Pi 2のPythonでGPIOの割り込み処理をする。
第15回 Raspberry Pi 2のPython3でI2Cを設定する。
第16回 Raspberry Pi 2のPython3で加速度センサーを動かす。
第17回 Raspberry Pi 2にmonoをインストールしてC#を利用する。
第18回 Raspberry Pi 2にgoをインストールしてみる。
第19回 Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。
第20回 Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。