Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
.NET対応組み込みデバイス「Netduino」入門(2)

.NET対応組み込みデバイス「Netduino」入門(2)

Netduino、まずは基本のLチカ

2015年4月2日

初めてのNetduinoアプリ開発。まずは基本の基本であるオンボードのLチカから。次にブレッドボード上の外部LEDのLチカも行う。また、ファームウェアの更新方法も説明する。

Microsoft MVP for .NET 初音 玲
  • このエントリーをはてなブックマークに追加

電子工作の“Hello, World”といえばLチカ

 前回は、Netduinoとは何か、そして、Netduinoを楽しむために必要なハードやソフトを紹介した。今回は、いよいよプログラミングを開始する。

 プログラミングの世界では、最初にその言語で行うプログラム例として「Hello, World」と表示するものが多い。同様に電子工作で最初に行うのはLEDをチカチカさせる「Lチカ」がある。Netduinoの世界でも、初めて回路を組んで動かすアプリ(Arduino風に言うのであればスケッチ)は「Lチカ」だ。

 今回はNetduinoでさまざまなLチカを実装してみる。

Netduinoの健康診断

 Netduinoアプリの作成を開始するに当たり、まずは、手元にあるNetduinoの状態を確認してほしい。

 これから行う手順は、新規に購入した場合の初期不良確認にもなるのでNetduinoが届いたら必ず実施することをお勧めする。また、手元にあるNetduinoで連載に沿って何か作ってみようとしている場合も、ファームウェアのバージョンによっては手順通りにいかないケースもあるので、同様にこれから行う確認と、必要であれば対応を実施してほしい。

Pingの実施

 前回の手順に従って、.NET Micro Framework SDKをインストール済みであれば、「.NET Micro Framework Deployment Tool」(以下、MFDeploy)がインストールされているだろう。

 NetduinoとUSBケーブルを接続してからPCに接続したら、MFDeployからPingを実施する。実施手順は、図1を参考にしてほしい。

図1 MFDeployでPing実施
  • 1接続方法として「USB」を選択すると、デバイス名に「NetduinoPlus2_Netduino」と表示されることを確認。
  • 2[Ping]ボタンをクリックして、「TinyCLR」または「TinyBooter」と表示されることを確認する(表示されない場合は、もう一度、[Ping]ボタンで確認してみてほしい)。なお、何度やってもこういった表示が確認できない場合は、ハード故障などの問題が考えられる。

ファームウェアバージョンの確認

 MFDeployを使えば、Netduinoのファームウェアのバージョンを確認できる。

 具体的には、MFDeployの(メニューバーから)[Plug-in]-[Debug]-[Show Device Info]メニューをクリックすると、デバイスの状態が表示される(図2)。

図2 Device Info(デバイスの状態)

 図2に示すDevice Infoから得られた情報は次の3つ。

  1. HALのバージョンは4.2.0.0
  2. Secret Labs LLC製のNetduino Plus 2でバージョンはv4.2.2.2
  3. OEMコードは、venderコード=34、modelコード=177、SKUコード=4102

 HALバージョンが4.2なので、このままでは、.NET Micro Framework v4.2までしか動作せず、最新の.NET Micro Framework v4.3をデプロイしようとすると,エラーが表示されてしまう(図3はそのエラー表示の例)。

図3 バージョン不一致のエラー

ファームウェアのバージョンアップ

 Netduino Plus 2の最新ファームウェアは、Netduinoフォーラムの該当掲示板(英語)に告知されている(図4)。

図4 最新ファームウェアの確認

 執筆時点での最新バージョンはv4.3.1になる。該当エントリの最初のアーティクルの最後に「NetduinoUpdate_4.3.1.0.zip」へのリンクがあるので、リンクをクリックしてダウンロードする(事前にNetduinoフォーラムのアカウントを作成した上でサインインしておく必要がある)。

 ダウンロードした.zipファイルを任意の場所に展開し(例えば、c:\tempフォルダーを作成してそこに展開する)、その中にあるNetduinoUpdate.exeファイルを実行する。これにより、[Netduino Update]ウィンドウが起動する。あとは、図5と下記の手順に従って、最新ファームウェアにアップデートする。

