注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

2.1.1 ボタン

はじめに

このプロジェクトでは、ボタンを使用してLEDをオンまたはオフにする方法を学びます。

必要な部品

このプロジェクトで必要なコンポーネントは以下の通りです。

../_images/list_2.1.1_Button.png

全てのキットをまとめて購入するのが便利です、以下がリンクです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクからそれぞれ個別にも購入できます。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

購入

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

LED

購入

ボタン

購入

回路図

通常開のボタンをRaspberry Piの入力として使用し、その接続は以下の回路図で示されています。ボタンが押されると、GPIO18は低レベル(0V)になります。プログラミングを通じてGPIO18の状態を検出できます。つまり、GPIO18が低レベルになった場合、ボタンが押されたことを意味します。ボタンが押されたときに対応するコードを実行すると、LEDが点灯します。

注釈

LEDの長いピンはアノードで、短いピンはカソードです。

../_images/image302.png ../_images/image303.png

実験手順

ステップ1: 回路を作成します。

../_images/image152.png

ステップ2: コードファイルを開きます。

cd ~/raphael-kit/python

ステップ3: コードを実行します。

sudo python3 2.1.1_Button.py

これで、ボタンを押すとLEDが点灯し、再度ボタンを押すとLEDが消灯します。同時に、LEDの状態が画面に表示されます。

コード

注釈

下記のコードは 修正/リセット/コピー/実行/停止 が可能です。しかし、その前に raphael-kit/python のようなソースコードのパスに移動する必要があります。コードを修正した後、直接実行して効果を確認できます。

import RPi.GPIO as GPIO
import time
LedPin = 17  # Set GPIO17 as LED pin
BtnPin = 18  # Set GPIO18 as button pin

# Set Led status to True(OFF)
Led_status = True

# Define a setup function for some setup
def setup():
    # Set the GPIO modes to BCM Numbering
    GPIO.setmode(GPIO.BCM)
    # Set LedPin's mode to output,
    # and initial level to high (3.3v)
    GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
    # Set BtnPin's mode to input,
    # and pull up to high (3.3V)
    GPIO.setup(BtnPin, GPIO.IN)


# Define a callback function for button callback
def swLed(ev=None):
    global Led_status
    # Switch led status(on-->off; off-->on)
    Led_status = not Led_status
    GPIO.output(LedPin, Led_status)
    if Led_status:
        print ('LED OFF...')
    else:
        print ('...LED ON')

# Define a main function for main process
def main():
# Set up a falling detect on BtnPin,
    # and callback function to swLed
    GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed)
    while True:
        # Don't do anything.
        time.sleep(1)

# Define a destroy function for clean up everything after
# the script finished
def destroy():
    # Turn off LED
    GPIO.output(LedPin, GPIO.HIGH)
    # Release resource
    GPIO.cleanup()

# If run this script directly, do:
if __name__ == '__main__':
    setup()
    try:
        main()
    # When 'Ctrl+C' is pressed, the program
    # destroy() will be executed.
    except KeyboardInterrupt:
        destroy()

コード説明

LedPin = 17

GPIO17をLEDピンとして設定します。

BtnPin = 18

GPIO18をボタンピンとして設定します。

GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed)

BtnPinに下降エッジ検出を設定し、BtnPinの値が高レベルから低レベルに変わるとボタンが押されたと判断します。次に、関数swLedを呼び出します。

def swLed(ev=None):
global Led_status
# Switch led status(on-->off; off-->on)
Led_status = not Led_status
GPIO.output(LedPin, Led_status)

ボタンが押された場合のコールバック関数を定義します。初めてボタンが押されると、条件「not Led_status」がfalseになり、GPIO.output()関数が呼び出されてLEDが点灯します。ボタンが再度押されると、LEDのステータスがfalseからtrueに変わり、LEDは消灯します。

現象の画像

../_images/image153.jpeg