PIC AVR 工作室別館 arduinoの館->TopPage->標準機能->標準機能の概要

arduinoの標準機能の概要

arduinoに組み込まれている標準機能について簡単に纏めたいと思います。

まずはarduino-IDEの簡単な使い方を整理した上で、arduinoの言語に標準で取り込まれている 各種機能についてその使い方などを纏めます。

概要

arduinoの開発言語や開発環境は、AVRやマイコン、コンピュータ言語、電子回路などといった知識があまりなくても 簡単に利用することが出来るように、特に入出力に関する部分について容易に利用できるような仕組みが盛り込まれています。

PCとのやり取りにはシリアル通信機能が、センサー類との接続にはAD変換機能が、アナログ出力についてはPWMを 用いた出力が、といった具合です。これらはarduinoの基本仕様に取り込まれていて、きわめて簡単な命令だけで利用できます。

arduinoの開発環境では、arduinoに対する命令は「プログラム」とは呼ばず「スケッチ」という名前で呼びます。 他の開発言語を使用したことがある人にはピンと来るかと思いますが、プログラムというほど仰々しいものではなく、 スケッチという表現がしっくり来るような、とても簡単な命令の組み合わせでarduinoを動かすことができてしまいます。

そして、出来上がったスケッチはUSBケーブル(またはシリアルケーブル)を使い、arduino本体にアップロードすることが出来ます。

(アップロードを行うブートローダ関係のことはarduinoの概略 の方にまとめておきます)

これら一連の開発環境のうち、PC上でスケッチを入力するエディタや、コンパイルをするコンパイラ、arduinoに 実行プログラムをアップロードするアップローダ、プログラムの実行中にarduinoと通信を行う通信環境等をすべてひっくるめた ソフトはArduino Softwareといって、公式ページから 無料でダウンロードできます。いわゆる統合環境の一種なので、arduino-IDE(Integrated Development Environment)と呼びます。

現時点:バージョン0011については、widows版、mac版、linux版の3種が公開されています。

arduino-IDEの正体

arduino-IDEの画面

arduino-IDEは、PC上で動く統合開発環境の一種です。下の図はバージョン0011の取り込み画面です。

IDEには、スケッチを書くためのエディター、スケッチを実行ファイルに変換するコンパイラー、実行ファイルをアップロードする アップローダー、実行時にシリアル通信でarduinoとメッセージをやり取りするシリアルモニターなどの機能が1つの ソフトに組み込まれています。

画面の中央白い部分はスケッチ(=プログラム)を書くためのテキストエディターになっており、上部にはコンパイルボタンや arduinoへのアップロードボタン、シリアルモニターの表示非表示切り替えのボタンがあります。

画面の下部の黒い部分にはコンパイル時などにIDEからのメッセージが表示される所です。ココはボタン押下で シリアルモニターに切り替えて使うことも出来ます。以下の図はシリアルモニターに切り替えて、arduinoと相互に通信を しているところです。

統合環境というくらいですから、スケッチ(プログラム)の作成、修正やコンパイル、arduinoへのアップロードといった 一連の動作がこの画面上からすべてシームレスに行えるようになっています。

ちなみに、画面下部の黒い部分ですが、arduinoから送られてきたメッセージ(ascii文字)が黒い部分に表示されます。

その上の白いボックスは、ココにキーボードからメッセージ(ascii文字)を入力し「Send」ボタンを押すことで、 PCからarduinoに対して文字を送ることも出来ます。送受信レートもスケッチの内容に合わせて任意に選べます。 (画面では9600bpsに設定)

arduino-IDEの内部…コンパイル環境について

この節はちょっと細かい話なので読み飛ばして、まずは「hello world」を実際に動かしてみた方が話が早いかもしれません。 ご興味のある方だけご一読を。

さて、そのコンパイル機能について。arduino-IDEのコンパイラの実体は、実はgccです。正確に言うと、 gccとプリコンパイラを組み合わせたものです。gccとは、以前はgnu C compilerの略だったんですが、 現在はC言語だけでなくC++なども取り込んだものに拡張されており、gnu compiler collection の略だとも言われています。要は、C言語系のコンパイラと思って良いと思います。

