Raspberry Pi で LED を使用したことがあれば、おそらく GPIO 出力がどのように機能するかを知っているでしょう。 コードは、汎用入力/出力 (GPIO) ピンを介して電気を流し、LED を通過させ、物を点灯させます。 しかし、逆のことを試したことはありますか? 押しボタンを使用すると、正反対のことができます。 このチュートリアルでは、GPIO ピンを入力ピンに変換し、ボタンを押すたびにリッスンする方法を示します。
コンテンツ
押しボタンのしくみ
押しボタンはスイッチの一種です。 互いに分離することで完全な回路を防止する 2 つの別個の導電性ピンがあります。 押しボタンを押すと、実際には 2 つのピンが一緒に押され、回路が完成します。 しかし、手を離すと、ピンを再び分離するバネのようなメカニズムがあります。

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

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

ある意味で、プッシュボタンには常に 2 つのピンが接続されています。 4 ピン プッシュボタンを押すと、4 つのピンすべてが接続されます。
Raspberry Pi GPIO ピンでプッシュボタンを使用する
今回は、押しボタンからボタン押下をRaspberry PiのGPIOピンで検出するようにしています。 電気が通ると、Raspberry Pi は動作していることを知らせるメッセージを出力します。
必要なもの
- 押しボタン (4ピン)
- 抵抗器 (100Ω から 1000Ω の間のいずれかが機能する必要があります)
- ジャンパー線
- 電圧計(オプション)
- ラズベリーパイ
- モニターとキーボード (または SSH)
押ボタンの使用方法
- 選択したコード エディターを開き、次のコードを貼り付けます。
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 )
- 「rpi-pushbutton.py」(またはファイル拡張子が同じであれば任意の名前)として保存します。
- 回路を構築します。 押しボタンの 1 つのピンで、それをピン 7 まで配線し、抵抗器を並列に接続します。 この抵抗器の反対側の GND ピン (ピン 6、7、14、20、25、30、34、または 39) にジャンパー線を取り付け、次に別のジャンパー線を 3.3V ピン (ピン 1 または 17) に取り付けます。 ) 別の押しボタン ピン。

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

- Raspberry Pi の電源を入れ、ターミナルを開きます。 使用
cd
Python スクリプトのディレクトリに移動するには、次のように入力します。python3 rpi-pushbutton.py
. 別のファイル名を使用した場合は、「rpi-pushbutton」の代わりにそれを使用してください。

- 次のような新しいテキスト行が表示されるはずです
Pin 7 is LOW...
端末では 0.15 秒ごと。 ボタンを押すと改行されますPin 7 is HIGH!
.
GND ピンと 3.3V ピンを切り替えて、抵抗に 3.3V、プッシュボタンの反対側に GND を接続すると、プッシュボタンのロジックが逆になります。 出力します Pin 7 is HIGH!
いつもそしてなる Pin 7 is LOW
ボタンを押すと。

押しボタンのハードウェア
押しボタンは、プルアップとプルダウンの 2 種類の抵抗を使用します。 抵抗に3.3Vが接続されているのがプルアップ抵抗です。 電圧を上に引き上げます。 一方、プルダウン抵抗は、GNDピンを接続することで電圧を引き下げます。
抵抗なしでプッシュボタンを使用することもできますが、それを行うと、GPIO ピンがフロートのままになります。 フローティング GPIO ピンは直接電荷を受け取らないため、周囲の電荷を探します。 たとえば、近くに強い電磁場がある場合は、代わりにそれを測定します。

そのため、基準点が必要です。 デフォルトで 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によるすべての写真とスクリーンショット
ニュースレターを購読する!
最新のチュートリアルが受信トレイに直接配信されます
すべてのニュースレターにサインアップしてください。
サインアップすることにより、あなたは当社のプライバシー ポリシーに同意し、ヨーロッパのユーザーはデータ転送ポリシーに同意したことになります。 お客様のデータを共有することはありません。いつでも購読を解除できます。
購読