ESP32 チュートリアル 50/55 - 世界中のどこからでも RGB LED を制御する | SunFounder の ESP32 キット
このチュートリアルでは、ESP32マイクロコントローラを使用してWi-Fi経由でRGB LEDの色を制御する方法を学びます。MQTTプロトコルとAdafruit IOサービスを利用します。このセットアップにより、世界のどこからでもRGB LEDの色を変更でき、IoT技術の実用的なアプリケーションを提供します。また、スライダーやカラーピッカーを使用して希望の色を選択する方法についても探ります。

ESP32は強力なマイクロコントローラーで、内蔵のWi-FiとBluetooth機能を備えており、IoTプロジェクトに最適です。このビルドでは、ESP32にRGB LEDを接続し、Adafruitが提供するMQTTブローカーを通じてその色を制御します。チュートリアルでは、ハードウェアのセットアップ、配線の指示、およびすべてをシームレスに動作させるために必要なコードを案内します(ビデオは:00で)。
ハードウェアの解説
このプロジェクトでは、主なコンポーネントとしてESP32マイクロコントローラーとRGB LEDを使用します。ESP32はWi-Fiネットワークに接続できるため、Adafruit IOサービスと通信できます。RGB LEDは、赤、緑、青の3つの個別のLEDを含んでおり、それらを混ぜることで広範囲の色を作り出すことができます。
RGB LEDは共通アノードまたは共通カソードの原理で動作します。これは、各LEDのアノード(正)またはカソード(負)が正しく接続されている必要があることを意味します。各色はパルス幅変調(PWM)を使用して制御でき、デューティサイクルを変化させることで各LEDの明るさを調整します。
データシートの詳細
| メーカー | サンファウンダー |
|---|---|
| 部品番号 | RGB LED |
| 順方向電圧 (V)F) | 2.0-3.4 V |
| 前方電流 (IF) | 20 mA |
| ピーク波長 (nm) | 赤: 620, 緑: 525, 青: 465 |
| パッケージ | 標準4ピン |
| ノート / バリアント | 共通アノードまたは共通カソードのオプションが利用可能です |
- 各LEDの色に対して220オームの抵抗を使用して電流を制限してください。
- 正しい配線を共通アノードまたはカソード構成にしてください。
- ESP32の電源をチェックして、ブラウンアウトを避けてください。
- スムーズな色の遷移のために、PWM周波数を制限内に保ってください。
- Adafruit IOサービスに接続するには、Wi-Fiの認証情報が正しいことを確認してください。
配線指示書

