ESP32チュートリアル 34/55 - RGB LEDとノブを使ったカラ―グラデーション | SunFounderのESP32 IoT学習キット
このチュートリアルでは、ポテンショメーター(つまみ)の位置に基づいて調整されるRGB LEDを使用して、カラーグラデーション効果を作成します。このプロジェクトでは、内蔵のWi-FiとBluetooth機能を備えたESP32マイクロコントローラーを利用し、IoTプロジェクトにとって柔軟な選択肢となっています。ポテンショメーターを回すことで、異なる色の間をスムーズに遷移させ、RGB LEDの機能とポテンショメーターからアナログ値を読み取る能力を示します。

このプロジェクトは、PWM(パルス幅変調)やマイクロコントローラーを使ったアナログデバイスの制御について学ぶのに最適です。このチュートリアルでは、必要なハードウェアコンポーネント、配線手順について説明し、プロジェクトの実装に役立つコードスニペットを提供します。より視覚的な説明が必要な場合は、関連するビデオ(ビデオの中で:15)を必ずご覧ください。
ハードウェアの説明
このプロジェクトで使用される主なコンポーネントには、ESP32マイコン、RGB LED、およびポテンショメータが含まれます。ESP32は強力なマイコンであり、無線通信を含むさまざまなタスクを処理できるため、IoTアプリケーションに適しています。RGB LEDは、赤、緑、青の3つの個別のLEDで構成されており、これを混ぜることで幅広い色を生成できます。ポテンショメータは、位置に応じて可変電圧出力を提供する可調抵抗として機能します。
RGB LEDは2つの構成で接続できます:共通陽極または共通陰極です。このプロジェクトでは、すべての陽極が一緒に正電圧に接続されている共通陽極構成を使用し、PWMを使用して各LEDの明るさを個別に制御できるようにします。ポテンショメーターはESP32のアナログ入力に接続され、その位置を読み取り、RGB値をそれに応じて調整します。
データシートの詳細
| 製造者 | サンファウンダー |
|---|---|
| 部品番号 | RGB LED |
| 論理/入出力電圧 | 3.3 V |
| 供給電圧 | 5 V |
| 出力電流(チャネルごと) | 20 mA |
| ピーク電流(チャネルごと) | 30 mA |
| PWM周波数ガイダンス | 5 kHz |
| 入力ロジックしきい値 | 0.3 V(低)/ 2.7 V(高) |
| 電圧降下 / RDS(on)/ 飽和 | 1.8 V(典型値) |
| 熱的限界 | 動作温度:-40°C から +85°C |
| パッケージ | 貫通穴 |
| ノート / バリアント | 共通アノード構成 |
- 各LEDチャネルに220オームの抵抗を使用して電流を制限します。
- RGB LEDに対して適切な電源電圧(5V)を確保してください。
- 共通アノードを正の電圧供給に接続します。
- 各LEDの色の明るさを制御するためにPWMを使用します。
- ポテンショメータの接続には注意し、フローティング入力を避けてください。
- コードをアップロードする前に、ESP32が正しく電源供給されているか確認してください。
配線指示
RGB LEDとポテンショメーターをESP32に接続するには、まずRGB LEDの共通アノードピンをESP32の3.3V電源ピンに接続します。RGB LEDの赤、緑、青ピンはピンに接続します。27,26, と25それぞれ。各LEDの色ピンには220オームの抵抗を直列に接続して、電流を制限しLEDを保護してください。
次に、ポテンショメーターをESP32に接続します。左のピンを3.3V電源ピンに、右のピンをグラウンドに、中央のピンを接続します。14ESP32上で。この構成により、ESP32はポテンショメーターからのアナログ電圧を読み取ることができ、その位置に応じてRGB LEDの色を調整するために使用されます。
コード例とウォークスルー
セットアップ関数では、RGB LEDとポテンショメーターのピンを定義し、PWM設定を初期化します。以下のコードスニペットは、RGB LEDのピンをどのように設定するかを示しています。
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
void setup() {
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}このスニペットでは、赤、緑、青のLEDのピンを定義し、定義された周波数と解像度のPWMチャネルに接続します。
ループ関数はポテンショメーターの値を読み取り、それを色相値に変換します。これはRGB値を決定するために使用されます。以下の抜粋はこのプロセスを示しています。
void loop() {
int knobValue = analogRead(KNOB_PIN);
float hueValue = (float)knobValue / 4095.0;
int hue = (int)(hueValue * 360);
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
setColor(red, green, blue);
}このコードはポテンショメーターからアナログ値を読み取り、それを正規化し、対応する色相を計算します。次に、それを呼び出します。HUEtoRGB色相をRGB値に変換する関数で、それが渡されますsetColorLEDを更新するための関数。
デモンストレーション / 期待すること
配線とコードのアップロードが完了したら、ポテンショメーターを回してRGB LEDの色を滑らかに変えることができるはずです。ノブを回すと、LEDはノブの位置から計算された色相値に基づいてさまざまな色に移行します。LEDが点灯しない場合や予期しない動作をする場合は、配線を確認し、ポテンショメーターが正しく接続されていることを確認してください(動画の10:45に)。
動画のタイムスタンプ
- 00:00 スタート
- 2:11 プロジェクトの紹介
- 4:31 RGB LED
- 8:18 RGBカラー
- 12:18 配線の説明
- 17:59 Arduino コードの説明
- 24:12 Arduino IDEでESP32ボードとCOMポートを選択する
- 25:54 デモンストレーション
/*
* // RGB LEDピンを定義する
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// PWM周波数と解像度を定義する
const int freq = 5000;
const int resolution = 8;
// ノブのピンを定義する
#define KNOB_PIN 14
void setup() {
Serial.begin(115200);
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// ノブの値を読み取る
int knobValue = analogRead(KNOB_PIN);
Serial.println(knobValue);
// ノブの値を0から1の範囲に正規化します。
float hueValue = (float)knobValue / 4095.0;
// 正規化された値をHUE値(0-360)に変換します。
int hue = (int)(hueValue * 360);
// HUE値をRGB値に変換する
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
// 新しいカラー値でRGB LEDを更新してください。
setColor(red, green, blue);
}
void setColor(int red, int green, int blue) {
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
// HUE値をRGB値に変換する
void HUEtoRGB(int hue, int* red, int* green, int* blue) {
float h = (float)hue / 60.0;
float c = 1.0;
float x = c * (1.0 - fabs(fmod(h, 2.0) - 1.0));
float r, g, b;
if (h < 1.0) {
r = c;
g = x;
b = 0;
} else if (h < 2.0) {
r = x;
g = c;
b = 0;
} else if (h < 3.0) {
r = 0;
g = c;
b = x;
} else if (h < 4.0) {
r = 0;
g = x;
b = c;
} else if (h < 5.0) {
r = x;
g = 0;
b = c;
} else {
r = c;
g = 0;
b = x;
}
float m = 1.0 - c;
*red = (int)((r + m) * 255);
*green = (int)((g + m) * 255);
*blue = (int)((b + m) * 255);
}
Common Course Links
Common Course Files
リソースと参考文献
-
ドキュメンテーションESP32 チュートリアル 34/55 - SunFounder のカラーブラデントのドキュメントページdocs.sunfounder.com
ファイル📁
ファイルは利用できません。