single.php

VisualStudioでRaspberry Piの LEDを点滅するアプリの書き方

Raspberry Pi3 Model B+ の電子工作の記事です。先回はWindows10 IoT Coreのチュートリアルを使って簡単に「Lチカ」実験を行いました。今回はVisualStudioを使って、C#からLEDを制御してみました。

ブレッドボードとLEDの準備

Raspberry PiとWindows10だけでは実験できないので、最低限でもLEDとジャンパーケーブル、ブレッドボードの3点が必要になります。電子工作用途としてAmazonにセットになっている商品が並んでいるので好きなパーツをそろえておきます。

先回のチュートリアルを使った実験と同じ回路で今回も行ったので、LEDの配線やブレッドボードについては、過去記事をご覧ください。

私が実験材料として購入した商品のリンクを追加しておきます。初心者向けと書いてあるので、初めての方でも充実の内容になっています。

初心者向けの学習キット ラズベリー・パイ3/2model B用 UNO R3 Arduino キット 互換キット172 in 1基本部品セット 実験用 Mega2560、ブレッドボード、LED、LCD1602等

Visual Studioを使ってUWPアプリ作成

Windows10 IoT Coreで動作するアプリはUWP(ゆにばーさるうぃんどうプラットフォーム)と言います。

Xamarinという便利なライブラリを使って、Windows10のストアアプリから、Android、iOSなどスマートフォンなど様々なハードウェア向けのアプリを、VisualStudioで開発することができます。

今回はC#を使ってアプリケーションを開発していますが、UWPアプリが作成できる言語であれば、VisualBasicなど他の言語でも開発することができます。

早速、RaspberryPi向けのアプリ作成とデバッグ方法を進めていきます。

UWPアプリ作成

1. 「ファイル|新規作成|プロジェクト」メニューを選択して、表示された画面で「Visual C#|Windows ユニバーサル」で表示される一覧から「空白のアプリ」を選択して名前を付けて「OK」ボタンをクリックします。

2. ターゲットプラットフォームを選択する画面が表示された場合は、既定値のまま「OK」ボタンをクリックして続行します。

3. プロジェクトが新規作成され「ソリューション エクスプローラー」にファイルの一覧が表示されます。

4. 「プロジェクト|参照の追加」メニューを選択して、表示された画面で「Universal Windows|拡張」内の「Windows IoT Extension for the UWP」を追加(左側のチェックを付ける)して「OK」ボタンをクリックします。

5. 「ソリューション エクスプローラー」から「MainPage.xaml」を開き、デザイン画面の上側のプルダウンリストから「4” IoT Device(569 x 320)」を選択します。

6. 「ツールボックス」から「Button」を選択して、MainPage.xamlのデザイン画面にドロップします。

7. 画面上の適当な場所に移動して、「Button」部分をダブルクリックしてイベントハンドラーを作成します。(自動的に、MainPage.xaml.csのコード画面に切り替わります)

8. 表示されたコード画面に、LED制御用のコードを追加していきます。追加するコードは、下にまとめて記載しています。

9. ツールボタンのデバック先のCPUを「ARM」に変更して「Device」部分を「リモート コンピューター」に変更します。(下の画面の右上の部分)

10. リモート接続先(RaspberryPi)の検出画面で、Windows10 IoT Coreがセットアップされているデバイスを選択します。

11. デバイス内にアプリが配置され、デバッグ用の画面に切り替わります。

12. Windows10 IoT Core(RaspberryPiデバイス)では、アプリが起動し「Button」が表示されます。

13. ボタンをクリックすると、ブレッドボード上のLEDが点灯します。

ソースコード

MainPage.xaml.csに追加したコードは、こんな感じです。

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Devices.Gpio;

namespace WUApp1
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private const int LED_PIN = 5;  //LEDに電流を送るピン番号
        private GpioPin led_pin;        //ピンの定義
        private bool check_led = false; //LEDをオンオフにする時のフラグ

        public MainPage()
        {
            this.InitializeComponent();

            setup(ref led_pin, LED_PIN);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if(check_led == false)
            {
                led_pin.Write(GpioPinValue.High);       //ピンに電流を流す(LED点灯)
                check_led = true;
            }
            else
            {
                led_pin.Write(GpioPinValue.Low);        //ピンに電流を止める(LED消灯)
                check_led = false;
            }
        }

        private void setup(ref GpioPin pin, int n)
        {
            var gpio = GpioController.GetDefault(); //とりあえず既定値で初期化
            if(gpio == null)
            {
                pin = null;
                return;
            }

            pin = gpio.OpenPin(n);                      //ピンの呼び出し
            pin.Write(GpioPinValue.Low);                //最初は消灯
            pin.SetDriveMode(GpioPinDriveMode.Output);  //ピンを出力モードに設定
        }
    }
}

Window10 IoT Coreで動作するアプリ開発も慣れてきたので、次回は、LED以外のパーツを使ったIoTデバイスを制御する開発を行っていきます。

スポンサーリンク

最後までご覧いただきありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です