Raspberry Pi C#でLチカ


##マイクロソフト製のGPIOライブラリを使う

https://github.com/dotnet/iot

呼び出し方

```
using System.Device.Gpio;
```

GitにC#で書かれたLチカサンプルソースがあるので利用します。

[サンプルソース](https://github.com/dotnet/iot/blob/master/samples/README.md)
##RaspberryPiにNetCore 3.1をインストール

LinuxのArmのところをクリックします
<img width="454" alt="スクリーンショット 2020-06-01 17.27.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/0ecd6c35-9e5e-0e62-4700-e387e722421b.png">

[.net core sdk DownLoadPage](https://dotnet.microsoft.com/download/dotnet-core/3.1)

クリックした次に画面でパスをコピペできるのでパスを取得します
<img width="500" alt="スクリーンショット 2020-06-01 17.13.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/aa56bac8-0d4a-e420-159e-ee3393abe720.png">

```
$ wget パス
```

[.NET Core SDK をインストールする](https://docs.microsoft.com/ja-jp/dotnet/core/install/sdk?pivots=os-linux)

```
$ mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.1.100-linux-x64.tar.gz -C $HOME/dotnet

$ vim ~/.bashrc
#パスを追加する
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
#保存する
$ source ~/.bashrc
```

dotnetをパスを通します

##VisualStudioMacでコンソールアプリの開発 

<img width="602" alt="スクリーンショット 2020-06-01 17.02.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/e69cc1e5-c601-226a-3cfd-a4043562480e.png">
.net Coreを選択
<img width="497" alt="スクリーンショット 2020-06-01 17.02.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/f7dad526-d3b8-18bd-0948-30e407800e12.png">
##NugetからSystem.Device.Gpioを取得
MicroSoft製のGpioライブラリをダウンロードします
<img width="531" alt="スクリーンショット 2020-06-01 17.01.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/c048c438-99c1-e98c-b68a-3ef35ee7b1fa.png">

```
using System;
using System.Device.Gpio;
using System.Threading;

namespace led {
	class Program {
		static void Main(string[] args) {
　　　　　　　//GPIOを番号を指定すること
            int pin = 7;
            GpioController controller = new GpioController();
            controller.OpenPin(pin, PinMode.Output);
           
            int lightTimeInMilliseconds = 1000;
            int dimTimeInMilliseconds = 200;

            while(true) {
                Console.WriteLine($"Light for {lightTimeInMilliseconds}ms");
                controller.Write(pin, PinValue.High);
                Thread.Sleep(lightTimeInMilliseconds);
                Console.WriteLine($"Dim for {dimTimeInMilliseconds}ms");
                controller.Write(pin, PinValue.Low);
                Thread.Sleep(dimTimeInMilliseconds);
            }
           }
      }
}
```

##ビルド
dllを指定すると実行できます。exeに出力するやり方もあります。

```
$ dotnet led.dll
```
##ポイント
controller.OpenPin(pin, PinMode.Output)　はGPIOを番号すること
<img width="319" alt="スクリーンショット 2020-06-01 17.05.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/6379983a-62fd-1c59-b416-e27c043227aa.png">

##課題
[リモートGPIOについて調べる](https://www.amazon.co.jp/Visual-Studio-%E3%81%A7Raspberry-Pi-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88GPIO%E5%B0%8E%E5%85%A5%E7%B7%A8-ebook/dp/B07HNQ9C6X/)

##VisualStudioMacで作成したプロジェクトファイルをMonoDevelopで開きデバッグする
MoNoDevelopにSDKのパスを設定する
<img width="323" alt="スクリーンショット 2020-06-01 17.04.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/00f97d75-5ebe-6e06-50ca-b80922098720.png">

###C#でのLチカ動作確認とれました。

[PythonでLチカ](https://qiita.com/tana_/items/f10d0c5971fbefac9b2f)