micro:bitでµT-Kernel 3.0を動かそう

目次に戻る

[第1回] micro:bitの概要

トロンフォーラムから公開した最新リアルタイムOSであるµT-Kernel 3.0は、バージョンアップを繰り返しつつ、対応するCPUやボードを増やしている。この活動の一環として、小学生向きのプログラミング教育などに使われているBBC micro:bit(以下「micro:bit」)にもµT-Kernel 3.0の移植作業を進めることとした。連載第1回の本号では、まずmicro:bitの概要について説明する。

micro:bit誕生の背景

micro:bitは、BBC(英国放送協会、British Broadcasting Corporation)が中心となって開発した小型の教育用ボードコンピュータである。次世代のデジタル人材を育成することを目的として、プログラミングやその関連技術を学ぶことができる実践的な教材セットだ。現在、micro:bitの開発や普及などの活動はMicro:bit教育財団(*1)に引き継がれており、この財団のウェブサイトでは、自身の事業活動の目的を "Our vision is to inspire every child to create their best digital future." と説明している。


BBCは英国の公共放送を運営する団体である。日本でいえばNHKのようなところであるが、何かとコンピュータ技術との関わりが深い。BBCは1980年代のはじめにも、今のmicro:bitを彷彿させるような教育用コンピュータのプロジェクトを展開しており、その教材として、BBC Microとよばれるコンピュータを企画した。BBC micro:bitの名称は、この先代プロジェクトを意識しているようだ。BBC Microは英国国内の多くの学校でコンピュータ技術の教育に使用され、最終的には150万台が売れたということである。


BBC Microのハードウェアを開発したのはAcorn Computersという英国のメーカーだが、このメーカーが次機種のCPUとして自ら開発したのが、初代のARMプロセッサである。ご存じのように、ARMのアーキテクチャは現代の多くの組込みコンピュータやIoTエッジノードのみならず、スマートフォンやPC、サーバーの一部まで支える基盤技術に成長した。BBCは、micro:bitやBBC Microを使ったコンピュータ教育のプロジェクトを主導したのに加えて、間接的にではあるが、現代のコンピュータの基盤技術にも大きな影響を与えている。

micro:bitのハードウェア構成

図1 micro:bitとIoT-Engine
図1 micro:bitとIoT-Engine

図2 micro:bit V2のハードウェアのブロック図
図2 micro:bit V2のハードウェアのブロック図

図3 micro:bitを使った果物キーボードの実験
図3 micro:bitを使った果物キーボードの実験
一番右側のGNDのケーブルにタッチしながら、
他の手でりんご、バナナ、みかんを触ると、
micro:bitから「ド」「レ」「ミ」の音が鳴る。

micro:bitはケースの無い基板むき出しのボードだが、子供が乱暴に扱っても壊れにくく危険がないように、とがった突起物などは最小限に抑えた構造になっている。また、デザイン的にもカラフルであり、一般的な評価ボードとは見かけの印象がやや異なる。大きさは幅51.6mm×高さ42.0mm(*2)で、IoT-Engine(幅30mm×高さ37mm)の2倍程度だ(図1)。


メインのCPUはNordic SemiconductorのnRF52833(Arm Cortex-M4コア)であり(*3)、このCPUコアについてはトロンフォーラムのµT-Kernel 3.0でも対応済である。このほかに、開発用ホスト環境とのプログラム転送などに利用するInterface MCU(*4)として、NXP KL27Z(Arm Cortex-M0+コア)も搭載している。メモリは512KBのFlash ROMと128KBのRAMである。micro:bitのハードウェアの技術情報や回路図はすべて公開されている(*5)


安価な教育用ボードであるにもかかわらず、豊富な周辺デバイスを搭載している(図2)。5行5列のマトリクス状に配置された25個のLEDをはじめ、ボタンスイッチ二つ、タッチセンサー、照度センサー、温度センサー、加速度センサー、地磁気センサー(コンパス)といったセンサー類、マイクとスピーカーによるサウンド機能、USBやBluetoothといった通信機能が利用でき、電子工作やさらなるハードウェア拡張のためのエッジコネクタ端子(*6)も出ている。


