入出力端子

端子はボードに接続された外部デバイスと通信するための手段です。使用できる端子は 19 あります。番号 0-16 と 19-20 を利用できます。端子 17 と 18 は利用できません。最新の micro:bit V2 では pin_logopin_speaker も使えます。

たとえば、以下のスクリプトは端子 0 のデジタル読み取り、値に応じてマイクロビットの表示を変更します。

from microbit import *


while True:
    if pin0.read_digital():
        display.show(Image.HAPPY)
    else:
        display.show(Image.SAD)

各端子の機能

エッジコネクタと端子説明図

次の表は、使用可能な端子とそのタイプ、内部で接続されている先をまとめたものです。端子は microbit モジュールの属性として利用できます: microbit.pin0 - microbit.pin20

端子 タイプ 機能 V2 の機能
0 タッチ パッド 0 パッド 0
1 タッチ パッド 1 パッド 1
2 タッチ パッド 2 パッド 2
3 アナログ 列 1 列 3
4 アナログ 列 2 列 1
5 デジタル ボタン A ボタン A
6 デジタル 列 9 列 4
7 デジタル 列 8 列 2
8 デジタル    
9 デジタル 列 7  
10 アナログ 列 3 列 5
11 デジタル ボタン B ボタン B
12 デジタル    
13 デジタル SPI SCK SPI SCK
14 デジタル SPI MISO SPI MISO
15 デジタル SPI MOSI SPI MOSI
16 デジタル    
       
19 デジタル I2C SCL I2C SCL
20 デジタル I2C SDA I2C SDA

最新の micro:bit V2 デバイスでは、エッジコネクタには無いけれども、MicroPython で使える2つの端子が追加になっています。

  • pin_logo - micro:bit の前面にあるタッチセンサー機能のあるロゴの端子です。デフォルトでは静電容量方式タッチモードになっています。
  • pin_speaker - micro:bit 組込みスピーカーに繋げられている端子です。このAPIはパルス幅変調方式の端子操作でのみ使うことを意図しています。たとえば pin_speaker.write_analog(128) などで使います。

PWM (Pulse-Width Modulation)

ボードの端子は、オーディオアンプが行っているような電圧の変調によるアナログ信号を出力できません。端子は、3.3V のフル出力をイネーブルするか、または 0V にプルダウンするだけです。しかし、LED の明るさや電気モーターの速度を制御することは、その電圧を非常に高速にオン/オフし、オン時間とオフ時間を制御することによっても可能です。この技術はパルス幅変調(PWM)と呼ばれ、 write_analog メソッドで行います。

_images/pwm.png

上には 3 つの異なる PWM 信号の図があります。それらはすべて同じ周期(つまり周波数)を持ちますが、時間幅周期が異なります。

最初のものは write_analog(511) で生成されたものであり、正確に 50% の時間幅を持ちます。パワーは時間の半分がオン、時間の半分がオフです。その結果、この信号の全エネルギーは、3.3V の代わりに 1.65V の場合と同じです。

第2の信号は 25% の時間幅周期を有し、 write_analog(255) を用いて生成できます。この端子に 0.825V が出力されている場合と同様の効果があります。

第 3 の信号は 75% の時間幅周期を有し、 write_analog(767) を用いて生成できます。第 2 の信号の 3 倍のエネルギーを有し、第 1 端子に 2.475V を出力することと同等です。

これは、大きな慣性を持っているモーターなどのデバイスや、人間の目ではわからないほど速く点滅している LED などのデバイスではうまくいきますが、音の発生ではあまりよい結果になりません。このボードは矩形波の音だけを生成可能で、非常に古いコンピュータゲームによく似たものです -- そのようなゲームのほとんどもそうやっているからです。

クラス

3種類の端子があり、利用法も異なります。それらは、以下に列挙されるクラスによって表されます。これらクラスは階層を形成しています。各クラスは前のクラスのすべての機能を持ち、独自のものを追加しています。

注釈

これらのクラスは実際には利用できません。新しいクラスのインスタンスを作成することはできません。ボード上の物理的な端子を表す、すでに提供されているインスタンスのみを使用できます。

class microbit.MicroBitDigitalPin
read_digital()

端子がハイの場合は 1 を返し、ローの場合は 0 を返します。

write_digital(value)

value が 1 の場合はハイに設定し、0 の場合はローに設定します。

class microbit.MicroBitAnalogDigitalPin
read_analog()

端子の電圧を読み取り、0 (0V の意味)から 1023 (3.3V の意味)までの間の整数として返します。

write_analog(value)

PWM 信号を端子に出力します。時間幅周期は供給電圧 value に比例します。 value には 0 (時間幅周期 0%)から 1023 (時間幅周期 100%)までの整数または浮動小数点数を指定できます。

set_analog_period(period)

出力される PWM 信号の周期を period にミリ秒単位で設定します。有効な最小値は 1ms です。

set_analog_period_microseconds(period)

出力される PWM 信号の周期を period にマイクロ秒単位で設定します。有効な最小値は 256μs です。

class microbit.MicroBitAnalogDigitalPin
read_analog()

端子の電圧を読み取り、0 (0V の意味)から 1023 (3.3V の意味)までの間の整数として返します。

class microbit.MicroBitTouchPin
is_touched()

端子を指で触れている場合は True 、そうでない場合は False を返します。

注釈

エッジコネクタ端子のデフォルトのタッチモードは抵抗膜方式(resistive)です。 V2 のロゴ端子のデフォルトのタッチモードは静電容量方式(capacitive)です。

抵抗膜方式タッチ このタッチは、端子と接地(GND)の間にどれだけの抵抗があるかを測定することによって行われます。抵抗が少ないと True の判定を返します。指での検出を確実にするには、体の別の部分、たとえばもう片方の手で GND 端子に触れる必要があります。

静電容量方式タッチ このタッチは、指を電導体としてキャパシターの電界の変化を捉えることによって行われます。 静電容量方式タッチ は、回路の一部として接地(GND)に接続する必要がありません。

set_touch_mode(value)

注釈

エッジコネクタ端子のデフォルトのタッチモードは抵抗膜方式(resistive)です。 V2 のロゴ端子のデフォルトのタッチモードは静電容量方式(capacitive)です。

指定の端子のタッチモードを設定します。引数の value には CAPACITIVE または RESISTIVE を指定できます。たとえば pin0.set_touch_mode(pin0.CAPACITIVE) のように呼び出します。

端子のプルモードは、端子が入力モードに変わると自動的に構成されます。入力モードは read_analog / read_digital / is_touched を呼び出すと自動で設定されます。これらのメソッドで設定されるデフォルトのプルモードは、それぞれ NO_PULL, PULL_DOWN, PULL_UP です。 set_pull を呼び出すと、read_digital モードにある端子を指定のプルモードに設定します。

注釈

タッチセンスが機能するために、micro:bit は端子 0, 1, 2 にのみ外付けの弱い(10M)プルアップを装備しています。

ボタンAとボタンBが機能するように、端子 5 と 11 にも外付け(10k)プルアップを装備しています。

先の表にあるとおり、GPIO 端子はディスプレイにも使われています。別の目的でこれらの端子を使いたいときには ディスプレイを無効 にする必要があります。

エッジコネクタのデータシート を参照してください。