.NET Core3.0をRaspberry piにインストールし、Windows10上でVisual Studio 2019を使って作成したプログラムを、Raspberry piにSFTPアプリにより転送して実行します。作成するプログラムは、開発者向けにRESTなWebAPIを提供している「JSONPlaceholder 」から「投稿情報のIDが1(https://jsonplaceholder.typicode.com/posts/1)」をアクセスし、C# .NET Core3.0のコンソールアプリにより作成します。
動作環境
- Windows 10 Pro
- Visual Studio 2019
- .NET Core3.0
- Raspberry pi 3+
- 2019-07-10-raspbian-buster
.NET Core3.0をRaspberry piにインストール
「raspbian-buster」を公式サイトからダウンロードしてRaspberry piで起動します。「.NET Core 3.0」は、Windows 10 で「Download .NET Core 3.0」から次のような「SDK 3.0.100 Linux .NET Core Binaries: ARM32 」をダウンロードします。
Raspberry Pi 3に搭載されているSoC「BCM2837」はARMv8という64bitアーキテクチャを採用しており、64bit OSが動作可能だが、現状では、Raspberry Pi財団の公式Linuxディストリビューション「Raspbian」が32bitで提供されています。
ダウンロードした「.NET Core 3.0バイナリ」をRaspberry piにSFTPアプリにより転送します。Raspberry piで次のコマンドによりダウンロードした「.NET Core 3.0バイナリ」をRaspberry piに展開します。dotnet フォルダが作成されダウンロードした「.NET Core 3.0バイナリ」が展開されます。
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.0.100-linux-arm.tar.gz -C $HOME/dotnet
動作環境を設定するため、ファイル「.bashrc 」に次のコマンドを追加し、常にパスを通しておきます。
export DOTNET_ROOT=$HOME/dotnet export PATH=$PATH:$HOME/dotnet
Raspberry piをリセットして、次のコマンドで.NET Core 3.0が正常にインストールされているかを確認します。インストールされたバージョンが、「.NET Core SDK (3.0.100)」と表示されます。
$ dotnet --help .NET Core SDK (3.0.100) 使用法: dotnet [runtime-options] [path-to-application] [arguments] .NET Core アプリケーションを実行します。 runtime-options: --additionalprobingpath調査ポリシーと調査対象アセンブリを含むパス。 --additional-deps 追加の deps.json ファイルへのパス。 ・・・・
Visual Studio 2019でRaspberry pi用プログラムの作成
Visual Studio 2019(すでに「.NET Core3.0」はインストールされていました)を起動して、「新しいプロジェクトの作成」を実行し、「コンソールアプリ(.NET Core)」を選択します。「Hellow World!」を表示するプログラムコードが表示されます。ここで、プロジェクトのプロパティを選んで、「アプリケーション」「対象フレームワーク」で「.NET Core3.0」が使用されていることを確認します。
「投稿情報のIDが1(https://jsonplaceholder.typicode.com/posts/1)」をアクセスする次のプログラムを作成します。
using System; using System.Diagnostics; using System.Net.Http; using System.Net.Http.Headers; namespace CoreTest { class Program { static void Main(string[] args) { try { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); string url = "https://jsonplaceholder.typicode.com/posts/1"; var response = httpClient.GetAsync(url).Result; string jsonResult = response.Content.ReadAsStringAsync().Result; Console.WriteLine($"jsonResult...{jsonResult})"); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); } } } }
上記のようにプログラムを作成し、「ソリューションのビルド」でコンパイルすると、フィルダ「Debug」に「netcoreapp3.0」が作成されます。
Raspberry piで作成したプログラムの実行
作成したプログラム「netcoreapp3.0」をRaspberry piにSFTPアプリにより転送し、実行権限を付与して、次のコマンドで実行します。JSONPlaceholderからJSONデータを受信して表示します。
pi@raspberrypi:~/coretest $ ls netcoreapp3.0 pi@raspberrypi:~/coretest $ cd netcoreapp3.0 pi@raspberrypi:~/coretest/netcoreapp3.0 $ ls CoreTest.deps.json CoreTest.exe CoreTest.runtimeconfig.dev.json CoreTest.dll CoreTest.pdb CoreTest.runtimeconfig.json pi@raspberrypi:~/coretest/netcoreapp3.0 $ dotnet ./CoreTest.dll jsonResult...{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }) pi@raspberrypi:~/coretest/netcoreapp3.0 $