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

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

Netduino、知ってますか?

2015年3月24日

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

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

Arduinoを知っていますか?

Arduino Uno

 製品やサービスを介して人同士が対話することを助けるデザイン分野をインタラクションデザイン(Interaction Design)と呼ぶ。このインタラクションデザインの教材として生まれたのがArduino(アルデュイーノ)である。そして、Arduinoを使ったインタラクションデザインの一領域に、フィジカルインタラクションデザイン(フィジカルコンピューティング)がある。

 フィジカルコンピューティングとは、センサーなどを使って入力した値に対して、さまざまな加工を行い、モーターやLEDなどのアクチュエーター(Actuator)を制御することで、人とインタラクション(対話)するシステムのことだ。フィジカルコンピューティングは、アート方向にハマっていくこともできるし、組み込み機器の自動制御方向にハマっていくこともできる。Arduinoを使えば、比較的安価にそういったことが楽しめるため、デザイナーやアーティストにも利用者が多い。

Arduinoのピン構成

 Arduinoは、図2に示す通り、

  • 3つのGND(=グランドピン)(上中央の[GND]と下中央の[POWER]にある2つの[GND]): 電極のマイナス側のピン
  • 電極のプラス側で常に3.3vを出力しているピン([POWER]の[3V3])
  • 電極のプラス側で常に5vを出力しているピン([POWER]の[5V])
  • アプリ側で制御可能な14本のデジタル入出力ピン(右上の[DIGITAL]の[0]~[13]): 入出力はアプリで切り替え
  • 6本のアナログ入力ピン(右下の[ANALOG IN]の[A0]~[A5])
  • 6本のアナログ出力ピン(右上の[DIGITAL]における[PWM=~]の[~3][~5][~6][~9][~10][~11]): アプリでデジタル入出力ピンから切り替え

などのピン位置が決まっている。

図2 Arduinoのピン仕様(Fritzingを使用してボード描画)

 Arduinoにおけるプログラミングとは、

  • デジタル入力ピンからのオン/オフ、もしくはアナログ入力ピンからの値(01023)を取得して
  • その演算結果をデジタル出力ピンへのオン/オフ、もしくはアナログ出力ピンへ値(0255)を設定すること

を意味する。

シールド

 Arduinoが人気である理由の1つに、シールド(Shield)と呼ばれるドーターボード(Daughter board)(=付属的に使用される追加ボード)の存在がある。

 シールドは、そのボード上に各種センサーや制御用のチップが載っていて、Arduinoへの入力やArduinoからの出力ができるような電気特性を持っている。さらに接続用のピンの位置も、Arduinoの上に重ね合わせられるようになっている。そのため、シールドを使えば手軽にArduinoに機能を追加できる。以下は、ArduinoにWi-Fi機能やモーター機能を追加できるシールドの例だ。

