マイコン学習の初心者にArduinoでなくSTM32 Nucleoをすすめるわけ

めかのとろ

現役エンジニア社長のめかのとろです。
組み込みエンジニアをめざしているひとにとって、本格的に勉強を始めるためにどんなものを教材にすれば効率よく短期間で本当につかえるスキルが身につくのかを検討しておすすめでとっておきの方法を紹介します。

めかのとろ

ここでは電子工作において巷で大流行のArduinoとARMのオープンソース開発環境であるMbed、そして今回の紹介するNucleoマイコンボードを使いこなすために開発環境STM32CubeIDEをカスタマイズしたものとの比較をしていきます。

Arduinoについて

めかのとろ

Arduinoの詳細に関しましては割愛しますが、いわずと知れた電子工作では巷で大流行のマイコン搭載システムです。ホビー向け用途の電子工作に最適でインターネット、書籍などの情報も豊富ですので初心者にとってはとにかく簡単にマイコンを使った電子工作を気楽に始めることができます

めかのとろ

利点は、工学の専門的な知識がなくても気軽にマイコンを使ったプログラミングで電子工作ができることです。レゴ社のMindstormsといったプログラミング商材がありますが、ちょっと遊び心があるところなど基本的なコンセプトは類似しています。プログラミングはC言語に似た専用のArduino言語によります。

めかのとろ

似たような商材にRaspberry Piシリーズがありますが、これは電子工作用というよりOSも搭載した通信機能の充実したむしろ小型のPCであるためここでは取り上げません。

めかのとろ

Arduinoではマイコンとハードウェアのインターフェース部分は隠蔽されてカプセル化されているため、ユーザーはハードウェアはあまり意識しなくてもシステムができてしまいます。つまり、レゴMindstormsのように出来合いのパーツを接続して最低限のプログラミング知識でアプリを発展させていく感じです。視覚的なブロック等を組み合わせて小学生でもプログラミングできるのに対して、Arduinoは専用のプログラミング言語を使うところが違いますが、基本的に同じようなものです。

めかのとろ

Arduinoは気軽にホビー感覚で始めるのに向いていてセンサーなどの周辺機器や情報が充実しているため、ちょっとしたアイディアで工作するには最適です。ただ、マイコンの仕様を知らなくてもプログラミングができてしまう反面、システム設計に重要となるハードウェアとマイコンそのものの勉强がしたい人には役不足です。

めかのとろ

Arduinoでいろいろなアプリを作成できるようになっても、それが自分で根本から作り上げたものでないかぎり、組み込みというものをわかったことにはならないし、実践では使えません
例えば、シリアル通信一つとっても、できあいの関数一つで簡単にPCと通信できてしまいます。つまり、簡単すぎることが問題で、エンジニアであればどのような仕組みでそうなっているかは最低限は知っておく必要があるのです。

めかのとろ

Arduinoはホビー用途の電子工作向けで組み込みエンジニアを目指すひとがArduinoを使えるようになってもつぶしが利くような技術を身につけることはできないです。ホビー用途以外ではどちらかといえば、工学的な基礎知識がないプログラミング系エンジニアがモノにふれるきっかけで使うのにはよいかもしれません。

Mbedについて

めかのとろ

最近よく「Mbedではじめる電子工作入門」の類をよく目にするのですが、MbedはARM社がメーカーの垣根をこえたオープンな開発環境を提唱しているものであって、ARMマイコンに慣れたプロの開発者、企画者に適していて、電子工作用途ではArduinoでは物足らずARMマイコンでとくにIoTアプリを手掛けたい人にもよいと思います。

めかのとろ

つまり、Mbedはさまざまな種類のマイコン開発の試作などを容易で有利にすすめるプロ向けか、ホビーの電子工作、学生の開発現場などに向いているように思います。マイコンの初心者には敷居が高いかもしれません。

めかのとろ

このシステムの開発環境はクラウド上にあるため、どの端末からもUSBケーブルがあれば転送までできるのが特徴です。ARMマイコンをメーカーの垣根を超えて汎用的に使用できるのが最大の特徴ですが、そのためにもArduinoのようにハードウェア部分のインターフェースは抽象的なものに隠蔽されていて使用者はアプリのプログラミングに集中できるようになっています。

めかのとろ

最大の利点は各メーカーの各マイコン仕様詳細を知らなくても、アプリの開発に集中できることで、試作等が簡単にできるために開発期間を短縮できることです。いいことづくめのようであるが、果たしてどうでしょうか。

