先日、

 

 

 

の中でMakecodeでmicro:bitのコードを書いてデバッグも出来ることについて書きましたが、今回は、使い方や使用などについて書こうかなと思います。
 

 

  MakeCode


 MakeCodeは、マイクロソフトが提供しているオンラインサービスで、このサービスは、WEBブラウザでアクセスするとコードを書いてコードの内容を実装されているシミュレーターで動かしてコードのデバッグが出来るようになっています。

 このコードをダウンロードすると実際に端末にコードを移動できるので、実機でも試せるようになっています。



 コードを書く際には、プログラミング言語を触ったことがない人でも対応できるような 【 ブロック 】 を繋いで実行できるような仕様になっているので、キーボードに慣れていない人でもプログラミングが出来るようになっています。

 Scratchもそういった仕様になっていますが、こちらは、WEB-GL非対応ブラウザでは使用できないようなので、IGPの性能が古く、ブラウザの機能としてそうした物が使用できないと使えないのですが、Makecodeではそういった成約はありません。とりあえず、6年前くらいのディスクリートGPUでも問題なく動くようなものなので、現在のアーキテクチャだと全く影響がないと思いますが、Scratchの場合だとアーキテクチャが古すぎると制約を受ける場合があります。

 ちなみに、ScratchはRaspberry PIのRasbianでも使用できるので、ごく当たり前にコードを書くことが出来るようになっていますが、プログラミングの方法自体はScratchと同じ仕様になっています。
 

 

  micro:bit

 

 micro:bitはイギリスのBBCのワンボードマイコンになりますが、ブザーとドットマトリックスLEDが実装されているので、ここで音と表示をコントロールする仕様になっており、この時の入力を、ボタンやセンサーで行える仕様になっています。この時に、傾きや振る様な動作の検知や温度なども扱えるので、いろいろな情報を元に動作するようになっています。

 当然、単体でも表示が出来て音もなるのでアプリケーションを作って動かすことが出来ますが、GPIOも用意されているので、端子からの出力をすることで、その端子から出す信号によって外部に繋いだ電気工作で作成した物を動かすことも出来るようになっています。その為、サーボモーターやモーターなども動かすことが出来るようになっていますが、この場合だと、一般的には 【 ドライバー 】 を間に挟んで電力共有が出来る状態にして運用することになります。

 MakeCodeでは、拡張機能でサーボモーターなども追加できるので、デバイスを繋いで動かすことも出来るのですが、無線通信プロトコルを所有しているので、端末同士での通信が出来るようになっています。

 この処理についても、プログラミングをすると複数の端末での処理もデバッグが行えるようになっているので、実際に作ったプログラムがどんな動きになるのかを確認することが出来ます。実機にプログラムを送る前に実際の挙動を試すことが出来るので、確実に動作するものを作ってから送信することが出来るようになっています。
 

 

  マイコンの仕様


 マイコンですが、これは、CPUとメモリーとI/Oのやり取りが出来る環境が用意されており、この処理をコードで行うようになっているのですが、このときに使用するプログラミング言語などはファームウェアで指定することになります。

 これでスタートアップでスケッチの実行ができるようになりますが、一般的なマイコンだとC言語でコードを書くようになっているので、Arduino IDEやThonyなどでコードを書いてそれをコンパイルして送ると言う流れになります。

 マイコンは 【 制御をする集積回路 】 なので、この部品単体だと何も動作しませんから、入力と出力をするものを実装する必要があります。つまり、マイコンはコントローラーなので、入力用のセンサーや出力の洋のアクチュエーターなどを用意しないと何も出来ません。そこで、この部分を電気工作で制作して、この制御の部分にマイコンを実装することになります。こうすることで、アナログ回路で制作した場合には巨大になってしまう回路をコンパクトにすることができます。判定や演算では論理演算を用いるわけですが、この基本となるのはスイッチなのでトランジスタを使用します。一般的に使用されている少電力な論理演算回路はMOSの構造なので、N型とP型のトランジスタを2つずつ用意して、それを直列と並列に繋いで使用します。そうすることでCMOSの構造にすることが出来るわけですが、NANDゲートを1つ作るだけでもこの状態ですから、ロジックICの・ようなものを用意すると結構膨大な量のトランジスタを消費することになります。また、ブレッドボード上でコレを作ると、単一のNANDでも結構なサイズになるので、これを使用して半加算器を作ると、処理に見合わないような消費電力と熱量の物体が出来上がります。

 コレが配線が太く、パーツが大きな状態での回路設計をした場合の問題点になりますが、こうした処理もロジックICを使えば小型化できますが、こうした特化した処理を単一のものではなく複数選択して実行できるような汎用性をもたせたものがCPUになります。これにメモリーとストレージ区画を用意してI/Oとのやり取りを出来るようにしたものがマイコンになります。

 このようにマイコンはPCのようにOSを実装しているわけではありませんから、デバイスの制御をする際には全てコードを書いて制御をする必要があります。そのため、接続したデバイスの制御をするためのライブラリを実装してコードを書いて実行する必要があります。
 

 

  ワンボードマイコンの場合

 

 ワンボードマイコンはマイコンのようなチップではなく、入出力のデバイスを実装したパッケージ製品なので、購入直後から入出力に対応しています。Raspberry PicoもボタンとLEDは実装されていますから、操作とLEDを使った動作の実装は出来るようになっています。マイコンによってクロックや消費電力が異なるのですが、Arduinoは消費電力が抑えめなので、バッテリーの持ちがいいので、簡素な処理で長時間運尿をしたい場合などで使用できます。

 micro:bitはArduinoよりも速度が出るので、もう少し交付金物に対応できるようになっています。また、実装されている機能も多いので、端末単体でも多種多様なセンサーを実装しているので、それを使ってどういった出力をするのかを考えるてみると決行できることが多いと思います。
 
 この際に、表示と音の出力が出来ますから、どういった処理を実装するのかを考えることになります。その時の処理をブロックを使ってプログラミングを行い、実機に送って実行することになります。

 ワンボードマイコンの場合、通常のチップの形でリリースされているマイコンのようにコードを書く際に制御用のライブラリを追加しなくてもいきなり動く仕様になっているので、実装されたパーツであれば、簡素なコードで制御できるようになっています。micro:bitもMakeCode上でブロックを使って作成したプログラムをそのまま実行できますが、デバイスのイベントに対応したブロックが用意されているので、入力についてはイベントハンドラで動くようになっていますし、表示にしてもパターン発光をさせる場合でもそれに対応したブロックの実装だけで対応できるようになっています。
 

 

  プロジェクトファイルを作る

 

 MakeCodeのサイトにアクセスすると



