🗿

RaspberryPi 3B+と.NET5で電子工作(準備/Lチカ)

2021/09/20に公開

もくじ
https://qiita.com/tera1707/items/4fda73d86eded283ec4f

やりたいこと

以前、ラズパイ3B+とWindows IoT coreを使って電子工作をした(準備とかサーモグラフィとか)が、今はraspbianに.NET5を入れて、そこでC#でコードを書くことができるらしい。
また、このページにあるような

https://docs.microsoft.com/ja-jp/dotnet/api/?view=iot-dotnet-1.1

なんとも面白そうなAPIを使っていろいろできるっぽい。

試してみてうまく動かせたのはいいが、Linuxがさっぱりわかってなかったので、もう一度同じことをやれと言われたらできる自信がない。
試してみた結果を自分がもう一度再現できるように、手順をメモしておきたい。

※以下は2021年09月時点で試した内容。

目標

まずは、下記ページのサンプルコードを使ってLチカするのを目標にする。

https://docs.microsoft.com/ja-jp/dotnet/iot/tutorials/blink-led

用意したもの

  • Raspberry Pi 3B+
  • microSDカード(32GB)
  • ブレッドボード
  • LED/抵抗(100Ω)/配線など

ラズパイインストール

Rasberry Pi OS(以前はrasbianと呼んでたような?)をダウンロード
https://www.raspberrypi.org/software/

落としたexeを実行、インストール、Raspberry Pi Imagerを実行

Choose OS
Rasberry Pi OSをえらぶ

Storage
接続したMicroSDのドライブを選ぶ

WRITE押す
書き込み始まる

おわったらSDをリーダライタから外してラズパイに指し、電源ON

ラズパイの初期設定

  • 言語選択
  • パスワード設定
  • 淵に黒い枠出るかどうか??
  • WiFiネットワーク選択→有線するのでskip
  • update

おわったので一度再起動。
→再起動は、左上のラズベリーマーク→ログアウト→Reboot から行う。(その辺からわからん)

ラズパイマーク→設定→RaspberryPiの設定→インターフェース を開く
電子工作で使いそうなSSHとVNC、SPI、I2Cを有効にした。

Window10PCからラズパイをリモート操作できるようにする

「VNC」という機能を使う。VNCとは

ラズパイが「VNCサーバー」になり、WindowsPCが「VNCクライアント」になる様子。

ラズパイ側準備

ラズパイ側で下記を行う。

  • ラズパイマーク→設定→RaspberryPiの設定→インターフェース を開き「VNC
    VNC]を有効にする(もう上でやった)
  • 画面右上のVNCマークを押す。
  • 下記の画面に出たIPアドレスをメモっておく。

Windows10PC側準備

VNCクライアントになるために「VNC Viewer」というソフトを使う。

https://www.realvnc.com/en/connect/download/viewer/windows/

「EXE x86/x64」を選択し、「Download VNC Viewer」を押す。

ダウンロードしたインストーラーで、指示に従ってインストールする。

インストールできたら、起動する。
File → New Connection を押す。

VNC Server の欄に、ラズパイのIPアドレスを入れる。
Nameに、なんでもいいので好きな名前を入力する。
OKを押す。

こんな感じで登録したラズパイが出てくるので、ダブルクリックする。

ユーザー名とパスワードを聞かれるので、入力する。
(たぶんユーザーは初期値の「pi」。パスワードは上の方で設定したもの)

これで接続完了。

VisualStudio Codeをインストールする

linuxではviというエディタを使うと聞くが、Windowsで秀丸とかVisualStudioに慣れてしまっているのでviはちょっと敷居が高い。

普段使っているVisualStudioに近い感じがするVisualStudioCodeを入れて使うことにする。

まずラズパイ上でコマンドを入れるための画面を開く。

こちらのページを参考に、下記コマンドを実行する。

sudo apt update
sudo apt install -y code

これでVSCodeがインストールされた。

.NET5をダウンロード

下記のページから.NET5がダウンロードできる。
https://dotnet.microsoft.com/download/dotnet

2021年9月時点では、.NET5.0が「推奨」らしい。

今回は、現在の最新の安定Verということで.NET 5.0.401を使うことにする。
「Arm32」を選択。

自動的に「dotnet-sdk-5.0.401-linux-arm.tar.gz」のダウンロードが始まるが、いったんそれは使わない。(linuxっぽく?コマンドでダウンロードしてみる)

開いたページの下記のCopyボタンを押すと、ダイレクトリンクのアドレスがコピーされるので、それをコマンドで使う。

「wget」の後にコピーしたリンクの文字列を貼り付けて、下記のコマンドを実行する。
(ここから、VSCodeのターミナルを使ってコマンド実行してみる)

wget https://download.visualstudio.microsoft.com/download/pr/ce3cef63-ade6-4209-80f0-ac2815c5b282/e4a8b52aacf74d2a7d6d1cf5b9dca438/dotnet-sdk-5.0.401-linux-arm.tar.gz

下記のような表示になって、ダウンロード始まる。

ダウンロードのページの下に、インストールの仕方も書いてくれてる。

それに従って、下記のコマンドを入力する。

mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-5.0.401-linux-arm.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

これで、インストール完了。
この辺に、インストールした奴らがはいってるっぽい。

Lチカサンプルプログラムをつくる

LEDをちかちかさせるためのプロジェクトを、下記のページに従って行う。
https://docs.microsoft.com/ja-jp/dotnet/iot/tutorials/blink-led

もう上記ページそのままなのでわざわざ書くのもアレだが、一応メモしておく。

こんな感じで配線する。

MSのページによると、

GPIO 18 から LED の陽極 (長い正のリード) へ
LED の陰極 (短い負のリード) から 330 Ω の抵抗 (どちらかの端) へ
330 Ω の抵抗 (他の端) からグラウンドへ

とのことだが、手元に330Ωの抵抗がなかったので100Ωで代用。

アプリのプロジェクトをつくる。
VSCodeのターミナルで、下記コマンドを打つ。

dotnet new console -o BlinkTutorial

こんな感じで、プロジェクトが作成される。

たしかにできてる

下記コマンドで、作ったプロジェクトのフォルダの中に入ってから、必要なライブラリのパッケージを追加する。

cd BlinkTutorial/
dotnet add package Iot.Device.Bindings --version 1.1.0-*

この時点で、いったんBlinkTutorialの中のProgram.csを開いてみると、こんな感じになってる。

この時点で一回ビルドしてみる。下記コマンドを打つ。

dotnet build

うまくいくと下記のようにビルド成功する。

ビルドしたものを実行してみる。下記のコマンドを打つ。

in/Debug/net5.0/BlinkTutorial 

→「Hello World!」と出てくる。うまくうごいてるっぽい。

Lチカ動作してくれるサンプルに書き換える。
MSサンプルそのまま。

Program.cs
using System;
using System.Device.Gpio;
using System.Threading;

Console.WriteLine("Blinking LED. Press Ctrl+C to end.");
int pin = 18;
using var controller = new GpioController();
controller.OpenPin(pin, PinMode.Output);
bool ledOn = true;
while (true)
{
    controller.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low));
    Thread.Sleep(1000);
    ledOn = !ledOn;
}

これを入れて、再度dotnet buildし、in/Debug/net5.0/BlinkTutorial を実行する。

LED点滅した。

うまく動かすことができた。

考察

一旦うまく動かすことはできたものの、Linuxをわかってないせいでコードを打つまでの準備でえらい苦労した。
また、まだデバッグのやり方等、わかってないことが多いので、おいおい調べていこうと思う。

参考

VNC関係の設定の仕方などを調べたページ
ラズパイにディスプレイつながずに使用する場合の設定もここで見た。上の自分メモには書いてないが、その辺必要な場合はこちらを参照。
https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-vnc/

.NET5ダウンロードページ
https://dotnet.microsoft.com/download/dotnet/5.0

APIのページ(今回使用のGpioもここにある)
https://docs.microsoft.com/ja-jp/dotnet/api/?view=iot-dotnet-1.1

Lチカのサンプルコード
https://docs.microsoft.com/ja-jp/dotnet/iot/tutorials/blink-led

Discussion