#374СреднийIoT

IoT RGB-лента на ESP32 (WS2812B)

Управляй светом в комнате с телефона: выбирай цвет, задавай яркость, включай эффект радуги или дыхания. Этот проект — пошаговое руководство к IoT-шаблону «RGB-лента» в приложении, собранному на ESP32 и ленте WS2812B из 30 светодиодов с тремя проводами. Открой Мастерская › Устройства › Добавить устройство и выбери «RGB-лента»; Ohmi подготовит код с твоим собственным ключом устройства. Код на этой странице — пример: ключ и данные Wi-Fi в нём заглушки.

0.0(0)
IoT RGB-лента на ESP32 (WS2812B)
Если хочешь наклеить светодиодную ленту за стол, под кровать или вдоль полки и управлять ею с телефона, этот проект для тебя. В приложении ты выбираешь любой цвет на цветовом круге, задаёшь яркость ползунком и меняешь настроение комнаты эффектами радуги, дыхания или мигания. Каждый светодиод можно настроить отдельно, поэтому цвета текут по ленте. Код за тебя готовит приложение; ты только подключаешь три провода и загружаешь его. Без сетевого напряжения, только 5 V.
IoT · удалённое управлениеПервое устройство бесплатно

Управляй этим устройством из приложения

Подключи ESP32 или Raspberry Pi Pico W к Wi-Fi — и включай, выключай и смотри показания в реальном времени с телефона. Код готовит Ohmi, тебе остаётся ввести данные Wi-Fi и загрузить его.

Шаблон в приложении: RGB-лента

  • Где это в приложении?Добавь новое устройство на вкладке «Утилиты» или в разделе «Мастерская › Устройства» и выбери этот шаблон.
  • Библиотека ArduinoОткрой менеджер библиотек в Arduino IDE, найди BlueGraysIoT и установи её.
Скачать приложение бесплатно

В бесплатном плане — 1 устройство, 1 график и история за 24 часа. С Premium — больше устройств и графиков и более длинная история.

Схема

IoT RGB-лента на ESP32 (WS2812B) - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   IoT RGB-лента на ESP32 (WS2812B)
4// ─────────────────────────────────────────
5// IoT-шаблон "RGB-лента" из приложения BlueGrays: меняй с телефона свет,
6// цвет, яркость и эффект (сплошной, радуга, дыхание, мигание) ленты
7// WS2812B из 30 светодиодов. Настоящий код Ohmi готовит в приложении с
8// твоим собственным ключом устройства (Мастерская › Устройства › Добавить
9// устройство); код здесь — пример, ключ устройства и данные Wi-Fi —
10// заглушки. Library Manager: BlueGraysIoT (с зависимостями) и Adafruit
11// NeoPixel. Плата подключается только к сетям Wi-Fi 2.4 GHz. Для 30
12// светодиодов на полной яркости питай ленту от отдельного адаптера 5 V 2 A
13// и соедини земли.
14//
15// Пины:
16//   GPIO13 -> DIN ленты WS2812B
17//   5V, GND -> Лента 5V, GND
18//   Pico W: DIN ленты GP2, 5V VBUS
19
20/*
21 * RGB-лента · BlueGrays IoT
22 * BlueGrays · bluegrays.com
23 * Не делись этим кодом: в нём ключ твоего устройства и пароль Wi-Fi.
24 */
25
26#include <BlueGraysIoT.h>
27#include <Adafruit_NeoPixel.h>  // Library Manager: 'Adafruit NeoPixel'
28
29const char *DEVICE_KEY = "YOUR_DEVICE_KEY";
30const char *WIFI_NAME = "YOUR_WIFI_NAME";
31const char *WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";
32
33BlueGraysIoT bg(DEVICE_KEY);
34
35const int LED_COUNT = 30;
36Adafruit_NeoPixel strip(LED_COUNT, 13, NEO_GRB + NEO_KHZ800);
37bool isOn = false; uint8_t cr = 255, cg = 255, cb = 255; int brightness = 70; String effect = "sabit";
38void paint() {
39  strip.setBrightness(isOn ? map(brightness, 0, 100, 0, 255) : 0);
40  for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.Color(cr, cg, cb));
41  strip.show();
42}
43
44void setup() {
45  Serial.begin(115200);
46  strip.begin();
47  paint();
48  bg.onSwitch("acik", [](bool on) { isOn = on; paint(); });
49  bg.onColor("renk", [](uint8_t r, uint8_t g, uint8_t b) { cr = r; cg = g; cb = b; paint(); });
50  bg.onNumber("parlaklik", [](float v) { brightness = (int)v; paint(); });
51  bg.onChoice("efekt", [](const char *e) { effect = e; paint(); });
52  bg.setDebug(Serial);
53  bg.setLanguage(BG_LANG_EN);
54  bg.begin(WIFI_NAME, WIFI_PASSWORD);
55}
56
57void loop() {
58  bg.loop();  // избегай здесь долгих вызовов delay()
59  if (isOn && effect == "gokkusagi") {
60    static uint16_t hue = 0; hue += 64;
61    for (int i = 0; i < LED_COUNT; i++) strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue + i * 2000)));
62    strip.show(); delay(5);
63  } else if (isOn && effect == "nefes") {  // медленно гаснет и загорается
64    float wave = (sin(millis() / 600.0) + 1.0) / 2.0;
65    strip.setBrightness((uint8_t)(map(brightness, 0, 100, 0, 255) * (0.15 + 0.85 * wave)));
66    strip.show(); delay(10);
67  } else if (isOn && effect == "yanip_sonme") {  // мигает каждые полсекунды
68    strip.setBrightness((millis() / 500) % 2 ? map(brightness, 0, 100, 0, 255) : 0);
69    strip.show(); delay(10);
70  }
71}
72

Частые вопросы

Можно ли загрузить код с этой страницы прямо на плату?

Можно, но подключения не будет: ключ устройства и данные Wi-Fi в нём — заглушки. В приложении открой Мастерская › Устройства › Добавить устройство и выбери «RGB-лента»; Ohmi подготовит код с твоим ключом, именем сети и паролем. Скопируй этот код и загрузи его. Полный код позже можно посмотреть в разделе Устройство › Код и ключ.

Работает ли это с Pico W?

Да. При добавлении устройства выбери плату Pico W; код остаётся тем же, меняется только пин данных: DIN ленты идёт к GP2, 5V — к VBUS, а GND — к GND. В Arduino IDE установи пакет «pico» из менеджера плат и Adafruit NeoPixel из менеджера библиотек. Схема и фото на этой странице сделаны с ESP32.

Можно ли питать ленту от USB?

Для коротких проверок да, но осторожно: каждый светодиод на полном белом потребляет около 60 mA, так что 30 светодиодов на полной яркости могут дойти до 1,8 A. Это больше, чем выдержат USB и плата. Для долгой работы или большой яркости питай ленту от отдельного адаптера 5 V 2 A и соедини GND адаптера с GND платы. Код рассчитан на 30 светодиодов; если твоя лента длиннее, измени LED_COUNT и подбери адаптер соответственно.

Что можно менять в приложении?

На экране устройства четыре элемента управления: переключатель «Свет» включает и выключает ленту, выбор «Цвет» красит все светодиоды одним цветом, ползунок «Яркость» идёт от 0 до 100, а список «Эффект» предлагает «Ровный», «Радуга», «Дыхание» или «Мигание». После отключения питания твои последние цвет, яркость и эффект возвращаются, как только плата снова подключится.