まめりうむ

WindowsからMacへ乗り換るためのネタをまとめたり好きなことをまとめたり。

*

RPi.GPIO.setupメソッドについてもう少し

   

スポンサーリンク

前回の記事でRPi.GPIOライブラリを使用する基本的な流れがわかったんですが、setupメソッドについて補足しておきます。

出力として使用する場合

GPIOを出力として使用する場合、setupメソッドの引数initialで初期値を指定できます。

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

channel = 4
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH) # GPIO.HIGHはTrue, 1 と同義

GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW) # GPIO.LOWはFalse, 0 と同義

このようにします。

引数initialは省略可能なので、初期値が不要な場合は省いてOKです。

入力として使用する場合

GPIOを入力として使用する場合、setupメソッドの引数pull_up_downでGPIOのプルアップ抵抗プルダウン抵抗を指定出来ます。

Wikipediaによると

プルアップ抵抗は、ある配線と “Hi” に相当する電圧レベル(例えば 5V)との間に挿入され、その配線に入力が無い場合(OFF状態)のときに “Hi” レベルの電圧をかける働きをする。そして、プルアップ抵抗が接続されている配線を “Low” レベルに接続(ON状態:電位0Vの接地と接続)する操作をすれば配線は0Vになる。

プルダウン抵抗(プルダウンていこう、英: pull-down resistor)は、プルアップ抵抗とは反対に、入力がない場合に “Low” レベルの電圧(通常、電位0V)にしておくために使われる。

つまり

  • プルアップ抵抗を有効にしておくと、回路が繋がってない状態でGPIOはHiになって、回路が繋がったらGPIOはLowになる
  • プルダウン抵抗を有効にしておくと、回路が繋がってない状態でGPIOはLowになって、回路が繋がったらGPIOはHiになる

ということで良いんでしょうか…?

プルアップ抵抗、プルダウン抵抗を有効にするには

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP) # プルアップ抵抗を有効化

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # プルダウン抵抗を有効化

とします。

なお、引数pull_up_downを指定しない場合はPUD_OFFとなり、初期値ではプルアップ抵抗もプルダウン抵抗も無効化されています

プルアップ抵抗、プルダウン抵抗を使ってみる

せっかくなので試しにプルアップ抵抗、プルダウン抵抗のテストをしてみます。

RPi_GPIO_pull_up_down

左側のタクトスイッチを含む回路は

P17(3.3V電源) – タクトスイッチ – P19(GPIO10)

で、右側のタクトスイッチを含む回路は

P21(GPIO09) – タクトスイッチ – P39(GND)

です。

現状ではどちらの回路も繋がっておらず、タクトスイッチを押したら回路が繋がることになります。

左側の回路は3.3V電源に繋がっているので、P19(GPIO10)をプルダウン抵抗によってLow(0V)にすれば回路が繋がったときに電流が流れそうです。

一方、右側の回路はGNDに繋がっているので、P21(GPIO09)をプルアップ抵抗によってHi(3.3V)にすれば回路が繋がったときに電流が流れそうです。

では、実際にこの回路をPythonの対話型シェルで操作しながらGPIOの電圧を測ってみます。

まずは

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

# pin setting
left_switch_pin = 19
right_switch_pin = 21

GPIO.setup(left_switch_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(right_switch_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

こんな感じでP19(GPIO10)のプルダウン抵抗とP21(GPIO09)のプルアップ抵抗を有効にして、それぞれの値を測ってみます。

# タクトスイッチを押してないときの状態
GPIO.input(left_switch_pin)
>>> 0 # GPIO.LOW, Falseと同義

GPIO.input(right_switch_pin)
>>> 1 # GPIO.HIGH, Trueと同義

それぞれ回路が繋がってない状態でプルダウン抵抗を有効にしたP19(GPIO10)はGPIO.LOWに、プルアップ抵抗を有効にしたP21(GPIO09)はGPIO.HIGHになってます。

次に、タクトスイッチを押した状態でもう一度それぞれの値を測ってみます。

# タクトスイッチを押したまま再計測
GPIO.input(left_switch_pin)
>>> 1 # GPIO.HIGH, Trueと同義

GPIO.input(right_switch_pin)
>>> 0 # GPIO.LOW, Falseと同義

GPIO.cleanup()

回路が繋がった状態ではWikipediaの説明にあるとおり、プルダウン抵抗を有効にしたP19(GPIO10)はGPIO.HIGHに、プルアップ抵抗を有効にしたP21(GPIO09)はGPIO.LOWになりました。

タクトスイッチを押した時にGPIO.HIGH(True)になるプルダウン抵抗の方がイメージと合うんですが、実際の使い分けはどうやるんでしょうね…w

プルアップ抵抗、プルダウン抵抗が必要な理由

プルアップ抵抗、プルダウン抵抗を有効にしていると、回路が繋がっていない状態でもGPIOの値はGPIO.HIGHかGPIO.LOWに固定されます。

しかし、プルアップ抵抗、プルダウン抵抗を無効にしていると、回路が繋がっていない状態のGPIOの値はGPIO.HIGHかGPIO.LOWに固定されないため回路が不安定な状態になり、誤動作を引き起こす可能性があるようです。

また、左側の回路のようなケースでは、プルダウン抵抗を無効にした状態でタクトスイッチを押して回路を繋いでしまうと、GPIOに大電流が流れてしまいRaspberry Piを壊してしまうおそれもあるようです。

この辺まだ電子回路勉強中なのでピンと来ないんですが、そうなんでしょうね…w


RPi.GPIOの入出力設定(setupメソッド)についてはこれくらい知ってればひとまず大丈夫でしょうか?

足りない部分があったらまたまとめてみたいと思います。

 - これから始めるRaspberry Pi ,

スポンサーリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  関連記事

Raspberry Piで学ぶ電子工作を読みました

Raspberry Piを買った時、一緒にRaspberry Piクックブックも …

Raspberry Piに興味津々

この前本屋さんで面白そうなPythonの本がないか探してたんですが、その時初めて …

RPi.GPIOの基本的な使い方

Raspberry Piの汎用入出力コネクタ(GPIO)をPythonで操作する …

+350円で性能6倍のRaspberry Pi 2 Model B

Raspberry Piに新モデルが出ましたね。 「Raspberry Pi 2 …

秋月電子にRaspberry Pi 2が入荷されてました

先日友達に誘われて秋月電子の八潮店に行ってきました。 出かける前に秋月電子の通販 …

Raspberry PiでLEDチカチカ

Raspberry Piにリモート接続できるようになってからは念願の電子工作的な …

Raspberry Piのインストール時にひとつ大ポカをしました

届いてます、Raspberry Pi。 OSのインストールと最低限必要そうなソフ …

Raspberry PiのOSインストールから基本的な設定まで

Raspberry Piを買ってからOSのインストール〜ネットワーク経由で操作出 …