「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
...と言う事で、以下、Rasbian上で、.NET Coreの開発を行う。
詳細 †
手順 †
実際にやったログ
準備 †
コチラ(Windows 10 IoT Core)で思い出す。
インストール †
以下を参考に、Raspberry Pi 3 MODEL BにRasbianをインストール。
- Rasbianをインストールする。
- RaspbianにDocker&Gitをインストールする。
- アカウント系は開発環境でのみ設定。
- 本番環境ではアカウントなしでPullするのみ。
※ 参考:インストール手順(確か、NOOBSでインストールした
.NET Core †
以下を参考に、.NET 5をインストール。
On Docker †
(.NET Core On Docker On Rasbian)
Rasbian上の.NET CoreのDockerコンテナで、helloworldをやってみる(た)。
- 以下、試行錯誤の上に解ったこと。
dotnet/dotnet-dockerをそのまま使用して動作確認をすると、
Dockerfile.debian-arm32がRasbian上で動作したので切り分けができた。
- CPUアーキテクチャ、OS毎に異なるDockerfileを使用する。
- *.csprojファイルやDockerfileがあるフォルダに、
binやobjフォルダがあると原因不明のエラーが発生するので、
コレ等のフォルダを削除してから作業を行う必要がある。
- 以下、ビルド ~ プッシュ作業は、
Windows上で実施(Rasbian上での作業はコチラ)
- helloworldディレクトリに移動(CD)し、
- 上記の、.NET用の Dockerfileを配置する。
(この際、エントリポイントのプロジェクト名のみ書き直す。)
- コンテナをDocker Hubにプッシュして、Rasbian上で実行してみる。
- PC上で実行
・ローカルのイメージを消しておく。
>docker rmi XXXXXXXX -f
...
Deleted: sha256:...
・Docker HubからPullして実行。
>docker run osscjpdevinfra/helloworld:latest
Unable to find image 'osscjpdevinfra/helloworld:latest' locally
latest: Pulling from osscjpdevinfra/helloworld
...
Status: Downloaded newer image for osscjpdevinfra/helloworld:latest
Hello World!
- PC上で実行
動かない(イメージは、linux/armだが、PCはlinux/amd64と表示される)。
>docker run osscjpdevinfra/helloworld:net50-debian-arm32
WARNING: The requested image's platform (linux/arm) does not match the detected host platform (linux/amd64) and no specific platform was requested
A fatal error occurred, the folder [/usr/share/dotnet/host/fxr] does not contain any version-numbered child folders
Rasbian上でDockerビルド †
本格的な開発のため、Visual Studio Code環境を作ってみる。
- が、ダメ。確かに、ARM32だしね。...と言う事で、ググると以下が出てくる。
- SSHからではなく、デスクトップかVNCからアクセスする。
※ ...と言う事で、現時点の結論としては、OmniSharpのARM対応待ち。
オプション †
リモートデバッグ(通常) †
リモートデバッグ(コンテナ) †
- 2222:22とマッピングしたSSHポートを使用してリモートデバッグする。
GUIサポート †
GUIに関しては、
実装 †
Windows 10 IoT Coreでの実装を参考にして実装してみよう。
- ライブラリの名前空間が違うので、コードも少々変わる。
using System;
using System.Device.Gpio;
using System.Threading;
namespace DotNet_LChika
{
class Program
{
static void Main(string[] args)
{
/// GpioPin #5は青色
/// GpioPin #6は白色
int pin = 6;
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);
}
}
}
}
→ 無事、動作した。
→ 未検証...
→ 未検証だが、多分動く。
→ 未検証だが、多分動く。
参考 †
Qiita †
CodeZine?(コードジン) †
ラズベリーパイをつかったセンサープログラミング超入門連載一覧 †
https://codezine.jp/article/corner/606
C#ではじめるラズパイIoTプログラミング連載一覧 †
https://codezine.jp/article/corner/792
Microsoft †
Microsoft Docs †
開発基盤部会 Wiki †
Tags: :インフラストラクチャ, :IoT, :Linux, :.NET開発, :.NET Core