Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Обсуждение ESP8266 и ws2812 в Arduino IDE - это очень просто!

Тема в разделе "Раздел для начинающих", создана пользователем Victor, 19 дек 2016.

Метки:
  1. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386
  2. igrushkin

    igrushkin Читатель

    Сообщения:
    148
    Симпатии:
    11
    а от 3в логики нормально лента работает?
     
  3. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.211
    Симпатии:
    386
    не заметил каких-либо проблем, т.к. все эффекты последовательно выполнялись, как написано в скетче.
     
  4. igrushkin

    igrushkin Читатель

    Сообщения:
    148
    Симпатии:
    11
    ОК, "практика - критерий истины", как говорили классики марксизма-ленинизма. А то везде написано, что не любят WS2812b 3-вольтовую логику
     
  5. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.168
    Симпатии:
    226
    Проблемы могут возникнуть, если питание ленты будет больше 5,5 вольт, а у ЕСП будет 3,1 вольт или меньше. В таком случае у меня начинало глючить. Снижение питания ленты до 4,9 вольт полностью ситуацию выправляло даже при 3,1 на ЕСП.
     
    igrushkin нравится это.
  6. igrushkin

    igrushkin Читатель

    Сообщения:
    148
    Симпатии:
    11
    Очень полезно. Спасибо.
     
  7. Faint

    Faint Новичок

    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте, я только начинаю работать с есп и 2812. Подскажите, пожалуйста, я запутался.
    Взял компьютерный блок питания, сделал как в статье. 5в - 5в, гнд - гнд, информация к D2. Включил, заработала половина. Через несколько попытка заработала целиком. Думаю - здорово, сейчас размотаю свои 5 метров и наслажусь эффектами. А после того как размотал начали моргать первые 10-15 светодиодов. Менял настройки, кол-во светодиодов, яркость - никакого эффекта. Подумал дело в плате, заказал еще. Вот недавно пришла, заливаю скетч, подключаю, запускаю - на мгновенье загораются все светодиоды и все, никакой реакции. Что я сделал не так?
    Напряжение мультиметром проверил - всегда 5-5,4В.
    Спасибо!
     
    Последнее редактирование: 29 авг 2017
  8. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Столкнулся с проблемой при попытке подружить NodeMCU и ленту на ws2812.
    От внешнего блока питания +5 В - к Vin и Gnd на плате.
    Подключаю ленту из 60 пикселей: питающие контакты - к тем же Vin и Gnd, управляющий - к D5 (GPIO14).
    Программирую в Arduino IDE. Беру пример standtest из Adafruit_NeoPixel, правлю значение PIN (на 14), запускаю - лента не светится.
    Менял подключение на D2 (GPIO4), напряжение питания выставлял от 4.7 до 5.1 В - не помогает.
    Управляющий контакт включал через резистор 220 Ом - не помогло.
    Тот же пример с соответствующей правкой значения PIN запускаю на 5-вольтовых Arduino UNO, на Digispark - лента светится.
    Плату NodeMCU заменял на другую - не помогло. (Плата рабочая: нет проблем с lcd1602, подключенным по i2c, с 7-разрядными led-индикаторами.)
    Посоветуйте, pls, как починить ситуацию.

    PS.@Faint, поздно, конечно, но у меня похожие эффекты были на длинных лентах, когда мощности питания не хватало. Снижение яркости или уменьшение числа горящих пикселей помогало.
     
  9. igrushkin

    igrushkin Читатель

    Сообщения:
    148
    Симпатии:
    11
    @FatMan

    Попробуйте подать 5В через диод. Это даст падение напряжения ~0,7В и разница между 3,3В и 4,3В будет достаточной.
    Ws2812b на датапине нужно >0,7VCC. Если у вас 5,1В VCC, то 3,3В от ESP8266 не хватает
     
  10. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Попробовал - не помогло.

    Подключил к D5 каскад из двух BC547, как на таком рисунке. Через 470 Ом подключил светодиоды к D2, D5 и к катоду второго транзистора. Программа из 6 строк:
    Код (C):
    1. digitalWrite(5,HIGH);
    2. digitalWrite(14,HIGH);
    3. delay(2000);
    4. digitalWrite(5,LOW);
    5. digitalWrite(14,LOW);
    6. delay(2000);
    Всё работает ожидаемо: все светодиоды синхронно зажигаются и гаснут.

    Подключаю выход из каскада к управляющему ленты, запускаю sdandtest - и тишина. Светодиоды тестовые отключал - не помогло.
    Напряжение на выходе из каскада ниже 4.2 В не опускалось при выводе HIGH, БП настроен на 5,05 В.
    Осциллографа нет, посмотреть, что не так с 800-килогерцовым сигналом, нечем.
    С динамической индикацией 6-разрядных часов через 595-е регистры esp8266 справлялась без проблем и без плясок с согласованием уровней. Но там частота, понятно, поскромнее...
    В общем, делаю пока макет на Ардуине - с 5-вольтовой платой лента работает без проблем. Но в финале хотелось бы устройство без лишних кнопок получить - Wi-Fi и web-сервер тут помогли бы...
     
    Последнее редактирование: 20 ноя 2017
  11. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Поборол связку NodeMCU+WS2812.
    Если опустить промежуточные шаги адаптации к ситуации, то вылечилось обновлением библиотеки Adafruit_NeoPixel.
    К слову, вполне устойчиво работает при питании системы от 5 В: на ленту - напрямую, на ESP8266 - через штатный AMS1117-3.3 на плате NodeMCU. D5 (GPIO14) напрямую к ленте подключен.
    Спасибо всем за помощь.

    PS. Подключил ленту через резистор 330 Ом - работает.
     
    Последнее редактирование: 26 дек 2017
  12. Павел Зорин

    Павел Зорин Новичок

    Сообщения:
    1
    Симпатии:
    0
    Привет! Вопрос - а какая версия была? Столкнулся с такой-же какашкой, на ардуине пашет - на еsp12 (wemos d1) никак. На пине осциллом вижу пачки испульсов, а ленте пофиг.
     
  13. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.168
    Симпатии:
    226
    @Павел Зорин
    Для начала попробуйте снизить напряжение питание ленты до 4.9В. Например, через кремниевый диод питание подать. Земли, надеюсь, соединить не забыли у esp8266 и ленты?
    И если Ардуино ИДЕ у вас последней версии, то библиотеки тоже надо обновить до свежей. Сначала удалить старые полностью, затем ставить новые. Это касается как Neopixel, так и FastLed. Если просто апгрейдить через диспетчер библиотек - то не обновляется полностью и не работает.
     
    Последнее редактирование: 11 янв 2018
  14. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Номер не скажу, но устанавливалась в конце 2016 года. И у меня не наблюдалось импульсов со старой библиотекой ("светодиодным" тестом).
    При наличии импульсов я начал бы с проверки питания и согласования уровней (собственно, я и без импульсов этим путём пошёл). Сколько пикселей в ленте (каждый до 60-80 мА может отжирать), каким источником запитана, есть ли пульсации напряжения? У Adafruit ещё была рекомендация зашунтировать питание ленты электролитом на 1000 мкФ. Ну и то, что Сергей_Ф посоветовал: чуть снизить напряжение питания ленты, убедиться, что "земли" ленты и контроллера соединены.
    (Новая библиотека несёт другую неприятность: не совместима с IR-приёмником. Правда, минимальными правками кода это обходится.)
     
  15. vworld

    vworld Новичок

    Сообщения:
    4
    Симпатии:
    0
    Друзья сделал проект на нано и светодиодах SK6812 (64 шт. матрица 8*8 светодиодов) - набаловался на примерах из библиотеки Adafruit_NeoPixel.
    Приобрел NodeMCU - побаловался с блинком и пришла в голову идея по проекту из этого топика.
    NodeMCU+SK6812 (64 шт.) - пользователь открывает страницу web в которой приглашение для ввода текста - например "Hello word!", нажимает кнопку "отправить" и этот текст бегущей строкой идет на матрицу SK6812.
    Прошу подсказать в какую сторону смотреть для реализации.
    Понятно, что на NodeMCU надо поднять точку доступа, веб сервер и создать html страницу, а дальше уже знаний не хватает
     
    Последнее редактирование: 21 сен 2018
  16. VLT

    VLT Новичок

    Сообщения:
    10
    Симпатии:
    0
    Занимаюсь тем же самым - есть лента на 32 "пикселя" Рисую через NeoPixelBus
    скетч (раскрыть)

    Код (C):
    1. /*
    2. * ESP8266 SPIFFS HTML Web Page with JPEG, PNG Image
    3. * https://circuits4you.com
    4. */
    5.  
    6. #include <NeoPixelBus.h>
    7. #include <ESP8266WiFi.h>
    8. #include <ESP8266WebServer.h>
    9. #include <FS.h>   //Include File System Headers
    10.  
    11. const uint16_t PixelCount = 32; // make sure to set this to the number of pixels in your strip
    12. const uint16_t PixelPin = 2; // make sure to set this to the correct pin, ignored for Esp8266
    13.  
    14. const char* htmlfile = "/index.html";
    15.  
    16. //WiFi Connection configuration
    17. const char *ssid = "RGBW_Ring";
    18. const char *password = "password";
    19.  
    20. NeoPixelBus<NeoGrbwFeature, NeoEsp8266Uart1800KbpsMethod> strip(PixelCount, PixelPin);
    21.  
    22. ESP8266WebServer server(80);
    23.  
    24. RgbwColor color = RgbwColor(10,10,10,10);
    25.  
    26. void handlePWM(){
    27.   String R = server.arg("R");
    28.   String G = server.arg("G");
    29.   String B = server.arg("B");
    30.   String W = server.arg("W");
    31. //  int p = 1024 - (PWM.toInt())*10;
    32.   Serial.println(R);
    33.   Serial.println(G);
    34.   Serial.println(B);
    35.   Serial.println(W);
    36.   //--my--//analogWrite(LED,p);
    37.   color = RgbwColor(R.toInt(), G.toInt(), B.toInt(), W.toInt());
    38.  
    39.  
    40.   server.send(200, "text/plane","");
    41. }
    42.  
    43. void handleRoot(){
    44.   server.sendHeader("Location", "/index.html",true);   //Redirect to our html web page
    45.   server.send(302, "text/plane","");
    46. }
    47.  
    48. void handleWebRequests(){
    49.   if(loadFromSpiffs(server.uri())) return;
    50.   String message = "File Not Detected\n\n";
    51.   message += "URI: ";
    52.   message += server.uri();
    53.   message += "\nMethod: ";
    54.   message += (server.method() == HTTP_GET)?"GET":"POST";
    55.   message += "\nArguments: ";
    56.   message += server.args();
    57.   message += "\n";
    58.   for (uint8_t i=0; i<server.args(); i++){
    59.     message += " NAME:"+server.argName(i) + "\n VALUE:" + server.arg(i) + "\n";
    60.   }
    61.   server.send(404, "text/plain", message);
    62.   Serial.println(message);
    63. }
    64.  
    65. void setup() {
    66.   delay(1000);
    67.   Serial.begin(115200);
    68.   Serial.println();
    69.  
    70.   strip.Begin();
    71.   strip.Show();
    72.  
    73.   //Initialize File System
    74.   SPIFFS.begin();
    75.   Serial.println("File System Initialized");
    76.  
    77.  
    78.   //Connect to wifi Network
    79.   //WiFi.begin(ssid, password);     //Connect to your WiFi router
    80.   WiFi.softAP(ssid, password);
    81.  
    82.   WiFi.begin("AndroidAP79A7", "jrcc4744");     //Connect to your WiFi router
    83.   Serial.println("");
    84.  
    85.   // Wait for connection
    86.   while (WiFi.status() != WL_CONNECTED) {
    87.     delay(500);
    88.     Serial.print(".");
    89.   }
    90.   //If connection successful show IP address in serial monitor
    91.   Serial.println("");
    92.   Serial.print("Connected to ");
    93.   Serial.println(ssid);
    94.   Serial.print("IP address: ");
    95.   Serial.println(WiFi.localIP());  //IP address assigned to your ESP
    96.  
    97.  
    98.   //Initialize Webserver
    99.   server.on("/",handleRoot);
    100.   server.on("/setLED",handlePWM); //Reads ADC function is called from out index.html
    101.   server.onNotFound(handleWebRequests); //Set setver all paths are not found so we can handle as per URI
    102.   server.begin();
    103. }
    104.  
    105. void loop() {
    106. server.handleClient();
    107. strip.ClearTo(color);
    108. strip.Show();
    109. }
    110.  
    111. bool loadFromSpiffs(String path){
    112.   String dataType = "text/plain";
    113.   if(path.endsWith("/")) path += "index.htm";
    114.  
    115.   if(path.endsWith(".src")) path = path.substring(0, path.lastIndexOf("."));
    116.   else if(path.endsWith(".html")) dataType = "text/html";
    117.   else if(path.endsWith(".htm")) dataType = "text/html";
    118.   else if(path.endsWith(".css")) dataType = "text/css";
    119.   else if(path.endsWith(".js")) dataType = "application/javascript";
    120.   File dataFile = SPIFFS.open(path.c_str(), "r");
    121.   if (server.hasArg("download")) dataType = "application/octet-stream";
    122.   if (server.streamFile(dataFile, dataType) != dataFile.size()) {
    123.   }
    124.  
    125.   dataFile.close();
    126.   return true;
    127. }
    128.  

    Данная библиотека работает на отлично. Питание ленты и ESP раздельное. Есть интересные моменты описанные тут Makuna/NeoPixelBus
     
  17. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Не настолько поборол, однако, насколько хотелось.
    Зажечь ленту из WS2812B мне удалось на разных Arduino (на Атмегах 168 и 328, 3,3 и 5 В, на Attiny85 в Digispark), а после обновления в конце 2017 года библиотеки Adafruit_NeoPixel и NodeMCU замигала светодиодами на ленте, как я и писал. Заменил Adafruit_NeoPixel на FastLED - никаких проблем.
    А далее начинаю реализовывать естественное желание: задействовать web-возможности ESP8266 для реализации пользовательского интерфейса. И снова проблемы: то Wi-Fi у модуля отваливается, то WDT срабатывает, да ещё не всегда модуль заново запустится после этого. Чаще всего сетевизмы отваливались, а огоньки продолжали мигать по установленной программе. Причём, от сети модуль отваливался напрочь, роутер в клиентах его не показывал, но в Serial модуль радостно сообщал при этом, что Wi-Fi.status стабильно равен WL_CONNECTED.
    Использовал все версии пакета настроек ESP8266 от 2.3.0 до 2.4.1 - самые стабильные результаты были с 2.4.0-rc1 (Arduino IDE 1.8.5).
    Я использовал AJAX, мониторил Heap не только выводом в Serial, но и в web-форму - обычно, держалось в районе 30-32 кБ, но если уменьшалось до 18 кБ - жди срабатывания WDT.
    Потом мир, труд, май, июнь, июль - в общем, до новогодних каникул проект был отложен. А потом обновление IDE до 1.8.8 - и снова перебор разных версий пакета настроек, разных параметров в них. Удалось застабилизироваться на версии пакета 2.4.2 - беты 2.5.0 не справились. До 3 суток устойчиво работало, web-интерфейс откликался - думал, победа. Но как-то в ночь раз - и зависло. Впрочем, зависает крайне редко, чаще перегружается по WDT. А если отвалилась сеть, то может неделями работать с лентой без иных сбоев.
    Я понимаю, что подробнее описал проблему с сетью, а не с лентой. Но я проверил: заменил в программе вывод в ленту на вывод по i2c на OLED-дисплей 0,96", оставив все сетевизмы прежними от кода процедур до содержимого html-файлов. И запустил параллельно на двух модулях обе версии программы. Так тот модуль, что с лентой, уже несколько раз перегрузился, а с дисплеем - работает без перезагрузок почти неделю. Так что, проблема с совместимостью сетевых функций и работы с лентой из ws2812b. Может, сеть в ESP8266 и с i2c тоже конфликтует - мне встречались в Интернете и такие мнения, но это, по крайней мере, сильно реже проявляется.
    Может быть, у кого-то есть опыт приручения сетевых и web-функций ESP8266 с LED-лентой? Принимаются советы, на что обратить внимание, что попробовать.
    ...Свежевышедший релиз пакета настроек на ESP8266 версии 2.5.0 я не пробовал пока.
    ...Впору делать проект на Атмеге с прикрученным ESP-01...
     
  18. VLT

    VLT Новичок

    Сообщения:
    10
    Симпатии:
    0
    По ссылке пишут о проблемах и нестабильном wifi при некоторых вариантах подключения => Makuna/NeoPixelBus
     
  19. FatMan

    FatMan Новичок

    Сообщения:
    9
    Симпатии:
    1
    Не совсем так: нестабильный wi-fi при всех обычных вариантах подключения ws2812, если светодиодов больше 2-3. Об этом много где написано и повторено в описании NeoPixelBus. Но основное преимущество этой библиотеки не в поддержке обычных вариантов подключения, а в умении использовать RX и TX для вывода в ленту. Правда, при этом частично теряется функционал uart-интерфейса - он становится однонаправленным.

    Я попробовал задействовать режим DMA, подключив ленту к пину RX (он же RDX0 или GPIO3). Вывод в ленту и весь заложенный сетевой функционал работает: в том числе, установка времени по NTP, web-сервер с режимом AJAX. К сожалению, при перезагрузке компьютера ребутится и NodeMCU, подключенная к USB-хабу, потому зафиксированный аптайм не превысил 4 суток. Но иных проблем не возникло: web-сервер уверенно отвечает, лента мигает, как положено. Да, в этом режиме (вывод RX задействован), нет возможности передать что-то в контроллер по UART. Но отладочный вывод в Serial работает.

    Напомню, что между ESP8266 (у меня на плате NodeMCU) и управляющим выводом ленты из WS2812 у меня стоит резистор на 300 Ом. Питается всё от 5-вольтового БП. Как правило, ещё есть подключение к USB-хабу (у него внешнее питание, потому 0,5 А по питанию можно ожидать).

    @VLT, спасибо за подсказку.

    Метод использования DMA для вывода в ленту из WS2812, реализованный в библиотеке NeoPixelBus (см. Neo800KbpsMethod), можно признать удачным программным решением состыковки ESP8266 и WS2812. В библиотеке есть ещё методы, использующие UART1 (GPIO2) и UART0 (GPIO1), но я их не пробовал.
     
  20. VLT

    VLT Новичок

    Сообщения:
    10
    Симпатии:
    0
    Я использовал такую схему подключения - минус ее - отдельное питание для ленты
    upload_2019-2-17_9-38-38.png
     

Поделиться этой страницей