【ESP32】第3回 PWM出力でLEDの明るさ調節 自作水中ドローン編

電子工作
ESP32準備記事

【やりたいこと】ESP32PWM出力がしたい!

できました!

結論、

ESP32でのPWM出力は、ちょっとめんどくさいです。

なぜなら、ESP32では、analogWriteが用意されていないからです。(試しにやってみると、)

(エラーが出ました。)

さらに、ESP8266では、Blynkでウィジェットの設定をする際にPWM機能持ちのピンを選択できるのに対して、ESP32では、PWM機能持ちのピンなんて1つも表示されません。

ということで、ESP32でPWM出力を行う場合は、ちょっと特殊なコードを記述する必要があります。

なので、今回は、ESP32でPWM出力をする際に必要なコードをお伝えしたいと思います。

【10分でできる】LEDC Driver機能を使います

1.使用したもの

・ESP-WROOM-32

・ブレッドボード

・Micro USBケーブル

・スマホアプリ Blynk

Blynk: a low-code IoT software platform for businesses and developers
Build custom mobile apps and web dashboards with our drag-and-drop app builder. Get a complete, hardware agnostic IoT solution with an integrated back-end infra...

・Arduino IDE

Software
Open-source electronic prototyping platform enabling users to create interactive electronic objects.

・抵抗 330Ω

・LED

2.手順

※Arduino IDE、Blynkは、それぞれインストールされているものとして進めていきます。

※ESP32のファイルのインストールは、こちらの記事を参考にしてください

ESP32(ESP-WROOM-32)でLチカ (WindowsでArduino IDE使用) - Qiita
#はじめにみんな大好きESP8266(ESP-WROOM-02)の上位バージョン、ESP32(ESP-WROOM-32)が国内でも容易に入手可能になってきました。秋月の通販または店頭で購入できま…

※「第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() ;
}

参考記事:http://www.microfan.jp/iot/blynk/esp32/pwm

上記のコードを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チャンネルの紹介

マッハ新書で水中ドローンについてを紹介しています。

https://hk-ryukyu.booth.pm/items/951120

水中ドローンで撮影した動画をYoutubeにアップしています。

水中ドローン兄さん
作成した動画を友だち、家族、世界中の人たちと共有

撮影で使用している水中ドローンはこちらです。

コメント

タイトルとURLをコピーしました