のような画面いなっているので、この中から



を選択して、新規作成をします。すると、



のようにダイアログが出るので、ファイルの名前をつけてスタートします。



初期状態だと、使用できる言語は

 ■ MakeCode
 ■ Python
 ■ Scratch

の3つになっていますから、MakeCodeで作ったコードがこの2つの自動変換されるようになっています。

 ちなみに、通常のJavaScriptにはマイコン制御用の関数は実装されていませんし、それに実装されているデバイスを制御するライブラリもありませんから、MakeCodeで変換されて表記されているコードは外部ライブラリを使用したものになりますから、通常のJavaScriptだけでは動作しない記述になっていますし、Pythonも通常のPythonでは使用しない記述になっています。Pytyonだと外部ライブラリのNunpyやOpen-CVを使うときには組み込み関数や標準ライブラリに存在しない記述を用いることになりますが、MakeCodeも同様にそういった外部ライブラリを使うときのように基本的な処理系統がその言語の仕様になっているだけで、処理その物は外部ライブラリを使うのと同じ状態になっています。この辺りは、ゲームエンジンでC#やC++を使う状態になっていても、ゲームエンジン内の処理はその言語の組み込み関数や標準ライブラリに実装されていない物を使用しているので、そういった外部ライブラリを参照しながらコードを書いていく仕組みになっています。
 

 

 ここでは、独自の色指定をしているので特殊な色合いになっていますが、通常の色は、

 

 

