Raspberry Pi GPIO ピンでプッシュボタンを使用する方法


Raspberry Pi で LED を使用したことがあれば、おそらく GPIO 出力がどのように機能するかを知っているでしょう。 コードは、汎用入力/出力 (GPIO) ピンを介して電気を流し、LED を通過させ、物を点灯させます。 しかし、逆のことを試したことはありますか? 押しボタンを使用すると、正反対のことができます。 このチュートリアルでは、GPIO ピンを入力ピンに変換し、ボタンを押すたびにリッスンする方法を示します。

コンテンツ

押しボタンのしくみ

押しボタンはスイッチの一種です。 互いに分離することで完全な回路を防止する 2 つの別個の導電性ピンがあります。 押しボタンを押すと、実際には 2 つのピンが一緒に押され、回路が完成します。 しかし、手を離すと、ピンを再び分離するバネのようなメカニズムがあります。

Pushbutton On Breadboard Solo

4ピンプッシュボタン

センサー キットの典型的な押しボタンには 4 つのピンがあり、各ピンは他のピンから分離されています。 金属製の可動プレートがボタン領域の真下にあり、プッシュボタンが下に押されると下降し、他のすべてのピンを接続します。

Pushbutton Backside4 ピン プッシュボタンには、ボタンの下に 4 つのピンがあります。

4 ピン プッシュボタンの内側に 2 つのプレートがあります。 それぞれが 2 つの外部ピンに接続されています。 両方のプレートは互いに分離されており、ボタンの下の金属プレートである 3 番目のプレートを押すことによってのみ接続できます。

4 Pin Pushbutton Pinout4 ピン プッシュボタンのピン配置。 スイッチは 2 つのピン ペアを接続します。

ある意味で、プッシュボタンには常に 2 つのピンが接続されています。 4 ピン プッシュボタンを押すと、4 つのピンすべてが接続されます。

Raspberry Pi GPIO ピンでプッシュボタンを使用する

今回は、押しボタンからボタン押下をRaspberry PiのGPIOピンで検出するようにしています。 電気が通ると、Raspberry Pi は動作していることを知らせるメッセージを出力します。

必要なもの

  • 押しボタン (4ピン)
  • 抵抗器 (100Ω から 1000Ω の間のいずれかが機能する必要があります)
  • ジャンパー線
  • 電圧計(オプション)
  • ラズベリーパイ
  • モニターとキーボード (または SSH)

押ボタンの使用方法

  1. 選択したコード エディターを開き、次のコードを貼り付けます。
                
                  import
                
                 RPi.
                
                  GPIO
                
                
                  as
                
                 GPIO

                
                  from
                
                
                  time
                
                
                  import
                
                 sleep
 
GPIO.
                
                  setwarnings
                
                
                  (
                
                
                  False
                
                
                  )
                
                
GPIO.
                
                  setmode
                
                
                  (
                
                GPIO.
                
                  BOARD
                
                
                  )
                
                
GPIO.
                
                  setup
                
                
                  (
                
                
                  7
                
                
                  ,
                
                 GPIO.
                
                  IN
                
                
                  ,
                
                 pull_up_down
                
                  =
                
                GPIO.
                
                  PUD_DOWN
                
                
                  )
                
                
                  while
                
                
                  True
                
                :
  
                
                  if
                
                 GPIO.
                
                  input
                
                
                  (
                
                
                  7
                
                
                  )
                
                
                  ==
                
                 GPIO.
                
                  HIGH
                
                :
    
                
                  print
                
                
                  (
                
                
                  "Pin 7 is HIGH!"
                
                
                  )
                
                
                  elif
                
                 GPIO.
                
                  input
                
                
                  (
                
                
                  7
                
                
                  )
                
                
                  ==
                
                 GPIO.
                
                  LOW
                
                :
    
                
                  print
                
                
                  (
                
                
                  "Pin 7 is LOW..."
                
                
                  )
                
                
  sleep
                
                  (
                
                
                  0.15
                
                
                  )
                
              
  1. 「rpi-pushbutton.py」(またはファイル拡張子が同じであれば任意の名前)として保存します。
  1. 回路を構築します。 押しボタンの 1 つのピンで、それをピン 7 まで配線し、抵抗器を並列に接続します。 この抵抗器の反対側の GND ピン (ピン 6、7、14、20、25、30、34、または 39) にジャンパー線を取り付け、次に別のジャンパー線を 3.3V ピン (ピン 1 または 17) に取り付けます。 ) 別の押しボタン ピン。
Pushbutton Schematic And Breadboard Ver左:押しボタン回路の回路図。 右: ブレッドボード上のライブ プッシュボタン。 ジャンパー線の色指定: 赤 = 3.3V、茶 = ピン 7、黒 = GND。

