【やりたいこと】ESP32でPWM出力がしたい!
できました!
大いなる一歩
ESP32でPWM機能を使って、明るさ調節できた!! pic.twitter.com/QXAmtdrGPn
— ヒデト@UnityC#記事書くぞ! (@Hide21Hk) February 6, 2019
結論、
ESP32でのPWM出力は、ちょっとめんどくさいです。
なぜなら、ESP32では、analogWriteが用意されていないからです。(試しにやってみると、)
(エラーが出ました。)
さらに、ESP8266では、Blynkでウィジェットの設定をする際にPWM機能持ちのピンを選択できるのに対して、ESP32では、PWM機能持ちのピンなんて1つも表示されません。
ということで、ESP32でPWM出力を行う場合は、ちょっと特殊なコードを記述する必要があります。
なので、今回は、ESP32でPWM出力をする際に必要なコードをお伝えしたいと思います。
【10分でできる】LEDC Driver機能を使います
1.使用したもの
・ESP-WROOM-32
・ブレッドボード
・Micro USBケーブル
・スマホアプリ Blynk

・Arduino IDE
・抵抗 330Ω
・LED
2.手順
※Arduino IDE、Blynkは、それぞれインストールされているものとして進めていきます。
※ESP32のファイルのインストールは、こちらの記事を参考にしてください

※「第1回 BlynkでLチカしてみた」を履修済みとして、進めていきます。
①回路の作成
回路は、「第1回 BlynkでLチカしてみた」で使用するピンをIO16に変更しただけです。
②コードの記述
#define BLYNK_PRINT Serial #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> // BlynkのAuth Tokenを設定 char auth[] = "86e*************"; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "IO***********"; char pass[] = "11***********"; #define LED1 16 // PWM制御用のチャネルは16あり、その最初の3個を使います #define LEDC_CHANNEL_0 0 #define LEDC_BASE_FREQ 5000 #define LEDC_TIMER_8_BIT 8 void setup() { // Debug console Serial.begin(115200) ; // LEDのPWM制御の初期化 ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT) ; // 8ビット精度で制御 ledcAttachPin(LED1, LEDC_CHANNEL_0) ; // CH0をLED1に ledcWrite(LEDC_CHANNEL_0, 0) ; // 消灯 Blynk.begin(auth, ssid, pass) ; Blynk.syncAll() ; } // LED1:GPIO16 - V16の範囲は0~255 BLYNK_WRITE(LED1) { int bright = param.asInt() ; ledcWrite(LEDC_CHANNEL_0, bright) ; } void loop() { Blynk.run() ; }
上記のコードをArduino IDEに記述します。
簡単にコードの解説をします。
今回は、PWM出力をするために、LEDC Driverを使いました。使用するピンに着目してみると、
#define LED1 16 //IO16ピンをLED1とする
使用するIO16ピンをLED1に設定
BLYNK_WRITE(LED1) { int bright = param.asInt() ; //Virtualピンを使用する ledcWrite(LEDC_CHANNEL_0, bright) ; }
IO16ピン(LED1)をVirtualピンで出力するように、設定しています。
コードが記述できたら、コンパイルして、ESP32に書き込みましょう。
③Blynk側の設定
「第1回 BlynkでLチカしてみた」で使用したProjectを使います。
Widget BoxからSliderをタップします。
SLIDERをタップし続けることで、大きさの調整ができます。上記の画像のように、横長にしてください。
大きさ調節の完了後、SLIDERの設定をします。
PINをタップします。
VirtualのV16を選択します。
上記の画像のように、設定してください。
最大値を255に、
SEND ON RELEASEをOFFにそれぞれ設定してください。
④実行
最初にのせた動画のように、SLIDERを左右に移動させてみてください。
LEDの明るさが強くなったり、弱くなったりしたら成功です。
まとめ
ESP32でPWM出力を行うために、LEDC DriverとVirtualピンを使用しました。
今回は、LEDの明るさ調節にPWM出力を使いましたが、PWM出力はモーターの回転速度を調節することもできます。
次回は、PWM出力によるモーター回転速度の調整にトライしてみます。
【最後に】マッハ新書と水中ドローンYoutubeチャンネルの紹介
マッハ新書で水中ドローンについてを紹介しています。

水中ドローンで撮影した動画をYoutubeにアップしています。
撮影で使用している水中ドローンはこちらです。
コメント