稼働中

マイクロビット(m_07)microbit.pin

pin

「microbit」モジュールには「display, Image, button_a, button_b, accelerometer, compass,pin0, pin1, pin2, pin3, pin4 pin5, pin6, pin7, pin8, pin9, pin10, pin11, pin12,pin13, pin14, pin15, pin16, pin19, pin20,i2c, spi, uart, panic, reset, running_time, sleep, temperature」の関数などがあります。

※「microbit」モジュールを「from microbit import *」でインポートした前提で記載しています。

入出力ピンはP0~16、P19~P20あります。
現在、私が使っているmicro:bit(V1)の入出力ピンの配置は下図のようになっています。
※図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。micro:bit(V2)のpin配置も載っています。

pin配置図

端子の入力モード read_analog / read_digital / is_touched を呼び出すと自動的にプルモードが構成されます。
デフォルトのプルモードは、それぞれ NO_PULL(0), PULL_DOWN(1), PULL_UP(3) です。
※(数値)はget_pullでの返り値です。

特殊ピンについて

①「P3、P4、P6、P7、P9、P10」はLEDマトリクスディスプレイと接続されています。個別に使う場合は display.off()にします。


# P3をデジタル入力にするとエラーになります。
>>> pin3.read_digital()
Traceback (most recent call last):
  File "", line 1, in 
ValueError: Pin 3 in display mode

# ディスプレーモードをオフにする > P3をデジタル入力に設定できます。
>>> display.off()
>>> pin3.read_digital()
1
# ディスプレーモードに戻します
>>> display.on()

②「P5, P11」はmicro:bit基板上のbutton_a、button_bに使われています。10Kの外部プルアップ抵抗が接続されています。

③「P19、P20」はI2Cで使います。micro:bit基板上の加速度センサーと磁気センサーのモーション・センサーで使用されています。そのためI2C以外の機能に使用しない方がよいと思います。

④「pin12」 accessibility は通常は使用しません。

前述ような特殊pinの制限がありますが、以下の関数が使えます。
「get_mode、get_pull、read_digital、set_analog_period_microseconds、set_analog_period、set_pull、write_analog、write_digital」の関数は全てのpinで使えます。

「is_touched、read_analog」の関数はpin0-4だけで使えます。「get_analog_period_microseconds」の関数はpin5-16,19-20だけで使えます。

(06-1)read_digital()

端子がハイの場合は 1 を返し、ローの場合は 0 を返します。内部プルダウン抵抗(PULL_DOWN)が設定されます。

#pin0とpin1を接続しています。


>>> from microbit import *
>>> pin0.write_digital(1)
>>> pin1.read_digital()     #入力は’H'なので1が返ります。
1

>>> pin1.get_pull()
1       #'1'が返ります。'1'はPULL_DOWNです。

(06-2)write_digital(value)

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


>>> from microbit import *
>>> pin0.write_digital(1)
>>> pin1.read_digital()
1

(06-3)set_pull(value)

プル状態を次の3つの値どれかに設定します。
pin(num).set_pull(pin(num).PULL_UP)
pin(num).set_pull(pin(num).PULL_DOWN)
pin(num).set_pull(pin(num).NO_PULL)


>>> pin1.set_pull(pin1.PULL_UP)
>>> pin1.get_pull()
3           # .PULL_UP なので'3'が返ります。

>>> pin1.set_pull(pin1.PULL_DOWN)
>>> pin1.get_pull()
1           # .PULL_DOWN なので'1'が返ります。

>>> pin1.set_pull(pin1.NO_PULL)
>>> pin1.get_pull()
0           # NO_PULLなので'0'が返ります。

(06-4)get_mode()

デジタル値の書き込みやアナログ値の読み出しなどに設定すると端子モードが変化します。「unused, write_analog, read_digital, write_digital, display, button, music, audio, touch, i2c, spi」のモードを返します。

特殊ピンを調べてみると以下のようになりました。


>>> pin3.get_mode()
'display'

>>> pin5.get_mode()
'button'

>>> pin19.get_mode()
'i2c'

すべてのピンのモード
get_modeを使ってすべてのピンのモードを調べてみます。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
import sys

pin_num=[]
for i in range(0,21,1):
    a='pin'+str(i)
    #print(a)
    pin_num.append(a)

#17,18を削除
del pin_num[17:19] 
#print(pin_num)

#sys.exit()

num=0
for pin in pin_num:    
    #print(type(pin))
    #print(pin)
    mode=eval(pin).get_mode()
    print(pin,mode)

結果出力、現在のpinモードは以下のようになりました。pin0,pin1以外はdefaultです。


>>> %Run 0901_get_pins_01.py
pin0 write_digital
pin1 read_digital
pin2 unused
pin3 display        #特殊ピン
pin4 display        #特殊ピン
pin5 button         #特殊ピン
pin6 display        #特殊ピン
pin7 display        #特殊ピン
pin8 unused
pin9 display        #特殊ピン
pin10 display       #特殊ピン
pin11 button        #特殊ピン
pin12 unused
pin13 unused
pin14 unused
pin15 unused
pin16 unused
pin19 i2c           #特殊ピン
pin20 i2c           #特殊ピン

(06-5)write_analog(value)

PWM(パルス幅変調)信号を端子に出力します。0から 1023までの整数または浮動小数点数を指定できます。

※pin1は無負荷で直接測定しました。電源電圧はテスタで測ると3.248V でした。

write_analog(256)電源電圧の1/4(0.812V)になるハズです。
write_analog(512)電源電圧の1/2(1.622V)になるハズです。


>>> from microbit import *
>>> pin1.write_analog(256)      #テスタで測ると0.812V でした
>>> pin1.write_analog(512)      #テスタで測ると1.621V でした

>>> pin1.get_mode()
'write_analog'

かなり昔に買ったOSCを押入れから引っ張り出しました。ブラウン管です。波形を調べてみました。
T=20msec(50Hz)Vpp=3.2V でした。 デフォルトの周期はT=20msec(50Hz)のようです。

<   write_analog(256)    >
OSC1

<  write_analog(512)  >
OSC2

(06-6)set_analog_period(period)

出力される PWM 信号の周期をミリ秒単位で設定します。最小値は 1ms です。
先にwrite_analogモードにする必要があります。


>>> from microbit import *
>>> pin1.write_analog(0)            #先にwrite_analogモード、出力は’0’V
>>> pin1.set_analog_period(10)      #周期を設定
>>> pin1.write_analog(512)          #出力幅(duty)を設定、出力ON
>>> pin1.set_analog_period(20)      #周期を変更

※pin1は無負荷で直接測定しました。

<  set_analog_period(10)   f=100Hz  >
100Hz

<  set_analog_period(20)    f=50Hz  >
50Hz

(06-7)set_analog_period_microseconds(period)

出力される PWM 信号の周期をマイクロ秒単位で設定します。最小値は 256μs(最大3.90kHz)です。
たぶん16の倍数でしか設定できないと思います。
pin1.set_analog_period_microseconds(500) 500us=> 2kHz
先にwrite_analogモードにする必要があります。


>>> from microbit import *
>>> pin1.write_analog(0)        #先にwrite_analogモード、出力は’0’V
>>> pin1.set_analog_period_microseconds(500)    #周期を設定
>>> pin1.write_analog(512)      #出力幅(duty)を設定、出力ON
>>> 

<  set_analog_period_microseconds(500)  f=2kHz  >
f=2kHz

まとめ

microbitモジュールのpinについて記載しました。pinの続きは次回になります。