koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Lチカ しました

色々回り道したけれど、Raspberry Pi 3 と Windows 10 IoT Core でLチカしました。

ただそれだけのことなのだけれど、なんかうれしい。

先日(Lチカ できませんでした - koudenpaのブログ)は IoT Dashboard から展開できるサンプルで、ビルトインのLEDが光る、と思って試したらだめだった。

今回は、GitHubに公開されているLチカサンプルコードでGPIOの先のLEDをチカらせようと試みた。

Blinky Sample

スタンドアローンなUWPアプリとしてLチカするサンプルが公開されている。

くそ丁寧な案内に従ってGPIOの先にLEDをつないで、Visual StudioからアプリをデプロイしたらLチカした。

f:id:koudenpa:20160505183938p:plain

f:id:koudenpa:20160505183829p:plain

やったね。

手元にメスオスのジャンパー線がないので無理くりな接続になっている。今度仕入れよう。

一応動画も撮ったのだけれど、フォトライフ の動画は埋め込めないのかな? Youtube なりにアップロードしろということだろうか。

Blinky WebServer

IoT Dashboard から展開できるサンプルと同様に、リモートでブラウザから状態を変更できるサンプルも提示されている。

Blinky Sample と同じGPIOへの接続で動作する。

案内にはリモートからアプリにメッセージを送るための段取りが色々と書かれている。 これを抑えておけば、WebブラウザからHTTPでIoT Coreにメッセージを送ったり、複数のプロセスを協調動作させることができるようになるわけだ。

とりあえず動かしたいなら Deploy and Run Sample にある通り BlinkyWebServiceHttpServerを順次VisualStudioからリモート実行し http://{IoT Core のIPアドレス}:8000/blinky.html にアクセスすればよい。

手元のブラウザで Off なら

f:id:koudenpa:20160505175158p:plain:w250

滅。

f:id:koudenpa:20160505190816p:plain

On にすると

f:id:koudenpa:20160505175224p:plain:w250

点灯する。

f:id:koudenpa:20160505191058p:plain

リモートデバッグ

Visual Studio でリモート実行すると、余裕でブレークポイントを張ってデバッグできる。

この辺りはさすがとしか言いようがない。

f:id:koudenpa:20160505192748p:plain

GPIO

そもそも、GPIOって何者なのか? 汎用的な入出力端子なのだろうけれど、具体的に何ができるのかはさっぱり知らない。

LチカサンプルコードではGPIOに関しては以下のようなことだけをやっている。

// XXX 異常系とか消してます
// 初期設定して
        private void InitGPIO()
        {
            var gpio = GpioController.GetDefault();
            pin = gpio.OpenPin(LED_PIN);    // LED_PIN = 5
            pinValue = GpioPinValue.High;
            pin.Write(pinValue);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }

// タイマー処理で点滅切り替え
        private void Timer_Tick(object sender, object e)
        {
            if (pinValue == GpioPinValue.High)
            {
                pinValue = GpioPinValue.Low;
                pin.Write(pinValue);
            }
            else
            {
                pinValue = GpioPinValue.High;
                pin.Write(pinValue);
            }
        }

pin.SetDriveMode(GpioPinDriveMode.Output); これでピンの動作モードを設定している。

https://msdn.microsoft.com/ja-jp/library/windows.devices.gpio.gpiopindrivemode.aspx

説明が異様に丁寧で、開発している人の気合と、ハード畑を感じるが、読み手に基礎知識が足りていないので、とりあえずこのサンプルではアクティブロウなので、位の理解なのが残念だ。

なんでそれだけ分かるのかって? 案内に書いてあるからさ!

Note that the polarity of the LED is important. (This configuration is commonly known as Active Low)

IoT Core の謎 GUI

Windows 10 IoT Core では、複数のアプリを同時に実行できるけれど、GUIでどのアプリを表示するかを(ユーザーが)切り替えることはできないっぽい。

Headed/Headless Mode - Windows IoT

起動したときに表示されるIPなどの情報やネットワーク設定を行える機能も、どうも そういうアプリ っぽい感じである。

When configured to run in headed mode, a single UI app will launch at boot and there is no mechanism to switch to other applications (other than in development scenarios such as when Visual Studio deploys an app for debugging).

この辺の IoT Core がそもそもどういうOSなのかはさっぱりかつ、ドキュメントをどう見ていけばいいのかもわからんので、サンプル動かしながら感じていく感じかなぁ。と思っている。

宿題

  • メスオスのジャンパー線を買う
  • GPIO のいろはを知る
  • Blinky WebServer Sample - Windows IoT をちゃんと読む
  • IoT Core ってどんなものなのかを意識しておく