シールドの例(WIFIシールド)
シールドの例(モーターシールド
図3 シールドの例(上:WiFiシールド/下:モーターシールド)

 シールドの上下にある黒い長方形の部分がArduinoと接続するためのピンだ。

 Arduinoのハードウェア仕様はオープンソースなので、さまざまなところから互換機が発売されている。ピンの電気特性と位置も仕様で決められているので、その仕様に準拠した互換機であれば、Arduino用のシールドを使うことができる。

 ただし、Arduinoには、デジタル入出力やアナログ入出力の電圧仕様が5v仕様と3.3v仕様のものがあり、使うシールドによっては5v専用のものもあるので注意が必要だ。

Netduinoを知っていますか?

 Netduino(ネットデュイーノ)は、ボードサイズやピンの位置などの外部仕様をArduinoに合わせた3.3v仕様のハードウェアだ。そのため、Arduino用シールドやArduinoを使った回路図なども流用できる。

 NetduinoはArduinoを使うときのハード的なノウハウは流用できるが、Arduinoのアプリ(=スケッチという)は動作しない。それは、Netduinoが.NET Micro Framework 4.3に対応し、C#で作成したアプリが動くように作られており、ソフトウェア的には全く別物になっているからだ。そしてピン互換こそあるが、.NET Micro Frameworkの動作条件を満たすためにCPUやメモリもArduinoよりも高性能なもので構成されている(表1.1の比較表を参照)。

項目Arduino Uno R3Netduino Plus 2
CPU ATmega328P(20MHz 8-bit AVR) STMicro STM32F4 32bit(168MHz Cortex-M4)
メモリ 32Kbytes 384Kbytes
デジタル入出力ピン 14本(5V) 14本(出力3.3V、入力5V)
アナログ入力ピン 6本 6本
アナログ出力ピン 6本 6本
開発環境 Arduino IDE Visual Studio 2013 Community Edition
開発言語 Arduino言語 C#
表1.1 ArduinoとNetduinoの相違点

Netduinoを使うための準備をする

本体の購入

 この連載ではNetduino Plus 2を使用する。日本でNetduino Plus 2を入手するには、Netduino販売元のSecret Labsから輸入するか、日本のスイッチサイエンス社のサイトから購入する。今回はスイッチサイエンス社から購入した(編集部注: お勧め。連載を読みながら試したい人は、次回から実際に使っていくので、このタイミングで購入してほしい)。

ブレッドボードの購入

 Arduino登場以前の電子工作であれば、ユニバーサル基盤(=万能基盤)に抵抗やLED、ジャンパー線などをはんだ付けし、ジャンパー線の先をNetduinoのピンに差し込む、というようなことをしていただろう。

 最近の電子工作ではブレッドボード(図5)と呼ばれる、はんだ付け不要で、差し込むだけで電子工作ができる優れものがある。これであれば何度でも楽に作り直すことができるし、半田ごてによるやけどの心配もない(それはそれで電子工作っぽくなく、寂しいのではあるが……)。

 ブレッドボードで、なぜそのようなことができるかは内部結線(図5)を見ると分かる。

図5 ブレッドボードの内部結線

 ブレッドボードの内部では、縦1列が結線されている。よって、ブレッドボードを使って抵抗LEDをつないで、それをNetduinoのデジタル出力に結線してオン/オフを制御したいときには、次のように差し込んでいく。

図6 ブレッドボードを使った結線例

Fritzingのインストール

 電子部品などのハードウェアではないが、Fritzing無償版(No Donation)をサイトからダウンロードして、任意の場所に展開し、使えるようにしておこう。

 このアプリは、ArduinoやNetduinoのブレッドボード配線を図示できる。また、回路図としても見ることができるので、通電前に机上確認することでLEDやNetduino自体を破壊するような結線になっていないかを目視確認できる。例えば、先ほどの抵抗とLEDをブレッドボードに配線したものは、次のような回線図として表示できる。

図7 Fritzingでの回路図表示

Visual Studio開発環境を準備する

Microsoft Visual Studio Community 2013のインストール

 Arduinoの統合開発環境のArduino IDEも非常によくてできたIDEだが、Netduinoでは、それとは別次元の便利さが享受できるVisual Studio 2013がIDEとなる。当然、Visual StudioのIntelliSense(入力補完)機能も使えるし、Arduino IDEでは不可能だった実機を使ったステップ実行なども可能だ。

 現在、無償版のVisual Studio Community 2013でNetduinoのアプリを作成できるので、それをダウンロードしてインストールしておこう。しかしVisual Studio Community 2013を利用するには、いくつかの条件があるので注意してほしい(利用条件の対象外の場合は、有償版を購入する必要がある。無償で使える対象は例えば、個人開発者であれば有償開発にも使用できるし、大企業であっても、Netduinoを使って社内教育をセミナールームなどの研修環境で実施するような場合にも使える。有償版が手元にないのであれば、この機会にインストールしておくと便利だろう)。

Microsoft .NET Micro Framework SDKのインストール

 Microsoft .NET Micro Frameworkのサイトから最新版(2015年3月20日時点ではv4.3 QEF2)の.zipファイルをダウンロードする。

 ダウンロードしたファイル(本稿の例ではnetmf-v4.3.2-SDK-QFE2-RTM.zipファイル)を解凍して、その中にある次の2つのインストーラーファイルを順番に実行してインストールする。

(1)MicroFrameworkSDK.MSI: .NET Micro Framework SDKのインストーラー
(2)Netmfvs2013.vsix: Visual Studio 2013用の拡張機能のインストーラー

Netduino SDK v4.3.1のインストール

 Netduinoのサイト掲示板からNetduino Plus 2用の最新SDK(本稿の例ではVisual Studio 2013に対応している最新版のnetduinosdk_NETMF43.exeファイル)をダウンロードしてインストールする。

図8 Netduino SDK v4.3.1のインストール

テンプレートの確認

 全てのインストールが完了したら、Visual Studioを起動して(メニューバーから)[ファイル]-[新しいプロジェクト]メニューをクリックして、表示されるダイアログの[Micro Framework]カテゴリに「Netduino Plus 2 Application」テンプレートが追加されていることが確認できれば準備は完了だ。

図8 「Netduino Plus 2 Application」テンプレート

まとめ

 Netduinoという名前から、単にArduinoのスケッチがC#で書けるようにしたもの程度に思っていたが、実際は.NET Micro Frameworkと呼ぶ.NET Frameworkシリーズの最小フレームワークに対応しているパワフルなハードウェアであった。内容を知らずに価格だけ見ていると、Netduino Plus 2=6480円Arduino Uno R3=3240円の価格差に驚いてしまうが、CPU性能やメモリ容量を考えると妥当な価格差といえるだろう。

 また、単に「C#で書ける」という世界ではなく、「.NET Micro Frameworkで動作する」ことを考えると、Netduinoで得られたプログラミングの知識を、他の.NET Micro Framework対応のボードでも応用できるし、回路やセンサーなどの使い方もArduinoで流通しているノウハウを生かせる強みもある。まさにArduinoと.NET Micro Frameworkの、いいとこ取りだ。

 そんなNetduinoを、この連載に合わせて始めてみてはいかがだろうか。もちろん、今はやりのIoT(Internet of Things)についても視野に入れた構成になっている。

 さて、次回はいよいよアプリの作成に入る。Netduino SDKは、Visual Basic(.NET)とC#に対応しているので、本連載では両方のコードを提示していくのでご期待いただきたい。

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

.NET対応組み込みデバイス「Netduino」入門(1)
1. 【現在、表示中】≫ Netduino、知ってますか?

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

.NET対応組み込みデバイス「Netduino」入門(1)
2. Netduino、まずは基本のLチカ

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

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

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

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

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

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

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

サイトからのお知らせ

Twitterでつぶやこう!