Regen Techlog

Web・プログラミングの技術メモ

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

      2017/07/02

前回は、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モジュールのドキュメントを見てください。

次回は、他の外部センサーを繋げて通信してみようと思います。

 - 組み込み

コメントを残す

  関連記事

Micro Python その1 pyboard購入編

Micro Pythonは、マイコンに最適化されたPython3実装です。ちなみ …

Micro Python その2 インタラクティブシェル編

接続 MicroUSBでPCと接続すると、ストレージと仮想シリアルポートが認識さ …