• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Подсксжите Пример работы с светодиодами WS2812

Chouck

New member
Начал через Arduino IDE и столкнулся с глюками (1-3% сбои-неточности) при зажигании ленты из WS2812 чипов.
Перешёл на правильный эклипс и Unofficial Development Kit, видел в обсуждениях на форуме упоминания в кусках кода библиотеки ws2812.h но вот полного примера и самой библиотеки и с гуглом не отыскал. Видел обсудение потенциальных проблем времени и прирываний (с которыми собственно и сталкнулся в Aduino IDE) при посылки пакетов этим чипам в теме "библиотеки малого webсервера на esp8266.", но там какието обрывки и ничего конкретного.
Даже криво работающий пример с китайскими либами для начала пойдёт.
Подкиньте пожалуйста.
 

sav-13

Member
Начал через Arduino IDE и столкнулся с глюками (1-3% сбои-неточности) при зажигании ленты из WS2812 чипов.
Перешёл на правильный эклипс и Unofficial Development Kit, видел в обсуждениях на форуме упоминания в кусках кода библиотеки ws2812.h но вот полного примера и самой библиотеки и с гуглом не отыскал. Видел обсудение потенциальных проблем времени и прирываний (с которыми собственно и сталкнулся в Aduino IDE) при посылки пакетов этим чипам в теме "библиотеки малого webсервера на esp8266.", но там какието обрывки и ничего конкретного.
Даже криво работающий пример с китайскими либами для начала пойдёт.
Подкиньте пожалуйста.
В последней сборке ESP8266 core for Arduino IDE видел портированную библиотеку NeoPixel
В принципе прикручивал обычную Ардуиновскую библиотеку NeoPixel к ESP-шке
Из обнаруженных глюков:
- Много ложных срабатываний при работе ленты от 5В из за разности логических уровней, видимо.
Лечится снижением питания ленты до 3.3В (там ведь токовый драйвер в WS2812 - ему хватает)
- Если есть какой-то непрерывный эффект, например, как в этой снежинке то раз в несколько секунд цикл обработки WS2812 прерывается, видимо на свои WiFi дела и эффект получается дерганным. Поэтому плюнул, ушел обратно на ардуину
 

Chouck

New member
- Если есть какой-то непрерывный эффект, например, как в этой снежинке то раз в несколько секунд цикл обработки WS2812 прерывается, видимо на свои WiFi дела и эффект получается дерганным. Поэтому плюнул, ушел обратно на ардуину
Да похоже я именно с этим эффектом и борюсь, вот посмотрите всполохи

Вы про Адафрутовскую библиотеку или Makuna/NeoPixelBus ?
А это решение через серийник и библиотеку вы пробовали https://github.com/Makuna/NeoPixelBus/tree/UartDriven ?

вот тут люди обсуждали но я не очень понял суть и итог http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-28#post-6775

Что-то сдаваться и ради одного этого добовлять ещё ардуину в проект не хочется...
 
Последнее редактирование:

sav-13

Member
У меня затык, по вайфай все работает, но не могу правильно реализовать чтобы есп сидел и слушал гпио, не нажал ли я кнопку и не переключал свет.
Да похоже я именно с этим эффектом и борюсь, вот посмотрите всполохи
Вы про Адафрутовскую библиотеку или Makuna/NeoPixelBus ?
А это решение через серийник и библиотеку вы пробовали https://github.com/Makuna/NeoPixelBus/tree/UartDriven ?

вот тут люди обсуждали но я не очень понял суть и итог http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-28#post-6775

Что-то сдаваться и ради одного этого добовлять ещё ардуину в проект не хочется...
NeoPixelBus у меня. Эффект случайных пикселов решился снижением напряжения на диодах
Библотеки нужно будет разные попоовать
 

Chouck

New member
У меня затык, по вайфай все работает, но не могу правильно реализовать чтобы есп сидел и слушал гпио, не нажал ли я кнопку и не переключал свет.
Да я тоже думаю присобачить Attany к ESP,заодно проблема с повышением уровней решится. Я её решил FET транзисторомб вы понижением напряжения. но от всполохов это не спасло.
Я думаю как раз в тайни выподить на ws2812 и заодно слушать кнопки типо безконтактной ёмкостной...
 

