ラズベリーパイの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って、かなり遅いですね。
こんなものかも知れませんし、私にどこか間違いがあるのかも知れません。
終わり