TOPに戻る

gpiozeroライブラリ入門①import LED その1

 使用環境
  • Raspberry Pi Raspberry Pi 4 Model B 2MB
  • OS Raspberry Pi OS(32ビット)5.4.72
  • Python3 3.7.3
  • gpiozeroライブラリ 1.5.1
  • エディタ Mu

import

 待ち時間でよく使われるtime.sleep(1)は、モジュール(ライブラリ)をimportとするときに、書き方を2通り見かけます。

import time
time.sleep(1)

from time import sleep
sleep(1)

 3.7.9のtimeモジュールは、こちら

  「time--- 時刻データへのアクセスと変換

に解説があります。この中に、

  time.sleep(secs) 与えられた秒数の間、呼び出したスレッドの実行を停止

する関数があります。

  from <モジュール名> import <オブジェクト名(関数や変数、もしくは関数と変数)> 

  from time import sleep

のように記述すると、インポートされるのは指定したオブジェクトのみになります。

  from time import sleep as delay

のように別名delayをつけることもできます。

 このようにオブジェクト名を明示して利用するのは、大きなプログラムを作るときなど、メリットになるようです。

gpiozeroはGPIOを制御する大きなライブラリ集

 GPIOを使うとき、RPi.GPIOをよく使います。ベーシックな制御ができるのが特徴です。gpiozeroはベーシックなGPIOの制御とその使い勝手を上げたパッケージ(たくさんのライブラリ集)です。難点は、大きなモジュールなので、見通しが悪いことです。

 最初は、GPIO17をON/OFFするためにLEDクラスを使います。LEDは、抵抗内蔵赤色LEDを次のようにつなぎます。

プログラム

 timeモジュールからは、sleepとtime関数の二つをimportしました。time関数は秒で時間を取得します。

 gpiozeroパッケージからはLEDクラスをインポートしました。詳細はこちら
 GPIOピン番号は、デフォルトでBroadcom(BCM)番号付けを使用します。GPIO17は11番ピンです。

from gpiozero import LED
from time import sleep,time

led = LED(17)
timeStart = time()

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)
    print('time:{0:.3f}'.format( time() - timeStart))

 実行している様子です。LEDが1秒間間隔で点滅します。

 print文のフォーマット{0:.3f}は、1番目の引数を0:で表現しています。引数(変数)の「 time() - timeStart」は1個しかないので、{:.3f}と0は省略できます。

 .3fは、浮動小数点で、小数点第3位まで表示するという指定です。

 引数が三つあれば、文字列部分は、

 'xxx {0} yyy{1} zzz{2}'

のように置換したい引数のインデックスを0から記述します。その文字列に続いて、.formatメソッドでは、

.format(3.14, "python", 100)

のようにカンマで区切りながら引数を並べます。

 {}内では書式の指定ができます。インデックス番号と書式を併用するときは : で区切ります。

  {2} インデックス番号だけ
  {2:.2f} インデックス番号と小数第2位までの浮動小数点
  {2:016b} インデックス番号とバイナリ表示で16桁、先頭の0は省略しない
  {2:16b} インデックス番号とバイナリ表示で16桁、先頭の0は表示しない
  {2:<16b} インデックス番号とバイナリ表示で16桁、先頭の0は表示しない。左詰め

記号
f 小数点表記の浮動小数点
e 指数表記の浮動小数点
d 10進
b 2進
x 16進

 文字列部分にインデックス番号は複数回記述しても、順序が入れ替わってもかまいません。記号のsはデフォルトの文字列で、省略できます。

  print('{2:s} {0:d} 0b{0:b} 0x{0:x}'.format(100, "OK", "Decimal Binary Hex\n"))

Decimal Binary Hex  
 100 0b1100100 0x64

  string --- 一般的な文字列操作


(2020/11/30追加)GPIOの各ピンの扱える電流はデフォルトで3mAです。設定により16mAまで増加できますが、すべてのGPIOピンを16mA流すことできません。「GPIO pads control

gpiozero Copyright 2015-2020 Ben Nuttall 

連載 gpiozeroライブラリ入門

(1) LED その1 (2) LED その2 (3) PWMLED (4) RGBLED

(5) Buzzer (6) TonalBuzzer

(7) Motor その1 BD65496