ESP32でLEDをPWD制御
はじめに
LEDを遠隔操作で調光する方法を探していたら、Raspberry PiもいいけどArduinoでいいじゃないか、ということで衝動買いしてしまいました。
買ってはみたものの、さっぱり使い方が分からないので調べまくり、何とかLチカならぬLぬるチカまではできたのでメモしておきます。
ESP32-WROOM-32 開発ボード
買った商品は以下です。
ESPRESSIF社が開発したESP-WROOM-32に、USBやスイッチなどをプラスしてすぐに使えるようにした開発ボードです。技適を取得済な上に90日間の無条件に返品返金保証付きなので、初心者でも安心。
開発ボードについてはGitHub-LuaNodeを参照
注意
- ESP-WROOM-32モジュールのみで購入すると、USB-シリアル変換モジュールやスイッチなどの入手&はんだ付けが必要になります
- 名前も見た目も似ているESP-WROOM-02(ESP8266)はBluetoothが使えません
接続
今回はLEDをPWMで光らせるというシンプルプロジェクトなので、回路もシンプル。
開発ボードとブレッドボード1枚のみで完結します。
D5→LED→抵抗→GND
プログラム
せっかくなので2次関数的に変化させています。
今後遠隔操作させることを考えて、ONとOFFを関数に分けて、変数もたくさん用意しました。
※素人が書いています。信用しないように。
const int ledPin = 5; //PWMピンの指定
static uint8_t brightness = 0; //明るさの初期値
const uint8_t brightnessMin = 0; //明るさの最小値(>=0)
const uint8_t brightnessMax = 127; //明るさの最大値(<=255)
const float powerTurnStep = 0.5; //明るさ変化度合(>0, <=255)
const int powerTurnDelay = 10; //明るさ変化の待ち時間ms
void setup() {
ledcSetup(0, 12800, 8); //PWMで利用するチャネルを設定
ledcAttachPin(ledPin, 0); //PWMで利用するピンとチャネルを結びつける
}
void loop() {
powerON();
powerOFF();
}
void powerON(){
float i;
if(brightness == 0){
brightness = brightnessMin;
}
i = round(255*brightness/brightnessMax);
while(brightness < brightnessMax){
brightness = round(i*i/255);
if(brightness > brightnessMax){
brightness = brightnessMax;
}
ledcWrite(0, brightness);
i+=powerTurnStep;
delay(powerTurnDelay);
}
}
void powerOFF(){
float i;
if(brightness == 0){
i = 0;
}else{
i = round(255*brightness/brightnessMax);
}
while(brightness > 0){
brightness = round(i*i/255);
if(brightness < brightnessMin){
brightness = 0;
}
ledcWrite(0, brightness);
i-=powerTurnStep;
delay(powerTurnDelay);
}
}
最後に
次はBluetoothで制御してみるか、アクアリウム用の照明に接続してみようと思います。