ESP-WROOM-02(Arduino)によるWiFiネットワーキング (3) ~ Raspberry Piとの違い
もうしばらくArduino一般の話を続けよう。よくArduinoとRaspberry Piはどう違うのか?という質問をされるので、その観点でArduinoの特徴を説明してみたいと思う。
Raspberry Piは、小さいだけで中身は立派なPCである。スペックを比較してみるとこんな感じだ。
Raspberry Pi 2/3 | Arduino Uno / ESP-WROOM-02 | |
---|---|---|
CPU | 32ビット / 64ビット 1GHz クアッドコア |
32ビット 16MHz / 80MHz マルチコアなにそれ? |
揮発性 メモリ |
1GB DDR2 SDRAM | 2KB / 160KB*1 |
不揮発性 メモリ |
数~数10GB (SDカードを挿す) | 32(Flash)+1(EEPROM)KB / 4MB |
消費電力 (およそ) |
5V 平時 数100mA? 最大 1.8A / 2.5A |
5V / 3.3V 平時 数~数10mA 最大 200~300mA (ESPでWiFi稼働時) |
OS | Linuxや組み込みWindows等が動く | そんなものはない! |
その他 装備 |
SDカードスロット, GPU, ビデオ出力, オーディオ出力, USB, LAN, GPIO, WiFi(RPi3のみ), Bluetooth(RPi3のみ) | シリアル入出力, GPIO, WiFi(ESPのみ), 他何かあったっけ? |
価格 (およそ) |
5k円 / 6k円 | 0.6k~3k円 / 0.4k~0.9k円 |
単位をよく見て欲しいのだが、Raspberry PiとArduinoとではそもそもスペックの桁が違う。また、「その他装備」のところにあるように、Raspberry PiにはPCとして使うためのインタフェースが完備である。つまり、Raspberry PiとArduinoは教育やプロトタイピングを支援することを目指した低価格プラットフォームであるというビジョンは似ているが、Raspberry PiはあくまでPC、Arduinoはあくまで各種デバイス(モーターやセンサー等)を制御することを目的とした組み込み用マイコン、とベースとなる世界が大きく異なるのである。
どのような場合にどちらの世界を使うべきか?という話をするならば、結局は目的が達成できるならば手段はどちらでもよいわけだから、まずは目的をはっきり持つことが重要だろう。勉強や評価目的なら、何を学びたいのか、何を評価したいのか。ハードウェア中心なのかソフトウェア中心なのか。実際に運用したいのなら、どんな処理を、どんなパフォーマンスで、どれだけの消費電力で実現したいのか。柔軟性はどれだけ欲しいのか。さらに、それらにどれだけのコストをかけたいのか。
例えばLチカも、第一回で紹介したESP-WROOM-02によるHTTPクマーシステムも、Raspberry Piで実装することができる。単にスペック・価格・消費電力が必要以上であるというだけだ。そんなことは気にしない、俺はLinuxでそういうシステムを構築してみたいんだ、という人はRaspberry Pi世界を選択して思う存分ヒャッハーしてもらって構わない。一方、電気も金も食わないミニマルなシステムを追求してみたい、そのために低レベルなプログラミングも厭わない or むしろやりたい、という人はArduino世界を選択して、コストや消費電力まで計算して(・∀・)ニヤニヤすればよいのである。
選択の参考になりそうな両者の差異・トレードオフを思い付くだけ挙げておこう。
リソース(CPUやメモリ)に関して
- リソースを食わない処理を処理を低価格・低消費電力で実現できるのがArduinoの大きな特長と言える。例えば、センサーの値を一定時間ごとに送信するようなシステムはArduinoで作る方が断然リーズナブルである。
- リソースを食う処理が必要なら、コストと電力消費を覚悟してRaspberry Piを使うのがいいかもしれない。例えば、センサーやカメラから次々とやってくるデータを蓄積し処理する必要がある場合にはArduinoではメモリやCPU速度がネックになるかもしれない。
- Arduinoのリソースでどの程度の処理ができるのか?は興味深い質問だが、答えるのは難しい。本当に非力なArduino Unoはさておき、ESP-WROOM-02を使う限りはCPUもメモリもそこそこキャパシティがあり、組み込みプログラミングという言葉から連想される制約ギチギチの世界(コードやデータをバイト単位や命令単位で意識するような世界)よりはずっと余裕がある印象である。それに、Arduinoでリソースが足りなければ追加する(例えば外部メモリを買ってきて接続する)という解もあるので、Arduino本体の性能だけから限界を語ることはあまり意味がない。
- 参考に、市販のコンシューマー向けWiFiルーターを見ると、一万円未満の廉価なものに搭載されているチップセットはRaspberry PiとArduinoの中間の性能、数万円の高価なものだとRaspberry Piと同程度の性能である。
エンジニアリングに関して
- フォーカスがハードウェアエンジニアリングならArduino、ソフトウェアエンジニアリングならRaspberry Pi、と世間ではよく言われる。確かにその通り。
- 我々ソフトウェア屋の関心事であるプログラミングについて言うと、Arduinoのプログラミングは基本的に「OSなしに直接実行されるC++プログラムを書くこと」である。Raspberry Piの場合は普通にLinux上のソフトウェア開発であり、Linux向けのリッチな開発環境・実行環境がそのまま使える。
消費電力に関して
- Arduinoの消費電力だと、電池での長時間駆動が可能である。アプリケーションを考える上で電源の選択肢が多い。
- Raspberry Piの消費電力だと、電池駆動は一応可能だと思うが、ノートPCやスマフォのように大容量のバッテリーを頻繁に充電するような世界である。電源の選択肢はかなり限られる。
コストに関して
- Arduinoは1台を1アプリケーション専用で動かすのが基本(組み込みってそういうもの)で、それが可能な価格になっている。私もESP-WROOM-02を既に何個か買い溜めしてある。
- Raspberry Piは価格的にも性能的にも汎用PCであり、1台を大事に使い、なるべくいろいろやらせないともったいない。Raspberry Piはもともと$36 PCという触れ込みであったが、日本で実際に持っている人に聞くと電源やらケースやらで結局一式10k円くらいかかってしまう感覚だそうだ。
*1:データ用96KB+命令用64KB; アプリ用データで使えるのは50KB程らしい。