Raspberry PiでWindows .NETのアプリケーションを動かす
Raspberry PiのCPU温度を取得してGUIに表示するWindows .NET FrameWorkアプリケーションを作成します。
monoをインストールする
Raspberry Piで.NETのWindowsアプリを実行するにはmonoをインストールする必要があります。
Shellから以下のコマンドを入力してください。
$ sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
$ echo “deb http://download.mono-project.com/repo/debian wheezy main” | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
$ sudo apt-get update; sudo apt-get upgrade -y
$ sudo apt-get install mono-complete
この辺のコマンドの詳細はmono Raspberryで調べるとたくさん出てきます。
Visual Studioでプロジェクトを作成する
Visual StudioでGUIのプロジェクトを作成します。プロジェクトの種類はWindowsフォームアプリケーション(.NET Framework)です。
Raspberry Pi側でmonoがWindows .NETアプリを解釈して実行するので、フォームアプリをそのまま作って問題ありません。
プロセス実行関数を作成します。
cmdはコマンド名、argsは引数です。
public static string ExecAndRead(string cmd, params string[] args)
{
using (Process proc = new Process())
{
StringBuilder sb = new StringBuilder();
foreach (string arg in args)
{
if (sb.Length > 0)
{
sb.Append(' ');
}
sb.Append("\"" + arg + "\"");
}
proc.StartInfo = new ProcessStartInfo(cmd, sb.ToString());
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.Start();
proc.WaitForExit();
return proc.StandardOutput.ReadToEnd();
}
}
Raspberry PiでCPU温度を取得するコマンドはvcgencmd measure_tempです。これを500msごとに実行するワーカーを作ります。
取得した温度の情報は適当なテキストボックスにいれます。(事前にフォームを作っておきます。)
void WorkerTemp()
{
while(true)
{
string cmd = "vcgencmd";
List<string> args = new List<string>();
args.Add("measure_temp");
string CPUtemp = ExecAndRead(cmd, args.ToArray());
Invoke((MethodInvoker)(() => {
textBox1.Text = CPUtemp;
}));
Thread.Sleep(500);
}
}
ワーカーをFrom関数上で実行します。
public Form1()
{
InitializeComponent();
Task.Run(() => WorkerTemp());
}
あとはビルドして、出来たexeファイルをRaspberry Pi上に持っていき、実行すればOKです。