Chouck

New member
Пробовал обе ветки из Makuna/NeoPixelBus
master и UartDriven разгонял чип до 160мгц и следующий простой код, FET транзистор с подорками поднимающий уровень на простую полоску из 8 чиов и неворужённым глазом видно как минают в среднем раз в 3-5 секунд некоторые из диодов, некоторые (гаснут на такт, неторорые зажигаются не в попад на такт).
Я один такой? Проверьте пож

Код:
#include <NeoPixelBus.h>

#define pixelCount 8
#define colorSaturation 128

NeoPixelBus strip = NeoPixelBus(pixelCount, 12);

RgbColor red = RgbColor(colorSaturation, 0, 0);
RgbColor green = RgbColor(0, colorSaturation, 0);
RgbColor blue = RgbColor(0, 0, colorSaturation);
RgbColor white = RgbColor(colorSaturation);
RgbColor black = RgbColor(0);

void setup()
{
  // this resets all the neopixels to an off state
  strip.Begin();
  strip.Show();
}


void loop()
{
   

    // set the colors,
    // if they don't match in order, you may need to use NEO_GRB flag
    strip.SetPixelColor(0, red);
    strip.SetPixelColor(1, green);
    strip.SetPixelColor(2, blue);
    strip.SetPixelColor(3, white);
    strip.SetPixelColor(4, black);
    strip.SetPixelColor(5, black);
    strip.SetPixelColor(6, black);
    strip.SetPixelColor(7, white);
    strip.Show();
delay(30);
  
}
 

pvvx

Активный участник сообщества
Вроде давно сделали управление WS2812 по DMA (SCL регистры) через выход данных пина I2S...
Выход I2S просто льет биты в пределе со скоростью 20 Mbits/s. I2S управляется загрузкой слов по 32 бита через SCL блоками по 64 слова из 14-ти буферов, как и в MP3 плеере, где через эту же систему выливают звук с двойной дельта-сигмой модуляцией для вывода без всяких драйверов на R-C цепь.
 
Последнее редактирование:

Chouck

New member
Вроде давно сделали управление WS2812 по DMA (SCL регистры) через выход данных пина I2S...
Выход I2S просто льет биты в пределе со скоростью 20 Mbits/s. I2S управляется загрузкой слов по 32 бита через SCL блоками по 64 слова из 14-ти буферов, как и в MP3 плеере, где через эту же систему выливают звук с двойной дельта-сигмой модуляцией для вывода без всяких драйверов на R-C цепь.
Да Вот я видел в ваших обсуждениях веб сервера какието упоминания но ни примера ни библиотек немогу найти... тыкните носом пожалуйста.
 

pvvx

Активный участник сообщества
Исходник вывода в I2S находится в и Arduino (core_esp8266_i2s.c).
Для 20Mbits/сек (50ns bit) надо исправить I2S_BCK_DIV_NUM = 4, I2S_CLKM_DIV_NUM = 1.
Для 100ns bit I2S_BCK_DIV_NUM = 8, I2S_CLKM_DIV_NUM = 1.
Написать конвертер время -> битовые поля и выкинуть из core_esp8266_i2s.c инициализацию других выводов, кроме GPIO3 как выхода.
Там можно ещё кое чего оптимизировать и вперед. :)
 

Lstt

Member
Последнее редактирование:

pvvx

Активный участник сообщества
Нормально на I2S выходит:
WS2812_I2S.gif
все временные в допусках по PDF для WS2812.
Можно упростить до 32-х битного слова составленного из 4-х по 8 бит:
[HASHTAG]#define[/HASHTAG] bit0bits 0xE0
[HASHTAG]#define[/HASHTAG] bit1bits 0xF0
описывающих диаграмму передачи "0" и "1" 4-х бит из входного потока.
Строб выходит в 162 ns: I2S_BCK_DIV_NUM = 13, I2S_CLKM_DIV_NUM = 1.
При 8 бит получаем период в 1300 ns, что и показано на осцилле...
Имея буфер в 2048 байт (такой по умолчанию в core_esp8266_i2s.c), сливаемый по DMA, получаем, что дополнять его надо в период до 2048*1.3 us = 2.6 ms
 