このエッジコネクタ端子には、子供の教育や実験、電子工作などを想定した工夫がある。電源やGPIO、SPI、I2C、アナログ入力が25個の端子に出ており、ソケット経由で周辺機器を追加できるのだが、このうちの主要な5本(GPIOが3本と電源2本)は幅の大きなリング状の端子になっており、ワニ口クリップを使った配線の接続が可能なのだ。これを使えば、ブレッドボードなどを使った細かい電子工作やハンダ付けをしなくても、外付けのLEDやセンサー類をワニ口クリップで接続することができる。理科や電子工作の実験として、ワニ口クリップの先にアルミホイルをつないで自分で降水センサーやドアセンサーを作ってみたり、ワニ口クリップの先にバナナ、りんご、みかんなどを接続し、これらの果物と人体の導電性を利用した果物キーボードを作ってみたりするといった使用例もあり(図3)、実際に試したサンプルプログラムや実験例がウェブサイト上にたくさん公開されている。


このように、micro:bitはコンピュータのプログラミング、すなわちソフトウェア面の教育のみならず、理科の実験や電子工作といったハードウェア面の教育にも配慮されている。micro:bitは、PCのような情報処理系のコンピュータではなく、ハードウェアとの連携が重要な組込み系、IoTエッジノード系のコンピュータであり、この点からもµT-Kernel 3.0の実行対象ボードに適していると言えるだろう。




micro:bitのソフトウェア開発

英国では、11歳と12歳の小学生全員にmicro:bitが配布されており、プログラミングや電子工作の教育のために利用されている。教育目的かつ子供向けということもあって、micro:bitのプログラミングマニュアルやチュートリアルなどの公式ドキュメントは大変分かりやすく、技術的な内容もしっかりと充実したものになっている。これらのドキュメントはmicro:bitの公式サイト(*7)から閲覧できるが、日本語を含めた世界中の多くの言語に翻訳されており、子供や英語が不得意な日本人でも安心して利用できる。そのほか、micro:bitのユーザが書いた解説書などの書籍やウェブサイト上の情報、micro:bitを使ったプログラミングの教材例などの情報も数多く公開されている。micro:bitの利用にあたり、ドキュメントや情報といった面ではまったく困ることがない。

○ MakeCodeを使ったプログラミング

図4 MakeCodeによるビジュアルプログラミングの画面
図4 MakeCodeによるビジュアルプログラミング
の画面
micro:bitをゆさぶると、LEDに「T」「R」「O」
「N」と表示するサンプルプログラムを作成した。


micro:bitの標準的なソフトウェア開発方法として、Microsoftが開発したビジュアルプログラミング言語環境であるMicrosoft MakeCode(以下「MakeCode」)を使う(*8)。繰り返し、条件判断、変数、デバイス操作など、プログラミングに必要な個々の機能が色付きのブロックで表現されており、これらのブロックをGUI画面上で組み合わせることによってプログラムを記述する(図4)。このため、プログラムの文法やキーワードを覚える必要がなく、ブロックの名前や並べ方を見るだけで、プログラムの意味が直感的に理解できる。また、ブロックの形状によって組み合わせの可否が分かるという点も工夫されている。たとえば、数値変数は左右が丸い形、論理変数は左右が三角の形になっていて、四則演算のような計算式の引数には左右が丸い形の数値変数のみが入り、条件判断文の引数には左右が三角の論理変数のみが入る。こういったブロック形状の制約により、変数の型に関する組み合わせの規則が自然に理解できる。教育向けのビジュアルプログラミング言語としては、MITで開発されたScratchが有名だが、MakeCodeの見かけや上記の特徴はScratchに似たところが多い。なお、MakeCode自体はmicro:bit専用というわけではなく、LEGO MINDSTORMSなど他のコンピュータ環境も対象としている。

○ 周辺デバイスの操作

図5 LEDに関する機能ブロック
図5 LEDに関する機能ブロック

図6 センサー類からの入力を扱うブロック
図6 センサー類からの入力を扱うブロック









micro:bit用のMakeCodeでは、micro:bitの豊富な周辺デバイスを操作するための機能ブロックが用意されていて、MakeCodeからすぐに使えるようになっている。たとえば、5行5列のLEDに任意のドットイメージを表示する「LED画面に表示」という機能ブロックがあり、MakeCodeの画面上で実際の表示イメージをそのブロックに設定しておくと、実行時には設定したイメージがそのままLEDに表示される。