なので、ここで使用しているような色にななりません。

 

 

  MakeCodeの画面構成


 プロジェクトを作ると、



のような画面になり、最初に



のようなダイアログが表示されます。このダイアログは、各場所の説明が行われるので、このチュートリアルを見てから始めると作業が行いやすくなります。画面の構成ですが、MakeCodeでは、ブロックを使うので、



の部分でブロックを組み合わせて処理を実装することになります。このブロックは、その左側にある



から選択することになります。ここで作ったプログラムは実機に送るのではなく、実装されているシミュレーターで動作するようになっているので、その左にある


の部分で操作して試すことが出来ます。多機能なので、実装した機能の分だけ操作できる部分が増えるのですが、


のように実際にマウスなどで操作して作ったプログラムの動作学人が出来るようになっています。

コードの切り替えは、画面上部の



で行えるようになっており、ここで、PythonとJavaScriptの切り替えを行うことも出来ます。右上にはシェアする為のアイコンが用意されており、アカウントを作って最委員をすることで、コードの共有が出来るようになります。

 

 

 

ちなみに、アカウントの政策wそいなくてもコードのコンパイルをしてHEXファイルを作ることは出来るようになっています。

 

画面下部には、

 

 


 

がありますが、これが、端末にコンパイル済みにHEXファイルをダウンロードする機能になります。その陽子にある

 



は、HEXファイルの保存と端末に直接送る為のものになります。
 

 ここで、ダウンロードなどを選択すると、コードのコンパイルが始まるので、しばらく時間がかかるのですが、コンパイル後には、HEXファイルが出来るのでこれを実機であるmicro:bitに送ることでプログラミングによって実装した動作を実装することが出来るようになります。画面お右下には、

 

 

 

がありますが、これが、アンドゥとリドゥでになりますが、ワークスペース内の拡大縮小はその横にある【+】と【−】で行うことになります。

 

 

  使用できるブロック

 

MakeCodeでは、



のメニューから目的にあったブロックを選択することになります。基本では、



のようになっていますが、表示に関するものや【最初だけ】のようにイベントに関係するものが用意されています。

 

 micro:bitでは、センサーやボタンなども表示されているので、入力が出来るようになっていますが、コレについては、その下の入力を選択すると、

 


 

のような物は教示されます。方角や温度なども検知できるので、それを基準に動作を実行できるようにすることも出来ます。

 

 そして、この項目には、その他が用意されており、

 

 

のように設定を行うブロックも用意されています。ちなみに、現在のバージョンはv2以降なので、v2の機能は使用できるのですが、こうした音の上限を設けることが出来る仕様になっています。micro:bitは音も扱えるので、

 

 

のような機能も用意されています。このブロックを使うと、音や音楽を作れるます。

 

 マイコン制御をする場合の音のコントロールはブザーで行うことが出来ます。ブザーは、流れてくる電流で音階が変わるので、可変抵抗を用意して電流の状態を変更すると可変抵抗の抵抗値で音階が変わります。これはリボン抵抗でも出来るので、音階の場所決めておいて、その場所を指定して通電させるようにすると位置で音階を変更することが出来ます。この場合単音になりますが、スライドさせるとフレットレスの楽器やトロンボーンのように音が変わります。これは、ロータリーエンコーダーでも同じですが、回路内でブザーの定格電流内で動作するようにしておいて、そこから抵抗で抵抗値をコントロールすると音を変化させることが出来ます。

 

 MakeCodeでは音階と集が数の制御が出来るだけでなく音のコントロールも出来るので、いろいろな音の調整が出来るようになっています。

 

 

 基本の表示とは別にLEDの制御をするブロックも用意されており、

 

 

のようなものも用意されています。コレを見ると判定用のブロックなども用意されています。LEDにもその他の機能が用意されており、

 

 

のような細かな設定が出来るようになっています。micro:bitでは端末同士の無線通信が出来るようになっているのですが、

 

 