図5 NetduinoUpdate.exe実行による最新ファームウェアへのアップデート手順

具体的な手順は、以下の本文に記載している。

  1. Netduinoと接続しているUSBケーブルをPCから外す(このとき、別に電源供給している場合は、電源も外す)
  2. Netduino上の物理ボタン(1)を押したまま、USBケーブルをPCに刺す。こうすると、bootloaderモードとして接続したことになる
  3. [Netduino Update]ウィンドウ上に「Netduino Plus 2」と表示されるので、チェックボックス(2)をチェックしてから[Upgrade]ボタン(3)をクリックする
  4. 無事にアップデートが完了すると、[Netduino Update]ウィンドウ上から「Netduino Plus 2」の表示が消えるので、それまでUSBケーブルを抜かずに待つ

ファームウェアのバージョンアップ確認

 ファームウェアがv4.3.1にバージョンアップできたかMFDeployを起動して、Device Infoを確認する。

図6 バージョンアップ確認

オンボードLチカ

 NetduinoでのLチカの中でも基本中の基本のLチカがオンボードLチカだ。

 オンボードLチカは、オンボード上のプッシュスイッチLEDを使うので(図7)、回路の結線などは不要でアプリ作成だけで実現できる。

図7 オンボードLチカの部品構成

アプリ作成

図8 Netduino Plus 2 Applicationテンプレートの利用

 Visual Studioで新規プロジェクトを作成するときに、[Micro Framework]カテゴリの「Netduino Plus 2 Application」テンプレートを指定する。このテンプレートを指定すれば、Netduino Plus 2で動かすアプリの作成に必要な参照設定などが全て完了する。なお本稿の例では、プロジェクト名はVisual Basic .NET用(以下、VB.NET)は「LEDOnVB」、C#用は「LEDOnCS」とした。

 ソリューションエクスプローラーを見ると、このテンプレートで新規に作成したプロジェクト内には、C#であれば「Program.cs」、VB.NETであれば「Module1.vb」というファイル項目が表示される。これらの項目をダブルクリックして、コードエディターで開き、次のようにコードを記載する。

Visual Basic
Imports Microsoft.SPOT.Hardware
Imports SecretLabs.NETMF.Hardware.Netduino

Module Module1

  Sub Main()
    Dim led = New OutputPort(Pins.ONBOARD_LED, False)                               '…1
    Dim button = New InputPort(Pins.ONBOARD_BTN, False, Port.ResistorMode.Disabled) '…2
    Dim isButtonOn = False
 
    Do While (True)             '…3
      isButtonOn = button.Read  '…4
      led.Write(isButtonOn)     '…5
    Loop
  End Sub
 
End Module
C#

using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.Threading;
 
namespace LEDOnCS
{
  public class Program
  {
    public static void Main()
    {
      var led = new OutputPort(Pins.ONBOARD_LED, false);                               //…1
      var button = new InputPort(Pins.ONBOARD_BTN, false, Port.ResistorMode.Disabled); //…2
      var isButtonOn = false;
      
      while(true)                    //…3
      {
        isButtonOn = button.Read();  //…4
        led.Write(isButtonOn);       //…5
      }
    }
  }
}
リスト1 オンボードLチカを行うためのサンプルコード
  • 1初期状態オフ(false)で、オンボードLED制御(Pins.ONBOARD_LED)用の変数ledを宣言。
  • 2初期状態オフ(false)、通常スイッチ(ResistorMode.Disabled)で、オンボードプッシュスイッチ入力(Pins.ONBOARD_BTN)用の変数buttonを宣言。
  • 3ボードの電源が切られるまで実行し続けるために無限ループを定義。
  • 4オンボードプッシュスイッチの状態を変数isButtonOnに退避。
  • 5オンボードプッシュスイッチの状態がオンであればオンボードLEDをオン、オフならオフに設定。

実行結果

 プログラムができたら、NetduinoにつないだUSBケーブルをPCに接続する。

 Visual StudioからNetduinoにプログラムを転送するには、デフォルトデプロイ先のエミュレーターからNetduino実機に切り替える必要がある。そこで、ソリューションエクスプローラーでプロジェクト項目を右クリックして(表示されるコンテキストメニューから)[プロパティ]メニューを選択。中央に表示されるプロパティエディターで[.NET Micro Framework]タブを選択し、図9のようにデプロイ(Deployment)先として[Transport]欄に「USB」を、[Device]欄に(本稿の例では)「NetduinoPlus2_Netduino」を指定する(最初からこの設定になっている場合は変更する必要はない)。

