“Arduino”と”Raspberry Pi” 同じところと違うところ
ちょっと複雑な電子制御が必要な場合、電子基板を作ってICやスイッチやLCDの制御をやることがあります。現在(2020年ごろ)ではこれらの制御にはArudinoかRaspberry Piを使うのが主流になっています。
ArduinoとRaspberry Piは両方ともICが実装されている手のひらくらいの電子基板です。ちょっと動作や使い方が違うのですが、両方とも組み込みの電子機器の制御に用いられます。
使われ始めてから10年くらいたっていますが、まだ知らない人の方が多いので、「どっちを使ったら良いですか?」という質問をよく受けます。ですのでこの記事ではArduinoとRaspberry Piの違いについて紹介します。
ここではArduinoとRaspberry Piの詳細については書きません。詳しく解説されているサイトがたくさんあるのでそちらを参考にしてください。両方ともいくつかの種類がでいていますので、ここでは一般的な内容については書きます。
ArduinoとRaspberry Piの同じところ
はじめにArduionoとRaspberry Piの同じところはサラッと説明します。ArduionoとRaspberry Piのどちらでも良い用途であれば、どちらを使ってもあまり変わりありません。
まず、ArduionoとRaspberry Piは両方とも1枚の電子基板で、5VのUSB電源で動かすことができます。電源スイッチみたいなものはなく、USBの抜き差しで電源ONOFFします。
大きさ重さはRaspberry Piの方がちょっと大きくて重いですが、だいたい両方とも手のひらに乗るくらいのサイズです。
両方とも基板にはM3の穴が開いていますので、使用するときは何かのケースに入れてビス止めして使用します。
両方とも本体に2.56 mmピッチのピンヘッダ(又はピンソケット)がついています。このピンは電源周りやリセットなどとGPIO(General Purpose Input Output)端子なので外部の部品と接続して使うことができます。
ArduinoもRaspberry PiもGPIOピンの一部にSPI機能とI2C機能が割り振られています。この二つはICを制御するための規格で、基板上にLANの配線を引いてICに対して通信するようなイメージです。
ArduinoとRaspberry Piの違うところ
それではArduinoとRaspberry Piの違うところを上げていきます。
ハードウェアの違い
ArduinoはRaspberry Piと違って複数のUSBポートやLANポートがありません。電源兼通信用のUSB1つ以外は全てGPIOのピンソケット経由で外部とやり取りします。
GPIOピンしかインターフェースが無い代わりにRaspberry Piよりも多くGPIOピンを持っています。このため本体から配線を伸ばして使用するような用途ではArduinoの方が使いやすくなります。
また、ArduinoはUSBポート(1つだけある)、LANポート、HDMIポート、SDカードスロットが無いので本体価格が安いです。大量に同じものを使う用途にもArduinoが有利です。
逆にRaspberry Piはこれらの部品が実装されているのでArduinoよりも価格が高いですが、その分Arduinoに使えないいろいろな機能と周辺機器を使うことができます。
ArduinoはソフトウェアをICのフラッシュメモリーに書き込みますが、Raspberry Piの起動にはOSが必要なので、OSをインストールするためのSDカードが必須です。ここでもRaspberry Piの方が金額がかかります。
起動方法の違い
Arduinoの起動は大まかに数えると2つの部分に分けられます。電源を入れるとフラッシュメモリーに記録したプログラムが実行されますが、まずはじめにsetup関数の命令が1周実行されます。次にloop関数の命令が延々繰り返されます。
電源を入れたときに1回だけ実行したい命令はsetup関数に書いて、実行し続けたい命令はloop関数に書く。という簡単なプログラムで動作します。
Raspberry Piの起動は、いくつかに分けるのが難しいですが、パソコンの起動とほとんど一緒です。電源を入れるとOSが立ち上がるのでユーザー名でログインして命令を実行します。
Raspberry Piはログインやコマンド入力をしなければならないので、本体にモニターとキーボードを接続して起動します。
開発方法の違い
ArduinoもRaspberry Piも買ったまま電源を入れても何も動きません。何かをさせるためにはソフトウェア開発が必要です
ArduinoとRaspberry Piのソフトウェア開発はかなり違います。ここが一番の違いかもしれません。一言で言うとArduinoはパソコンの周辺機器として使用して、Raspberry Piはパソコン本体として使います。
Arduinoは本体を使う前に事前にパソコンにソフトウェア開発環境(SDK)をセットアップしておく必要があります。セットアップと言ってもArduino SDKをこのサイトからダウンロードしてインストールするだけです。
Arduino SDKがインストールされているパソコンにUSBケーブル経由でArduinoを接続するとパソコンが自動でArduinoを認識してくれます。
Arduino SDKはC言語ベースのプログラム言語を使ってプログラミングを行います。ハードウェアの動きを制御する命令などは一部特殊なのでC言語完全互換ではないですね。
C言語のプログラムが完成したら、SDKのコンパイラで実行ファイルを作ります。この実行ファイルはSDKから自動的にArduinoのフラッシュメモリに書き込まれます。書き込まれたらArduinoは自動で再起動し、再起動後にsetup()とloop()を実行します。
一度書き込みが終了した後はパソコンにつながっていなくてもUSBポートから給電されればArduinoは動作します。
これに対してRaspberry PiはC言語に限らず、Pythonでも、PHPでも、SQLでも、シェルスクリプトでなんでも開発ができます。この点に関してはRaspberry Piと思って使う必要は無く、一般的なLinuxと全く同じと考えてOKです。
私がRaspberry Piで何かを作るときはPythonのコードを複数種類作ってシェルスクリプトで動かすようにしています。この組み合わせならRaspberry Piに新しいものをインストールしなくてもすぐ使えて便利です。
こんな用途にはArduinoを使え
ここまではArduinoとRaspberry Piの違いを紹介しましたが、実際にはどのケースにどちらを使えばよいかを紹介します。
まずArduinoですが、本体が安価で消費電力が小さい(ものが多い)ので制御系の用途に適しています。例えばモーターの制御だとかリレーの制御だとか自作回路の制御だとかが想定できます。
ArduinoはGPIOピンの本数が多めなのでボタンやテンキーなどたくさん入力がある計器にも向いています。Raspberry PiにもGPIOピンはあるんですが、本数が少ないのでたくさんの入力にはちょっと向かない印象です。
こんな用途にはRaspberry Piを使え
Raspberry PiはほとんどLinuxと同じですのでサーバー用途での使用に向いています。例えばウェブアプリケーションを運用するとか、大きなストレージをつけてネットワークフォルダにするとかがあります。
しかし、Linuxサーバーとは異なりGPIOピンがありますので直接電子回路につなげたりすることもできます。例えばウェブサイトのスイッチを押すとリレーを制御してモーターを回すとか照明をつけるとかもできます。
同様にI2C通信を使って外部のセンサーからデータを受け取ることもできます。温度データとか明るさのデータを受け取ることもできます。
まとめ
この記事ではワンボードマイコンのツートップであるArduinoとRaspberry Piについて紹介しました。この2つについて簡単にまとめるこんな感じです。
Arduino
・USB接続でプログラム IOはピンヘッダが主
・専用の開発ソフトをPCにインストールしてC言語でプログラム
・起動はRaspberry Piに比べて高速
Raspberry Pi
・USBからの5V給電で稼働するがIOはモニター、キーボード、マウスなどPCとほぼ一緒
・開発に使う言語は特に限定されない
・起動は普通のPCと同じ ログインして使用する
自分の使いたい環境に合わせてどちらが良いのか選べばよいでしょう。よく「どっちがいいの?」と聞いてくる人がいますが、どっちがいいか判断するのは 画面の前のあなたです!