You are here

ESP32: 音の出力

ESP32のPWM機能を利用して、ピエゾスピーカー(圧電サウンダー)で音を鳴らしてみましょう。
使用するボードはESP32-DEVC-HOMEです。
http://www.microfan.jp/esp32/esp32-devc-home

現時点では、ESP32用のArduinoにtone()関数がないため、ピエゾスピーカーで音を出そうと思っても、手軽な手段がなく途方に暮れてしまいますね。

ここでは、LEDC Driver機能を利用した例を示します。
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32...

ESP32のLEDC Driver機能で利用できるPWMを使って、ピエゾスピーカーに出力する信号の周波数を変えます。

#define SW1 0
#define SW2 32
#define SW3 33
#define SW4 34
#define SW5 35

#define SOUNDER 15

// 0,1はLEDで使用
#define LEDC_CHANNEL_2     2
#define LEDC_TIMER_13_BIT  13
#define LEDC_BASE_FREQ     5000

void setup()
{
  pinMode(SW1, INPUT) ;
  pinMode(SW2, INPUT) ;
  pinMode(SW3, INPUT) ;
  pinMode(SW4, INPUT) ;
  pinMode(SW5, INPUT) ;
}

void noTone(int pin)
{
  ledcWriteTone(LEDC_CHANNEL_2, 0.0) ;
}

void tone(int pin, int freq)
{
  ledcSetup(LEDC_CHANNEL_2, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT) ;
  ledcAttachPin(pin, LEDC_CHANNEL_2) ; // CH2をSOUNDERに
  ledcWriteTone(LEDC_CHANNEL_2, freq) ;
}

void loop()
{
  int freq = 0 ;

  if (!digitalRead(SW1))
    freq += 110 ;
  if (!digitalRead(SW2))
    freq += 220 ;
  if (!digitalRead(SW3))
    freq += 440 ;
  if (!digitalRead(SW4))
    freq += 880 ;
  if (!digitalRead(SW5))
    freq += 1760 ;

  if (freq != 0)
    tone(SOUNDER, freq) ;
  else
    noTone(SOUNDER) ;

  delay(100) ;
}

上記のサンプルスケッチでは、スイッチを押すとそれに対応した音が鳴ります。


使用パーツ


開発ソフト: 
チップファミリー: 
MCUチップ: