banner

ニュース

Jun 05, 2023

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

Raspberry Pi で LED を使用したことがある場合は、おそらく GPIO 出力がどのように機能するかをご存知でしょう。 コードにより、汎用入出力 (GPIO) ピンに電気が流れ、LED を通過して点灯します。 しかし、その逆を試してみたことはありますか? 押しボタンを使用すると、まったく逆のことができます。 このチュートリアルでは、GPIO ピンを入力ピンに変換し、ボタンを押すたびにその音を聞く方法を説明します。

押しボタンはスイッチの一種です。 これには 2 つの独立した導電ピンがあり、互いに分離しているため完全な回路を形成できません。 押しボタンを押すと、実際には 2 つのピンが一緒に押し込まれ、回路が完成します。 しかし、手を放すと、ピンが再び離れるバネのような機構があります。

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

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

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

今回は、Raspberry Pi の GPIO ピンにプッシュボタンのボタン押下を検出させます。 電気が流れると、Raspberry Pi は動作していることを示すメッセージを出力します。

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

GND ピンと 3.3V ピンを切り替えて、抵抗に 3.3V、プッシュボタンの反対側に GND を接続すると、プッシュボタンのロジックが逆になります。 ピン 7 が HIGH! と出力されます。 常にオンになり、ボタンを押すとピン 7 が 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 は RPi.GPIO モジュールをインポートします。これにより、Raspberry Pi の GPIO ピンを使用して何かを行うことができます。 最後に GPIO として追加することで、GPIO を入力することが RPi.GPIO を入力することと同等であると Python に指示することになります。 他の文字列に置き換えることもでき、適切にフォーマットされていればコードは引き続き機能します。

一方、from time import sleep は Python の time モジュールの一部のみをインポートします。 sleep() 関数を使用できるようになります。

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

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 の場合、それは True: です。

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

if GPIO.input(7) == GPIO.HIGH: は if ステートメントです。 入力ピンであるピン 7 が HIGH と読み取られた場合、その内部ですべての処理を実行する必要があると記載されています。

print("ピン 7 は HIGH!") は if ステートメント内にあります。 ピン 7 が HIGH であることを出力するだけです。 コンソール上で。 これを、それらを含む任意の文字列、数値、または変数に置き換えることができます。

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

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

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

実用性に関しては、基本的には同じです。 ただし、ピンが 4 つあると、4 ピンの押しボタンを直列回路内の別の押しボタンに配線できます。

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

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

Terenz は趣味のロボット工学者で、世界がこれまで見た中で最も素晴らしいロボットを作ろうとしています。 第二の趣味として LED を燃やすのに忙しくなければ、彼はすでにそれを行っていたかもしれません。

最新のチュートリアルがあなたの受信箱に直接配信されます

Google ドキュメントでリストを作成、カスタマイズ、編集する方法

Microsoft Excelで透かしを追加する方法

Microsoft Outlook で条件付き書式を使用する方法

Googleマップでルートを保存する方法

Windows でハードディスクの状態を確認する 6 つの方法

WhatsApp プロフィール リンクを作成して共有する 5 つの方法

Facebook の写真が読み込まれない? 修正点は次のとおりです

iOS で連絡先名が表示されず、番号として表示される問題を修正する方法

アフィリエイトの開示:Make Tech Easier は、当社のリンクを通じて購入された製品に対してコミッションを獲得することができ、これにより当社が読者のために行う活動をサポートします。

ヒント: アフィリエイトの開示:
共有