Arduino:ESP 32にLEDC(PWM)(3)を使用


文書ディレクトリ
  • 目的
  • セット紹介
  • 主要関数
  • 使用例
  • まとめ
  • Arduino core for the ESP 32は、一般的なArduinoにおいてPWMを出力するためのanalogWrite(pin,value)法ではなく、代わりにESP 32にLEDを制御するためのLEDCがある.ESP 32のLEDCは全部で16個のチャネル(0~15)があり、高低速の2つのグループに分けられ、高速チャネル(0~7)は80 MHzクロックで駆動され、低速チャネル(8~15)は1 MHzクロックで駆動される.
    目的
    LEDを使用して呼吸灯を実現
    セット紹介
    作成ツール:vscode+platformIOインストールチュートリアルvscode+platformIOインストールチュートリアル
    ハードウェア:bpibit
    しゅかんすう
  • double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits)は、最終周波数
  • に戻るLEDCチャネルに対応する周波数およびカウントビット数(デューティ比解像度)を設定する.
    チャネル最終周波数=クロック/(分周係数*(1<<カウントビット数);(分周係数は最大1024)
    パラメータ
    機能channel
    チャンネル番号で0~15の値をとりますfreq
    想定設定頻度resolution_bits
    カウントビット数は、0~20の値をとる(この値は、後のledcWriteメソッドにおけるデューティ比書き込み可能値、例えばこの値書き込み10を決定すると、デューティ比最大書き込み可能1023である(1<
  • void ledcWrite(uint8_t channel, uint32_t duty)指定チャネル出力一定デューティ比波形
  • double ledcWriteTone(uint8_t channel, double freq)はarduinoのtoneに似ており、アクティブブザーを外付けするときにある音(周波数によって異なる)
  • を発することができる.
  • double ledcWriteNote(uint8_t channel, note_t note, uint8_t octave)この方法は、上記の方法のさらなるパッケージである、指定されたトーンおよび音階音の信号
  • を直接出力することができる.
    パラメータ
    機能
    note
    調式、do、re、mi、fa…これらに相当し、NOTE_C、NOTE_Cs、NOTE_D、NOTE_Eb、NOTE_E、NOTE_F、NOTE_Fs、NOTE_G、NOTE_Gs、NOTE_A、NOTE_Bb、NOTE_B
    octave音階、取値0~7;楽理関連内容は以下の文章を参考にすることができる.http://www.360doc.com/content/17/1231/01/47685146_717797647.shtml https://www.musicbody.net/sns/index.php?s=/news/index/detail/id/406.html
  • uint32_t ledcRead(uint8_t channel)は、指定するチャネルデューティ比の値
  • を返す.
  • double ledcReadFreq(uint8_t channel)は、指定チャネルの現在の周波数(現在のデューティ比が0の場合、メソッドは0を返す)
  • を返す.
  • void ledcAttachPin(uint8_t pin, uint8_t channel)出力
  • を実現するために、LEDCチャネルを指定IOポートにバインドする.
  • void ledcDetachPin(uint8_t pin) IOポートのLEDC機能
  • を解除する.
    使用例
    #include 
    
    int freq = 2000;    //   
    int channel = 0;    //   
    int resolution = 8;   //    
    
    const int led = 18;
    void setup()
    {
    
      ledcSetup(channel, freq, resolution); //     
      ledcAttachPin(led, channel);  //            
    }
    
    void loop()
    {
      //     
      for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle = dutyCycle + 5)
      {
        ledcWrite(channel, dutyCycle);  //   PWM
        delay(20);
      }
    
      //     
      for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle = dutyCycle - 5)
      {
        ledcWrite(channel, dutyCycle);  //   PWM
        delay(20);
      }
    }
    

    まとめ
    Arduino core for the ESP 32では、ArduinoのようにPWMを出力するためのanalogWrite(pin,value)法はなく、LEDC(LED Control)でPWM機能を実現している