ラズベリーパイのGPIO応答速度を測定(.NET & C#編)
.NET Coreや.NET5はLinuxでも動きます。ですので.NET5 & C#でGPIOを動作させて応答速度を測定してみます。
まずはラズベリーパイに.NET5をインストールします。(以下は全てラズベリーパイ上で直接、実行しています)
| 1 | wget -O - https://raw.githubusercontent.com/pjgpetecodes/dotnet5pi/master/install.sh | sudo bash | 
.NETコンソールアプリを生成します。名前は私はとりあえず”iotest_net5″としました。
| 1 2 | pi@raspberrypi:~ $ dotnet new console -n iotest_net5 cd iotest_net5 | 
とりあえずbuildして走らせてみます。”run”でbuildしてrunします。

これはコンソールアプリを作ったときテンプレートアプリができてそれが実行されるからです。
以下がテンプレートアプリの”Program.cs”です。ちゃんと”Hello World!”してますね。
| 1 2 3 4 5 6 7 8 9 10 11 12 | using System; namespace iotest_net5 {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("Hello World!");         }     } } | 
GitHubにLチカの例やLチカの例で使われているSystem.Device.Gpioの説明を参考にGPIO操作コードを書いていきます。コードは”Progrm.cs”をそっくり書き換えます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | using System; using System.Device.Gpio; int SW_IN = 18; int SW_OUT = 17; using GpioController controller = new (); controller.OpenPin(SW_IN, PinMode.Input); controller.OpenPin(SW_OUT, PinMode.Output); Console.WriteLine("iotest start."); try {     while(true)     {         if(controller.Read(SW_IN) == PinValue.Low)         {             controller.Write(SW_OUT, PinValue.Low);         }         else         {             controller.Write(SW_OUT, PinValue.High);         }     } } finally {     controller.ClosePin(SW_IN);     controller.ClosePin(SW_OUT); } | 
上記コードはtry..finally構文にしてfinallyでClosePinを追加しています。参考サイトは
です。
このコードを実行する前に、”System.Device.Gpio”パッケージをプロジェクトに追加します。
| 1 | pi@raspberrypi:~/iotest_net5 $ dotnet add package System.Device.Gpio --version 1.4.0 | 
iotest_net5を”build”、”run”して前回に使ったnucleoボードで応答速度を測定してみます。
| 1 | pi@raspberrypi:~ /iotest_net5 $ dotnet run | 

ありゃ、約1178us=1.178msって、かなり遅いですね。
こんなものかも知れませんし、私にどこか間違いがあるのかも知れません。
終わり



