ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘開発

片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(5) – 「検索条件ビルダー」を使ってキーワードによる「部分一致」検索をノンコードで実装する

with one comment

前回の記事で「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(4) – 「検索条件ビルダー」を使ってキーワードによる「前方一致」、「後方一致」、「部分一致」検索を実装する」を紹介した。今回は「条件検索ビルダー」を使ってノンコードで「部分一致」を実装する手順を紹介する。Visual Studio 2013 で「検索条件ビルダー」を使えば、一行もコードを書く必要はない。

Visual Studio 2013 を起動し、C#の Windows Form アプリケーションの新しいプロジェクトを作成する。データ接続は「データソース構成ウィザード」で SQL Server のテーブルに接続しておく。データソースを構成したら、接続先のテーブルを画面にドラッグしてデータグリッドビューを作成する。ここまでの手順は、前回までの記事を参考にしてほしい。

部分一致_001_mid_640

<Fig.1 : データソース構成ウィザードで SQL Server に接続するデータグリッドビューを作成した>

生徒BindingSource または生徒TableAdapter、あるいはデータグリッドビューを選択して右上に表示される「スマートタグ」の小さな三角アイコン▲をクリックし「クエリの追加」をする。

部分一致_003_mid_640

<Fig.2 : バインディングソースのスマートタグから「クエリの追加」を行う>

「条件検索ビルダー」が起動するので、クエリテキストを次のように変更する。

——————————————————————-
SELECT 学籍番号, 氏名, クラス, 住所, 性別, 性別コード FROM dbo.生徒
WHERE 氏名 LIKE ‘%’ + @SelectNamePartial + ‘%’
——————————————————————-

SQL 文では文字列をシングルクォーテーションで挟む。パラメータクエリのパラメータの前後に、シングルクォーテーションで挟んだ「%」の文字列を加えると、部分一致のクエリになる。

部分一致_004

<Fig.3 : 「条件検索ビルダー」でクエリテキストを編集する>

「検索条件ビルダー」を終了すると、フォームに fillByToolStrip が生成している。これだけで、この検索は、部分一致になっている。

部分一致_005_mid_640

<Fig.4 : 「条件検索ビルダー」を終了すると fillByToolStrip が生成している>

部分一致のクエリを実装するにはこれだけでいい。ビルドして動作を確認する。

部分一致_006_mid_640

<Fig.5 : ビルドして部分一致を確認する>

このように「検索条件ビルダー」のクエリさえ記述すれば、部分一致の検索フォームをノンコードで作ることができる。検索条件ビルダーを活用して、データベース接続アプリケーションを簡単に作ろう。

<前の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(4) – 「検索条件ビルダー」を使ってキーワードによる「前方一致」、「後方一致」、「部分一致」検索を実装する

片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(4) – 「検索条件ビルダー」を使ってキーワードによる「前方一致」、「後方一致」、「部分一致」検索を実装する

with 5 comments

Microsoft Visual Studio 2013 を使えば、ノンコードで SQL Server に接続するデータベースアプリケーションを作ることができることを紹介した。前回「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する」では、全文一致検索によってデータを絞り込むアプリケーションは「条件検索ビルダー」でノンコードで実装できることを紹介した。今回は、キーワードの「完全一致」ではなく、「前方一致」あるいは「後方一致」、「部分一致」で検索するフォームを作ってみよう。「前方一致」あるいは「後方一致」、「部分一致」を「条件検索ビルダー」を使って実装するには、SQL 文を LIKE 演算子で構成するとよい。

Visual Studio 2013 を起動し、新しいプロジェクトを作成する。言語はC#として Windows Form フォームアプリケーションを作ろう。

前方一致後方一致_001_mid_640

<Fig.1 : Visual Studio 2013 で Windows Form アプリケーションを作る新しいプロジェクトを始める>

次にデータ接続を作成しよう。画面の右端「データソース」タブを展開し、「新しいデータソースを追加」する。データソースの構成は「データソース構成ウィザード」で画面に従ってすすめる。説明は省略するが、画面ショットだけ紹介しよう。

前方一致後方一致_002_mid_640

<Fig.2 : 「データソース」タブを展開し「新しいデータソースの追加」をクリックして「データソース構成ウィザード」をはじめる>

前方一致後方一致_003_mid_640

<Fig.3 : 「データソース構成ウィザード」でデータソースの種類を選択する>

前方一致後方一致_004_mid_640

<Fig.4 : 「データソース構成ウィザード」でデータベースモデルを選択する>

前方一致後方一致_005_mid_640

<Fig.5 : 「データソース構成ウィザード」でデータ接続を選択する>

前方一致後方一致_006_mid_640

<Fig.6 : 「データソース構成ウィザード」で接続文字列をアプリケーション構成ファイルに保存する>

前方一致後方一致_007_mid_640

<Fig.7 : 「データソース構成ウィザード」でデータベースオブジェクトを選択する>

「データソース構成ウィザード」を終了すると、データソースに接続先の SQL Server のテーブルが表示される。「生徒」テーブルをデザインビューのフォームへドラッグし、データグリッドビューを作成しよう。データグリッドビューを作成したら、すべてのフィールドが表示されるようにデータグリッドビューを右に広げよう。

前方一致後方一致_008_mid_640

<Fig.8 : 「データソース構成ウィザード」でデータソースが構成できた>

前方一致後方一致_009_mid_640

<Fig.9 : 構成したデータソースから「生徒」テーブルをフォームにドラッグしてデータグリッドビューを作成する>

データグリッドビューが生成すると同時に、データ接続に関するオブジェクトが5つ生成する。データセット、バインディングソース、テーブルアダプター、テーブルアダプタマネージャー、そしてバインディングナビゲーターだ。このうち、生徒BindingSource または生徒TableAdapter、あるいはデータグリッドビューを選択して右上に表示される「スマートタグ」の小さな三角アイコン▲をクリックし「クエリの追加」をする。

前方一致後方一致_010_mid_640

<Fig.9 : スマートタグから「クエリの追加」を行う>

スマートタグから「クエリの追加」を行うと「条件検索ビルダー」ウィンドウが表示される。ここで絞り込む検索条件を次のように LIKE 演算子を使ってクエリテキストを編集しよう。

——————————————————————-
SELECT 学籍番号, 氏名, クラス, 住所, 性別, 性別コード FROM dbo.生徒
WHERE 氏名 LIKE @SelectNameLike
——————————————————————-

前方一致後方一致_011

<Fig.10 : スマートタグから「クエリの追加」を行い「条件検索ビルダー」を起動する>

前方一致後方一致_012

<Fig.11 : 「条件検索ビルダー」でクエリテキストを編集する>

クエリを設定するとフォームに fillByToolStrip が自動的に生成する。次にフォーム上にテキストボックスとボタンを作成し、ボタンのテキストを「前方一致」とする。そしてボタンのクリックイベントに次のコードを書く。SQL 文では「%」が任意の文字列をあらわすのだ。

——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, textBox1.Text + "%");
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

前方一致後方一致_013_mid_640

<Fig.12 : フォームにテキストボックスと「前方一致」のボタンを作る>

前方一致後方一致_014_mid_640

<Fig.13 : 「前方一致」ボタンのクリックイベントにコードを書く>

同様に「後方一致」と「部分一致」、「全件取得」のボタンを作成する。ボタンのクリックイベントにそれぞれ次のコードを書く。

<「後方一致」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, "%" + textBox1.Text);
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

<「部分一致」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, "%" + textBox1.Text + "%");
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

<「全件取得」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.Fill(this.mYSQLSVDataSet.生徒);
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

前方一致後方一致_015_mid_640

<Fig.14 : 「後方一致」、「部分一致」、「全件取得」ボタンを作りクリックイベントにコードを書く>

ビルドしてテキストボックスに入力し、絞り込み検索を確かめる。

前方一致後方一致_016_mid_640

<Fig.15 : アプリケーションをビルドして「後方一致」、「部分一致」、「全件取得」の動作を確かめる>

このように前方一致、後方一致または部分一致のフォームを作るには、検索条件ビルダーで SQL 文を LIKE 演算子で絞り込むこととし、fillBy メソッドの文字列に SQL 文で任意の文字列を示す「%」を加えるといい。

<前の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する

<次の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(5) – 「検索条件ビルダー」を使ってキーワードによる「部分一致」検索をノンコードで実装する

片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する

with 5 comments

前回の記事「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(2) – テーブル接続一対一アプリケーションの作成手順」で Visual Studio 2013 を使えば SQL Server のテーブルに対して1対1で接続するアプリケーションは、ノンコードであっという間に作ることができる手順を紹介した。しかし、データが少ない場合はともかく、たいていの場合テーブルにストアされているデータを全部いちどに取得することは考えにくい。なんらかのキーを使って選択して取得することが必要だ。データセットにキーワードをパラメーターとして渡す、いわゆる「パラメータクエリ」の実装だ。

Visual Studio 2013 の「検索条件ビルダー」を使えば、単純キーワードでデータを選択して取得するフォームをノンコードで作ることができる。

前回作ったフォームのデザインビューで、下部のデータ接続関係のオブジェクトが並んでいるところに「生徒TableAdapter」という名前のテーブルアダプターがある。これをマウスでポイントすると、右上に「スマートタグ」と呼ばれる小さな三角アイコン▲が表示される。これをクリックすると「生徒TableAdapterタスク」というタスクの一覧が表示される。ここで「クエリの追加」をクリックする。

VS2013_30_query_003_mid_640

<Fig.1 : 「生徒TableAdapterタスク」で「クエリの追加」をする>

「検索条件ビルダー」のウィンドウが表示されるので「クエリテキスト」に絞り込みたい検索条件を SQL 文で記述する。記述式の例文がウィンドウ下部にあるので、それにならって式を作ろう。ここでは「性別」をキーワードにして「男」か「女」かを絞り込むことにし、次のような式を書く。

SELECT 学籍番号, 生徒氏名, 性別, 作成日, 更新日 FROM dbo.生徒 WHERE 性別 = @SelectSeibetsu

SQL 文のステートメントは大文字小文字を区別しない。また改行して記述しても連続した一文とみなされる。@のパラメータ名は自分で好きなものを決めればいい。

VS2013_30_query_005

<Fig.2 : 「検索条件ビルダー」で選択条件クエリを実装する>

やるべきことはこれだけだ。「OK」を押してデザインビューに戻ると、フォームに新しいメニューが自動的に生成し、下部には「fillByToolStrip」が生成したことがわかる。

VS2013_30_query_006_mid_640

<Fig.3 : フォームに「fillByToolStrip」が生成した>

ビルドしよう。fillByToolStrip のテキストボックスに「男」や「女」を入力して「FillBy」をクリックすると、男だけ、女だけのデータが絞り込まれて表示される。

VS2013_30_query_008

<Fig.4 : fillByToolStrip で男だけのデータを絞り込むことができた>

このように「検索条件ビルダー」を使えば、このようなパラメータクエリをノンコードで実装できる。これまでデータベースアプリケーションを作ることが難しいと断念していた者は、ぜひ試してほしい。

<前の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(2) – テーブル接続一対一アプリケーションの作成手順

<次の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(4) – 「検索条件ビルダー」を使ってキーワードによる「前方一致」、「後方一致」、「部分一致」検索を実装する

片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(2) – テーブル接続一対一アプリケーションの作成手順

with 4 comments

前回の記事「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(1) – テーブル接続一対一の一般的な業務アプリケーションは30秒でできる。」にも書いたが、プログラミングが簡単にできるようになった、と言っても、数年前までは SQL Server のようなデータベースに接続してデータを送受信する、クライアント・サーバー型のアプリケーションを作るのは、やはりそれなりに難しかった。初心者向けのプログラミング解説書は、たとえば「電卓」や「メモ帳」のようなWindows Form 上で機能するアプリケーションの作り方はたいへん丁寧に説明され、誰でもすぐに作ることができるようになっているが、データベースに接続するクライアント・サーバー型のアプリケーションの作り方は全く説明されないか、説明があっても少しだけで、業務に使えるアプリケーションを作るまでには説明されていない。そこで「データベースアプリケーションの作り方」といった書籍をみることになるが、こちらは敷居が高く、読み進めるための高度な前提知識が必要で断念せざるを得ない場合が多い。

しかし今は違う。Visual Studio 2013 がある。

Visual Studio 2013 を使えば、SQL Server に接続するクライアントアプリケーションはあっという間にできる。単にテーブルと一対一で接続し、データを閲覧、編集することでよければ、ウィザードをすすめることで数分、極端な場合たった30秒で作ることができる。手順を紹介しよう。ここで使うのは Microsoft の Web サイトから無償でダウンロードできる Visual Studio Express 2013 for Desktop だ。

まず Visual Studio 2013 を起動し「新しいプロジェクト」をクリックする。テンプレートは Windows フォームアプリケーション、言語は C# を選ぼう。

VS2013_30_minuits_001_mid_640

<fig.1 : Visual Studio 2013 を起動し「新しいプロジェクト」をクリックする>

VS2013_30_minuits_002_mid_640

<fig.2 : テンプレートを Windows フォームアプリケーション、言語は C# とする>

VS2013_30_minuits_003_mid_640

<fig.3 : Windows フォームアプリケーションを作る準備ができた>

空白のフォームが生成しフォームアプリケーションを作る準備ができた。次に SQL Server に接続するための「データ接続」を構成しよう。「データ接続」を構成するには、画面の左にたたまれているタグ「データソース」をクリックして開く。「プロジェクトには現在関連データソースがありません。」と表示がされるので、「新しいデータソースの追加」をクリックする。

VS2013_30_minuits_004_mid_640

<fig.4 : 「データソース」タグをクリックして「データソース」を構成する>

「データソース」タグをクリックして「データソース構成ウィザード」をはじめる。まず「データソースの種類を選択」をする。ここではSQL Server に接続したいので「データベース」を選ぶ。

VS2013_30_minuits_005_mid_640

<fig.5 : 「データソース構成ウィザード」で「データソースの種類を選択」をする>

次に「データベースモデルの選択」をする。「データソースの種類を選択」で「データベース」を選んだ場合は「データセット」しか選択肢がない。

VS2013_30_minuits_006_mid_640

<fig.6 : 「データソース構成ウィザード」で「データベースモデルの選択」をする>

次に「データ接続の選択」になるが、もし Visual Studio で一度でもデータ接続を作ったことがあれば、作ったことのあるデータ接続の名前が表示されており選択できるようになっている。これを使ってもいいし、あるいは利用できるデータ接続が表示されない場合は「新しい接続」ボタンをクリックしてデータ接続を作成する。

VS2013_30_minuits_007_mid_640

<fig.7 : 「データソース構成ウィザード」で「データ接続の選択」をする>

「データ接続の選択」で「新しい接続」をクリックすると「接続の追加」ウィンドウが表示される。デフォルトで「データソース」が Microsoft SQL Server (SqlClient) になっていることを確認し、「サーバー名」のドロップダウンリストボックスをクリックすると、その環境で利用することができる SQL Server の一覧が表示される。なお「サーバーへのログオン」はデフォルトで「Windows 認証を使用する」となっている。これはActive Directory のユーザー認証を使って SQL Server にログオンする方法で、SQL Server への接続にいちいち ID やパスワードを要求されず、ユーザー管理を Active Directory で一元管理できる方法で「統合 Windows 認証」などと呼ばれることもある。もう一方の「SQL Server 認証」は認証を SQL Server で行う方法で、Active Directory を使わない環境などではこちらを利用することになる。ユーザー認証は一元管理することが望ましいので、推奨されるのは「Windws 認証」だ。

VS2013_30_minuits_008

<fig.8 : 「データソース構成ウィザード」で「接続の追加」をする>

「サーバー名」を選択できたらグレーアウトしていた「データベースへの接続」項目を設定することができる。「データベース名の選択または入力」のドロップダウンリストボックスで、対象の SQL Server の利用できるデータベース名が一覧で表示されるので、接続したいデータベース名を選択する。

VS2013_30_minuits_009

<fig.9 : 「データソース構成ウィザード」で「接続の追加」をし「データベースへの接続」を設定する>

「データベースへの接続」が設定できたら念のため「テスト接続」のボタンをクリックして SQL Server に接続できることを確認しよう。「テスト接続に成功しました。」のメッセージウインドウが表示されればいい。

VS2013_30_minuits_010

<fig.10 : 「データソース構成ウィザード」で「テスト接続」をしテスト接続が成功したメッセージ>

次に進むと「データ接続の選択」に戻り、「アプリケーションがデータベースへの接続に使用するデータ接続」に新たに作成されたデータ接続が表示されている。この名称は、コンピュータ名+SQL Server インスタンス名+データベース名のように付けられる。

VS2013_30_minuits_011_mid_640

<fig.11 : 「データソース構成ウィザード」で「テスト接続」をしテスト接続が成功したメッセージ>

