.NET対応組み込みデバイス「Netduino」入門(2)
Netduino、まずは基本のLチカ
初めてのNetduinoアプリ開発。まずは基本の基本であるオンボードのLチカから。次にブレッドボード上の外部LEDのLチカも行う。また、ファームウェアの更新方法も説明する。
電子工作の“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接続方法として「USB」を選択すると、デバイス名に「NetduinoPlus2_Netduino」と表示されることを確認。
- 2[Ping]ボタンをクリックして、「TinyCLR」または「TinyBooter」と表示されることを確認する(※表示されない場合は、もう一度、[Ping]ボタンで確認してみてほしい)。なお、何度やってもこういった表示が確認できない場合は、ハード故障などの問題が考えられる。
ファームウェアバージョンの確認
MFDeployを使えば、Netduinoのファームウェアのバージョンを確認できる。
具体的には、MFDeployの(メニューバーから)[Plug-in]-[Debug]-[Show Device Info]メニューをクリックすると、デバイスの状態が表示される(図2)。
図2に示すDevice Info
から得られた情報は次の3つ。
- HALのバージョンは4.2.0.0
- Secret Labs LLC製のNetduino Plus 2でバージョンはv4.2.2.2
- OEMコードは、venderコード=34、modelコード=177、SKUコード=4102
HALバージョンが4.2
なので、このままでは、.NET Micro Framework v4.2までしか動作せず、最新の.NET Micro Framework v4.3をデプロイしようとすると,エラーが表示されてしまう(図3はそのエラー表示の例)。
ファームウェアのバージョンアップ
Netduino Plus 2の最新ファームウェアは、Netduinoフォーラムの該当掲示板(英語)に告知されている(図4)。
執筆時点での最新バージョンはv4.3.1になる。該当エントリの最初のアーティクルの最後に「NetduinoUpdate_4.3.1.0.zip」へのリンクがあるので、リンクをクリックしてダウンロードする(※事前にNetduinoフォーラムのアカウントを作成した上でサインインしておく必要がある)。
ダウンロードした.zipファイルを任意の場所に展開し(例えば、c:\tempフォルダーを作成してそこに展開する)、その中にあるNetduinoUpdate.exeファイルを実行する。これにより、[Netduino Update]ウィンドウが起動する。あとは、図5と下記の手順に従って、最新ファームウェアにアップデートする。
- Netduinoと接続しているUSBケーブルをPCから外す(※このとき、別に電源供給している場合は、電源も外す)
- Netduino上の物理ボタン(1)を押したまま、USBケーブルをPCに刺す。こうすると、bootloaderモードとして接続したことになる
- [Netduino Update]ウィンドウ上に「Netduino Plus 2」と表示されるので、チェックボックス(2)をチェックしてから[Upgrade]ボタン(3)をクリックする
- 無事にアップデートが完了すると、[Netduino Update]ウィンドウ上から「Netduino Plus 2」の表示が消えるので、それまでUSBケーブルを抜かずに待つ
ファームウェアのバージョンアップ確認
ファームウェアがv4.3.1にバージョンアップできたかMFDeployを起動して、Device Info
を確認する。
オンボードLチカ
NetduinoでのLチカの中でも基本中の基本のLチカがオンボードLチカだ。
オンボードLチカは、オンボード上のプッシュスイッチとLEDを使うので(図7)、回路の結線などは不要でアプリ作成だけで実現できる。
アプリ作成
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」というファイル項目が表示される。これらの項目をダブルクリックして、コードエディターで開き、次のようにコードを記載する。
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
|
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初期状態オフ(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」を指定する(※最初からこの設定になっている場合は変更する必要はない)。
この設定が完了後にVisual Studioでプログラムを実行すれば、自動的にNetduinoにアプリが転送されて実行が開始される。もちろん、リモートデバッグもできるので、ブレイクポイントを設定して、変数の確認やステップ実行も可能だ。
このプログラムの挙動を試すには、以下の手順を実施してみてほしい。
- オンボード上のプッシュスイッチを押し続ける
- オンボード上のLEDが光る
- オンボード上のプッシュスイッチを放す
- オンボード上の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の順方向電圧に差がある場合に回路に組み込むのが電流制御抵抗である。電流制御抵抗の値はオームの法則から導き出せる。すなわち、
という式から抵抗値が求められる。
両端電圧(V)が3.3v - 2.0v
で1.3v
となり、電流(I)はどれくらい明るく光らせたいかによるが通常10-20mA
であるので、1.3 ÷ 0.02
~1.3 ÷ 0.01
の計算結果から電流制限抵抗(R)は65Ω
~130Ω
が必要であると分かる。
今回は、これも手元にあったのが理由だが100オーム(Ω)
の抵抗を使用する。
回路作成
ブレッドボードを使ってLEDと抵抗を次のように配線する。
構成を回路図として表したのが次の図である。
アプリ作成
新規にプロジェクトを作成して、オンボードLEDのサンプルと同様なプログラムを作成する(本稿の例では、プロジェクト名はVB.NET用は「ExLEDOnVB」、C#用は「ExLEDOnCS」とした)。
オンボードLEDでは、OutputPortにPins.ONBOARD_LEDを指定したが、今回はLEDが接続する9番ピンをOutportに指定する
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
|
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
}
}
}
}
|
- 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に転送して実行開始した上で、以下の手順を実施してみてほしい。
- オンボード上のプッシュスイッチを押し続ける
- オンボード上のLEDが光る
- オンボード上のプッシュスイッチを放す
- オンボード上のLEDが消える
なお繰り返しになるが、この状態でUSBケーブルをPCから抜き、モバイルバッテリーなどにつなぎ替えると、ブートローダーが不揮発性メモリ上の本プログラムをローディングしてきて実行してくれる。
まとめ
オンボードLEDのLチカとブレッドボードに刺した外部LEDのLチカを紹介した。特に後者はブレッドボードの使い方やLEDの接続方法など電子工作の基礎を意識した内容になっている。日ごろから電子工作をしていれば手元にあまりのLEDや抵抗があるだろう。しかし電子工作になじみがない場合は、LED1つや抵抗1つを入手するのも大変だろう。そのためだけで秋葉原や日本橋などに足を延ばすのも難しい。
そういったときは、通信販売(例えば下記のような通販サイト)などを活用するとよいが、送料を考えるならLEDや抵抗はまとめ買いがよい。
- スイッチサイエンス
- Amazon.co.jp
- せんごくネット通販
- 秋月電子通商(※筆者がよく利用している)
- マルツオンライン(※筆者がよく利用している)
- Wakamatsu PS/PLAZA for Creators(若松通商)(※筆者がよく利用している)
幸いにもArduino関連ではLEDや抵抗がセットになったキット(例えば以下のような電子工作入門キット)もあるので、そういったものを購入するのでもよいだろう。
- Amazon.co.jp: ハック ラズベリーパイ Raspberry Pi 電子工作入門キット
- Amazon.co.jp: Arduinoエントリーキット(ボード別売)
- マルツオンライン: ブレッドボード実験セットA MPK-TR1402-BS マルツエレック製(※今回使ったものと全く同じLEDや抵抗、次回使うセラミックコンデンサーが入っているキット)
次回は気温センサーを使って環境測定を行う予定である。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
2. 【現在、表示中】≫ Netduino、まずは基本のLチカ
初めてのNetduinoアプリ開発。まずは基本の基本であるオンボードのLチカから。次にブレッドボード上の外部LEDのLチカも行う。また、ファームウェアの更新方法も説明する。
3. Netduinoアナログ入力の基本(温度センサー活用)
Lチカができたら、アナログ入力を使ってみよう。温度センサーの値をNetduinoで取得するサンプルを作成し、アナログ入力の基礎を説明する。