Mbedのクラウド環境開発とIoT
めかのとろ

Mbedシステムはハードウェアの知識とマイコン開発の経験があるプロフェッショナルのエンジニアが開発期間短縮などで使用するのには強力なツールであると思います。

めかのとろ

各マイコンの仕様を新規開発の度に確認しながらものにするのにかかる時間をメーカーの垣根をこえたMbedシステムで開発期間を短縮させて肝心のアプリプログラミングに集中できるのは評価できます。しかし、Arduinoと同じく、簡単に開発ができる反面もあります。

めかのとろ

初心者に限った話ではありますがいきなり高性能のARMマイコンのハードウェア部分を抽象化した環境で開発するのですから、ホビーの電子工作に限っては使い勝手はよいと思いますが、組み込みエンジニアを目指す人がいきなりこの環境になれてしまうのは問題があって、そのうち壁にぶちあたりままならなくなるのは明らかです。

めかのとろ

ソフトウェアだけを扱ってきたものがハードウェアの理解なしに容易にマイコンを操作できてもホビー用途ではいいですが、中途半端で組み込みスキルを身に着けたとはいえません。

めかのとろ

電子工作であればインターネットに転がっている情報を中身を理解せずとも適応して動作ができればそれで済むはなしですが、最終的にマイコンを使って製品化する場合とは別の次元の話と考えたほうがよいです。組み込みエンジニアを目指すならば、従来どおり基礎的なハードウェアの知識とマイコンの仕様を読み取るスキルを身につけ、設計開発できるようになってほしいものです。

めかのとろ

ハードウェアとマイコンとのインターフェース部分を抽象化して意識しないでもプログラミングできるMbedは組み込みマイコン学習には向いていません。抽象化したインターフェースを使うのはある程度マイコンのことを知ってからの方がよいです。ホビー用途なら問題ありませんが、製品開発には知識・経験のバランスが必要であるからです。

めかのとろ

大手メーカーなどで専門分野ごとに分業するなら中身を知らなくても成り立つかもしれませんが、副業やフリーランスなど独立して仕事をする場合はなおさらです。モノづくりをするのにハードウェアを知らずしてソフトウェアのプログラミングだけで実現しようとすることはありえない話で、初心者がいきなり利便性だけでMbedを採用するとそこを勘違いするのではという懸念があります。

めかのとろ

もう一つ、Mbedを使うには対応した専用のボードが必要です。裸のARMマイコンには使用できなく、どこまでいってもMbed専用ボードでシステムの評価に使用するのが条件です。

当サイトで提唱するマイコン開発環境STM32CubeIDE with SPL

めかのとろ

マイコンを使った組み込みの勉強を電子工作から始めたいけれどArduinoでは実用的とはいえないし、Mbedは抽象的すぎて敷居が高いし、何を選べが短期間に知識・経験が身つくのか迷っている人へのおすすめは当サイトが構成しているシステムです。

めかのとろ

当サイトのシステムではメーカー提供(フリー、機能制限なし)の総合開発環境STM32CubeIDEにSPLを組み込んだものです。SPLStandard Peripheral Libraryと呼ばれる、STM32マイコンを使うのに使用する従来型のライブラリで現在、新製品マイコンにも対応しているHALライブラリに対するものです。SPLはマイコン本来の煩雑なレジスタ操作によっていろいろな機能を実現するところを、開発者がわかりやすくパラメータで指定できるだけですむようにコード化したライブラリです。

めかのとろ

従来では各マイコンの何百ページにもわたる取扱説明書を解読しながらレジスタ操作してプログラミングするところをコード化したライブラリだけを使って開発できるので初心者でもマイコンが扱えるのです。このSPLは取説に記述しているレジスタの内容をわかりやすくコード化したものであるからシンプルで情報も豊富にあり、学習を始める初心者には最適です。

めかのとろ

これに対して、現在メーカーが推奨しているHALライブラリはSPLに似ていますが、かなり抽象化されているため冗長な部分があってちょっと中身を調べようとするとわかりにくいです。ただし、SPLを使った学習である程度STM32マイコンに慣れてしまったあとでは、基本的に類似しているHALを扱うのは容易です。いきなり抽象的なものから学習するのではなく地に足のついたSPLで基礎を固めてから次に進むほうが後々つぶしが効くと思います。

めかのとろ

メーカーはより便利で開発を有利にすすめるツールを奨励するものですが、HALはある程度基礎のあるベテランは積極的に採用すべきものだと考えます。