ここまででデータベースへの接続文字列が自動的に生成している。これを確認するには「アプリケーションに保存する接続文字列(詳細を参照するために展開」を展開する。

VS2013_30_minuits_012_mid_640

<fig.12 : 「データソース構成ウィザード」でアプリケーションに保存する接続文字列を確認する>

この接続文字列を直接編集することはないが、Visual Studio 2013 のデータソースウィザードを使わず手作業でデータベースの接続を構成する場合には参考になる。

次にすすむと「接続文字列をアプリケーション構成ファイルに保存する」のメッセージが表示される。接続を保存する名前が自動的につけられており、特に必要がなければ変更する必要はない。

VS2013_30_minuits_013_mid_640

<fig.13 : 「データソース構成ウィザード」で接続文字列をアプリケーション構成ファイルに保存する>

データベースへの接続文字列が保存されたら、次はこのフォームに接続するテーブルやビュー、ストアドプロシージャなどを選択する。接続したいテーブルやビュー、実行したいストアドプロシージャなどをチェックボックスで選択して「完了」をクリックする。これでデータソース構成ウィザードは終了だ。

VS2013_30_minuits_014_mid_640

<fig.14 : 「データソース構成ウィザード」で接続したいテーブルやビュー、ストアドプロシージャなどを選択する>

データソース構成ウィザードを終了すると Visual Studio 2013 の開発画面に戻る。展開された左のタブ「データソース」にデータソース構成ウィザードで構成したデータセットと接続するテーブル名が表示されている。テーブル名を展開するとフィールドが確認できる。

このテーブルの内容をフォームに表示し、データを編集できるようにするには、ただ一つの操作だけ、テーブル名をフォームにドラッグするだけだ。

VS2013_30_minuits_016_mid_640

<fig.15 : 「データソース」タブのテーブル名「生徒」をフォームにドラッグしてデータグリッドビューなどを生成した>

「データソース」タブのテーブル名「生徒」をフォームにドラッグすると、生徒テーブルのフィールド名を項目とする表形式の「データグリッドビュー」が生成する。またフォームの上部には、データの移動や保存、削除などを操作するためのメニューバーのような「バイディングナビゲーター」もできる。それ以外にもフォーム上の形には現れないが、SQL Server とデータをやりとりするための概念的なオブジェクト「データセット」や「バインディングソース」、「テーブルアダプター」、「テーブルアダプターマネージャー」、そして「バインディングナビゲーター」が自動的に生成する。これら概念的なオブジェクトはデータを操作するプログラムで使われるが、テーブルのデータに単純に接続するだけのアプリケーションでいいなら、特に詳細を知る必要はない。

このままではテーブルのフィールドが一覧できないので、フォームとデータグリッドビューを横に大きくし、フィールドの幅を整えるなどの調整をする。

VS2013_30_minuits_017_mid_640

<fig.16 : デザインビューでフォームとデータグリッドビューの大きさ、フィールドの幅を調節する>

ビルドしてアプリケーションを実行すると、SQL Server からデータを取得し、データグリッドビューに表示される。

VS2013_30_minuits_018

<fig.17 : ビルドしてアプリケーションを実行する>

このように手順を説明すると手間がかかるように見えてしまうが、実際はウィザードを画面にしたがって進めるだけなので拍子抜けするほど簡単だ。これまでデータベースアプリケーションの作成に苦戦した人には、目から鱗が落ちる開発プロセスだろう。

簡単な Windows Form アプリケーションは作ることができるが、データベース接続は難しい、と思って諦めていた人には絶好のチャンスが訪れた。そう思って、ぜひ Visual Studio 2013 と SQL Server を使ってデータベースアプリケーションのプログラミングにチャレンジしてしてほしい。

<前の記事>
「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(1) – テーブル接続一対一の一般的な業務アプリケーションは30秒でできる。」

<次の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する

Microsoft MVAで自宅にいながらインターネットでトレーニングを受けることができる。ビデオ教材もあり、日本語コンテンツもある。

leave a comment »

「Microsoft MVA」は「マイクロソフト・バーチャル・アカデミー」の略。インターネットでマイクロソフト製品の使い方などを学ぶことができる。

Microsoft Virtual Academy
http://www.microsoftvirtualacademy.com/?mtag=MVP10329

Microsoft_Virtual_Academy_mid_640

コンテンツはWebテキスト、PDF、ビデオ教材などさまざまなものが用意されている。日本語だけではなく英語のコンテンツも多いが、ビデオ教材では英訳がついたものもある。

ビデオ教材では、マイクロソフトの著名なエバンジェリストから講義を受けることができる。たとえば「いまさら聞けないWindowsストアアプリ開発入門」では、「Windows Phoneゲーム プログラミング」や「ゼロからはじめるプログラミング 第2版 ソフトウェア実践講座」、「Silverlight大全(共著)」などの著者で、マイクロソフトのエバンジェリスト田中達彦氏からレクチャーを受けることができる。

ビデオ教材では実際に開発をする場面を見ることができ、文章や話し言葉ではわかりにくい開発の実際に触れることができる。これからは自宅で、あるいは職場で、時間の持てるときにこのようなWeb教材で学習する時代になる。今後ますますコンテンツが充実し、開発や運用のトレーニングがしやすくなることを期待し、また楽しみにしている。ぜひ体験してもらいたい。

Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その2 – 光センサの値をArduinoで読みとりシリアルポートでPCに送信する

with one comment

ArduinoはUSBインタフェースをもっており、PCで作った「スケッチ」と呼ぶプログラムをArduinoにアップロードするために使われるが、このUSBインターフェースを介してArduinoとPCの間でデータ通信をさせることもできる。このとき、物理的にはUSBインタフェースを使うが、プログラム上はシリアル通信でデータを送受信する。なぜUSBでシリアル通信ができるかといえば、ArduinoにはシリアルコンバーターATmega8U2が組み込まれており、一方PC側にはArduino用のシリアルUSBドライバをインストールしてあるからである。

コンピュータのコントロールパネルから「デバイスマネージャ―」を開き「ポート」を展開すると「Arduino UNO R3 (COM3)」ドライバがあるのがわかる。そしてドライバのプロパティを開き「ポートの設定」をみると、シリアル通信の定義がわかる。またここで「詳細設定」のボタンをクリックすれば「COMポート番号」を変更することができる。

Arduino_002_Serial_001_mid_640

<Fig.1 : デバイスマネージャでArduino UNO R3ドライバを確認する>

Arduino_002_Serial_002

<Fig.2 : Arduino UNO R3ドライバのプロパティでポートの設定を確認する>

まずArduinoとPCでシリアル通信のテストをしてみよう。Arduinoには一定の間隔でデータをシリアルポートに送信するスケッチを書き、実行する。PC側ではシリアル通信のデータを受け取るコンソールアプリケーションを作る。

Arduinoのスケッチは次のようになる。一定の間隔で変数iをカウントアップし、シリアルポートに送信するものだ。

Arduino_002_Serial_003

<Fig.3 : シリアルポートからカウントアップした値を連続出力するスケッチ>

次にVisual Studioでシリアルポートからデータを受信するコンソールアプリケーションを作る。System.IO.Ports名前空間を追加しておくことを忘れずに。

————————————————————————————

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace Arduino_001_Com_Read
{
    class Program
    {
        static bool running = true;
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM3");
            mySerialPort.BaudRate = 9600;
            mySerialPort.Open();
            while (running)
            {
                string myData = mySerialPort.ReadLine();
                Console.WriteLine(myData);
            }
        }
    }
}