のブロックを使うことで無線でのやり取りが出来るようになります。これについては、

 

のような挙動を実装する際に使用しますが、MakeCode内で実際に動かしてみるとこのように複数の端末が表示されるので、実装されたコードの確認が出来るようになっています。無線にもその他があり、

 

 

の中にあるように関数での制御も出来るよになっています。処理を行う場合には、一度だけの処理ではなく連続した状態で処理を繰り返す必要がある場合もありますが、この時に使用するのがループになります。ループには、

 

 

のような物が用意されて負いますが、ループの実装とループの終了などが用意されています。

 

 判定を行う場合、単一の状態だけであればいいのですが、条件が複数ありその組み合わせで動作を決定する場合には論理演算を用いることになります。これは、条件分岐に実装するものになりますが、論理では、

 

 

 

のよに条件分岐と論理演算などを行うためのブロックが用意されています。

 

 ここまでの処理はブロック内に決まった状態を指定するものになりますが、処理の中には値が変化する条件も存在します。この時に使用するのが変数になります。MakeCodeでも変数を自由に作れるようになっており、

 

 

 

から新しい変数を作成して使用できるようになっています。

 

 拡張機能は外部機能や別のデバイスを使うための拡張になりますが、

 

 

 

のように、拡張可能なものを追加することで、標準軌異能では対応できない処理を実装できるようになっています。これについては、

 

の動画ようなかんじになりますが、ledやサーボモーターなどを追加して実際にブロックを使って制御できるようになります。

 

 ここまでのブロックは、【 機能の実装 】 になりますが、動作を実装する場合には演算処理が必要になります。この機能は計算のグループに含まれるブロックを使用することになります。ブロックは、

 

 

のようになっていますが、形を見てもらうと変数の状態になっているので、表示や判定などで実装する変数部分に格納して使用することになります

 

 プログラミング言語でコードを書くと同じ処理を別の場所でも使用する状態になる場合ががっ制しますが、こうした処理の記述をその都度行うとコードが物凄く長くなってしまいますし、容量を無駄に消費してしまいます。その為、そういった処理は関数でまとめておいて関数の呼び出しで対応するのが一般的です。BASICだとサブルーチンを作って GOSUB 〜 RETURN の間で1対1のやり取りで処理をすることになりますが、c言語や現在の言語だと関数が使用できるので関数を使って任意の場所で関数を呼び出して実行できるようになっています。

 

 MakeCodeも同様に関数を作成して処理を一つの構造物として扱えるようになっているので、関数を作る機能が用意されています。

 

 

 データは変数で制御をすると変更が出来ますが、複数のデータを用意する時に変数の数だけ変数名をつけてデータを用意すると物凄い量になってしまいます。この場合、グループに分けたほうがいいのですが、学校で

 

 ■ テストの成績

 ■ 体力測定の結果

 ■ 身体測定の結果

 

のようなものをバラバラに管理すると管理が全くできなくなるので、この場合には個人の個別のデータは出席番号と紐付けされた状態になっていて、クラスの単位で人まとまりになって管理されていると思います。この場合、個人のデータも、出席番号というインデックスがあって、そこに個別のデータが紐付いている状態になっていますから、一つの行に対して複数のデータの列が存在している状態になっています。この状態で管理すると、先程のデータを個人と紐付けをした際にも管理が視野S区成馬すが、このデータを一つの変数に格納して管理すれば、更に扱いやすくなります。この時に使用するのが、 【 配列 】 になります。

 

 高校の数学Bでは、ベクターグラフィックの基本的な考え方の幾何ベクトルを学習することになりま菅、この時に平面と三次元を扱うので、ドロー系ツールと3DCGツールの空間座標でのバーテックス間の状態を数学的に見た時の考え方を学習できるようになっています。数学Aは電気工作やデバイス系の処理の基本的な考え方や、条件抽出の方法で使われているものを数学的に学習することになりますが、数学Bで登場するベクトルも4次元になると対応できなくなるので、数値で扱うことになります。この時に使用するのが、行と列で構成された数値の配列になりますが、この集合で示したデータの状態を行列と言います。この行列は多次元おデータなので、基本的には数値の集合になりますが、構造的には配列と同じものになります。

 

 情報IでAnacondaを使ってRとかMatlibとかを使うことがあるかもしれませんが、この時に 【 表 】 と 【 グラフ 】 を使うと思います。この時の表の構造はスプレッドシートなどで作ることが出来る二次元の物を扱うと思うのですが、この構造が二次元配列になります。配列については、学校の学年で見ると解りやすいのですが、

 

 ■ 一次元 : 生徒のパーソナルデータ

 ■ 二次元 : クラスの生徒のデータ

 ■ 三次元 : 学年のデータ

 