画面上のコンパイルボタンを押すと内部ではスケッチを一旦プリコンパイルという作業を通してgccでコンパイル可能な プログラムに変換し、それをgccでコンパイルするという流れで実行ファイルが生成されます。出来上がった実行ファイルは ボタン一発でarduino上のブートローダ経由でarduino本体にアップロードされます。

というわけなので、実はgccでコンパイルできるようなC言語やC++の文法に従ったプログラムならスケッチに混ぜても 凡そ動いてしまいます。

C言語やC++は知らなくても全然構いません。arduinoの開発言語は簡単なので、知らなくても十分使えます。 逆に、arduinoではプログラムではなく「スケッチ」と呼ぶくらいに、可読性や書きやすさを重視した体系になっているので、 C言語やC++スタイルのプログラムをゴチャゴチャと織り交ぜて書くより、arduinoの体系に則ってスマートなスケッチを 記述する方が粋だよねぇ、という気がします。

なお、arduinoではコンパイルと呼ばずにverifyと呼ぶようです。文法エラーなどがあればコンパイル時に表示されるので、 エラーの有無を「照合」しておいて、その後arduino本体にアップロードして動作させるという捉え方のようです。 arduinoやgainerは単なるマイコンの開発言語/実行環境というよりは、「フィジカルコンピューティング」のプラットホームとして 創られ発展してきたもので、コンピューターだとかコンパイラだとかに詳しくないメカ系の人にも解り易く、という思想に 基づいているようです。他のマイコンボードなどと比べ、サーボモーターや各種センサーとの接続が容易に出来るように なっているのもそのせいでしょう。

左上のコンパイルのボタンのところにカーソルを持っていくと「verify」と表示されますが、とにかくこのボタンを押すと コンパイルが実行されます。

arduinoのスケッチとして、いわゆる「hello world」のサンプルを以下に記しておきます。

hello worldをやってみよう

hello worldのスケッチ

新しい環境で何かプログラムを作ってみるとすれば、まずやはり「hello world」をやってみたく なると思います。なので、hello worldを実際にスケッチしてみます。

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("hello world");
}

これだけ!

このスケッチをコンパイルしてarduinoにアップロードすると、arduinoがPC宛に「hello world」のメッセージを 送ってきます。

一応解説します。setup関数ではまずPCとシリアル通信をするために通信速度を9600bpsに設定しています。 そして、loop関数の中で、文字列「hello world」と改行マークをPCに送信しつづけます。簡単ですね。 (ちなみに、printlnが改行あり、printが改行なしです)

もしgccで同じ事を行おうとすれば、AT-MEGA168内部の各種デジタルピンの設定レジスタや、 USART関連の内部レジスターファイルの設定、処理用のバッファの確保などなど…、もろもろの面倒なことを 自分で行う必要があるわけですが、シリアル通信についてはarduinoの基本仕様に取り込まれているのでこんな簡単な スケッチでhello worldを実現できてしまいます。 (cf:C言語なら最低でも標準入出力用のヘッダファイル「stdio.h」程度は利用しないとこの手のi/fには事欠く ことを考えれば、如何に簡単か…)

スケッチの保存方法と保存先について

スケッチは、メニューボタンの「Save」ボタンを押すか、メニューバーから「Save」か「Save as」を 選ぶと保存できます。なお、標準の保存先は「マイドキュメント」の中の「arduino」フォルダです。

保存されるファイルには拡張子が.pdeという形式になるんですが、自分で拡張子を付ける必要はありません。 作成したスケッチに適当に名前を付けて保存を実行すると、「マイドキュメント」の中の「arduino」フォルダの中に、 各スケッチ毎にフォルダ分けされて保存されます。

名づけたスケッチ名で自動的にフォルダが作成され、その中に.pdeファイル(スケッチ本体)や 関係ファイル一式が 保存されます。(他の開発環境で言うところのプロジェクトファイル一式が保存されるイメージ)

この「arduino」フォルダのことをarduino-IDEでは「Sketchbook」と呼んでいて、 Sketchbookの中にたくさんのスケッチがフォルダ分けされて保存されているという具合です。 そのフォルダ内にある*****.pdeというのが、実際にエディタで打ち込んだプログラム(スケッチ)の実体です。