RGB LEDをESP32に接続するには、まずRGB LEDのピンを特定します。最も長いピンが共通ピンです。共通アノード構成の場合、このピンを正電圧供給(3.3V)に接続します。他の3つのピンは赤、緑、青のLEDに対応しています。赤ピンをGPIO 27に、緑ピンをGPIO 26に、青ピンをGPIO 25に接続します。これらの接続はそれぞれ220オームの抵抗を介して行い、LEDを流れる電流を制限します。
次に、ESP32の接地(GND)を回路の接地線に接続します。接続が不安定にならないよう、配線がしっかりしていることを確認してください。共通カソードのRGB LEDを使用する場合は、共通ピンを接地に接続し、各色ピンを抵抗を介して正電源に接続します。回路に電源を入れる前に、すべての接続を再確認してください。
コード例とウォークスルー
Arduinoコードでは、識別子を使用して赤、緑、青のLEDのピンを定義することから始めます。redPin,greenPin, とbluePinさらに、各色のPWMチャネルを定義します。redChannel」greenChannel, とblueChannelPWM周波数は、8ビットの解像度で5000 Hzに設定されています。
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;中でsetup()関数では、PWMチャネルを初期化し、対応するピンに接続します。また、定義された認証情報を使用してWi-Fiネットワークに接続し、Adafruit IOとの通信のためにMQTTクライアントを設定します。
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// Connect to WiFi
WiFi.begin(WLAN_SSID, WLAN_PASS);
}メインループはMQTT接続をチェックし、受信したメッセージを処理します。また、現在のRGB値をシリアルモニターに表示します。LEDの色は、MQTTサブスクリプションを通じて受信した値に基づいて更新されます。
void loop() {
MQTT_connect();
mqtt.processPackets(500);
setColor();
}記事の下に読み込まれた完全なコードを参照して、完全なコードの詳細をご覧ください。
デモンストレーション / 何を期待するか
すべてが設定され、コードがアップロードされると、Adafruit IOダッシュボードを通じて行われた色の変更に対してRGB LEDが反応するのが見えるはずです。赤、緑、青のスライダーを調整すると、LEDはそれに応じて色を変更するはずです。問題が発生した場合は、Wi-Fi接続が安定していることと、MQTTトピック名がコードで定義されているものと一致していることを確認してください(動画の17:30)。
一般的な落とし穴には、誤った配線、不一致のトピック名、正しいWi-Fi認証情報を設定するのを忘れることが含まれます。LEDが点灯しない場合は、抵抗器の接続を再確認し、ESP32が正しく電源が供給されていることを確認してください。
動画のタイムスタンプ
- 00:00 開始
- 2:23 プロジェクトの紹介
- 4:43 MQTTとは何ですか
- 7:55 Adafruit IO セットアップ
- 14:09 配線の説明
- 16:07 コードの説明
- 27:03 Arduino IDEでESP32ボードとCOMポートを選択する
- 29:12 プロジェクトデモンストレーション
- 31:25 RGB LEDとは何ですか?
- 35:26 RGBカラー
/*
* これは、ESP32用のArduinoスケッチで、AdafruitのMQTTサービスを使用してRGB LEDを制御します。
* ビデオ指示 https://youtu.be/-9q1GfGsnr0
* 📚⬇️ ダウンロードとリソースページ https://robojax.com/RJT672
* 作成者 Ahamd Shamshiri
* 2024年2月18日
*
* Adafruit MQTTライブラリ ESP32 Adafruit IO SSL/TLSの例
*
* /// 参照: https://www.electronicwings.com/esp32/esp32-mqtt-client
* // RGB LEDピンを定義する
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// PWMチャネルを定義する
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
// PWM周波数と解像度を定義する
const int freq = 5000;
const int resolution = 8;
int colorR, colorG, colorB;
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* WiFiアクセスポイント *********************************/
*
* #define WLAN_SSID "ブック"
* #define WLAN_PASS "888-888"
*
* /************************* Adafruit.io セットアップ
*/
#define AIO_SERVER "io.adafruit.com"
// MQTTSのためにポート8883を使用しています。
#define AIO_SERVERPORT 8883
// Adafruit IOアカウント設定
// (これらの値を取得するには、https://io.adafruit.com にアクセスし、アクティブキーをクリックしてください)
// #define AIO_USERNAME "あなたのAdafruit IOユーザー名"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"
/*
* グローバルステート(変更する必要はありません!)******************/
*
* // SSL/TLS サポートのための WiFiFlientSecure
* WiFiClientSecure client;
*
* // WiFi クライアント、MQTT サーバー、およびログイン詳細を渡すことによって MQTT クライアントクラスをセットアップします。
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com ルート CA
* const char* adafruitio_root_ca = \
* "-----BEGIN CERTIFICATE-----\n"
* "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
* "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
* "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
* "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
* "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
* "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
* "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
* "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
* "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
* "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
* "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
* "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
* "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
* "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
* "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
* "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
* "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
* "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
* "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
* "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
* "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
* "-----END CERTIFICATE-----\n";
*/
// 'テスト'という名前の発行用フィードと、'テスト2'という名前の購読用フィードをセットアップします。
// AIOのMQTTパスは次の形式に従います: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe COLOR_R = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.red");
Adafruit_MQTT_Subscribe COLOR_G = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.green");
Adafruit_MQTT_Subscribe COLOR_B = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.blue");
Adafruit_MQTT_Subscribe COLOR_RGB = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/color-picker");
Common Course Links
Common Course Files
リソースと参考文献
まだリソースはありません。
ファイル📁
ファイルは利用できません。