ステップアップ電子工作/レベル1後編 マイコン選び

[ステップアップ電子工作/レベル1前編 ブレッドボードで電子工作を始めよう (まずは準備編)](http://qiita.com/erukiti/items/1a517c3e424835ca14f1) で必要な器具をそろえました。マイコンを使わずに作る電子回路というのもありますが敷居が高いので、マイコンにあれこれつなぐ、ある程度まではソフトウェア作成でどうにかなるように考えます。マイコンを選ぶ前にプログラミングプラットフォームをそれぞれ見ていきます。

## プログラミングプラットフォーム

### Raspberry PI

PC上で動かすLinuxとほとんど変わりません。使用できる言語は、C,C++, Ruby, Python, Node(JavaScript)などあらゆる言語が使えます。極端な話、shell scriptでも制御できます。

人気のあるライブラリとしては、[WiringPi](http://wiringpi.com/) がよく使われているようです。[トランジスタ技術 2016年 3月号](http://www.amazon.co.jp/dp/B01AOFZQFE/?tag=ponix-22)の付録を読むと使い方がよくわかると思います。言語的にはRuby, Python, Nodejsなど様々な言語で利用可能です。

### Arduino

ArduinoはRaspberryPIに並んで電子工作の入門としてはメジャーです。むしろこちらの方が盛んかもしれませんが、言語的にはC, C++のほか、独自言語である .ino (という拡張子なんですが、言語名は何なんでしょう？スケッチ？) は、ProcessingやCベースのいい感じにライブラリとか扱ってくれる便利言語です。

IDEに抵抗がなければ [Arduino IDE](https://www.arduino.cc/en/Main/Software) を使うのが良いでしょう。情報も多いです。GUI / IDEに忌避感を感じるオールドタイプの皆さんは[PlatformIO](http://platformio.org/#!/)を使うといいでしょう。情報は圧倒的に少ないですが、Qiitaにも [PlatformIO](http://qiita.com/tags/PlatformIO)タグが存在しています。

### mbed

ARM系のArduinoみたいなやつです。使われる言語はC/C++です。

IDEに抵抗が無ければ、オンラインコンパイラである[Development Platform for Devices | mbed](https://developer.mbed.org/)を使うといいでしょう。IDEが嫌いな人やオンラインに登録するのが嫌な人は是非Platformでいきましょう。

## マイコン選び

CPUの種類から見た場合、ARM, AVR, その他という感じになると思います。RaspberryPIやmbedで使われるARM, Arduinoで使われるAtmelAVRシリーズ、大人気のESP-WROOM-02なんかはそのどちらでもないものです。色々セットになったものを買うのか、CPU単体で買うのかなどもあります。それぞれ見ていきましょう。

### Raspberry PI

[Raspberry Pi](https://ja.wikipedia.org/wiki/Raspberry_Pi) は、きわめて入手しやすく、電子パーツの店以外でも入手可能です。

値段が安いRaspberryPI zeroはオススメですが、2016/2/14現在、ほぼ入手不可能な状態が続いています。いずれ供給が安定すれば鉄板になるかもしれません。特徴は$5という破格な安さと省電力という二点になります。悪い方の特徴としてはUSBが一つでしかも特殊形状(MicroUSBホストなので変換アダプタが必要)です。

演算器として使うのであればRaspberryPI2は4コアCPU搭載でパワフルです。

あとはRaspberryPI A+あたりが、I/Fと値段と省電力のバランスが良いかもしれません。

Raspberry PIシリーズを使う利点はなんと言っても、PCプログラミングそのままでいけることで、マイコンと比べて十倍近くという豊富な演算リソースやメモリ・ストレージになります。よくハルロックなんかで取り上げられる通り、画像認識・音声認識、音声合成など使い勝手の良い仕組みがソフトウェア的に実現できます。値段もRaspberry PI zero さえ潤沢に供給されればとても安価なプラットフォームです。

### Arduino

[Arduino](https://ja.wikipedia.org/wiki/Arduino) は回路図がCCで公開されていて互換品も豊富です。[スイッチサイエンス](https://www.switch-science.com/catalog/list/40/)とか[せんごくネット通販](http://www.sengoku.co.jp/mod/sgk_cart/search.php?cid=4186)とか[Amazon.co.jp](http://www.amazon.co.jp/s/?field-keywords=arduino)を見ると、公式のもの、キットになったものなど色々あるようです。

利点は本やネットの情報がとにかく多いことです。またシールドと呼ばれる拡張ボードも豊富にあります。Raspberry PIに比べて非力ではありますが、手軽に電子工作をしたいということであればこちらの方がいいかもしれません。

値段はまぁそれなりでしょうか

### mbed

[mbed](https://ja.wikipedia.org/wiki/Mbed) はArduinoよりはどうしてもマイナーにはなりますが、電子工作では人気です。[スイッチサイエンス](https://www.switch-science.com/catalog/list/137/)や[せんごくネット通販](http://www.sengoku.co.jp/mod/sgk_cart/search.php?cid=4189)や[Amazon.co.jp](http://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=mbed&rh=i%3Aaps%2Ck%3Ambed)を見るとArduino同様色々あるようです。

値段はArduinoより少し安くてCPUの性能が高めです。特徴はオンラインコンパイラでしょうか。

### ESP-WROOM-02

ESP-WROOM-02はWiFIの乗ったCPUです。性能はArduinoより高くmbed(の高い方)と同じくらいです。プログラミングプラットフォームはArduino(互換?)になります。ESP8266というシリーズがあって、その中でも日本の技適に通ったESP-WROOM-02がよく日本で使われています。Qiitaでも大人気で[ESP-WROOM-02](https://qiita.com/tags/esp-wroom-02)タグや[ESP8266](https://qiita.com/tags/esp8266)タグの記事が多いです。

個人的に入手先として一番オススメは秋月の[ESP-WROOM-02 DIP化キット](http://akizukidenshi.com/catalog/g/gK-09758/)です。本来のESP-WROOM-02は小さいピンを扱わないといけないので何らかの変換ボード経由で使われることが多いのですが、最初から変換ボード付きなのでヘッダピンだけハンダ付けすれば良いという利点があります。

これの利点は650円(さっきの秋月のDIP化キットの値段)という安さも良いのですが、やはりWiFiでしょうか。RaspberryPIにWiFIドングルをつなぐよりも低消費電力でシンプルです。

問題は、アナログ入力が少し弱い、GPIOピン数が少ない、何らかの手段でPCと接続しないと使えない点でしょうか。

* USB-serial変換器 (たとえば[AE-UM232R](http://akizukidenshi.com/catalog/g/gK-01977/)) とつないで、Arduino IDE かPlatformIO 経由で使う。
* RaspberryPIとつなぐ ([初心者向けESP-WROOM-02解説その1: ラズパイを母艦にする](http://qiita.com/erukiti/items/2eb5c6b02bed3b382bd9))

など、PCかラズパイとつなぐ為の手段が必要になります。ラズパイを既に持っているのであれば後者は安価で良いです。

### AtmelAVR CPU (ATtiny85やATmega328Pなど)

Arduinoに乗ってるCPUをそのまま買ってきて使うというやり方です。性能は低いものの、豊富なArduinoの情報がある程度そのまま使えます。Arduinoを既に持っている人などには特にオススメでしょうか。たとえば秋月だと[ATtiny85](http://akizukidenshi.com/catalog/g/gI-09573/)や[ATmega328P](http://akizukidenshi.com/catalog/g/gI-03142/)や[ATmega168P](http://akizukidenshi.com/catalog/g/gI-03033/)などが売っています。(正確にはATmega168PとかATtiny85はArduinoそのものには乗ってないです)

利点はなんと言っても安価です。あとはArduinoの特徴に準じます。

問題はいわゆるAVRライターと呼ばれるものを作成もしくは購入する必要があります。と言ってもそんなに難しいものではなく、[FT232RLでAVRライターを自作してATtiny85をDigispark互換にするまで](http://qiita.com/erukiti/items/0a51d959082e242e2e2a)の記事の前半を参考にするといいと思います。内部クロックを使うのであれば、FT232RL のUSB-serial変換モジュールと結線するだけでもいけます。ただ、Arduino互換として使う場合、ブートローダーとスケッチは別々に書き込むことになります。ブートローダーは最初一回書けばいいです。(Arduino UnoとかとCPUを差し替える場合でもブートローダーだけは書いておかないといけない)

さきほどの記事の後半や[ATmega328Pで作るMetaboard互換回路](http://qiita.com/erukiti/items/548bbd1e38aaa3083446)にも書きましたが、本来USBの乗っていないATtiny85やATmega328Pに、ソフトウェア(と回路)で無理矢理USBを実現する事もできるのがちょっとした特徴でしょうか。

### Digispark

前述の記事に出てきたDigispark(あるいはクローン)はUSBに直接挿せるタイプのボードです。詳細は[安価なUSB直挿しマイコンDigisparkのススメ](http://qiita.com/erukiti/items/74a848489ec102841b66)に書いたので是非読んでみてください。

USBに直接させるのでUSB機器を開発したり、USBから電源をとりたい時などにいいかもしれません。あと安いです。難点は前述の記事の写真見ればわかる通りポートが少ないです。USBで通信するばあい4ポート、しない場合でも6ポートしかGPIOがありません。

### ATmega32U4ボード

[ATmega32U4 | eBay](http://www.ebay.com/sch/i.html?_nkw=ATmega32U4)で注文してからまだ届いていませんが、このCPUはATmega32Pと違って最初からUSBをドライブする能力を持っています。[LUFA (Formerly MyUSB)](http://www.fourwalledcubicle.com/LUFA.php)をつかえば、色々なUSB機器を開発できる……はずです。

まだ届いてないのでなんとも言いがたいですが、安価なのにUSB機器が開発できると期待しています。

### LPCマイコン

ArduinoのAVRマイコンを買うように、mbedのLPCマイコンを買ってくる手もあります。たとえば秋月だと[LPC1114FN28](http://akizukidenshi.com/catalog/g/gI-06071/)、[LPC810M021FN8](http://akizukidenshi.com/catalog/g/gI-07191/)などが売っています。

これも、ARMライターが必要になりますが、[FT232RLを使ったARMライターを組んで、LPC1114FN28を動かしてみた](http://qiita.com/erukiti/items/7815134e2dab6183d4c8)に書いた通り、ほぼ結線するだけです。AVRとは違いブートローダーは既にある状態です。

利点はmbedにほぼ準じますが、AVRと同じような値段という安さがやはり魅力的です。

## 比較表

機種|環境|CPU種別|値段
----|----|-------|----
RaspberryPI A+|RaspberryPI|ARMv6|3,780円([Amazon](http://www.amazon.co.jp/dp/B00PI9KPLC/?tag=ponix-22))
RaspberryPI B+|RaspberryPI|ARMv6|4,950円([Amazon](http://www.amazon.co.jp/dp/B00LT4BOK6/?tag=ponix-22))
RaspberryPI2 B|RaspberryPI|ARMv7|5,589円([Amazon](http://www.amazon.co.jp/dp/B00T356SFO/?tag=ponix-22))
RaspberryPI zero|RaspberryPI|ARMv6|現在入手困難
Arduino Uno|Arduino|Atmel AVR|3,240円([Amazon](http://www.amazon.co.jp/dp/B0044X2E5S/?tag=ponix-22))
mbed LPC1114FN28|mbed|ARMv6-M|2,160円([スイッチサイエンス](https://www.switch-science.com/catalog/1714/))
mbed LPC1768|mbed|ARMv7-M|5,940円([スイッチサイエンス](https://www.switch-science.com/catalog/250/))
Digispark|Arduino|Atmel AVR|$8.95 ([公式](http://digistump.com/products/1))
Digispark Pro|Arduino|Atmel AVR|$12.95([公式](http://digistump.com/products/109))
ESP-WROOM-02|Arduino|Espressif|650円([秋月](http://akizukidenshi.com/catalog/g/gK-09758/))
ATmega328P-PU|Arduino|Atmel AVR|250円([秋月](http://akizukidenshi.com/catalog/g/gI-03142/))
ATtiny85-20PU|Arduino|Atmel AVR|160円([秋月](http://akizukidenshi.com/catalog/g/gI-09573/))
LPC1114FN28|mbed|ARMv6-M|180円([秋月](http://akizukidenshi.com/catalog/g/gI-06071/))
LPC810M021FN8|mbed|ARMv6-M|80円([秋月](http://akizukidenshi.com/catalog/g/gI-07191/))

僕自身はRaspberryPI -> ESP-WROOM-02 -> Digispark(クローン) -> ATtiny85 -> ATmega328 -> LPC1114FN28 の順に触っています。まぁRsapberryPIかArduino Unoから始めるのが順当だと思います。