5.1 ボタン値の読み取り

このインタラクティブなプロジェクトでは、ボタンの制御とLEDの操作について学びます。

そのコンセプトはシンプルでありながら効果的です。ボタンの状態を読み取り、ボタンが押されると高電圧レベル('high state')が登録され、これがLEDが点灯するトリガーとなります。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

一式を購入すると便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ブレッドボード

BUY

ジャンパーワイヤ

BUY

抵抗器

BUY

LED

BUY

ボタン

BUY

利用可能なピン

  • 利用可能なピン

    このプロジェクトのESP32ボード上で利用可能なピンのリストです。

    入力用

    IO14, IO25, I35, I34, I39, I36, IO18, IO19, IO21, IO22, IO23

    出力用

    IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

  • 条件付き使用ピン(入力)

    以下のピンには内蔵のプルアップまたはプルダウン抵抗があるため、 入力ピンとして使用する場合 外部抵抗は不要です:

    条件付き使用ピン

    説明

    IO13, IO15, IO2, IO4

    47K抵抗でプルアップし、デフォルト値を高にします。

    IO27, IO26, IO33

    4.7K抵抗でプルアップし、デフォルト値を高にします。

    IO32

    1K抵抗でプルダウンし、デフォルト値を低にします。

  • ストラッピングピン(入力)

    ストラッピングピンは、デバイスの起動時(電源オンリセット時)に特定のブートモードを決定するために使用される特別なピンのセットです。

    ストラッピングピン

    IO5, IO0, IO2, IO12, IO15

    一般に、これらのピンを入力ピンとして使用することは お勧めしません。これらのピンを使用する場合は、ブートプロセスに与える潜在的な影響を考慮してください。詳細については、 ストラッピングピン セクションを参照してください。

回路図

../../_images/circuit_5.1_button.png

ボタンの一方の端子を3.3Vに、もう一方の端子をIO14に接続してください。ボタンを押すとIO14がハイ状態になり、LEDが点灯します。ボタンを離すとIO14は浮遊状態に戻りますが、これはハイまたはローのいずれかになります。ボタンが押されていないときに安定したローレベルを確保するために、IO14は10Kのプルダウン抵抗を介してGNDに接続されるべきです。

配線図

../../_images/5.1_button_bb.png

注釈

4ピンボタンはH型に設計されています。ボタンが押されていない状態では、左右のピンが接続されておらず、電流が流れません。しかし、ボタンを押すと左右のピンが接続され、電流が流れる経路が作られます。

コード

注釈

  • esp32-starter-kit-main\c\codes\5.1_button のパスの下にあるファイル 5.1_button.ino を開くことができます。

  • ボード(ESP32 Dev Module)と適切なポートを選択した後、 アップロード ボタンをクリックします。

  • "Unknown COMxx"が常に表示されますか?

コードが正常にアップロードされると、ボタンを押すとLEDが点灯し、離すと消灯します。

同時にArduino IDEのシリアルモニタを開き、ボタンの値を観察することができます。ボタンが押されている場合は「1」が印刷され、そうでない場合は「0」が印刷されます。

../../_images/button_serial.png

どのように動作するのか?

これまでのプロジェクトでは、デジタルまたはPWM信号の形で信号を出力することに関与していました。

このプロジェクトでは、外部コンポーネントからESP32ボードへの入力信号を受信します。Arduino IDEのシリアルモニタで入力信号を確認することができます。

  1. setup() 関数では、ボタンピンを input として、LEDピンを output として初期化します。シリアル通信も115200のボーレートで開始します。

    void setup() {
        Serial.begin(115200);
        // initialize the button pin as an input
        pinMode(buttonPin, INPUT);
        // initialize the LED pin as an output
        pinMode(ledPin, OUTPUT);
    }
    
    • Serial.begin(speed): シリアルデータ通信のためのビット毎秒(ボーレート)のデータレートを設定します。

      • speed: ビット毎秒(ボーレート)。許可されるデータ型: long

  2. loop() 関数では、ボタンの状態を読み取り、変数 buttonState に格納します。 buttonState の値は Serial.println() を使用してシリアルモニタに出力します。

    void loop() {
        // read the state of the button value
        buttonState = digitalRead(buttonPin);
        Serial.println(buttonState);
        delay(100);
        // if the button is pressed, the buttonState is HIGH
        if (buttonState == HIGH) {
            // turn LED on
            digitalWrite(ledPin, HIGH);
    
        } else {
            // turn LED off
            digitalWrite(ledPin, LOW);
        }
    }
    

    ボタンが押されて buttonState がHIGHの場合、 ledPinHIGH に設定することでLEDを点灯させます。それ以外の場合はLEDを消灯させます。

    • int digitalRead(uint8_t pin);: 入力として設定された指定のピンの状態を読み取るために、digitalRead関数が使用されます。この関数は選択されたピンの論理状態を HIGH または LOW で返します。

      • pin GPIOを選択します

    • Serial.println(): ASCIIテキストとして人が読めるデータをシリアルポートに出力し、その後にキャリッジリターン文字(ASCII 13, 'r')と改行文字(ASCII 10, 'n')を追加します。