実は、
少し工夫をすると、 Microsoft MakeCode for micro:bit でも、 C/C++ によるプログラミングが可能です。
必要なもの
Microsoft MakeCode for micro:bit 上で、C/C++によるプログラミングをするために、次のものが必要です。
- micro:bit(本体)
- GitHubアカウント
micro:bit(本体)
C/C++で開発したプログラムを実行するには、 micro:bit(本体) への転送が必要です。MakeCodeのシミュレーターでは、実行することができません(シミュレーションできません)。
micro:bit のバージョン毎に、ランタイム等が異なりますので、できれば、v1とv2の2つを用意して、動作確認を行います。
micro:bit | ランタイム | nRF5 |
---|---|---|
V1 | dal | Soft Device 110 |
V2 | codal | Soft Device 113 |
The micro:bit runtime DAL/CODAL (英語)
GitHubアカウント
Microsoft MakeCode for micro:bit では、作成したプロジェクトのソースコード一式を GitHub で管理することができます。また、C/C++プログラミングに必要なファイルを追加するために、 GitHub を使用します。
その為、GitHub への サインイン が必要になりますので、事前に GitHubアカウント を用意してください( サインアップ - https://github.com/signup )。
C/C++で Hello World!
Microsoft MakeCode for micro:bit の 文字列を表示
ブロックでは、その実行中(スクロール表示中)、順次実行がブロックされ、そのブロックの実行(スクロール表示)が完了するまで、次のブロックは実行されません(同期処理)。
C/C++プログラムの例として、この文字列表示をバックグラウンドで実行する showAsyncString
ブロックをC/C++でプログラミングします。
プロジェクトの新規作成
Microsoft MakeCode for micro:bit で、 新しいプロジェクト を作成します。
ここでは、プロジェクト名を microbit-cpp
にしました。
C/C++ファイルの追加
Microsoft MakeCode for micro:bit 上では、ts形式以外のファイルを追加できません。そこで、MakeCodeのプロジェクトをGitHubリポジトリに登録し、GitHub上で、ts形式以外のファイルを追加します。
次の手順で、C/C++ファイル等を追加します。
1.GitHubリポジトリを作成する
GitHubリポジトリを作成する
アイコンをクリックします。
2.GitHubでサインイン
準備したGitHubアカウントでサインインします。
3.GitHubリポジトリを作成
リポジトリ名
を確認し、 つづける
ボタンでGitHubリポジトリを作成します。
4.リポジトリを準備中
リポジトリが作成されるのを待ちます。
5.リポジトリ作成完了
リポジトリの作成が完了したら、 ローカルの変更はGitHubと同期されます
アイコンをクリックします。
6.GitHubでリポジトリを開く
GitHubでリポジトリを開きます。
アイコンをクリックし、GitHubリポジトリを開きます。
7.GitHubリポジトリにファイルを追加
+
アイコンの Create new file
をクリックし、ファイルを追加します。
8.helloworld.cppファイルを追加
ファイル名を helloworld.cpp
とし、 Commit changes..
で追加を確定します。
9.Commit changes
Commit changes
ボタンをクリックし、確定します。
10.ptx.jsonファイルを編集
GitHub上で、 ptx.json
ファイルを編集し、 helloworld.cpp
ファイルをプロジェクトに含めるようにします。
11.Commit changes
ptx.json
ファイルの変更を確定します。
12.変更を取得(プル)
MakeCode上で、 変更を取得(プル)
ボタンをクリックし、GitHub上での変更をMakeCode上のプロジェクトに反映します。
13.カスタムブロックの追加
JavaScriptモードにして、エクスプローラーの +
アイコンをクリックします。
14.新しいファイルの名前
新しいファイル名を helloworld.ts
とし、 つづける
ボタンをクリックします。
15.空のhelloworld.tsファイル
helloworld.ts
ファイルが作成されたことを確認します。
16.変更をコミットしてプッシュ
変更をコミットしてプッシュ
ボタンをクリックし、MakeCode上での変更をGitHubへ反映します。
17.GitHubリポジトリの確認
GitHubリポジトリを開くと、 helloworld.ts
ファイルが追加されていることを確認できます。また、 ptx.json
ファイルにも、 helloworld.ts
の記述が追加されていることも確認できます。
C/C++プログラミング
helloworld.cpp
ファイルで、C/C++プログラミングを行いますが、それを呼び出すための拡張機能(ブロック)のプログラミングも必要です。
次のように各ファイルでプログラミングします。
/**
* Hello World blocks
* icon: a Unicode identifier for an icon from the Font Awesome icon set.
* http://fontawesome.io/icons
*/
//% weight=100 color=#696969 icon="\uf1b2"
namespace helloworld {
/**
* Show string, async
* @param text 非同期でスクロール表示する文字列
*/
//% block
//% shim=helloworld::showAsyncString
export function showAsyncString(text: string): void {
// for the simulator
basic.showString(text)
}
/**
* Stop animation
*/
//% block
//% shim=helloworld::stopAnimation
export function stopAnimation(): void {
// for the simulator
basic.clearScreen()
}
}
#include "pxt.h"
namespace helloworld {
//%
void showAsyncString(String text) {
uBit.display.scrollAsync(MSTR(text));
}
//%
void stopAnimation() {
uBit.display.stopAnimation();
}
}
コンパイル
コンパイルは、 ダウンロード
ボタンでHEX形式ファイルをダウンロードする際に、MakeCode内部で行われます。
ここで、 ダウンロード
ボタンをクリックすると、 コンパイル(これには1分かかることがあります)...
と表示され、コンパイルが行われます。
動作確認
C/C++のプログラムは、MakeCodeのシミュレーターでは、実行されません。HEX形式ファイルをダウンロードし、micro:bit本体に転送し、動作確認します。
ブロック例では、次のように動作します。
- Aボタンでは、文字列表示とメロディーが同時に実行されます。
- Bボタンでは、文字列表示が実行されてからメロディーが実行されます。
input.onButtonPressed(Button.A, function () {
reset()
helloworld.showAsyncString("Happy birthday!")
music._playDefaultBackground(music.builtInPlayableMelody(Melodies.Birthday), music.PlaybackMode.InBackground)
})
input.onButtonPressed(Button.B, function () {
reset()
basic.showString("Hello!")
music._playDefaultBackground(music.builtInPlayableMelody(Melodies.Dadadadum), music.PlaybackMode.InBackground)
})
function reset () {
helloworld.stopAnimation()
basic.clearScreen()
music.stopAllSounds()
basic.pause(100)
}
basic.showIcon(IconNames.Heart)
おわりに
Microsoft MakeCode for micro:bit でも、 C/C++ によるプログラミングが可能であることを確認しました。