【ESP32最充実学習ノート(基礎編) - 6.ESP32 PWM(アナログ出力)】

このチュートリアルについて:

ESP32 の基本                                

1.ESP32の紹介                                                                

2. ESP32 Arduino 統合開発環境

3. VS コードと PlatformIO

4.ESP32ピン

5. ESP32 入出力

6. ESP32 パルス幅変調 ☑

7.ESP32 アナログ入力

8.ESP32割り込みタイマー

9 .ESP32 ディープスリープ

ESP32 プロトコル

ESP32 ウェブサーバー

ESP32 ローラ

ESP32 ブレ

ESP32 BLE クライアントサーバー

ESP32 ブルートゥース

ESP32 MQTT

ESP32 ESP-NOW

ESP32 Wi-Fi

ESP32 WebSocket

ESP32 ESP-MESH

ESP32 メールボックス

ESP32 SMS

ESP32 HTTP get POST

HTTP GET Web API

HTTP POST Web API

 ESP32 サーバーの記事

更新を続け、ブロガーをフォローして、道に迷わないでください! ! !

 ESP32 センサー モジュール

更新を続け、ブロガーをフォローして、道に迷わないでください! ! !

ESP32 アルティメットコンバット

100以上のESP32実用プロジェクト、注目してください!! !

        このチュートリアルでは、Arduino IDE を使用して ESP32 で PWM 信号を生成する方法を紹介します。例として、ESP32 の LED PWM コントローラーを使用して LED を調光する簡単な回路を作成します。また、異なる GPIO で同時に同じ PWM 信号を取得する方法も示します。

        このチュートリアルを続行する前に、ESP32 アドオンを Arduino IDE にインストールする必要があります。ESP32 をまだインストールしていない場合は、以下のいずれかのチュートリアルに従って Arduino IDE にインストールしてください。

必要な部品

このチュートリアルに従うには、次の部品が必要です。

ESP32 DOIT DEVKIT V1 ボード
3 x 5mm LED
3x 330 オーム抵抗器
ブレッドボード
ジャンパー線

ESP32 LED PWM コントローラー

ESP32 には、さまざまな特性を持つ PWM 信号を生成するように構成できる 16 個の独立したチャネルを備えた LED PWM コントローラーがあります。

Arduino IDE を使用して PWM を使用して LED を調光するには、次の手順に従う必要があります。

1.まず、PWM チャンネルを選択する必要があります。0 から 15 までの 16 チャネルがあります。

2.次に、PWM 信号の周波数を設定する必要があります。LED の場合、5000 Hz の周波数を使用できます。

3. 信号のデューティ サイクル分解能も設定する必要があります。分解能は 1 ~ 16 ビットです。8 ビットの解像度を使用します。つまり、0 ~ 255 の値を使用して LED の明るさを制御できます。

4. 次に、信号が表示される GPIO または GPIO を指定する必要があります。これには、次の関数を使用します。

ledcAttachPin(GPIO, channel)

この関数は 2 つのパラメーターを受け入れます。1 つ目は信号を出力する GPIO で、2 つ目は信号を生成するチャネルです。

5. 最後に、PWM を使用して LED の輝度を制御するには、次の関数を使用します。

ledcWrite(channel, dutycycle)

この関数は、PWM 信号を生成するためのチャネルとデューティ サイクルをパラメータとして受け取ります。

LEDを暗くする

簡単な例を見て、Arduino IDE を使用して ESP32 LED PWM コントローラーを使用する方法を見てみましょう。

回路図

下の図に示すように、LED を ESP32 に接続します。LED はGPIO 16に接続する必要があります。

コード

Arduino IDE を開き、次のコードをコピーします。

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

最初に、LED が接続されているピンを定義します。この場合、LED はGPIO 16に接続されています。

const int ledPin = 16;  // 16 corresponds to GPIO16

 次に、PWM 信号のプロパティを設定します。5000 Hz の周波数を定義し、チャネル 0 を選択して信号を生成し、8 ビットの分解能を設定します。これら以外のプロパティを選択して、異なる PWM 信号を生成できます。

const int freq = 5000; 
const int ledChannel = 0; 
const int resolution = 8;

setup()内で、次のように、パラメーターとして ledChannel、周波数、解像度を受け入れるledcSetup()関数を使用して、前に定義したプロパティで LED PWM を構成する必要があります。

ledcSetup(ledChannel, freq, resolution);

次に、信号を取得する GPIO を選択する必要があります。これを行うには、信号を取得する GPIO と信号を生成したチャネルをパラメーターとして受け入れるledcAttachPin()関数を使用します。この例では、 GPIO 16に対応するLEDPin GPIOを使用します。信号を生成するチャネルは、チャネル 0 に対応するled チャネルです。

ledcAttachPin(ledPin, ledChannel);

ループでは、デューティ サイクルを 0 ~ 255 の間で変化させて、LED の輝度を上げます。

for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15); 
}

次に、明るさを 255 から 0 の間で下げます。

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
 }

 LED の明るさを設定するには、生成された信号のチャネルとデューティ サイクルをパラメーターとして受け入れるledcWrite()を使用するだけです。

ledcWrite(ledChannel, dutyCycle);

8 ビットの分解能を使用しているため、デューティ サイクルは 0 ~ 255 の値で制御されます。ledcWrite()関数では、GPIO ではなく、信号を生成したチャネルを使用することに注意してください。

テスト例

コードを ESP32 にアップロードします。正しいボードと COM ポートが選択されていることを確認してください。あなたの回路を見てください。明るさを増減するには、より暗い LED が必要です。

別の GPIO で同じ信号を取得する

異なる GPIO で同じチャネルから同じ信号を取得できます。これを行うには、これらの GPIO をsetup()に接続するだけです

同じチャンネルからの同じ PWM 信号を使用して 3 つの LED を調光するように前の例を変更してみましょう。

回路図

次の回路図に従って、さらに 2 つの LED を回路に追加します。

(この回路図では、30 個の GPIO を備えた ESP32 DEVKIT V1 モジュール バージョンを使用しています。別のモデルを使用している場合は、使用しているボードのピン配置を確認してください。)

コード

以下のコードを Arduino IDE にコピーします。

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16
const int ledPin2 = 17; // 17 corresponds to GPIO17
const int ledPin3 = 5;  // 5 corresponds to GPIO5

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
  ledcAttachPin(ledPin2, ledChannel);
  ledcAttachPin(ledPin3, ledChannel);
}
 
void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // decrease the LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

これは前のコードと同じですが、いくつかの変更が加えられています。GPIO 17GPIO 5を参照する 2 つの新しい LED 用に、他の 2 つの変数を定義します

const int ledPin2 = 17; // 17 corresponds to GPIO17 
const int ledPin3 = 5;  // 5 corresponds to GPIO5

次に、setup()に次の行を追加して、2 つの GPIO をチャネル 0 に割り当てました。これは、チャネル 0 で生成された両方の GPIO で同じ信号を取得することを意味します。

ledcAttachPin(ledPin2, ledChannel); 
ledcAttachPin(ledPin3, ledChannel);

試験項目

新しいスケッチを ESP32 にアップロードします。正しいボードと COM ポートが選択されていることを確認してください。次に、回路を見てください。

すべての GPIO は同じ PWM 信号を出力します。したがって、3 つの LED すべてが同時に輝度を増減し、同期効果を生み出します。

要約する

        要約すると、この記事では、ESP32 の LED PWM コントローラーと Arduino IDE を使用して LED を調光する方法を学びました。信号の正しいプロパティを設定することにより、学んだ概念を使用して、PWM を使用して他の出力を制御できます。

おすすめ

転載: blog.csdn.net/m0_46509684/article/details/129109888