————————————————————————————

Arduinoに作ったスケッチを書き込んでおく。スケッチを書き込むとArduinoはシリアルポートに対して数字をカウントアップしながらデータを出力し始める。一方PCではシリアルデータを受け取るコンソールアプリケーションをビルドし起動する。するとコンソールにArduinoから数字データが連続して受信されることが確認できる。これでArduinoからPCにシリアルデータが送受信できたことが確かめられた。

Arduino_002_Serial_004_mid_640

<Fig.4 : コンソールアプリケーションでArduinoからシリアルポートに送信される数字データを受信する>

ではArduinoに光センサを取り付け、センサの値を読み取ってシリアルポートに送信してみよう。光センサとArduinoの接続はブレッドボードを使うといいだろう。Arduinoのアナログ入力はA0を使うこととし、ピンA0を光センサの一方の端子に接続する。次の写真では緑色のジャンパワイヤを使っている。光センサのもう一方の端子はArduinoの5V出力に接続する。写真では赤色のジャンパワイヤだ。ArduinoのピンA0に接続した光センサの端子には、10kΩの抵抗をつけ、ArduinoのGNDへ接続する。

Arduino_002_Serial_005_circuit_2_mid_640

<Fig.5 : Arduinoと光センサ、抵抗の接続図>

先に作ったArduinoのテスト用スケッチをスケッチを次のように変更する。シリアルポートに出力するiの値をアナログI/OのA0から取得し、改行する。Serial.print()の第2引数「DEC」は出力フォーマットを10進数にするという意味だ。また値を取得する間隔を一定程度あけるため、delay(1000)を書いている。delayの単位はミリ秒なので、delay(1000)は1秒だ。

Arduino_002_Serial_006