このマイコンと開発環境を使うメリット

  • ARMコアSTM32マイコンの勉強が簡単に始められる
  • 教材ボードとして使うNucleo-F103RBは安価で容易に取得できる。
  • Nucleoボードはプログラム転送用ツールのST-LINKが含まれているのでUSBケーブルとPCがあれば使用できる。
  • 教材に使用するボードはArduinoと互換性があるのでArduino用の資産が使えて電子工作でいろいろ発展させやすい。
  • 当サイトの学習用STM32CubeIDE with SPLにはOSとしてFreeRTOSも搭載していますので、かなり高度なアプリケーションの開発もできます。
  • マイコン開発環境は学習用にシンプルな構成としているので、簡単に構築でき、すぐに学習を始められる。

デリット

  • 現在では日本語対応が完全ではない。他の環境で作成したアプリを使うと文字化けしてしまう。そのうち解決できると期待。
  • 今のところ、STM32F1シリーズにしか対応していない。ただし、学習用ではこれで十分で、ある程度慣れたあとではSPLでもCortex-M4コアのF4シリーズに移植したり、さらにはHALドライバへ発展させることが容易にできるので心配はいらない。

モノづくりするにはまずモノを知ろう

めかのとろ

Arduino、Mbedでの開発環境に共通したものは手軽にマイコン開発ができるようにハードウェアとのインターフェース部分を抽象化していることです。これにより、開発者はハードウェア仕様に関わらないですむためにアプリ本体の開発に集中できることが特徴です。

めかのとろ

これはIoTが普及するようになり、アプリケーションにソフトウェアの占める割合が増えたことによりこの傾向が強まってきた感はあります。パラダイム・シフトによりモノづくりがハードウェア寄りであったものからソフトウェア寄りになったような感じさえうけます。

めかのとろ

が、しかし、実際のモノづくり開発現場では基本的には従来とは何も変わっていません
従来のものにマイコンが付加され、最近ではそれにさらにIoTが付加されただけであってモノづくりの基本はハードウェアあってのものであることが今後変わることはありません。

めかのとろ

むしろ、ソフトウェア(プログラミング)の部分は将来的にAIにとって代わられるかもしれません。

めかのとろ

なんでも抽象化によりモノについての知識がなくても、使用者がモノを扱える傾向は今に始まったことではなくマイコン開発業界に限られず、いまではPC、スマホ、自動車等を使用するにあたっては中身を知らなくても簡単に扱えます。

めかのとろ

製品、商品を使う側の立場では問題はありませんが、作る側の立場で勘違いして同じようなことができるようになったと思い込むことは根本的に問題です。

めかのとろ

この風潮はメーカーたちのビジネスモデルであったり、開発にかかわった経験のないマスコミ等の人たちが作り上げているイメージであって、そもそもArduinoに関してはホビーの電子工作に特化したものであり、Mbedは開発支援ツールの位置付けである程度慣れたプロ向けかArduinoと同じくホビー向けです。

めかのとろ

要はモノづくりのエンジニアを目指すならばモノの基礎を知らずして、モノづくりはできないということははっきりさせてしっかり勉強と経験をしておかないと本当にソフトウェアしか理解できないエンジニアもどきになってしまいます。

めかのとろ

結構、そういったたぐいの人は現場でもよく目にしますが、このような人には設計・開発は不安で任せられません。どこまでいってもハードウェアを扱う開発はモノづくり技術の範疇であって、ソフトウェアであるプログラミングは技術を活かす手段の一つであることを忘れてはなりません。

ポイント

電子工作で大人気のArduinoを筆頭にさまざまなマイコンの開発環境の中でも、当サイトでは学習に最適なNucleoボードを使用した開発システムの紹介をしています。

■ 開発環境がメーカー提供のフリーで制限がなくシンプルで手軽に始められること(STM32CubeIDE with SPL + FreeRTOS)
■ 電子工作などアプリケーションを作成するのに多くのツール(Arduinoと互換)、情報が多いこと
■ ハードウェアとマイコン間のインターフェースを意識しながら学習すること(最重要)
■ ArduinoやMbedシステムに比べて汎用性が高いのでより実践力がつくこと

マイコンを使った組み込みを開始する上で、電子工作に徹したホビー用途だけなのか、マイコンをつかった組み込み製品の設計、開発もしたいのかにより扱うマイコン開発環境の選択肢もちがいます。将来性を考慮すると基礎からしっかり学習ができる当サイトで紹介している開発環境がつぶしも効き最適です。

 

Follow me!