がじぇっとりっぷではSBC(シングルボードコンピューター)の記事をよく書いていますが、さらに小型の領域に、マイコン(マイクロコントローラー)というものがあります。
1年くらい前からネタにしようとは思いつつも先延ばしにしていたので、2021年に取り組む新ジャンルとして、マイコンについても少し記事を書いていこうかと思っています。
ただ、マイコンの世界は深いし、がじぇっとりっぷも詳しいわけではないので、主に記事にするのはESP32とSTM32、Arduinoくらいですね。
マイコンとは
マイコン(マイクロコントローラー)を一言で言うと「基本機能を全部持ったチップ」となります。
マイコンの定義としてよく言われるのが「演算・制御装置(CPU)、メモリ装置(RAM・ROM・フラッシュメモリー)、タイマー回路、入出力回路(I/O)を1つの集積回路に組み込んだもの」です。要はコンピューターとしての基本機能ですね。
一番身近な例では炊飯器でしょう。マイコン炊飯器なんて謳い文句があったくらいですし。
・ボタンで入力
・炊き方を制御するプログラム(を保存するROM)
・炊飯時間を計るタイマー
・それらの処理を行うCPU
見ての通り、マイコンの定義要件をすべて含んでいます。
マイコンという言葉は元々はチップ単体を示していましたが、現在ではマイコンチップを搭載したボード全体を指すこともあります。
ここで紹介する「ESP32」「STM32」「Arduino」は、言ってしまえば組み込みチップの開発用(兼本番用)です。機能を絞って特化させていないので、汎用マイコンなんて言う呼び方をされることもあります。
SBCでいいんじゃ?
身も蓋もない言い方になりますが、マイコンでできることはSBC(シングルボードコンピューター)であれば大体できます。
というか、実際組み込みの現場でも調達が容易でドキュメントも揃っている「Raspberry Pi」を使っているなんてことも増えています。
ではなぜマイコンかというと、一言で言っちゃうと、SBCだとオーバースペックだからです。炊飯器にWEBサーバーを建てるような処理性能は…あっても困らないかもしれないけど、性能をフルに発揮する場面なんてないですよね?
消費電力も大きく違います。
マイコンの世界では消費電力はmA(ミリアンペア)のオーダーで、高くても1Wとか2W程度です。
スリープ時はμA(マイクロアンペア)単位になるため、間欠動作させることで乾電池で数か月動作した、なんて事例が多数存在しています。これはSBCでは真似できない点でしょう。
また、応答性という点でもマイコンに分があります。
SBCでは入力から出力まで数ms(1ms=1/1000秒)かかりますが、マイコンだとモノによっては数十μs(1μs=100万分の1秒)程度です。
モーターの制御などms単位だと遅すぎる、リアルタイム性が求められる分野ではマイコンが使われたりします。
それぞれの比較
ESP32 | STM32 | Arduino | |
---|---|---|---|
開発元 | Espressif Systems | STMicroelectronics | Arduino |
CPU | Tensilica Xtensa LX6 | Cortex-M0~M7 | ATmega Cortex-M0+ |
動作周波数 | 160 / 240MHz | 32~550MHz | 16~48MHz |
RAM | 最大520KB | 最大1MB | 最大32KB |
ROM | 最大16MB | 最大2MB | 最大256KB |
Wi-fi | 802.11 b/g/n/e/i | × | 一部対応 |
Bluetooth | 4.2 | × | 一部対応 |
LoRa | 一部対応 | シールドで対応 | |
OS | FreeRTOS Zephyr NuttX MongooseOS | FreeRTOS μITRON embOS ThreadX | なし FreeRTOS |
言語 | Arduino C/C++/C# Python(MicroPython) JavaScript Lua mRuby Lisp | C Python | Arduino C/C++ |
ESP32とは
ESP32とは2016年にEspressif Systems社が開発したマイコンで、馬鹿みたいに安いのにWi-fiを内蔵しているのが大きな特徴です(技適取得済みモデルもあるので国内でも使えます)。2014年に登場した前世代のESP8266(Wikipedia)も、ESP32よりスペックは低いながらもその分消費電力が低いということで、現役で販売されています。
マイコンですが割と性能が高くて汎用性があり、がじぇっとりっぷが2018年に紹介した「ODROID-GO」は、SoCにESP32を使っていました。
また、Wi-fiを備えているということで農業IoT(ハウス内の温度・湿度管理とか)でも注目を集めています。
単体だと500円くらいですが、ピンと電源を使いやすくしたボードが多く出ており、そちらは700円くらいからです。
最近ではESP32にディスプレイ、microSDカードスロット、スピーカー、ボタンを一つの筐体にまとめた「M5Stack」がマイコン界隈ではブームになっています。
プログラム開発は「Arduino IDE」が一番に挙げられますが、Visual Studioなどを使うこともできますし、極論コンパイルと流し込みができればテキストエディタで書いても問題ありません。
現在はESP32に対応したIDEやプラグインがいろいろ出ているので、まずは今お使いの開発環境をESP32対応にできるか調べた方がいいでしょう。
「M5Stack」の影響か、画像処理関連の情報が充実しているのもESP32の特徴ですね。
STM32とは
STM32とは2007年にスイスのSTMicroelectronicsが開発したArm Cortex-M搭載マイコンの総称です。当時は「世界で初めてArm Cortex-Mを搭載した」のだとか。
現在ではSTMicroelectronicsは汎用マイコン市場では世界2位のシェアを誇っています。
機能・用途別に仕様が異なったモデルが大量にあり(あらゆる用途に応えることでシェアを伸ばした)、公式サイトでは16シリーズ1100余モデルが掲載されています。
STMicroelectronicsでは既存のMCU(Micro Controll Unit)より上位のMPU(Micro Processing Unit)に分類しているCortex-A7搭載モデルを2019年に発表していますが、最大でデュアルコア800MHz駆動とかいう、それ本当にマイコン?って言いたくなる代物になっています。
開発用に、ピンや端子などのインターフェースを使いやすく引っ張り出したNucleoボードというものが公式で用意されています。
Arduinoとは
Arduinoは特定の会社や製品の名前ではなく、開発ボードや開発環境、関連プロジェクトなどもひっくるめた総称です。
2005年にイタリアで「安価なデジタル制御用のボード」を作るべく発足した「Arduinoプロジェクト」が発祥です。
現在では開発環境の「Arduino IDE」の管理をArduino Foundationが、Arduino関連品の販売の一元管理をArduino Holdingが行うという体制になっています。
本家が手掛けるハードウェアは「Entry Level」「Enhanced Features」「Internet of Things(IoT)」「Education」に分類されています。
以前は「Wearing」というものもありましたが、すべて「Retired(生産終了)」となりました。
ArduinoはArduino言語(C/C++ベースの独自拡張)という独自のプログラミング言語を持っており、Arduino上のプログラムはSketchと呼ばれています。また、拡張ボードはシールドと呼ばれています。
OSはなくてチップが直接プログラムを動かします。
FreeRTOSなどを動かすこともできますが、プログラム(スケッチ)内でincludeするライブラリ的な扱いになります。
Arduinoを試す場合は、入門的な位置づけとなっている「Arduino Uno」から始めるのが無難です。
まとめ
ざっくりとマイコン勢力を分けると、古参で情報も多いのがArduino、単体でどうこうというより組み込みに使われる前提で扱われるのがSTM32、新興だけど勢いがあるのがESP32となります。
がじぇっとりっぷは下地がないというか、マイコンの世界には足を踏み入れていなかったので、性能が高いくせに安いESP32が良く見えるのですが、組み込みの現場から見たらまた別の意見が出るでしょう。
今回はざっくりとした紹介でしたが、今後はSBCと同じような感じで記事にしていきたいと思います。
コメント
> 身も蓋もない言い方になりますが、マイコンでできることはSBC(シングルボードコンピューター)であれば大体できます。
ここなのですが、少しだけツッコミを入れさせていただきます。
OSが乗ってるSBCはGPIOに書き込んでから実際に出力されるまでのレイテンシーが結構大きいです(数msなど)。
それに対してマイコン系は書き込んだものがそのまま出力されるので(arduino unoに乗ってるマイコンの最短で数十µsくらい)応答が早いです。
リアルタイム性が求められる分野では結構厳しいです。
なのでカメラの演算はラズベリーパイとかでやり、モーターなどの出力はマイコン(シリアル接続したarduino or teensy)でやる場合もあります。
重箱の隅をつつくようなコメントですみませんw
コメントありがとうございます。
確かにリアルタイム性という点ではSBCは厳しいですね。
この点について追記いたしました。
Arduino GIGA R1 WiFi が出ましたね。
https://store-usa.arduino.cc/products/giga-r1-wifi?selectedStore=us
価格もスペックもすごいです。
ぜひ取り上げてください。
コメントと情報ありがとうございます。
Arduino GIGA R1 WiFi、なんかすげーですね。村田製作所のWi-fiモジュールとかあるのか…