入出力端子
端子はボードに接続された外部デバイスと通信するための手段。使用できる端子は 19 あります。番号 0-16 と 19-20 を利用できます。端子 17 と 18 は利用できません。
たとえば、以下のスクリプトは端子 0 のデジタル読み取り、値に応じてマイクロビットの表示を変更します。
from microbit import *
while True:
if pin0.read_digital():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
各端子の機能
次の表は、利用可能な端子とそのタイプ、および内部接続をまとめたものです。端子は microbit モジュールの属性 microbit.pin0 - microbit.pin20 として利用できます。
端子 |
タイプ |
機能 |
|---|---|---|
0 |
タッチ |
パッド 0 |
1 |
タッチ |
パッド 1 |
2 |
タッチ |
パッド 2 |
3 |
アナログ |
列 1 |
4 |
アナログ |
列 2 |
5 |
デジタル |
ボタン A |
6 |
デジタル |
列 9 |
7 |
デジタル |
列 8 |
8 |
デジタル |
|
9 |
デジタル |
列 7 |
10 |
アナログ |
列 3 |
11 |
デジタル |
ボタン B |
12 |
デジタル |
|
13 |
デジタル |
SPI SCK |
14 |
デジタル |
SPI MISO |
15 |
デジタル |
SPI MOSI |
16 |
デジタル |
|
19 |
デジタル |
I2C SCL |
20 |
デジタル |
I2C SDA |
PWM (Pulse-Width Modulation)
ボードの端子は、オーディオアンプが行っているような電圧の変調によるアナログ信号を出力できません。端子は、3.3V のフル出力をイネーブルするか、または 0V にプルダウンするだけです。しかし、LED の明るさや電気モーターの速度を制御することは、その電圧を非常に高速にオン/オフし、オン時間とオフ時間を制御することによっても可能です。この技術はパルス幅変調(PWM)と呼ばれ、 write_analog メソッドで行います。
上には 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 の場合はローに設定します。
- set_pull(value)
プル状態を次の3つの値どれかに設定します:
pin.PULL_UP,pin.PULL_DOWN,pin.NO_PULL(ここでpinは端子のインスタンスのことです)。既定のプル状態については後述します。
- get_pull()
現在の端子のプル設定を返します。次の3つのいずれかの値が返ります:
NO_PULL,PULL_DOWN,PULL_UP。これらの値はset_pull()メソッドで設定されるか、端子モードで必要なときに自動的に設定されます。
- get_mode()
端子モードを返します。デジタル値の書き込みやアナログ値の読み出しなど、端子を特定の機能で使うと端子モードが変化します。端子は次のいずれかのモードを持つことができます:
"unused","analog","read_digital","write_digital","display","button","music","audio","touch","i2c","spi"
- 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 です。
- get_analog_period_microseconds()
PWM 信号の設定周期をマイクロ秒単位で返します。
- class microbit.MicroBitAnalogDigitalPin
- read_analog()
端子の電圧を読み取り、0 (0V の意味)から 1023 (3.3V の意味)までの間の整数として返します。
- class microbit.MicroBitTouchPin
- is_touched()
端子を指で触れている場合は
True、そうでない場合はFalseを返します。このテストは、端子と接地(GND)の間にどれだけの抵抗があるかを測定することによって行われます。抵抗が少ないと
Trueの判定を返します。指での検出を確実にするには、体の別の部分、たとえばもう片方の手で GND 端子に触れる必要があるかもしれません。
端子のプルモードは、端子が入力モードに変わると自動的に構成されます。入力モードは 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 端子はディスプレイにも使われています。別の目的でこれらの端子を使いたいときには ディスプレイを無効 にする必要があります。
詳しくは エッジコネクタのデータシート を参照してください。