Micro Python その3 ペリフェラル編

Micro Python その3 ペリフェラル編
目次

前回は、Micro Pythonのインタラクティブシェルを使いました。今回もインタラクティブシェルを使いつつ搭載機能で遊んでみます。

LED

LEDはpybモジュール(デフォルトでimport済み)のLEDクラスを使ってアクセスします。pyboardの場合は1(赤)、2(緑)、3(橙)、4(青)があります。

>>> led = pyb.LED(1)  # 赤LED
>>> led.on()
>>> led.off()
>>> led.toggle()
>>> led.toggle()
>>> 

pyb.delayと組み合わせて定番のLEDチカチカはこちら(Ctrl-Cで中止)。

>>> while True:
...     led.toggle()
...     pyb.delay(1000)
... 

pybLED.intensityでLEDの強さを8bit(0-255)で指定できます。

>>> while True:
...     i = (i + 1) % 8
...     led.intensity(1 << i)
...     pyb.delay(500)
... 

スイッチ

pyboardにはリセットスイッチ(RST、microUSB寄り)と汎用スイッチ(USR、microSD寄り)があり、汎用スイッチはpyb.Switchでアクセスします。

>>> sw = pyb.Switch()
>>> sw()  # スイッチを押さずに実行
False
>>> sw()  # スイッチを押しながら実行
True
>>> 

pyb.Switch.callbackでスイッチを押したときのコールバック関数を登録できます。

>>> sw.callback(lambda: pyb.LED(1).toggle())  # 押すたびにLEDチカチカ
>>> sw.callback(None)  # コールバック関数削除
>>> 

加速度センサ

pyboardは加速度センサも積んでいて、pyb.Accelでアクセスします。

>>> accel = pyb.Accel()
>>> accel.x()
1
>>> accel.filtered_xyz()
(1, 1, 21)
>>> 

一定値以上傾いたらLEDを点灯させるには次のようにします。

>>> while True:
...     x = accel.x()
...     if abs(x) > SENSITIVITY:
...         led.on()
...     else:
...         led.off()
...     
...     pyb.delay(100)
... 

タイマー

マイコンのタイマーにアクセスするにはpyb.Timerを使います。

以下のコードでLEDチカチカをしますが、while Trueの例と違ってインタラクティブシェルをブロックしないことに注意してください。

>>> tim = pyb.Timer(4)  # タイマー4を使用
>>> tim.init(freq=2)  # 2Hzでコールバック
>>> tim.callback(lambda t:pyb.LED(1).toggle())
>>> 

カウントアップする他にも、PWM出力やキャプチャ機能も使用できます。

その他の機能

USARTやSPI、I2Cといったシリアル通信やADC、DAC、LCD、サーボ用ドライバといったモジュールも用意されています。詳細はpybモジュールのドキュメントを見てください。

次回は、他の外部センサーを繋げて通信してみるつもりです。