<Fig.6 : Arduinoで光センサの出力をシリアルポートに送信するスケッチ>

Arduinoにスケッチを書きこんだら、シリアルポートに光センサの値を出力しはじめる。Visual Studioで作ったシリアルポートの値を取得するコンソールアプリケーションは最初に作ったテスト用のものでいい。コンソールアプリケーションを起動すると次のように光センサの出力を受信しはじめる。光センサを手で覆ったり、部屋の明かりを強くしたりしてセンサの出力が変わることを確かめよう。

Arduino_002_Serial_007_mid_640

<Fig.7 : Arduinoから光センサの出力を受け取るコンソールアプリケーション>

Arduinoはスタンドアロン型のマイコンボードだが、このようにセンサの値ををシリアル出力にするインタフェースとして使うこともできる。光センサを温度センサや距離センサに置き換えると、温度や距離をPCで受け取ることもできる。Arduinoで各種センサを使う方法はいくつかの書籍で紹介されており、Webでも公開されている。Arduinoとブレッドボードを使えば、はんだ付けをする必要なくセンサの実験ができる。教科「情報」でセンサの実習に使うこともできるだろう。

●関連記事

「Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その1 – シリアルポートで文字を送信しLEDをON、OFFする」
https://matsumotoyoshio.wordpress.com/2013/02/03/arduino-uno%e3%82%92windows-7%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%97visual-studio-2012-express-for-windows-desktop%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6c%e3%81%a7%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9/

Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その1 – シリアルポートで文字を送信しLEDをON、OFFする

with 3 comments

Arduinoは「アルドゥイーノ」と読み、AVRマイコンと入出力ポートを備えた基板、C言語風のArduino言語とそれの統合開発環境から構成されるシステムで、2005年にイタリアで始まったプロジェクトで、学生向けの安価なロボット製造用コントロールデバイスのプロトタイピング・システムを製造する目的で設計された。スタンドアロン型のインタラクティブデバイスとしてだけでなく、ホストコンピュータ上のソフトウェアで制御することもできる。オープンソースハードウェアであり、ハードウェア設計情報が公開され、誰でも自分の手で組み立てることができるが、多くの組み立て済みの基板が販売されており、またLEDや抵抗、ジャンパケーブルなど実験に必要な部品をあわせたキットもあり、これらを購入して手軽に実験を始めることができる。

コンピュータとの接続はRS-232シリアル接続で行う設計がされているが、発展形のモデルにはUSB-to-serial アダプタチップが表面実装されるなどしており、USBでコンピュータに接続するようになっている。Arduino UnoではFTDIを使わずAVRマイコンにUSBシリアル変換機能を搭載し、このマイコンにプログラムすることで様々なUSBデバイスとして動作させることができるようになっている。今回の実験で使ったのは、Physical Computing Labが発売している「Arduinoエントリーキット」だ。

IMG_1342_mid_640_480

<Fig.1 : Physical Computing Labの「Arduinoエントリーキット」>

いくつかの日本語の書籍が出版されているので参考にすることができるが、C#によるプログラミングでArduinoを制御したかったので、洋書「Getting Started with Arduino and .NET」をKindleストアで購入した。著者はAgus Kurniawanだ。このような技術書を読むには一般サイズのKindleでは小さすぎ、Kindle DXを使うのがいい。

IMG_1344_mid_640_480

<Fig.2 : Kindleストアで購入しKindle DXで開いた洋書「Getting Started with Arduino and .NET」>

「Arduinoエントリーキット」にはArduino UNOが入っている。これを付属のUSBケーブルでPCに接続しよう。

IMG_1345_mid_640_480

<Fig.3 : Arduino UNOを付属のUSBケーブルでPCに接続する>

Windowsがドライバを適用しようとするが、デバイスドライバがないため、デバイスドライバのインストールに失敗する。コントトールパネルのデバイスマネージャをみてみよう。

20130202_ArduinoInstall_001_mid_640

<Fig.4 : デバイスマネージャでArduino UNOは「不明なデバイス」となっている>

Arduinoの開発環境とデバイスドライバは、http://arduino.cc/en/Main/Softwareから取得することができる。Windows用のソフトウエアをダウンロードし、解凍する。ドライバは「drivers」フォルダに入っているので、デバイスマネージャで「ドライバーソフトウエアの更新」を行う。「不明なデバイス」が「ポート(COMとLPT)」の下に「Arduino UNO R3 (COM3)」となればドライバのインストールが完了だ。