Chouck

New member
Нормально на I2S выходит:
Я суть грубо понимаю, реализовать неспособен.
Не смог разобраться как использовать https://github.com/cnlohr/esp8266ws2812i2s/blob/master/user/ws2812_i2s.c
там они непрерывно шлют фреймы. А надо просто функцияВывода(R1,G1,B1,R2,G2....)

Обидно что в NodeMCU с их язычком луа всё работает (правда <21 пикчела, дальше рестарты) без миганий и проблем...

Готов донировать нужную сумму для реализации нормальной библоеки для WS2812 ...
 
Последнее редактирование:

Lstt

Member
Может быть этот вариант попробуете - https://github.com/sticilface/ESP8266-wifi , он тоже основан на UartDriven...(https://github.com/sticilface/ESP8266-wifi/wiki)
P.S. Кстати, автор вскоре обещает переделать всё на Ajax и jquerymobile - для увеличения быстродействия и отзывчивости..
https://github.com/sticilface/ESP8266-wifi/issues/9
Вчера пришла лента 5-ти метровая на WS2812b. Данная прошивка на базе Arduino IDE работает отлично (на 150 светодиодах), хотя конечно, в коде ещё есть маленькие ошибки, не допилена до конца, но вполне работоспособна! Для новичков самое то.
 

Chouck

New member
Вчера пришла лента 5-ти метровая на WS2812b. Данная прошивка на базе Arduino IDE работает отлично (на 150 светодиодах), хотя конечно, в коде ещё есть маленькие ошибки, не допилена до конца, но вполне работоспособна! Для новичков самое то.
Если использовать код который я привёл выше и присмотреться в течении нескольких минут, не заметро всполохов и промигиваний?
прведите пример кода если не сложно
 

Lstt

Member
Если использовать код который я привёл выше и присмотреться в течении нескольких минут, не заметро всполохов и промигиваний?
прведите пример кода если не сложно
Вы о чём?) Вот же все исходники https://github.com/sticilface/ESP8266-wifi . Ваш пример не пробовал, не вижу смысла терять для себя время...
 

Chouck

New member
да я видел это, и ещё https://github.com/cnlohr/esp8266ws2812i2s но насколько я понял у него до конца не получилось и есть поблемы (он вынужтен постояннно передавать последовательности в I2S - неприрывно иначе что-то глючит в шине).
вот что-то интересное может портировать на ESP http://www.ejberg.dk/portfolio/ws2812-xcl/ ?

было бы замечательно иметь нормальную библиотеку.
 
Последнее редактирование:

COBECTb

New member
Подскажите из-за чего могут перегреваться светодиоды? Купил кольцо neopixel 24 диода. Подключил к esp8266 и запитал от 3.3v. Пару раз запустил пример Подключаем модули NeoPixel на базе WS2812B светодиодов к Arduino - Урок для Arduino
Диоды очень нагрелись. После нескольких запусков секунд на 30-40 перестал работать 12 светодиод и все после него горят случайным светом или не горят тоже.
 

fandy

Member
По-моему для WS питание светодиодов идет отдельно от схемы управления. И там надо запитываться через токоограничивающие резисторы 150 Ом. В SK резисторы встроены.
Короче надо смотреть конкретную схему.
 
Последнее редактирование:

Shara

New member
Подскажите из-за чего могут перегреваться светодиоды? Купил кольцо neopixel 24 диода. Подключил к esp8266 и запитал от 3.3v. Пару раз запустил пример Подключаем модули NeoPixel на базе WS2812B светодиодов к Arduino - Урок для Arduino
Диоды очень нагрелись. После нескольких запусков секунд на 30-40 перестал работать 12 светодиод и все после него горят случайным светом или не горят тоже.
Вы запитали диоды от 3v? Насколько я помню, по даташиту у них питание должно быть от 5 вольт и там есть встроенный стабилизатор. Собственно из-за нехватки напряжения увеличивается ток и чип греется. Запитывайте от 5 вольт диоды, а для данных достаточно трёх вольт напрямую с esp8266.

C WS дел не имел, имел дела с APA.
 
Сверху Снизу