ESP32 IoT RGB LEDテープ(WS2812B)
部屋の明かりをスマホで操作しましょう。色を選び、明るさを調整し、レインボーや呼吸のエフェクトもつけられます。このプロジェクトは、アプリのIoTテンプレートRGB LED テープの手順ガイドです。ESP32と30個のLEDがついたWS2812Bテープを3本の線でつないで組み立てます。マイ工房 › デバイス › デバイスを追加からRGB LED テープを選ぶと、Ohmiがあなたのデバイスキーでコードを用意します。このページのコードは見本で、キーとWi-Fi情報は仮の値です。

このデバイスをアプリから操作しよう
ESP32 または Raspberry Pi Pico W を Wi-Fi につなげば、スマホからオン/オフでき、計測値をリアルタイムで見られます。コードは Ohmi が用意するので、Wi-Fi 情報を入力して書き込むだけです。
アプリのテンプレート:RGB LED テープ
- アプリのどこにある?ツールタブ、またはマイ工房 › デバイスから新しいデバイスを追加し、このテンプレートを選びます。
- Arduino ライブラリArduino IDE でライブラリマネージャを開き、BlueGraysIoT を検索してインストールします。
無料プランは 1 デバイス、1 グラフ、24 時間の履歴。プレミアムならデバイスとグラフを増やし、履歴も長く残せます。
回路図

ソースコード
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 IoT RGB LEDテープ(WS2812B)
4// ─────────────────────────────────────────
5// BlueGraysアプリのIoTテンプレート「RGB LED
6// テープ」です。30個のLEDがついたWS2812Bテープのライト、色、明るさ、エフェクト(点灯、レインボー、呼吸、点滅)をスマホから変えられます。本物のコードは、アプリの中でOhmiがあなたのデバイスキーを使って用意します(マイ工房›デバイス›デバイスを追加)。ここにあるコードは見本で、デバイスキーとWi-Fi情報は仮の値です。ライブラリマネージャ:BlueGraysIoT(依存ライブラリも一緒に)とAdafruit
7// NeoPixel。ボードは2.4GHzのWi-Fiにだけつながります。30個を最大の明るさで光らせるなら、テープは別の5V
8// 2Aアダプターから電源をとり、GNDをつなげてください。
9//
10// ピン:
11// GPIO13 -> WS2812B テープ DIN
12// 5V, GND -> テープ 5V, GND
13// Pico W:テープ DIN GP2、5V VBUS
14
15/*
16 * RGB LED テープ · BlueGrays IoT
17 * BlueGrays · bluegrays.com
18 * このコードは共有しないでください。デバイスキーとWi-Fiのパスワードが含まれています。
19 */
20
21#include <BlueGraysIoT.h>
22#include <Adafruit_NeoPixel.h> // ライブラリマネージャー:「Adafruit NeoPixel」
23
24const char *DEVICE_KEY = "デバイスキー";
25const char *WIFI_NAME = "Wi-Fiの名前";
26const char *WIFI_PASSWORD = "Wi-Fiのパスワード";
27
28BlueGraysIoT bg(DEVICE_KEY);
29
30const int LED_COUNT = 30;
31Adafruit_NeoPixel strip(LED_COUNT, 13, NEO_GRB + NEO_KHZ800);
32bool isOn = false; uint8_t cr = 255, cg = 255, cb = 255; int brightness = 70; String effect = "sabit";
33void paint() {
34 strip.setBrightness(isOn ? map(brightness, 0, 100, 0, 255) : 0);
35 for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.Color(cr, cg, cb));
36 strip.show();
37}
38
39void setup() {
40 Serial.begin(115200);
41 strip.begin();
42 paint();
43 bg.onSwitch("acik", [](bool on) { isOn = on; paint(); });
44 bg.onColor("renk", [](uint8_t r, uint8_t g, uint8_t b) { cr = r; cg = g; cb = b; paint(); });
45 bg.onNumber("parlaklik", [](float v) { brightness = (int)v; paint(); });
46 bg.onChoice("efekt", [](const char *e) { effect = e; paint(); });
47 bg.setDebug(Serial);
48 bg.setLanguage(BG_LANG_EN);
49 bg.begin(WIFI_NAME, WIFI_PASSWORD);
50}
51
52void loop() {
53 bg.loop(); // ここで長いdelay()は使わないでください
54 if (isOn && effect == "gokkusagi") {
55 static uint16_t hue = 0; hue += 64;
56 for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue + i * 2000)));
57 strip.show(); delay(5);
58 } else if (isOn && effect == "nefes") { // ゆっくり暗くなったり明るくなったりします
59 float wave = (sin(millis() / 600.0) + 1.0) / 2.0;
60 strip.setBrightness((uint8_t)(map(brightness, 0, 100, 0, 255) * (0.15 + 0.85 * wave)));
61 strip.show(); delay(10);
62 } else if (isOn && effect == "yanip_sonme") { // 0.5秒ごとに点滅します
63 strip.setBrightness((millis() / 500) % 2 ? map(brightness, 0, 100, 0, 255) : 0);
64 strip.show(); delay(10);
65 }
66}
67よくある質問
このページのコードをそのままボードに書き込めますか?
書き込めますが、接続はできません。コードの中のデバイスキーとWi-Fi情報は仮の値です。アプリでマイ工房 › デバイス › デバイスを追加を開き、RGB LED テープを選ぶと、Ohmiがあなたのキー、ネットワーク名、パスワードでコードを用意します。そのコードをコピーして書き込みましょう。コード全体はあとからデバイス › コードとキーでも見られます。
Pico Wでも使えますか?
使えます。デバイスを追加するときにボードとしてPico Wを選んでください。コードは同じで、データのピンだけが変わります。テープのDINはGP2、5VはVBUS、GNDはGNDです。Arduino IDEのボードマネージャで「pico」パッケージを、ライブラリマネージャでAdafruit NeoPixelをインストールします。このページの回路と写真はESP32で作りました。
テープの電源はUSBからとれますか?
短い試しなら大丈夫ですが、注意が必要です。LEDは真っ白で1個あたり約60 mA流れるので、30個を最大の明るさにすると1.8 Aにもなります。これはUSBやボードが流せる量をこえています。長く使うときや明るくするときは、テープを別の5 V 2 Aアダプターからとり、アダプターのGNDをボードのGNDにつないでください。コードは30個用です。テープがもっと長いならLED_COUNTを変え、それに合うアダプターを選びます。
アプリでは何を変えられますか?
デバイス画面には4つの操作があります。ライトのスイッチでテープをオン・オフし、色の選択ですべてのLEDを同じ色にし、明るさのスライダーで0から100まで調整し、エフェクトの一覧から点灯、レインボー、呼吸、点滅を選びます。停電のあとも、ボードがつながり直すとすぐに最後の色、明るさ、エフェクトに戻ります。