になります。生徒のデータは個別のデータが並んだものなので一次元になりますが、クラスになるとこれが生徒分だけ増えるので、データベースのレコード数が増えることになります。ということは、一次元に層が追加されるので二次元になります。
 
 当然、学年は、クラス数分だけそのデータが増えるので、新規に層を増やす必要がありますから、この構造は三次元ということになります。この状態を見てもらうと、1学年を扱うのに3次元が必要になるわけですから、コレを学校単位で考えると学年という層を作って分ける必要があるので、4次元の配列を作って管理をすることになります。二次元のデータは、この中のクラス単位のデータということになりますが、特定の項目のデータと個人お紐付けの場合だと、格納されているブブのデータの中の一部だけを抜粋して仕様している状態になるわけですが、帳票で使用しているのも特定の範囲のデータになります。
 
 こうした、配列をコードを書いて扱う際に配列を使用することになりますが、

 

 

のブロックを使うことで配列を使用できます。また、配列を用意して乱数を代入してみたり、読み出すことも出来ます。

 

 micro:bitはドットマトリックスディスプレイなので位置情報しか持っていない構造物になりますが、発光体にパターンを指定することもで文字を作って表示をすることが出来ます。画像が作れるのでそうしたイメージは出来るとも居ますが、これを作るとなると結構大変です。Micro:bitでは文字のブロックを使うことで、文字を表示してスクロールさせて流すことが出来るようになっています。

 

 

流石に漢字やひらがな(2バイト文字。UTF-8だと3バイトになります。)のような物は表示できませんが、文字列の指定だけで文字列がスクロールして表示される処理を指定できるようになっています。

 

 micro:bitにがゲームのブロックもあり、スプライトの指定が出来るようになっています。

 

 

処理にはスプライトの移動や判定なども実装されています。また、ゲームにはその他の機能も実装されており、

 

 

のようにポーズとポーズ解除で使用するブロックも用意されています。

 

 また、画像のブロックも用意されており、

 

 

のようにアイコンよりもサイズの大きな物を使用できるようになっています。

 

 micro:bitには端子が実装されているので専用の拡張ボードを使うと、この端子をGPIOとして使用できるのですが、このニュry出力端子を制御するブロックも用意されています。

 

 

このブロックでは、サーボ制御などもありますから、条件に合わせてサーボモーターの回転角度を変更することも出来ます。

 

 さらに、その他の項目もあり、入力端子のパルスの判定用のイベントハンドラなども用意されています。

 

 

 また、単一の線での信号の入出力を行うシリアル通信のブロックも用意されており、

 

 

のように通信時の処理を実装できるようになっていますが、その他の項目では、

 

 

のように通信バッファー(一時的にデータをためておくもの)の指定も出来るようになっています。

 

 さらに、制御のブロックも存在しているのですが、

 

 

のようにバックグラウンドで動作する処理を実装するためのブロックも用意されています。

 


 MakeCodeでは、

 

 このように、MakeCodeでは、ブロックを使ってマイコン制御のデバイスのプログラミングが出来るようになっていて、実際に実機で動作させるためのHEXファイルのコンパイルをオンラインで行うことが出来るようになっているのですが、実際に動くものを作るためのチュートリアルも用意されているので、それ参照しながら使い方を覚えることでブロックの使い方などを覚えることが出来ます。