ESP8266 + WS2812

artem.barovik

✩✩✩✩✩✩✩
21 Окт 2022
20
1
Здравствуйте! Пытаюсь сделать проект с адресной лентой. Суть проблемы в следующем: плата nodemcu(esp8266) при выводе на ленту горит только первый светодиод или лента себя не адекватно ведет. В статье AlexGyvera(https://alexgyver.ru/ws2812_guide/) предлагается сделать конвертер лог. уровня. Сделал пример из библиотеки FastLed нормально заработал. Но то же самое не работает в моем коде. Подскажите, пожалуйста, в чем может быть проблема. И почему проект огненая лампа от гайвера на WEMOS работает без всяких ухищрений по поводу конвертации лог. уровня и тому подобного.
 

poty

★★★★★★✩
19 Фев 2020
3,270
950
@artem.barovik, очевидно, что проблема в Вашем коде, а что Вы хотели ещё услышать?
Конвертация логических уровней должна быть, если говорить по хорошему, но так как уровни иногда (строго говоря, в большинстве случаев) "считываются" без преобразования, то все на это забивают.
В лампе, возможно, для сдвига используют диод. Сейчас столько версий, что все не упомнишь.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Никакой там конвертер уровней не нужен, согласно документации, напряжение логики должно быть от 3,15 до 3,85 Вольт, так что проблема в коде
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
@IamNikolay, В большинстве случаев да, работает без преобразователей(есть теория почему так происходит, но на практике пока проверять лень), но ...
У WS2812 вход логической 1-цы от 0.7*Vdd, а это 3.5 В, что в принципе уже не укладывается в стандарты 3-вольтовой логики. Мало того, по стандарту 3-вольтовой логики минимальный уровень выхода логической 1-цы от 2.4 В.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@Геннадий П, 3.5 В входит в указанный мною диапазон от 3,15до 3,85 В., который получил из даташита на 2812.
Логика есп8266 - не 3 Вольтовая, а 3,3 Вольтовая (типовая, хотя может достигать 3,6 В) , 3,3 В тоже входят в диапазон логической 1 чипа ws2812.
стандарту 3-вольтовой логики
Что это за стандарт такой и какое отношение он имеет к ws2812 и esp8266 ?!
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
Логика есп8266 - не 3 Вольтовая, а 3,3 Вольтовая
Ну, 3.3-вольтовая, если хочешь позанудничать. Ты забыл еще сказать, что 3-вольтовой логики не существует. :geek:
Что это за стандарт такой и какое отношение он имеет к ws2812 и esp8266 ?!
Обычные стандарты.

1675089072883.png
(даже 2.64 В, а не 2.4 В)
 

poty

★★★★★★✩
19 Фев 2020
3,270
950
@IamNikolay, datasheet-ов на WS2812 великое множество. @Геннадий П, тоже привёл своё "вход логической 1-цы от 0.7*Vdd" из datasheet на WS2812 (который видел и я в том числе).
 

artem.barovik

✩✩✩✩✩✩✩
21 Окт 2022
20
1
@IamNikolay,тогда почему не работает вот этот простой пример. Отдавая команды на ленту на прямую с пина платы?
C++:
#define NUM_LEDS 8
#include "FastLED.h"
#define PIN D4
CRGB leds[NUM_LEDS];
byte counter;
void setup() {
  FastLED.addLeds<WS2812B, PIN, RGB>(leds, NUM_LEDS);
  FastLED.setBrightness(50);
 
}
void loop() {
  for (int i = 0; i < NUM_LEDS; i++ ) {         // от 0 до первой трети
    leds[i] = CHSV(counter + i * 2, 255, 255);  // HSV. Увеличивать HUE (цвет)
    // умножение i уменьшает шаг радуги
  }
  counter++;        // counter меняется от 0 до 255 (тип данных byte)
  FastLED.show();
  delay(20);         // скорость движения радуги
}
 

artem.barovik

✩✩✩✩✩✩✩
21 Окт 2022
20
1
Можете подсказать, еще на всякий случай, какой версией библиотеки пользуетесь, и какой версией ядра для ESP&
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@Геннадий П,
@poty,
логические уровни, что в ws2812 что в esp8266 - зависят от питающего напряжения.
Логическая единица для ws2812 может приниматься от 3,15 до 3,85 В (в зависимости от питания 4.5~5.5V)
Логическая единица для esp8266 может приниматься от 2 до 3,6 В (в зависимости от питания 2.5~3.6V)
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@artem.barovik, поменяйте пин на д2 или д1, к д4 подключен встроенный светодиод, который может влиять на работу.
Версий библиотеки у меня несколько и некоторые редактировал

P.S. сам код - рабочий
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
Логическая единица для esp8266 может приниматься от 2 до 3,6 В (в зависимости от питания 2.5~3.6V)
Вы же не будете заниматься перепаиванием стабилизатора на плате для увеличения напряжения питания на ESP специально под WS?
Даже если предположить что на ленту поступает пониженное напряжение, то все равно шанс что уровни совпадут довольно маленький.
Поэтому стабильной работы при таком варианте лучше не ждать.

Чтобы понятней было, нарисую на картинке разброс напряжений на выходе ESP и требуемое напряжение на WS(пунктиром - это при пониженном напряжении питания).
1675095760753.png
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@Геннадий П,
Чтобы понятней было, нарисую на картинке разброс напряжений на выходе ESP и требуемое напряжение на WS(пунктиром - это при пониженном напряжении питания).
тогда нарисуйте и пониженное напряжение есп пунктиром.
при питании esp8266 3,3 В(сотые не учитываю, т.к. есть разброс по стабилизаторам) уровни 3,3 В
при питании ws2812 5 В - уровни 3,5 В.

разница всего 0,2 В. - это ничто, конвертер уровней не нужен.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
разница всего 0,2 В. - это ничто, конвертер уровней не нужен.
Нужна не разница "всего 0.2 В", а чтобы при любом допустимом выходном напряжении логической 1-цы из ESP это напряжение попадало в допустимые входные пределы WS. А тут от силы попадает в 50% случаев, и то при пониженном питании WS и повышенном питании ESP.
В большинстве случаев ESP выдает напряжение близкое к максимальному. А вот попадется партия с пониженным выходным напряжением, и от нее уже лента не будет работать без конвертора.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
при любом допустимом выходном напряжении логической 1-цы из ESP это напряжение попадало в допустимые входные пределы WS.
это смешно!
контроллер и лента подключается к 1 БП., если питать esp8266 минимальным значением 2,5 В, то на ленте будет от силы 3-3,5 В, что уже никак не входит в диапазон рабочего напряжения ленты 4.5~5.5 В.

а при нормальных условиях разница всего 0,2 В, которые значения не имеют
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
контроллер и лента подключается к 1 БП., если питать esp8266 минимальным значением 2,5 В, то на ленте будет от силы 3-3,5 В, что уже никак не входит в диапазон рабочего напряжения ленты 4.5~5.5 В.
Какой то бред написан. На плате(Wemos) контроллера стоит стабилизатор, который стабилизирует входящее напряжение(как правило 5 В) до рабочих 3.3 В необходимые для питания ESP. И если на него подать пониженное напряжение 4.5 В, то на выходе все равно окажется 3.3 В.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Какой то бред написан. На плате(Wemos) контроллера стоит стабилизатор, который стабилизирует входящее напряжение(как правило 5 В) до рабочих 3.3 В необходимые для питания ESP. И если на него подать пониженное напряжение 4.5 В, то на выходе все равно окажется 3.3 В.
вот именно что бред пишите, со своей шкалой, отсюда и ваши заблуждения в рассуждениях.
При минимально рабочем напряжении ws2812 - логический уровень esp8266 будет принадлежать области ws2812
1675101305973.png

Если на выходе стабилизатора esp8266 нет 3,3 вольт, а только 2,5 В(мин. предел рабочего напряжения), то на входе (ленте) будет от силы 3-3,5 В и лента работать не будет, по этому нет смысла учитывать уровень esp8266 при пониженном напряжении!!!
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@Геннадий П, что за детский сад? А впрочем, научитесь читать даташиты и внимательно изучите схему! Возможно тогда поймете что стабилизатор стоит понижающий!!!
 

poty

★★★★★★✩
19 Фев 2020
3,270
950
@IamNikolay, при питании ESP8266 от штатного стабилизатора, выдающего 3,3В, он никогда не сможет выдать 3,6В в логической единице, поэтому красный интервал неверен. Поднимать напряжение на готовой плате вряд ли кому придёт в голову.
Почему Вы считаете, что кто-то должен заниматься подгонкой напряжения на WS2812? Есть БП 5В, штатное напряжение WS2812 = 5В, откуда эти эксперименты с 4,5В? Если попытаться эти 4,5В подать на WS2812, то светодиодов через 20-30 оно упадёт ниже datasheet-ного за счёт падения на проводах ленты. Да, в некоторых конструкциях придумали питать пониженным напряжением только первый светодиод, где-то ставят диод последовательно с ESP8266, но всё это - частные полумеры. В реальности проще поставить копеечный конвертор уровня и спать спокойно.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@poty,
Красный интервал - максимальный уровень для esp8266, а не для стабилизатора на 3,3 В, по этому он верен.
Почему Вы считаете, что кто-то должен заниматься подгонкой напряжения на WS2812?
Я так не считаю, с чего так решили?
Есть БП 5В, штатное напряжение WS2812 = 5В, откуда эти эксперименты с 4,5В?
Я про "стандартные условия" писал выше, повторю
разница всего 0,2 В. - это ничто, конвертер уровней не нужен.
4,5 В - минимальное напряжение для работы ws2812 из даташита, хотя, на практике, работает и от меньшего, но не так ярко.

P.S. на расстоянии 20-30 светодиодов напряжение сильно не проседает, а вот БП выставляют на 5 вольт и размещается он вдали от ленты(в больших проектах), по этому потери по длине присутствуют и на входе ленты может быть уже 4,8-4,9 В для которых логический уровень будет уже 3,36-3,43 В. При этом разница в уровнях составит уже не 0,2 В, а 0,06-0,13 В. - что крайне мало.
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,270
950
@IamNikolay, типичному разработчику конечного устройства пофиг, что там написано в datasheet, он работает с готовым модулем, где питание 3,3В, любые теоретические выкладки по этому поводу - лишь выкладки, к практике применения этих модулей не относящиеся. Разность 0,2В - это снова теория, что высокий уровень ESP обязательно будет = напряжению питания. Вам уже сказали, что это далеко не обязательно (по datasheet в том числе). У кого-то это может быть так, у других - иначе. И вот у этих других работать не будет.
По поводу питания DS2812: снова допущения, что будет работать и при меньшем, чем написано в datasheet, что просадка будет незаметной... Что всё равно подводимое напряжение будет меньше из-за потерь на проводах: в больших проектах питание осуществляется либо от нескольких блоков питания, либо от одного, но провода идут в разные части ленты. И провода, выбранные, в том числе, по просадке напряжения. В любом случае, инсталляции бывают разные и все эти заморочки, условия и сомнения не стоят того, чтобы отказаться поставить одно копеечное устройство согласования уровней.
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@poty, на практике - сотни тысяч людей, а возможно и больше не ставят конвертер и все работает. Не верите - открывайте любую видеоплощадку и смотрите. Так что разница "нормальных условий" 0,2 В - это не теория. У "других" не работает, по тому что используют занятые выводы контроллера, в том числе и автор темы. Прочтите 1 пост, если коротко - другие проекты работают без всяких конвертеров, а его проект не заработал. Если, дело было бы в конвертере уровней, то и другие проекты не заработали, а они работают!
Питание ws2812 ниже даташита - не допущение, а реальная практика, и просадка будет не "незаметной", а заметной, об этом выше писал - яркость ниже. Более того, если БП не рассчитан на мощность ленты, то это сразу будет заметно на белом свете. В любом случае, питать ws2812 напряжением, ниже даташита, нет необходимости.
При чем здесь "провода идут в разные части ленты"?! это нужно для уменьшения просадки напряжения по длине ленты. которое к обсуждаемой теме не относится.
Я говорил про просадку напряжения от БП до 1 чипа ws2812, на который поступает сигнал от контроллера, именно от напряжения этого чипа зависит какой входящий уровень принять за высокий.
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,270
950
@IamNikolay, да
разница "нормальных условий" 0,2 В - это не теория
это - лотерея. Для статистики - добро пожаловать в обсуждение бесчисленных ламп, табло, наливаторов и проч. на этом сайте. В том числе - с точки зрения защиты от помех от двигателей, радом стоящих станций и проч., и проч.
Занятые выводы контроллера - это тоже одно из допущений, которое, кстати, не всегда соответствует действительности (возможно, в данном случае - да, но с помощью конвертора и в таком случае работает, что доказывает его нужность). С другой стороны - почему я не могу использовать нужные мне выводы контроллера, а не ограничивать снова себя рамками?
Раз питание WS2812 ниже datasheet приводит к заметным недостаткам, то, опять же, зачем я буду на это ориентироваться? Учитывать это? И Вы так и не ответили на вопрос: как это пониженное питание реализовать и контролировать его соблюдение? Отдельный/специальный блок питания? Ещё что-то?
Про разные провода я говорил в том числе и потому, что не весь ток протекает по проводам, которые подключены в начало ленты, и провода эти выбраны так, чтобы не просаживать напряжение на этом участке. Есть и другая вещь - при уменьшении напряжения для одной части ленты, если применяется многозвенное питание, проблема может возникнуть уже на другом участке.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@poty, не надо все в кучу мешать. Для ws2812 и esp8266 - конвертер уровней не нужен.
почему я не могу использовать нужные мне выводы контроллера, а не ограничивать снова себя рамками?
это не рамки, а функциональные возможности контроллера, который, напомню, при старте учитывает состояние нескольких выводов.
Вы же не используете VCC контроллера в качестве сигнального вывода на ленту, по тому что он для этого не предназначен, так и с другими выводами...
В проекте где нужен только 1 вывод контроллера, использовать не предназначенный для этого пин, вместо остальных свободных - мягко говоря нелогично.
Раз питание WS2812 ниже datasheet приводит к заметным недостаткам, то, опять же, зачем я буду на это ориентироваться? Учитывать это? И Вы так и не ответили на вопрос: как это пониженное питание реализовать и контролировать его соблюдение?
Я не говорил что нужно реализовывать пониженное питание!!!
Этого делать не надо!!!
Оно само по себе будет меньше 5 В., за счет потери по длине провода(в больших проектах) от БП до ленты, таким образом входной логический уровень будет ниже 3,5 В.

P.S. В БП(мощном) есть подстроечный резистор для регулировки выходного напряжения, так что выставить его по минимуму даташита - труда не составит, но этого делать не надо, т.к. при 5 В разница уровней всего 0,2 В. и все работает.
 
Изменено: