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ライブラリ入門

- OutputDevice -

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

(5) Buzzer (6) TonalBuzzer

(7) Motor その1 BD65496 (8) その2 TB67H420FTG (9) その3 TB6612 (10) その4 MC33926 (11) PhaseEnableMotor DRV8835

(12) Servo (13) AngularServo

- SPI Device -

(14) 10ビットA-DコンバータMCP3001/MCP3002/MCP3004/MCP3008

(15) 12ビットA-DコンバータMCP3201/MCP3202/MCP3204/MCP3208

(16) 13ビットA-DコンバータMCP3301/MCP3302/MCP3304