Как подключить ленту WS2812B к ESP32

Блок 5 В 4 А, 74AHCT125 и 330 Ом на DIN.

Схема подключения

Открыть в конструкторе

Соединения

ШагОткудаКудаЦвет
1ESP32 DOIT GNDБлок 5 В 4 А −чёрный
2Блок 5 В 4 А −WS2812B GNDчёрный
3Блок 5 В 4 А −74AHCT125 GNDчёрный
474AHCT125 1OE74AHCT125 GNDчёрный
574AHCT125 2OE74AHCT125 GNDчёрный
674AHCT125 2A74AHCT125 GNDчёрный
774AHCT125 4OE74AHCT125 GNDчёрный
8ESP32 DOIT VINБлок 5 В 4 А +красный
9Блок 5 В 4 А +WS2812B +5Vкрасный
10Блок 5 В 4 А +74AHCT125 VCCкрасный
11ESP32 DOIT D1874AHCT125 1Aбелый
1274AHCT125 3A74AHCT125 3OEбелый
1374AHCT125 4A74AHCT125 4OEбелый
1474AHCT125 3OE74AHCT125 4OEбелый
15Блок 5 В 4 А +Электролит 1 000 мкФ 10 В +красный
16Блок 5 В 4 А −Электролит 1 000 мкФ 10 В −чёрный
1774AHCT125 1YРезистор 330 Ом 1белый
18Резистор 330 Ом 2WS2812B DINбелый

Проверка питания и проводов

  • Проверка схемы, та же, что в конструкторе, не нашла ошибок: напряжения выводов совпадают, земля общая, шины подключены целиком.
  • WS2812B берёт до 3600 мА (обычно около 1200) с вывода + Блок 5 В 4 А, вывод даёт около 4000 мА: блок 5 В 4 А (Mean Well GST25E05: 20 Вт).
  • 74AHCT125 берёт до 2 мА (обычно около 1) с вывода + Блок 5 В 4 А, вывод даёт около 4000 мА: блок 5 В 4 А (Mean Well GST25E05: 20 Вт).

Ток всей схемы и сколько она проработает от аккумулятора: расчёт питания. Где что втыкать: схема на макетке.

Пример кода

Arduino IDE, Adafruit NeoPixel 1.12.

#include <Adafruit_NeoPixel.h>

const int PIN = 18;    // GPIO18 через 74AHCT125 и 330 Ом на DIN
const int COUNT = 60;  // светодиодов на ленте

Adafruit_NeoPixel strip(COUNT, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  // 80 из 255: на белом лента берёт около 1,1 А вместо 3,6 А
  strip.setBrightness(80);
  strip.show();
}

void loop() {
  static uint16_t hue = 0;
  strip.rainbow(hue);
  strip.show();
  hue += 256;
  delay(20);
}

Распиновки деталей

Как подключено

Лента WS2812B на 60 светодиодов питается от блока 5 В 4 А. На белом цвете полной яркости один светодиод берёт до 60 мА (руководство Adafruit по NeoPixel), метр ленты до 3,6 А. Вывод VIN платы ESP32 DevKit при питании от USB даёт около 300 мА, поэтому плюс ленты идёт от блока, и VIN платы питается от того же блока. Минус блока соединён с GND ленты и GND ESP32: без общего минуса лента не принимает данные.

При питании 5 В лента WS2812B считает единицей сигнал от 0,7 × 5 = 3,5 В (даташит Worldsemi), а GPIO ESP32 выдаёт 3,3 В. Чтобы лента надёжно принимала данные, между GPIO18 и лентой стоит буфер 74AHCT125 с питанием 5 В. Его вход считает единицей уже 2 В, выход 1Y выдаёт 5 В и идёт на DIN через резистор 330 Ом у начала ленты. Вывод 1OE соединён с землёй, он включает выход. Неиспользуемые входы 2A, 3A, 4A и выводы 2OE, 3OE, 4OE тоже на земле, так требует даташит TI.

Электролит 1000 мкФ на 10 В стоит между плюсом и минусом у начала ленты. Adafruit советует ставить 500-1000 мкФ, чтобы бросок тока при включении блока не повредил первые светодиоды. Минус конденсатора отмечен полосой на корпусе.

Примеры

  • В скетче яркость 80 из 255. На белом лента берёт около 3,6 А × 80 / 255 = 1,1 А.

Частые ошибки

  • DIN подключают к GPIO ESP32 без буфера. С частью лент это работает, но по даташиту 3,3 В ниже порога 3,5 В, и первые светодиоды могут получать неверные данные. Конструктор ставит на такой провод замечание.
  • Ленту питают от вывода 5V или VIN платы. Через этот вывод идёт ток USB, а 60 светодиодов на белом берут до 3,6 А. Конструктор ставит ошибку по току.
  • Берут 74HC125 без буквы T. При питании 5 В он считает единицей сигнал примерно от 3,5 В и 3,3 В от ESP32 надёжно не принимает. Подходят 74AHCT125, 74HCT125 и 74HCT245.
  • Провод данных идёт на DO в конце отрезка. Данные проходят по ленте только по стрелке, вход DIN у начала.

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

Можно ли обойтись без 74AHCT125?
С коротким проводом лента часто работает и от 3,3 В, но даташит Worldsemi такой уровень не обещает. Другой способ: питать первый светодиод через диод 1N4007. Тогда у него около 4,3 В на питании и порог единицы около 3 В, а его выход DO даёт около 4,3 В, этого хватает следующим светодиодам.
Сколько светодиодов потянет блок 5 В 4 А?
На полной белой яркости 4 А / 60 мА = 66 светодиодов. С яркостью 80 из 255, как в примере, ток в 3 раза меньше. Для длинной ленты блок и сечение провода считает калькулятор блока питания ленты.
Можно ли прошивать ESP32 по USB, пока лента подключена к блоку?
Да. На плате DOIT между разъёмом USB и выводом VIN стоит диод, и 5 В блока в компьютер не уходят.
Какой GPIO брать для ленты?
GPIO с выходом, кроме strapping-пинов 0, 2, 5, 12 и 15 и пинов flash 6-11. GPIO34-39 работают только на вход и для ленты не годятся. В коде номер меняется в строке PIN.

Пригодится ещё