20130202_ArduinoSoftware_001_edit_002_mid_640

<Fig.5 : 開発ツールとドライバをダウンロードするし解凍したArduino.cc>

20130202_ArduinoInstall_005_mid_640

<Fig.6 : ダウンロードし解凍したArduinoソフトウエアのファイル>

20130202_ArduinoInstall_004_mid_640

<Fig.7 : デバイスマネージャでドライバーソフトウエアの更新」を行いArduino UNO R3 (COM3)を認識した>

ダウンロードしたArduinoソフトウエアのフォルダにあるarduino.exeがArduinoソフトウエアで提供される開発環境だ。専用の開発環境でテストをするためにarduino.exeを起動しよう。開発ツールは多言語化されており、そのままでメニュー等は日本語になっている。最初に起動したとき、シリアルポートの認識に失敗することがある。開発ツールの右下にCOMポートが表示されているので、もしデバイスマネージャに表示されたCOMポートと異なる表示であれば、「ツール」の「シリアルポート」で設定をする。

20130202_ArduinoDevelop_001_edit

<Fig.8 : Arduino開発ツールでシリアルポートの設定をする>

Arduino開発ツールでは、プログラムは「スケッチ」と呼ばれており、いくつかのチュートリアル的なサンプルプログラムがあらかじめ開発ツールに用意されている。まずLEDを点滅させるプログラムを実行し、Arduinoの動作を確認しよう。サンプルプログラムは「ファイル」メニューの「スケッチの例」から呼び出すことができる。「01.Basics」の中から「Blink」を呼び出すと開発ウィンドウが新たに別ウィンドウで表示される。

ArduinoにはLEDと抵抗を13番のディジタル出力ピンとGNDに接続する。キットに付属のブレッドボードを使うと良いだろう。サンプルコードの「Blink」では、13番ディジタル出力の出力を1000msごとにHighレベルとLowレベルを切り替えている。コードを確認し、コンパイルしてArduinoに書き込み動作を確認しよう。

IMG_1365_mid_640_480

<Fig.9 : ブレッドボードを使ってArduinoにLEDと抵抗を接続する>

IMG_1366_mid_640_480

<Fig.10 : 「Blink」のサンプルコードでLEDが点滅する(1)>

IMG_1367_mid_640_480

<Fig.11 : 「Blink」のサンプルコードでLEDが点滅する(2)>

ではArduinoがPCからシリアルポートで受信した文字によってLEDをON、OFFするプログラムをしよう。Arduinoでシリアルポートを監視し、文字を受け取るプログラムは「スケッチの例」の「09.USB」にある「KeyboardAndMouseControl」を参考にすると良いだろう。シリアルポートで受け取った文字が「h」ならLEDを光らせ、「l」なら消すプログラムとし、できたらArduinoに書き込もう。

20130202_ArduinoDevelop_004

<Fig.12 : Arduinoのシリアルポートを監視し、送られた文字でLEDをON、OFFするスケッチ>

次にVisual Studioでシリアルポートに文字を送るコンソールアプリケーションを作る。System.IO.Ports名前空間を追加しておくことを忘れずに。

————————————————————

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace Arduino_002_Com_Write
{
    class Program
    {
        static bool running = true;
        static string mySwitch = "l";

        static void Main(string[] args)
        {
            while (running)
            {
                SerialPort mySerialPort = new SerialPort("COM3");
                mySerialPort.BaudRate = 9600;
                mySerialPort.Open();
                mySerialPort.Write(mySwitch);
                mySerialPort.Close();

                mySwitch = Console.ReadLine();
            }
        }
         
    }
}

————————————————————

作ったコンソールアプリケーションをビルドし、コンソールで「l」や「h」の文字を入力すると、Arduinoに接続したLEDがON、OFFすることが確かめられる。

20130202_ArduinoDevelop_005_mid_640

<Fig.13 : Visual Studioで作ったコンソールアプリケーションからArduinoのシリアルポートに文字を送る>

IMG_1370_mid_640_480

<Fig.14 : コンソールアプリケーションから文字を受け取りArduinoがLEDをON、OFFする>

●追記:C#ソースコードに名前空間を追加(2013/06/01)

●関連記事

「Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その2 – 光センサの値をArduinoで読みとりシリアルポートでPCに送信する」
https://matsumotoyoshio.wordpress.com/2013/06/02/arduino-uno%e3%82%92windows-7%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%97visual-studio-2010-express%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6c%e3%81%a7%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3/