また、LEDの場合はより高度な機能ブロックも用意されており、LEDに特定のアイコン(絵文字)を表示する機能、文字列をスクロールしながら表示する機能、指定した1ドットのみを点灯、消灯、反転する機能、棒グラフを表示する機能などがある(図5)。これらの機能の実装を考えると、5行5列のマトリクス状に配線されたLEDをスキャンしながら表示するLEDドライバや、5×5ドットのLED画面上に文字やアイコンを表示するドットフォントのデータ、文字列をスクロールして表示するライブラリなど、いろいろと複雑な処理を必要としているはずだが、micro:bit用のMakeCodeではこれらの機能が分かりやすいブロックの形にまとめられており、実行中のプログラムから簡単に呼び出して利用できる。


センサー類についても、それぞれのセンサーに対応するMakeCodeのブロックが用意されている(図6)。センサーを扱う機能ブロックには、センサー値を変数として扱う変数タイプと、センサー値の変化をイベントとしてプログラムを起動するイベント起動タイプの2種類がある。たとえば、前者の変数タイプの例として、ボード上のボタンスイッチAが押されている場合に真となる「ボタン[A▼]が押されている」という論理変数のブロックが用意されている。これを条件判断のブロックの引数に入れると、ボタンスイッチAの状態によって実行するブロックを変えることができる。


一方、後者のイベント起動タイプとして、ボタンスイッチAが押された場合にプログラムの新しいスレッドを起動する「ボタン[A▼]が押されたとき」というブロックも用意されている。このブロックを使えば、ボタンスイッチAが押されたという変化をイベントとして、指定したプログラムを実行することができる。µT-Kernelでいえば、新しいタスクかハンドラを起動するイメージである。ボタンだけではなく、加速度センサーや地磁気センサー(コンパス)もイベント起動タイプに対応しており、「ゆさぶられた」「画面が上になった」「落とした」などをイベントとしてプログラムを起動できる。また、エッジコネクタ端子のGPIO入力を扱う変数ブロックやイベント起動ブロックも用意されており、ワニ口クリップを使った電子工作で追加したデバイスを扱うプログラムも同じように作成できる。

○ ブラウザによる開発とシミュレーション実行

MakeCodeの画面を使った開発の作業は、PCやタブレット、スマートフォンのブラウザ上で実行可能である。つまり、開発環境全体がウェブアプリで作られており、ブラウザから指定のURL(*9)にアクセスするだけで、すぐにプログラム開発を始めることができる。開発環境をダウンロードしてPCにインストールする必要はないし、WindowsやLinuxといった開発用ホストPC側の実行環境を気にする必要もない。ブラウザが動けばよいだけである。Google Chrome、Mozilla Firefox、Microsoft Edge、Safariなど、代表的なブラウザにはすべて対応している。


図7 JavaScriptで表示したmicro:bitのプログラム
図7 JavaScriptで表示したmicro:bitのプログラム











MakeCodeの画面の左側にはmicro:bitのイラストが表示されており、これがそのままプログラムの実行シミュレータになっている(図4)。5行5列のLEDのほか、二つのボタンスイッチやタッチセンサー、加速度センサー、スピーカーなど多くのデバイスのシミュレーションが可能であり、micro:bitの実機がなくてもこの画面だけで基本的な動作を確認することができる。たとえば、画面に表示されたmicro:bitのイラストのボタンAの部分をマウスでクリックすると、MakeCodeの「ボタン[A▼]が押されたとき」のブロックが即座に実行され、MakeCodeの「LED画面の表示」のブロックを実行すると、5×5ドットのイメージが画面上のmicro:bitのLED部分に表示される。さらに、画面上のmicro:bitのイラストの上にマウスのポインタを置いて左右に振動させると、micro:bitのイラストも揺れるような動きをした後に、「[ゆさぶられた▼]とき」のブロックが実行される。マニュアルなどをまったく見なくても、画面の直感的な操作だけで自然にシミュレータまで実行できるのだ。機能ブロックの組み合わせによるプログラムの開発も、シミュレーションによる画面上でのプログラム実行も、子供を含めて誰でも簡単に操作できるように、よく考えられている。


機能ブロックの組み合わせによるビジュアルプログラミングではなく、通常のプログラム言語のようなテキスト(文字列)でプログラミングしたいのであれば、JavaScriptまたはPythonを使うことができる(図7)。さらに、機能ブロックの組み合わせによるプログラムと、JavaScriptやPythonで書いたプログラムとの相互変換も簡単だ。MakeCodeの画面の上部にある切替ボタンが「ブロック」であれば機能ブロックの組み合わせによるビジュアルプログラミングの画面が表示され、このボタンを「JavaScript」「Python」に切り替えると、JavaScriptやPythonのプログラムを書いたテキストエディタの画面が表示される。このため、簡単な操作で機能ブロック、JavaScript、Pythonの対応関係を確かめることができ、JavaScriptやPythonの基本的なプログラミングを学ぶ際にもMakeCodeが役立つ。


