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モジュールのドキュメントを見てください。
次回は、他の外部センサーを繋げて通信してみるつもりです。