ヒント:正しいピン番号を見つけるには、GPIO ピンが右上隅に来るように Raspberry Pi を持ちます。 左上のピンがピン 1、その右がピン 2 です。ピン 1 の下がピン 3、右がピン 4 などです。

Raspberry Pi PinoutRaspberry Pi のピン配列
  1. Raspberry Pi の電源を入れ、ターミナルを開きます。 使用 cd Python スクリプトのディレクトリに移動するには、次のように入力します。 python3 rpi-pushbutton.py . 別のファイル名を使用した場合は、「rpi-pushbutton」の代わりにそれを使用してください。
Terminal Cd Python3 Rpi Pushbutton
  1. 次のような新しいテキスト行が表示されるはずです Pin 7 is LOW... 端末では 0.15 秒ごと。 ボタンを押すと改行されます Pin 7 is HIGH! .

GND ピンと 3.3V ピンを切り替えて、抵抗に 3.3V、プッシュボタンの反対側に GND を接続すると、プッシュボタンのロジックが逆になります。 出力します Pin 7 is HIGH! いつもそしてなる Pin 7 is LOW ボタンを押すと。

Pushbutton Pull Up Vs Pull Down Resistors左:GND(黒)ピン7(茶)を接続してプルダウン抵抗を作ります。 右: 3.3V (赤) をピン 7 (茶) に接続すると、代わりにプルアップ抵抗が作成されます。

押しボタンのハードウェア

押しボタンは、プルアップとプルダウンの 2 種類の抵抗を使用します。 抵抗に3.3Vが接続されているのがプルアップ抵抗です。 電圧を上に引き上げます。 一方、プルダウン抵抗は、GNDピンを接続することで電圧を引き下げます。

抵抗なしでプッシュボタンを使用することもできますが、それを行うと、GPIO ピンがフロートのままになります。 フローティング GPIO ピンは直接電荷を受け取らないため、周囲の電荷を探します。 たとえば、近くに強い電磁場がある場合は、代わりにそれを測定します。

Pushbutton Circuit Without Resistor7番ピン(茶)は3.3V(赤)を切り離すとフローティングピンになります。

そのため、基準点が必要です。 デフォルトで GPIO ピンを 0V (GND) に接続すると、ボタンが押されていないときに 0V が測定されます。 しかし、そうしないと、GPIO ピンの値はどこにでもある可能性があります。負のボルトでさえも!

ただし、フローティング ピンを使用すると、いくつかの興味深いことができます。 ピンを浮かせたままにしておくと、空気中の電圧差を感知でき、ピン自体の近くで指を動かした場合の影響も測定できます。 電磁人感センサーか何かのようなものです。

ただし、Raspberry Pi でそれができないのは残念です。 これを有効にするには、アナログ ピンが必要ですが、Raspberry Pi にはありません。

押しボタンのコード

それを知っていると、ピン7が3.3Vまたは0Vが通過するかどうかを感知することを理解する必要があります. 3.3V を感知すると、それ自体が HIGH として報告されます。 しかし、0V を感知した場合は LOW です。

コードをインポート コマンド、セットアップ コマンド、ループ コマンドの 3 つの部分に分けてみましょう。

インポート コマンド

2 つのインポート コマンドを使用しています。

                
                  import
                
                 RPi.
                
                  GPIO
                
                
                  as
                
                 GPIO

                
                  from
                
                
                  time
                
                
                  import
                
                 sleep
              

import RPi.GPIO as GPIO RPi.GPIO モジュールをインポートすると、Raspberry Pi の GPIO ピンを操作できます。 追加することで as GPIO 最後に、Python に次のように入力するように指示しています。 GPIO 入力することと同等です RPi.GPIO . 他の文字列に置き換えることもできます。適切にフォーマットする限り、コードは引き続き機能するはずです。

一方で、 from time import sleep Python の time モジュールの一部のみをインポートします。 それはあなたが使用することができます sleep() 関数。

セットアップ コマンド

一部の設定を修正するために、セットアップ コマンドで RPi.GPIO モジュールの 3 つのコマンドを使用しています。

                GPIO.
                
                  setwarnings
                
                
                  (
                
                
                  False
                
                
                  )
                
                
GPIO.
                
                  setmode
                
                
                  (
                
                GPIO.
                
                  BOARD
                
                
                  )
                
                
GPIO.
                
                  setup
                
                
                  (
                
                
                  7
                
                
                  ,
                
                 GPIO.
                
                  IN
                
                
                  ,
                
                 pull_up_down
                
                  =
                
                GPIO.
                
                  PUD_DOWN
                
                
                  )
                
              