プログラムの転送と実機での実行

micro:bitの実機でプログラムを実行するには、開発用のMakeCodeからmicro:bitにプログラムを転送する必要がある。MakeCodeの画面には「ダウンロード」のボタンがあり、これをクリックすると、コンパイルされたhex形式(16進数のテキスト)のオブジェクトプログラムがUSBまたはBluetoothを経由してmicro:bitの実機に転送され、転送が終わるとすぐに実行される。この操作もきわめて簡単であり、明示的なコンパイルやビルドの操作は必要ないし、micro:bit側でのボタン操作なども不要である。


実行までの操作は簡単であるが、MakeCodeの動いている開発用ホスト環境とプログラムを実行するmicro:bitは別のコンピュータであり、一般的な組込みシステムと同じ「クロス開発」とよばれる開発スタイルになっている。micro:bitは豊富な周辺デバイスを持つものの、CPU自体の性能はPCやスマートフォンと比べればずっと低く、画面やキーボード、ストレージやファイルなども持たないので、この上でプログラムの作成やコンパイルをすることは困難である。この点は、µT-KernelなどのリアルタイムOSが対象としているIoTエッジノードや小規模な組込みシステムと同様だ。micro:bitは、教育用のボードコンピュータであると同時に、IoTエッジノードや組込みシステムの一つでもある。


図8 micro:bitのInterface MCUとTarget MCU
図8 micro:bitのInterface MCUとTarget MCU

MakeCodeからのプログラム転送と実行のために活躍するのが、micro:bitに搭載されているInterface MCUとよばれるプロセッサである。このプロセッサは、MakeCodeで作成したプログラムを実行するためのメインのプロセッサ(Target MCUとよばれる)とは別になっており、この上でDAPLinkとよばれるファームウェアが動作している。DAPLinkとは、Armの提供する総合的な開発用のプラットフォーム(Arm Mbed)のうち、デバッグ用のインタフェース機能に相当する部分であり、開発用ホスト環境からUSB経由でダウンロードしたプログラムをTarget MCUのメインメモリに書き込んだり、Target MCUからのシリアル通信データをUSBに変換して開発用ホストの仮想COMポートに転送したりするといった機能を持つ(図8)。簡単な操作で手軽にmicro:bitのクロス開発ができるのは、Interface MCUとDAPLinkの働きに依るところが大きい。



* * *

本稿では、µT-Kernel 3.0の移植の準備として、micro:bitの概要を駆け足で紹介した。まだまだ説明すべき点は多いが、micro:bitの詳細や活用事例についてはウェブサイトや市販の書籍にも数多くの情報が掲載されているので、興味のある方はあわせてご覧いただきたい。次回は、micro:bitの上で動くµT-Kernel 3.0について説明する。


(*1)
 Micro:bit教育財団 https://microbit.org/about/
(*2)
 micro:bit V2の外形図 https://tech.microbit.org/docs/hardware/assets/Microbit_V2_Assembly.pdf
(*3)
 2020年11月発売のmicro:bit V2の場合。これ以前のV1ではCPUの詳細や付属する周辺デバイスなどがやや異なる。本稿の説明はV2を対象とする。
(*4)
 MCUは Micro Controller Unit の略であり、CPUに加えてメモリや周辺デバイスなどを内蔵したワンチップのマイクロコンピュータを意味する。
(*5)
 micro:bitのハードウェア情報(仕様、ブロック図、回路図、データシートなど) https://tech.microbit.org/hardware/
(*6)
 micro:bit V2のエッジコネクタ端子 https://tech.microbit.org/hardware/edgeconnector/
(*7)
 micro:bitの公式サイト(日本語) https://archive.microbit.org/ja/
(*8)
 Microsoft MakeCode(日本語) https://www.microsoft.com/ja-jp/makecode
(*9)
 MakeCodeによるmicro:bitのプログラム開発 https://makecode.microbit.org/
  • 本ページは、「TRONWARE Vol.195」の掲載記事「micro:bitでµT-Kernel 3.0を動かそう 第1回 micro:bitの概要」をWebで公開したものです。

ページの先頭に戻る

 

次回の連載記事に進む