図9 Deploymentターゲット指定

 この設定が完了後にVisual Studioでプログラムを実行すれば、自動的にNetduinoにアプリが転送されて実行が開始される。もちろん、リモートデバッグもできるので、ブレイクポイントを設定して、変数の確認やステップ実行も可能だ。

 このプログラムの挙動を試すには、以下の手順を実施してみてほしい。

  1. オンボード上のプッシュスイッチを押し続ける
  2. オンボード上のLEDが光る
  3. オンボード上のプッシュスイッチを放す
  4. オンボード上のLEDが消える

 なお、この状態でUSBケーブルをPCから抜き、モバイルバッテリーなどにつなぎ替えると、ブートローダーが不揮発性メモリ上の本プログラムをローディングしてきて実行してくれる。

外部LEDでLチカ

 オンボードLEDのLチカに成功したので、次は市販のLEDのLチカにチャレンジする(今後の連載でいろいろなセンサーや部品を試していくので、本稿の最後に紹介するキットなどを購入しておけば、ある程度のものはそろうので便利だ)。

 LED(発光ダイオード: Light Emitting Diode)は、電流が流れる方向が決まっているので、LEDを点灯させるためには、足の長いアノード側をプラス側に接続し、逆足のカソード側をマイナス側に接続する。

 またLEDごとに電圧が決まっている。本稿の例では、使用するLEDは偶然手元にあった「HT333SRD」という5Φ(=直径5mm)の赤色LEDを使う。HT333SRDの特性を調べてみると、「標準電圧が2.0V」とある(多くの赤色LEDは約2V付近の電圧で動作するが、厳密には各LEDの特性を調べた方がよい)。これは順方向電圧(forward Voltage、VF)とも呼ばれるものでLEDを光らせるために必要な電圧である。

 そうなってくると、問題なのはNetduinoのデジタル出力は3.3Vであるため、LEDを直接接続するには電圧が高すぎてしまう点だ。このように電源電圧とLEDの順方向電圧に差がある場合に回路に組み込むのが電流制御抵抗である。電流制御抵抗の値はオームの法則から導き出せる。すなわち、

抵抗 R = (両端電圧  V (電源と順方向電圧の差))/(電流 I)
という式から抵抗値が求められる。

 両端電圧(V)が3.3v - 2.0v1.3vとなり、電流(I)はどれくらい明るく光らせたいかによるが通常10-20mAであるので、1.3 ÷ 0.021.3 ÷ 0.01の計算結果から電流制限抵抗(R)は65Ω130Ωが必要であると分かる。

 今回は、これも手元にあったのが理由だが100オーム(Ω)の抵抗を使用する。

回路作成

 ブレッドボードを使ってLEDと抵抗を次のように配線する。

図10 外部LEDでのLチカの部品構成

 構成を回路図として表したのが次の図である。

外部LEDでのLチカの回路図
図11 外部LEDでのLチカの回路図

