.NETからwiringPiを使えるWiringPi.Net

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

.NETからwiringPiを使えるWiringPi.Netというライブラリがある。

danriches/WiringPi.Net

このWiringPi.Netは最終コミットが約2年前でもうメンテナンスされていないのか1、今はいくつか問題があって使えない状態になっていた。

フォークして問題を修正したものを公開したので、これを使えばC#やF#からwiringPiを使える。

locatw/WiringPi.Net

ただ、今回は自分がRaspberry PiのPWMを使えるようにしただけなので他の問題もあるかもしれない。

使い方

フォーク元と同様にVisual StudioでビルドすればDLLが生成されるし、Ubuntuの場合はxbuildを使ってビルドできる。

あとはRaspberry PiにwiringPiをインストールした状態でWiringPi.Netを使ったアプリを実行すれば動く。

変更点

Releaseビルドのエラーの修正

プロジェクトファイルのReleaseビルドの設定でunsafeコードの許可が指定されていないのが原因でビルドエラーが発生していたので、許可する設定を追加した。

...
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <!-- 追加 -->
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

WiringPi.GPIOのメソッドがインポートする関数名の間違いの修正

WiringPi.GPIOクラスではDllImport属性を使ってwiringPiで定義されている関数を利用できるようにしている。

...
[DllImport("libwiringPi.so", EntryPoint = "pinModeGpio")]
public static extern void pinMode(int pin, int mode);
...

wiringPiでは関数名の末尾の"gpio"がついていない名前で関数が定義されていて、元の状態でビルドしてRaspberry Piで実行するとSystem.EntryPointNotFoundExceptionが発生する問題があった。

DllImport属性のEntryPointの値から末尾の"gpio"を取って正しく実行できるようにした。

PWMモードを表す定数の追加

wiringPiのPWM_MODE_MSとPWM_MODE_BALを表す定数を追加した。

namespace WiringPi
{
    ...
    public class PWM
    {
        public enum PWMMode
        {
            PWMModeMS = 0,
            PWMModeBal = 1
        }
    }
    ...
}

  1. issueは最近更新されていたのでもしかしたらメンテナンスが再開されるかもしれない。