通常、RPi.GPIO モジュールは、Python スクリプトを起動するとすぐに、GPIO ピンの使用について警告するメッセージを表示します。 GPIO.setwarnings(False) それを防ぎます。

GPIO.setmode(GPIO.BOARD) RPi.GPIO モジュールからの別のコマンドです。 「BOARD」ピン配列を使用していることを Python に伝えます。 RPi.GPIO には、BOARD と BCM の 2 種類のピン配列があります。 BOARD では、ピン番号を使用してピンを選択できます。 BCM (「Broadcom」の略) では、個々の Broadcom SOC チャネルでピンを選択できます。 BOARD は、使用する Raspberry Pi ボードの種類に関係なく常に同じであるため、はるかに使いやすくなっています。 BCM のピン配置は、使用するモデルによって異なります。

最後に、 GPIO.setup(7, GPIO.IN) ピン 7 を入力ピンとして設定できます。 それは .setup() 関数と読み取り 7 選択しようとしているピンとして。 GPIO.IN それを入力ピンとして設定しようとしていることを意味します。

ループ コマンド

組み込みシステムは通常、数行のコードを使用するだけで、無限にループします。 プログラミング言語が異なれば、それを行う方法も異なります。 しかし、コンセプトは同じです。ある種のループを使用します。 Pythonの場合、それは while True: .

                
                  while
                
                
                  True
                
                :
  
                
                  if
                
                 GPIO.
                
                  input
                
                
                  (
                
                
                  7
                
                
                  )
                
                
                  ==
                
                 GPIO.
                
                  HIGH
                
                :
    
                
                  print
                
                
                  (
                
                
                  "Pin 7 is HIGH!"
                
                
                  )
                
                
                  elif
                
                 GPIO.
                
                  input
                
                
                  (
                
                
                  7
                
                
                  )
                
                
                  ==
                
                 GPIO.
                
                  LOW
                
                :
    
                
                  print
                
                
                  (
                
                
                  "Pin 7 is LOW..."
                
                
                  )
                
                
  sleep
                
                  (
                
                
                  0.15
                
                
                  )
                
              

while True: コードを無期限にループできます。 ボードに電気が流れている限り、ボードに配置したものはすべて永久に動作します。

if GPIO.input(7) == GPIO.HIGH: if文です。 入力ピンであるピン7が次のように読み取られる場合、 HIGH 、その中のすべてを行う必要があります。

print("Pin 7 is HIGH!") if文の中にあります。 印刷するだけです Pin 7 is HIGH! コンソールで。 それを、それらを含む任意の文字列、数値、または変数に置き換えることができます。

次は elif GPIO.input(7) == GPIO.LOW: . 基本的には同じです if GPIO.input(7) == GPIO.HIGH: 最初の部分を除いて:それは使用します elif それ以外の if . コード elif Else If の略です。 それが言っているのは、上記の他のすべてのコードが false を返す場合、Python はこの else-if ステートメントを実行する必要があるということです。

最後に、 sleep(0.15) コードを 0.15 秒間一時停止します。 なぜコードを一時停止するのですか? 主にパフォーマンスの問題です。 Raspberry Pi は出力コードを非常に高速に送信するため、GUI が少し遅れます。 SSH 経由で Raspberry Pi を使用している場合は、さらに顕著です。 時間の経過とともに悪化するだけの顕著な遅延が発生します。 コードを一時停止すると、パフォーマンスの問題を回避するために速度が低下します。

よくある質問

Raspberry Pi のピンをホットスワップしても安全ですか?

Raspberry Pi の電源が入っているときにピンをホットスワップまたは交換することは、一般的に悪い考えです。 切り替える前に、電源から取り外した方が常に安全です。

4 ピン プッシュボタンが 3 ピン プッシュボタンより優れている理由は何ですか?

ユーティリティに関しては、基本的に同じです。 ただし、4 つのピンがあると、4 ピンのプッシュボタンを直列回路内の別のプッシュボタンに配線できます。

Raspberry Pi の任意のピンを入力ピンとして使用できますか?

Raspberry Pi には 40 個のピンがありますが、そのうち GPIO は 27 個だけです。 GPIO ピンは、入力ピンと出力ピンにのみプログラムできます。 ほとんどの IDE では、GPIO 以外のピンを入力ピンに再プログラムすることはできません。

Terenz Jomar Dela Cruzによるすべての写真とスクリーンショット

ニュースレターを購読する!

最新のチュートリアルが受信トレイに直接配信されます

すべてのニュースレターにサインアップしてください。

サインアップすることにより、あなたは当社のプライバシー ポリシーに同意し、ヨーロッパのユーザーはデータ転送ポリシーに同意したことになります。 お客様のデータを共有することはありません。いつでも購読を解除できます。

購読