アプリ作成

 新規にプロジェクトを作成して、オンボードLEDのサンプルと同様なプログラムを作成する(本稿の例では、プロジェクト名はVB.NET用は「ExLEDOnVB」、C#用は「ExLEDOnCS」とした)。

 オンボードLEDでは、OutputPortにPins.ONBOARD_LEDを指定したが、今回はLEDが接続する9番ピンをOutportに指定する

Visual Basic
Imports Microsoft.SPOT.Hardware
Imports SecretLabs.NETMF.Hardware.Netduino

Module Module1

  Sub Main()
    Dim led = New OutputPort(Pins.GPIO_PIN_D9, False)                               '…1
    Dim button = New InputPort(Pins.ONBOARD_BTN, False, Port.ResistorMode.Disabled) '…2
    Dim isButtonOn = False
 
    Do While (True)             '…3
      isButtonOn = button.Read  '…4
      led.Write(isButtonOn)     '…5
    Loop
  End Sub

End Module
C#
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.Threading;
 
namespace ExLEDOnCS
{
  public class Program
  {
    public static void Main()
    {
      var led = new OutputPort(Pins.GPIO_PIN_D9, false);                               //…1
      var button = new InputPort(Pins.ONBOARD_BTN, false, Port.ResistorMode.Disabled); //…2
      var isButtonOn = false;
      
      while(true)                    //…3
      {
        isButtonOn = button.Read();  //…4
        led.Write(isButtonOn);       //…5
      }
    }
  }
}
リスト2 ブレッドボード上に配置した外部LEDのLチカを行うためのサンプルコード
  • 1初期状態オフ(false)で、9番pin制御(Pins.GPIO_PIN_D9)用の変数ledを宣言。
  • 2初期状態オフ(false)、通常スイッチ(ResistorMode.Disabled)で、オンボードプッシュスイッチ入力(Pins.ONBOARD_BTN)用の変数buttonを宣言。
  • 3ボードの電源が切られるまで実行し続けるために無限ループを定義。
  • 4オンボードプッシュスイッチの状態を変数isButtonOnに退避。
  • 5オンボードプッシュスイッチの状態がオンであればLEDをオン、オフならオフに設定。

実行結果

 プログラムができたら、NetduinoにつないだUSBケーブルをPCに接続する。そして、先ほどと同じようにVisual StudioでプログラムをNetduinoに転送して実行開始した上で、以下の手順を実施してみてほしい。

  1. オンボード上のプッシュスイッチを押し続ける
  2. オンボード上のLEDが光る
  3. オンボード上のプッシュスイッチを放す
  4. オンボード上のLEDが消える

 なお繰り返しになるが、この状態でUSBケーブルをPCから抜き、モバイルバッテリーなどにつなぎ替えると、ブートローダーが不揮発性メモリ上の本プログラムをローディングしてきて実行してくれる。

まとめ

 オンボードLEDのLチカとブレッドボードに刺した外部LEDのLチカを紹介した。特に後者はブレッドボードの使い方やLEDの接続方法など電子工作の基礎を意識した内容になっている。日ごろから電子工作をしていれば手元にあまりのLEDや抵抗があるだろう。しかし電子工作になじみがない場合は、LED1つや抵抗1つを入手するのも大変だろう。そのためだけで秋葉原や日本橋などに足を延ばすのも難しい。

 そういったときは、通信販売(例えば下記のような通販サイト)などを活用するとよいが、送料を考えるならLEDや抵抗はまとめ買いがよい。

 幸いにもArduino関連ではLEDや抵抗がセットになったキット(例えば以下のような電子工作入門キット)もあるので、そういったものを購入するのでもよいだろう。

 次回は気温センサーを使って環境測定を行う予定である。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

.NET対応組み込みデバイス「Netduino」入門(2)
1. Netduino、知ってますか?

電子工作キットの“Arduino”と“Netduino”は何が違うのか? Netduinoの概要と、開発環境の準備方法を解説する。

.NET対応組み込みデバイス「Netduino」入門(2)
2. 【現在、表示中】≫ Netduino、まずは基本のLチカ

初めてのNetduinoアプリ開発。まずは基本の基本であるオンボードのLチカから。次にブレッドボード上の外部LEDのLチカも行う。また、ファームウェアの更新方法も説明する。

.NET対応組み込みデバイス「Netduino」入門(2)
3. Netduinoアナログ入力の基本(温度センサー活用)

Lチカができたら、アナログ入力を使ってみよう。温度センサーの値をNetduinoで取得するサンプルを作成し、アナログ入力の基礎を説明する。

.NET対応組み込みデバイス「Netduino」入門(2)
4. Netduinoシリアル通信(I2C)の基本

アナログ入力の次はシリアル通信(I2C)の基礎を習得しよう。I2C対応の温度センサーの値をNetduinoで取得するサンプルを作成する。

.NET対応組み込みデバイス「Netduino」入門(2)
5. Netduinoシリアル通信(I2C)でLCD表示

シリアル通信(I2C)をさらに学ぼう。I2C通信で液晶ディスプレイ(LCD)に文字を出力するサンプルを作成する。

サイトからのお知らせ

Twitterでつぶやこう!