#374中級IoT

ESP32 IoT RGB LEDテープ(WS2812B)

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

0.0(0)
ESP32 IoT RGB LEDテープ(WS2812B)
机のうしろやベッドの下、棚のふちにLEDテープをはって、スマホから光を操作したい人にぴったりのプロジェクトです。アプリのカラーホイールで好きな色を選び、スライダーで明るさを決め、レインボー、呼吸、点滅のエフェクトで部屋の雰囲気を変えられます。LEDをひとつずつ制御できるので、色がテープにそって流れます。コードはアプリが用意するので、あなたは3本の線をつないで書き込むだけ。家庭用電源は使わず、5 Vだけで動きます。
IoT · リモート操作最初のデバイスは無料

このデバイスをアプリから操作しよう

ESP32 または Raspberry Pi Pico W を Wi-Fi につなげば、スマホからオン/オフでき、計測値をリアルタイムで見られます。コードは Ohmi が用意するので、Wi-Fi 情報を入力して書き込むだけです。

アプリのテンプレート:RGB LED テープ

  • アプリのどこにある?ツールタブ、またはマイ工房 › デバイスから新しいデバイスを追加し、このテンプレートを選びます。
  • Arduino ライブラリArduino IDE でライブラリマネージャを開き、BlueGraysIoT を検索してインストールします。
アプリを無料でダウンロード

無料プランは 1 デバイス、1 グラフ、24 時間の履歴。プレミアムならデバイスとグラフを増やし、履歴も長く残せます。

回路図

ESP32 IoT RGB LEDテープ(WS2812B) - Circuit

ソースコード

C++ (Arduino IDE)
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まで調整し、エフェクトの一覧から点灯、レインボー、呼吸、点滅を選びます。停電のあとも、ボードがつながり直すとすぐに最後の色、明るさ、エフェクトに戻ります。