初版作成 2017.3.29
最終更新 2024.04.01
v2 は以下のメリットがある (1) bluetooth でダウンロードできる (2)「show console デバイス」が使える (シリアルモニタ機能を持つ) (2) のメリットは絶大である。 教育用には v2 一択である。 v1 と v2 の見分け方 v2 は裏面に SPEAKER と書いてある
ブラウザで開発する方法と、ネイティブアプリで開発する方法 の 2 通りがある。それぞれメリット、デメリットがある。 2022.11.24 の時点で Chrome は bluetooth での通信に失敗する。 bluetooth を使いたい場合は Edge を使う。 Web プログラミング環境 - serial を取得できない Teraterm などを別途起動必要 - bluetooth でダウンロード可能 - ファイルとしてダウンロードすると「ダウンロード」に入る ネイティブプログラミング環境 - serial モニタ使用可能 - download 時にフォルダを指定可能 - bluetooth でダウンロード不可
https://makecode.microbit.org/ プログラミング環境は 2 つある。 (1) ブロックエディタ (2) python (1) Block/JavaScript/Python https://makecode.microbit.org (2) python https://python.microbit.org/v/1 python リファレンス https://microbit-micropython.readthedocs.io/ja/latest/ ブロックエディタは JavaScript, Python としても 編集可能。こちらの方がよい。 ブロックエディタではブロックで組む限り コードのエラーは発生しない。 python プログラム環境ではプログラムにエラーが混入しうる。 インタープリタ言語では、エラーは実行時に判明する。 micro:bit は画面を持たない。エラーメッセージは 5 x 5 の LED をスクロールする。極めて見づらい。 画面を持たないデバイスのプログラミングを CUI で 行う場合、コンパイル言語のほうが良い。
microbit ストアアプリ で検索すると、apps.microsoft.com の中に makecode の ストアアプリが見つかる。「Microsoft store アプリの取得」 のボタンを押してインストールする。 起動すると This apps is no longer supported. For the letest updates, clock here to install our new app! と表示される。 アップデートすると、新バージョンが使える。 旧バージョンは Windows 11 で動かしたときに、 シリアルコンソールが使えないように思われる。
https://www.microbit.co.uk/device/pins GND Gnd 3V 3.3V 2 pin2 analog in 1 pin1 analog in 0 pin0 analog in pin1, pin2 はデフォルトで 15k くらいの プルダウン抵抗が入っているようだ (pin0 は未調査)。 デジタル端子から手動入力するときは、以下のように 配線すること。括弧内は暗黙の配線である。 3V --- SW --- pin1 (--- 15k --- Gnd )
エッジコネクタを接続すると全ての端子を使うことができる。 以下の製品を買ってみた。 Kitronik BBC micro:bit用エッジコネクタブレークアウトボード Sparkfun Micro Bit Breakout ● Kitronic BBC micro micro:bit が表(LED やボタンが見える)、 コネクタの端子が上を向いている状態で差し込む メス−オスコネクタで引き出すことを想定している。 ● Sparcfun の製品 micro:bit が表、 コネクタの端子が下を向いている状態で差し込む。 ブレッドボードに指すことを想定している。 データシートが以下にある。 https://media.digikey.com/pdf/Data%20Sheets/Sparkfun%20PDFs/microbit_Breakout_Board_HookupGuide_Web.pdf GND GND 3V3 の端子以外に 0〜20 の番号が順番についている。 3V3 と書かれた端子からは 3.2 V が出ている。 0〜20 の端子はデータシートによると以下の通り 0 -- analog in -- Large pin 0 1 -- analog in -- Large pin 1 2 -- analog in -- Large pin 2 3 -- analog in -- LED Column 1 4 -- analog in -- LED Column 2 5 -- Button A (off: 3.2V push: 0V) 6 -- LED Column 9 7 -- LED Column 8 8 -- Open GPIO 9 -- LED Column 7 10 -- analog in -- LED Column 3 11 -- Button B (off: 3.2V push: 0V) 12 -- Open GPIO 13 -- SPI SCK 14 -- SPI MISO 15 -- SPI MOSI 16 -- Open GPIO 19 -- I2C SCL 20 -- I2C SDA LED Column 1 2 3 7 8 9 を使うときは、ディスプレイを 無効にする必要がある。
micro:bit はマルチスレッドで動作する。 「ずっと」のブロックを複数配置すると、 複数のスレッドが並行に走る。 変数は共通で扱える。 「高度なブロック」の「制御」に バックグランドで実行する があるが、使い方が分からない。 同じ場所に イベントを待つ というのもあるが、使ったことはない。
Web 版は 「ダウンロード」の右の「…」をクリックすると、 bluetooth でダウンロードできるようになる。 micro:bit を USB 接続すると 1 つのドライブとして認識される。 「download as file」をクリックすると、 hex ファイルがフォルダ「ダウンロード」に入る。 ネイティブ版の場合はフォルダを選択できるので micro:bit のドライブを指定する。 hex ファイルは数字が羅列されたテキストファイルである。 その中にソースファイルも含まれていると思われる。 そのファイルを micro:bit のドライブにコピーする。 コピーしたファイルはブラックホールに吸い込まれたように、 見えなくなる。
シリアルに数値を書き出して確認する (1) 知りたい値を変数に格納する (2)「高度なブロック」の「シリアル通信」の 「名前と数値を書き出す」を数値の部分に変数を入れる Teraterm で受ける場合はボーレートを 115200 に設定する。 ネイティブ版の Makecode はシリアルモニタがついている。 「コンソールを表示 デバイス」というメニューが 「コンソールを表示 シミュレータ」の下側にある。 クリックすると、変数の値を数値とグラフで見ることが できる。 Teraterm のようなアプリがシリアルを握っていると このメニューが表示されないので、シリアルを扱う アプリは終了しておくこと。
プログラムはクラウドに保存される。 ログインはしないので、クッキーを使って区別をしているようだ。 同じパソコンでも、ブラウザが変わると見えない。 そのときは、「ダウンロード」あるいは「フロッピーディスクアイコン」 でローカル HDD に hex ファイルを保存し、 「プロジェクト」---「ファイルを読み込む」を使う。 hex ファイルはバイナリのような拡張子だが、 コロンと16進数字を羅列したアスキーファイルである。 ソースコードを内包するようだ。
「V 高度なブロック」を押すと拡張メニューが現れる I2C, SPI, 全ての入出力端子, シリアル通信が扱える ・ループは 5 種類 (a) 回数を決めて繰り返し (b) while ループ (c) for ループ カウンタ変数は 0~x (d) foreach a in list (e) 決められた時間ごと (100 ms, 1 sec, 1 min, 1 hour, など好きな時間) (e) はタイマ割り込みをしているようだ。 1 時間毎を 24 回繰り返すと時間が 1 日が計れると思われる 「ずっと」のブロックと「every xxx ms」のブロックは 併存する。「every xxx ms」は複数存在できる。 micro:bit はタイマが複数あるようだ break, continue もある ・入出力 「入力」「入出力端子」が入出力関係のメニュー ピン毎に「入力/出力」の設定は不要 丸に点アイコンは p0, p1, p2 二重丸に点アイコンは全ての端子 PWM 出力も可能 ・条件分岐 この中に = < > などのブロックもある ・ディレイ 音楽アイコン(ヘッドホンマーク)の休符 1 拍は 500 ms 2 拍は 1000 ms ・拡張機能をインストールすると Grove が使える
Web でコーディングする。 download (micro:bit にダウンロードする) save (ローカルな HDD にセーブする) load (ローカルな HDD から読み出す) などのメニューがある。ローカルなエディタでコーディングして load ---> download という方法もある。 コーディングした後、download でダウンロードした hex ファイルを マイクロビットのドライブにコピーすると、プログラムがスタートする。 hex ファイルには python のインタープリタとソースファイルの 両方が入っているらしい。 micro:bit の中のインタープリタ上で、実行が開始される。 バグは実行されてから発覚する。エラー発生の場合、 5x5 の LED 上をエラーメッセージがスクロールするので、 非常に見づらい。エラーが発生した行番号を読み取る必要が あるが、集中力が必要である。
https://codewith.mu/en/download に mu というエディタがある。ローカル PC にインストールする。 micro:bit 用のエディタらしい。
from microbit import * while True: pin0.write_digital(1) sleep(500) pin0.write_digital(0) sleep(500)
while True: a = pin2.read_analog() if a > 512: pin0.write_digital(0) else: pin0.write_digital(1) while True: a = pin2.read_digital() if a == 1: pin0.write_digital(0) else: pin0.write_digital(1)
タッチセンサー button_a.is_pressed() button_b.is_pressed() 加速度センサー accerometer.get_x() 磁気センサー angle = compass.heading() 温度センサー a = temperature() 明るさセンサー a = display.read_light_level() while True: a = temperature() s = ":" + str(a) l = len(s) for i in range(0,l): display.show(s[i:i+1]) sleep(1000)
オブジェクト名 pin1, pin2, ..... 入力 pin.read_digital() 0 or 1 プルダウン抵抗 (15k 程度) に注意!!! pin.read_analog() 0 --- 1023 pin.is_touched() boolian 人間の手が触れたか否か 出力 pin.write_ditigal(value) 0 or 1 or False or True pin.write_analog(value) 0 --- 1023
display.clear() display.show('A') display.set_pixel(x,y,value) value: 0--9 display.get_pixel(x,y) display.show(image) image = Image("90009:" "09090:" "00900:" "09090:" "90009") image = Image.HEART 組み込み画像のリスト https://microbit-micropython.readthedocs.io/ja/latest/microbit_micropython_api.html#images
sleep(2000) [ms]