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
しゅかんすう に戻るLEDCチャネルに対応する周波数およびカウントビット数(デューティ比解像度)を設定する.
チャネル最終周波数=クロック/(分周係数*(1<<カウントビット数);(分周係数は最大1024)
パラメータ
機能
チャンネル番号で0~15の値をとります
想定設定頻度
カウントビット数は、0~20の値をとる(この値は、後のledcWriteメソッドにおけるデューティ比書き込み可能値、例えばこの値書き込み10を決定すると、デューティ比最大書き込み可能1023である(1< を発することができる. を直接出力することができる.
パラメータ
機能
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 を返す. を返す. を実現するために、LEDCチャネルを指定IOポートにバインドする. を解除する.
使用例
まとめ
Arduino core for the ESP 32では、ArduinoのようにPWMを出力するためのanalogWrite(pin,value)法はなく、LEDC(LED Control)でPWM機能を実現している
目的
LEDを使用して呼吸灯を実現
セット紹介
作成ツール:vscode+platformIOインストールチュートリアルvscode+platformIOインストールチュートリアル
ハードウェア:bpibit
しゅかんすう
double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits)
は、最終周波数チャネル最終周波数=クロック/(分周係数*(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)
出力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機能を実現している