micro:bit v2 用 MicroPython で新機能を試してみる


はじめに

2020年11月25日に日本でも micro:bit V2 の販売が開始されましたので、さっそく入手して MicroPython の新機能を試してみたのでレポートします。

micro:bit V2 用 MicroPython ファームウェア

micro:bit V2用の MicroPython はmicro:bit v2 用 MicroPython の GitHuB リポジトリ(一時的な置き場所)で開発中で、2020年12月6日現在 beta-2 の状況です。

micro:bit V2用MicroPythonファームウェアはここからダウンロード可能です。

開発環境

V2用ファームウェアは Python Editor に既に組み込まれています。Python Editor は Universal Hex に対応していて、V1/V2 両方に対応した .bin を生成できます。

MicroPython 用のオフラインエディタといえば Mu がありますが、まだ V2 へのスクリプト転送に対応していません。公式ガイドによれば、当面は MICROBIT フォルダを使って直接 MicroPython ファームウェアをインストールし、スクリプトは Mu の「ファイル」機能を使って micro:bit 上のファイルシステムにコピーするようにとなっています。Mu の GitHub には既に V2 対応の issue が立っていて、バージョン 1.1 正式版にまでに対応予定となっています。

V2用新機能

V2 の新機能に対応したAPIについては、まだ公式ドキュメントがない状況で、ここソースファイル作成中のドキュメントぐらいしか頼りになるものがありませんが、とりあえず最新ファームウェアを使って新機能を試してみました。

タッチセンサー

microbit モジュールに新規にタッチセンサー端子 pin_logo が追加されています。このタッチセンサーは静電容量方式なので、従来の端子 0, 1, 2を使ったタッチセンスと違って GND に接触する必要がありません。

コード例を以下に示します。このスクリプトを動かして、micro:bit ロゴにタッチすると「悲しい」表示が「笑顔」になります。

from microbit import *

while True:
    if pin_logo.is_touched():
        display.show(Image.HAPPY)
    else:
        display.show(Image.SAD)

マイク

microbit モジュールにマイクのオブジェクト microphone が追加になりました。今のところマイクというよりはサウンドセンサーという感じですが。このオブジェクトには以下のメソッドがあります。

microbit.microphone.current_event()

最近のサウンドイベントを返します。
サウンドイベントとしては SoundEvent.LOUD (大きな音)と SoundEvent.QUIET (静かな音)がサポートされています。

microbit.microphone.was_event(event)

引数 event に指定したサウンドイベントが発生していたかをブール値で返します。

microbit.microphone.is_event(event)

引数 event に指定したサウンドイベントが発生しているかをブール値で返します。

microbit.microphone.get_events()

サウンドイベントの履歴を古い順にタプルで返します。

microbit.microphone.set_threshold(event, value)

引数 event に指定したサウンドイベントを起こす閾値を引数 value (0-255)に設定します。

microbit.microphone.sound_level()

音のレベルを 0-255 の整数値で返します。

以下のサンプルスクリプトを動かすと、マイクアイコンが赤く点灯し、大きな音をたてると小さな四角表示は大きな四角表示になります。

from microbit import *

while True:
    if microphone.current_event() == SoundEvent.LOUD:
        display.show(Image.SQUARE)
    elif microphone.current_event() == SoundEvent.QUIET:
        display.show(Image.SQUARE_SMALL)

スピーカー

micro:bit V2 ではスピーカが標準で内蔵になり、従来は端子 0 に出していた音や音楽が、内蔵スピーカに出すようになりました。デフォルトでは端子 0 と内蔵スピーカの両方に音を出しています。内蔵スピーカの端子は microbit.pin_speaker として提供されています。

従来どおり、端子 0 に繋げたスピーカだけから音を出すには pin 引数に端子 0 を明示するようにします。

from microbit import *
import music

music.play(music.NYAN, pin=pin0)

デフォルトのように、内蔵と外付け両方から音を出すようにするには、pin パラメータにタプルで指定します。

from microbit import *
import music

music.play(music.NYAN, pin=(pin_speaker, pin0))

タプルで指定できるからといって、たとえば pin0pin1 から音が出せるかといえば、そういうわけではなく、内蔵スピーカと外付け1つしか使えませんでした。この点はAPIとして分かりにくいという意見が出ていて、このまま正式なAPIとなるかは微妙なところです。

この pin 引数指定は audio, music, speech の音を鳴らすメソッドに指定できます。

また、microbit モジュールにはボリュームを設定する関数があります。ボリュームの値は 0-255 の範囲で設定します。

microbit.set_volume(volume)

audio のための組込みサウンド

V1 用の MicroPython では audio (V2 では microbit.audio でも使えます)でサウンドを鳴らす場合、 AudioFrame を床って一から音源を作成する必要がありましたが、V2 用の MicroPython では組込みのサウンドが用意されました。

microbit.Sound.GIGGLE
microbit.Sound.HAPPY
microbit.Sound.HELLO
microbit.Sound.MYSTERIOUS
microbit.Sound.SAD
microbit.Sound.SLIDE
microbit.Sound.SOARING
microbit.Sound.SPRING
microbit.Sound.TWINKLE
microbit.Sound.YAWN

使い方は簡単で、 audio.play() に従来は AudioFrame を使った音源を指定していたのを Sound.* にするだけです。

from microbot import *

audio.play(Sound.HAPPY)

おわりに

V2 用 MicroPython は CODAL と本家 MicroPython の最新 1.13 をベースに実装し直されています。その割には従来との互換性を保ったままけっこうな出来に仕上がっているように見えます。V2 はメモリも増えたので、BLE の実装に期待しています。