この図では、test1とかtest10といった一つ一つのフォルダがスケッチにあたる訳ですが(センスの無い名前ばかりですみません)、 これらの実体は「マイドキュメント」フォルダの中の「arduino」フォルダの中に個々の”フォルダ”として保存されています。

後で呼び出すには、ファイルメニューの「Sketchbook」にこれまでに保存したスケッチの 一覧(つまりフォルダ名の一覧)が表示されるので、それをマウスで選ぶだけです。

完成したスケッチを実行してみる

スケッチを書いてコンパイルが通ったら、arduinoにアップロードして実行してみます。

まずPCとarduinoを通信ケーブル(arduinoのタイプによって9ピンシリアルケーブルやUSBケーブルを使用) で接続したら、aruduinoボード上のリセットボタンを押します。するとarduinoに内蔵されたブートローダーが約10秒間 プログラムのアップロード待ちになります。その間にPC画面上でarduino-IDEのアップロードボタンをクリックすると アップロードが始まります。

無事アップロードが終るとまたブートローダーが再起動します。今のうちにシリアルモニターモードに切り替えておいて、 そのまままた10秒間待ってください。10秒経つとhello worldが起動されます。

hello worldの場合シリアル通信でPC宛に”hello world”の文字列が送信される のですが、この送受信にはプログラムのアップロードと同じシリアルケーブル(もしくはUSBケーブル)が使われる ので、シリアル通信用のケーブルなどを別途用意する必要はありません。

setup関数とloop関数について補足

上記のhello worldのスケッチでは、setup関数とloop関数という2つの関数が登場してきます。

関数というのはC言語等を使ったことのある人にはなじみがあるかと思いますが、サブルーチンみたいなものです。 C言語の場合、引数の有無、戻り値の有無に関わらず関数という形態で呼び出しを行うことになっています。 (本題から逸れるので詳説は省きます)

arduinoのスケッチは、実行時にまず1回だけsetup関数が呼び出され、その後、loop関数が無限に呼び出し続けるという 形で制御されます。なので、起動時の初期化処理などをsetup関数に記述し、メインとなる処理をloop関数に書いておけばよいわけです。

さて、C言語を使ったことのある人にとってはmain関数がどうなっちゃっているのかが気になるところだと思いますので、 その点について少し補足を。

C言語では一番最初にmain関数が呼び出されることになっています。実は、arduinoのsetup関数とloop関数は 上述のプリプロセッサを通してgcc用プログラムになった際、main関数の内部で1回だけsetup関数を呼び出し、 その後無限ループの中でloop関数を繰り返し呼び出しつづける、というプログラムに展開されることになっています。

というわけで、実際のカラクリはとてもシンプルですね。

要らなくなったスケッチの捨て方

スケッチが不要になったら、簡単に廃棄することが出来ます。

Sketchbookのフォルダである「マイドキュメント」フォルダ内の「arduino」フォルダから、廃棄するスケッチ名と 同じフォルダ(=スケッチ一式)を丸ごとゴミ箱にポイッです。それだけ。

arduino-IDEの標準機能

上記のhello worldではひとまずシリアル通信機能についてお試しをしてみましたが、これ以外にも arduinoの開発言語仕様には元々取り込まれている便利な機能があります。

算術計算機能や条件判定、繰り返し等といった、どの処理言語でももっているような基本的な機能のほかに、 外部機器とのやり取りを簡単に行うためのデジタル入出力機能、アナログ入出力機能、そして上述のシリアル通信機能等が 組み込まれています。

詳しいことは公式サイト(英文)のReferenceページに記載されていますが、 特にarduinoの特徴的なところを、以下の各ページにかいつまんで纏めておきたいと思います。他言語と共通するようなところは端折ります。

また、これら標準機能に取り込まれていないけど便利な機能(サーボモーター、LCD、I2C機器、タイマー割り込みなど)は 「ライブラリ」という形で公開されており、簡単な手続き(#include文という命令)を使ってライブラリの機能を取り込み 利用することが出来ます。ライブラリについてはライブラリのページをご覧ください。