ぼくのマイコンじゅく

小学校の道徳副教材にこんなタイトルのタイトルのお話が載っていたような。
確か内容は主人公(小学生)がPC-98をお父さんに買ってもらってからえっちなゲームにハマってしまい 、最終的には現実世界で性犯罪に及んでしまうというものだった。(大嘘)

……
  

実際の所こまかいことは語られてなかったけど、本が発行された時代を考えればこの話でいうマイコン=PC-98というのは間違いないと思う。


さて、そろそろパソコンに向かうだけのプログラミングにも飽きてきた今日このごろ。飽きるほどはやっていなんだけど、基本的に飽きっぽい性格なので。

恥ずかしながらいまだMaker Fairとかそういう専門性の高いイベントには行ったことがないんだけど、コミックマーケットで自作ハード関連のところを見ているだけでもなんだか負けた気分になる。
やっぱり、パソコンの中だけでどうこうするプログラムもいいけどハードウェアを制御する方もやってみたい。
実は授業でPICとFPGAだけは触ったことがあるんだけれども、とりあえずはんだづけして既存のプログラム書き込んでLED光った!よかったね、おわり。という感じだったので、結局何もしてないに等しい。

僕はもともと電子工作少年だったわけでもなく、やろうと思っても一体何から手を出していいのかがわからなかった。ここ最近Raspberry PiとかArduinoとか聞くけど、それぞれどう違うの?という感じだった。ハード的にどう違うのか、を説明しているところはあっても、それぞれどういうのに向いているのか、というのを説明しているところは少ない。
そこで、ちょこっと調べた成果をメモ。

・Raspberry Pi

これは電子工作ではなく、ちっちゃなパソコンで、基本的には動かすにはOSが必要。(ARM11ベースで大容量メモリ)
そのため、Pythonなど超高級言語で開発可能だが、いわゆる電子工作用途には向かない。自宅に省電力で常時稼働するサーバーがほしい、という人が使うもの。
電力消費がちょっと多いので、電源に電池を使うとするとランタイムも短くなるしポータブル用途には不向き。
個人的には、これをやるなら余ってるAndroid端末ハックしたりでいいような気が(それこそDragonbox Pyraでもいいし)

・Arduino

AVRマイクロコントローラーを使った統合環境で、マイコンの名前ではなくマイコンを中心とした商品群をさす。Raspberry Piとは守備範囲が全く違い、OSなしでも動く電子工作寄り。
最大の特徴が、「シールド」といわれるBluetoothやGPSのモジュールがあってブロックのようにハードウェアを構成できるというところ。
開発は基本C、C++だが、そんなに洗練されていないという。
性能は低め、価格は安め。完成品のボードを買うのではなく、仕様を見て自分で部品を揃えていけば500円くらいで作れる、という話も。
動作クロックの問題などで、音系にはそんなに強くなさそう。
ブームになっただけあってコミュニティがでかいので情報量が多い。ただし、個人個人が勝手に自分のホームページやブログに書いている情報が多いので集約がされていない。

・mbed  ←今からやるならこれか?

CPUはARM Cortex-Mxシリーズで、電子工作寄り。ARMとはいえ組み込み用なので、メモリーもKB単位だしRaspberry Piとは全く異なる。位置づけとしてはArduinoに近い。(今後ARM Cortex-AシリーズのCPUを積んだ奴も出るらしい。)
Arduinoより性能は高く、できることは多いはず。音系やるならこっちか。
開発はC++で、ハードウェアも抽象的に扱えるようになっている。JavaとかPythonとか超高級言語しか触ったことない身としては、かなり惹かれる。ただしArduinoの開発環境にあるエミュレータ的なものがないのでデバッグが面倒だという。いちいち書き込んで動作確認をしないといけない。
Arduinoに近いコンセプトだが、性能が高いぶん値段が高い。しかし安い互換ボードがある。
mbed自体にはそういう規格はないが、Arduinoの「シールド」をそのままくっつけられるように物理的な形状をArduino互換にしたボードもあり、Arduinoのハードウェア資産を活用できる。
まだArduinoのほうがコミュニティは大きそうだが、これもけっこう盛り上がってる。しかも、Arduinoと違って公式フォーラムに情報やコードが集約されている。


・AVR,PICなどマイコンそのもの

Arduinoというレイヤーを使わず直接石に触る。
開発はアセンブラ、C。
安く済ませるには最適だが、学習コストが高そう。情報も散逸的にしか存在していないので、初心者が一人で気軽にやれるものでは無い気がする。

・FPGA

ある処理に対して専用回路を作るもの。今まで述べてきた連中は、ハード(汎用プロセッサー)に合わせてソフトを書くことで開発するのに対して、FPGAは処理したい信号に合わせてハードを作ってしまうというもの。
汎用計算機に計算させるのではなく、ある処理に対して専用の処理回路を設けてハードウェアで処理させてしまえるので処理に最適化した並列計算回路を書いたりできる。
例えればしょぼいPCでもH264のハードウェアデコードができれば高画質のH264を再生できるが、要するにそういう回路を作るためのチップである。
ただし、ソフトウェアで幅広い処理をさせることはできない。(内部にCPU=汎用計算機を作ることはできるが)