ESP8266, WS2812 и Jinx!

aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Отлично!
Mining
Сержант
Сообщения: 142
Зарегистрирован: 31 окт 2016, 15:01
Имя: Алексей

ESP8266, WS2812 и Jinx!

Сообщение Mining »

ESP01 связь по ArtNet WIFI.
Ws2812b 1800 pixel (60x30).
Экран 2х1м.
https://youtu.be/Q0DoNTzB0_0
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

ESP8266, WS2812 и Jinx!

Сообщение Ivan_Kornege »

Mining писал(а): 02 сен 2019, 04:56 ESP01 связь по ArtNet WIFI.
Ws2812b 1800 pixel
афигеть 1800 диодов управляет одной ESP?
Mining
Сержант
Сообщения: 142
Зарегистрирован: 31 окт 2016, 15:01
Имя: Алексей

ESP8266, WS2812 и Jinx!

Сообщение Mining »

Автор ответил что одну ESP01 использует.
Hello!
Using one ESP01?
yusuf120581
Yes
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Он скорее использовал 3 вывода есп по 4 юниверса на каждую ногу. 3х4х170=2040 пикселей.
Я не смог вывести на одну ногу 4 юниверса, только по одному. И чтобы подключить 1800 пикселей нужно мне 11 выводов есп по 1 юниверсу на каждом пине!
Не нашел готовое решение.
Mining
Сержант
Сообщения: 142
Зарегистрирован: 31 окт 2016, 15:01
Имя: Алексей

ESP8266, WS2812 и Jinx!

Сообщение Mining »

[ref]aidar_i[/ref], здесь возможно ответ https://github.com/rstephan/ArtnetWifi/ ... -343058001
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Mining, сможете проверить этот код?
4 юниверса на одну ногу D1 Wemos или Nodemcu (с изменённой библиотекой )

Код: Выделить всё

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

#define WSout1 D1  
#define WSout2 D1  
#define WSout3 D1
#define WSout4 D1
#define WSout5 D1

#define WSbit1 (1<<WSout1)
#define WSbit2 (1<<WSout2)
#define WSbit3 (1<<WSout3)
#define WSbit4 (1<<WSout4)
#define WSbit5 (1<<WSout5)

// ARTNET CODES
#define ARTNET_DATA 0x50
#define ARTNET_POLL 0x20
#define ARTNET_POLL_REPLY 0x21
#define ARTNET_PORT 6454
#define ARTNET_HEADER 17

WiFiUDP udp;

//universe 0
uint8_t uniData1[510];
uint8_t universe1 = 0;
uint16_t uniSize1;

//universe 1
uint8_t uniData2[510];
uint8_t universe2 = 1;
uint16_t uniSize2;

//universe 3
uint8_t uniData3[510];
uint8_t universe3 = 2;
uint16_t uniSize3;

//universe 4
uint8_t uniData4[510];
uint8_t universe4 = 3;
uint16_t uniSize4;

//universe 5
uint8_t uniData5[510];
uint8_t universe5 = 4;
uint16_t uniSize5;

uint8_t hData[ARTNET_HEADER + 1];
uint8_t net = 0;
uint8_t subnet = 0;

const char* ssid     = "----";
const char* password = "----";

IPAddress local_ip(172, 20, 10, 10);
IPAddress gateway_ip(172, 20, 10, 1);
IPAddress subnet_ip(255, 255, 255, 240);


void setup() {

  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  WiFi.config(local_ip, gateway_ip, subnet_ip);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  udp.begin(ARTNET_PORT); // Open ArtNet port

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());


  pinMode(WSout1, OUTPUT);
  pinMode(WSout2, OUTPUT);
  pinMode(WSout3, OUTPUT);
  pinMode(WSout4, OUTPUT);
  pinMode(WSout5, OUTPUT);
}


void sendWS1() {
  uint32_t writeBits;
  uint8_t  bitMask, time;
  os_intr_lock();
  for (uint16_t t = 0; t < uniSize1; t++) { // outer loop counting bytes
    bitMask = 0x80;
    while (bitMask) {
      // time=0ns : start by setting bit on
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000304, WSbit1 );  // do ON bits // T=0
      }
      if ( uniData1[t] & bitMask ) {
        writeBits = 0;  // if this is a '1' keep the on time on for longer, so dont write an off bit
      }
      else {
        writeBits = WSbit1;  // else it must be a zero, so write the off bit !
      }
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, writeBits );  // do OFF bits // T='0' time 350ns
      }
      time = 6;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, WSbit1 );  // switch all bits off  T='1' time 700ns
      }
      // end of bite write time=1250ns
      bitMask >>= 1;
    }
  }
  os_intr_unlock();
}


void sendWS2() {
  uint32_t writeBits;
  uint8_t  bitMask, time;
  os_intr_lock();
  for (uint16_t t = 0; t < uniSize2; t++) { // outer loop counting bytes
    bitMask = 0x80;
    while (bitMask) {
      // time=0ns : start by setting bit on
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000304, WSbit2 );  // do ON bits // T=0
      }
      if ( uniData2[t] & bitMask ) {
        writeBits = 0;  // if this is a '1' keep the on time on for longer, so dont write an off bit
      }
      else {
        writeBits = WSbit2;  // else it must be a zero, so write the off bit !
      }
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, writeBits );  // do OFF bits // T='0' time 350ns
      }
      time = 6;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, WSbit2 );  // switch all bits off  T='1' time 700ns
      }
      // end of bite write time=1250ns
      bitMask >>= 1;
    }
  }
  os_intr_unlock();
}


void sendWS3() {
  uint32_t writeBits;
  uint8_t  bitMask, time;
  os_intr_lock();
  for (uint16_t t = 0; t < uniSize3; t++) { // outer loop counting bytes
    bitMask = 0x80;
    while (bitMask) {
      // time=0ns : start by setting bit on
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000304, WSbit3 );  // do ON bits // T=0
      }
      if ( uniData3[t] & bitMask ) {
        writeBits = 0;  // if this is a '1' keep the on time on for longer, so dont write an off bit
      }
      else {
        writeBits = WSbit3;  // else it must be a zero, so write the off bit !
      }
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, writeBits );  // do OFF bits // T='0' time 350ns
      }
      time = 6;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, WSbit3 );  // switch all bits off  T='1' time 700ns
      }
      // end of bite write time=1250ns
      bitMask >>= 1;
    }
  }
  os_intr_unlock();
}


void sendWS4() {
  uint32_t writeBits;
  uint8_t  bitMask, time;
  os_intr_lock();
  for (uint16_t t = 0; t < uniSize4; t++) { // outer loop counting bytes
    bitMask = 0x80;
    while (bitMask) {
      // time=0ns : start by setting bit on
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000304, WSbit4 );  // do ON bits // T=0
      }
      if ( uniData4[t] & bitMask ) {
        writeBits = 0;  // if this is a '1' keep the on time on for longer, so dont write an off bit
      }
      else {
        writeBits = WSbit4;  // else it must be a zero, so write the off bit !
      }
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, writeBits );  // do OFF bits // T='0' time 350ns
      }
      time = 6;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, WSbit4 );  // switch all bits off  T='1' time 700ns
      }
      // end of bite write time=1250ns
      bitMask >>= 1;
    }
  }
  os_intr_unlock();
}

void sendWS5() {
  uint32_t writeBits;
  uint8_t  bitMask, time;
  os_intr_lock();
  for (uint16_t t = 0; t < uniSize5; t++) { // outer loop counting bytes
    bitMask = 0x80;
    while (bitMask) {
      // time=0ns : start by setting bit on
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000304, WSbit5 );  // do ON bits // T=0
      }
      if ( uniData5[t] & bitMask ) {
        writeBits = 0;  // if this is a '1' keep the on time on for longer, so dont write an off bit
      }
      else {
        writeBits = WSbit5;  // else it must be a zero, so write the off bit !
      }
      time = 4;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, writeBits );  // do OFF bits // T='0' time 350ns
      }
      time = 6;
      while (time--) {
        WRITE_PERI_REG( 0x60000308, WSbit5 );  // switch all bits off  T='1' time 700ns
      }
      // end of bite write time=1250ns
      bitMask >>= 1;
    }
  }
  os_intr_unlock();
}


void loop() {
  if (udp.parsePacket()) {
    udp.read(hData, ARTNET_HEADER + 1);
    if ( hData[0] == 'A' && hData[1] == 'r' && hData[2] == 't' && hData[3] == '-' && hData[4] == 'N' && hData[5] == 'e' && hData[6] == 't') {
      if ( hData[8] == 0x00 && hData[9] == ARTNET_DATA && hData[15] == net ) {

        if ( hData[14] == (subnet << 4) + universe1 ) { // UNIVERSE One
          if (!uniSize1) {
            uniSize1 = (hData[16] << 8) + (hData[17]);
          }
          udp.read(uniData1, uniSize1);
        }

        if ( hData[14] == (subnet << 4) + universe2 ) { // UNIVERSE two
          if (!uniSize2) {
            uniSize2 = (hData[16] << 8) + (hData[17]);
          }
          udp.read(uniData2, uniSize2);
        }

        if ( hData[14] == (subnet << 4) + universe3 ) { // UNIVERSE drei
          if (!uniSize3) {
            uniSize3 = (hData[16] << 8) + (hData[17]);
          }
          udp.read(uniData3, uniSize3);
        }
        if ( hData[14] == (subnet << 4) + universe4 ) { // UNIVERSE vier
          if (!uniSize4) {
            uniSize4 = (hData[16] << 8) + (hData[17]);
          }
          udp.read(uniData4, uniSize4);
     /*   }
          if ( hData[14] == (subnet << 4) + universe5 ) { // UNIVERSE fünf
          if (!uniSize5) {
            uniSize5 = (hData[16] << 8) + (hData[17]);
          }
          udp.read(uniData5, uniSize5); */
          
          sendWS1();
          sendWS2();
          sendWS3();
          sendWS4();
          //sendWS5();
        }

      } // if Artnet Data

}}}
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

ESP8266, WS2812 и Jinx!

Сообщение Ivan_Kornege »

aidar_i писал(а): 02 сен 2019, 20:30 Я не смог вывести на одну ногу 4 юниверса
может чего то не догоняю, но на сайте ардуино есть тема ArtNet to WS2812 Pixel LED driver : Using Wemos D1 (arduino-esp8266) где чувак пишет:
I have expanded this to output 16 universes across 4 output pins, enough to drive 2720 WS2812 RGB Pixel LEDs
(Я расширил это, чтобы вывести 16 юниверсов через 4 выходных контакта, этого достаточно для управления 2720 пиксельными светодиодами WS2812 RGB.)
Или это не то?
Mining
Сержант
Сообщения: 142
Зарегистрирован: 31 окт 2016, 15:01
Имя: Алексей

ESP8266, WS2812 и Jinx!

Сообщение Mining »

aidar_i писал(а): 03 сен 2019, 06:33 Mining, сможете проверить этот код?
у меня только одна лента 300 диодов.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Пусть 300, должен вывести полностью экран. 170+130, уже будут задействованы 2 юниверса , если даже так заработает, можно считать рабочим скетчем.
Настройте экран как будто 170х4=680, Длину поставьте как у Вашего экрана, высоту побольше чтобы было 680 светодиодов.

Отправлено спустя 9 минут 41 секунду:
Ivan_Kornege писал(а): 03 сен 2019, 06:38 но на сайте ардуино есть тема
Скетч оттуда.
Когда я пробовал не заработал, сейчас не помню на каком контроллере я его пробовал. Может NODEMCU был, выводами которого была путаница.
Попробуйте разобраться с кодами приведенными там, у меня туго сейчас временем.
EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09 мар 2019, 17:49
Имя: Egor

ESP8266, WS2812 и Jinx!

Сообщение EgorKa »

[ref]aidar_i[/ref], сделал рекпликацию Вашей матрицы 30*10 диодов и запустил
aidar_i писал(а): 30 июн 2019, 23:23 ArtNet_1_univers.flp
половина матрицы 30*5 работает.
aidar_i писал(а): 03 сен 2019, 06:33 сможете проверить этот код?
сегодня смог бы проверить Ваш код, но не понимаю как настроить Jinx! для матрицы 30*10 .
aidar_i писал(а): 03 сен 2019, 12:17 Длину поставьте как у Вашего экрана,
где поставить?
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

EgorKa писал(а): 03 сен 2019, 20:13 aidar_i, сделал рекпликацию Вашей матрицы 30*10 диодов и запустил
aidar_i писал(а): ↑01.07.2019{, 01:23}
ArtNet_1_univers.flp
Примеры все я проверял, работают. Этот пример для двух ЕСП. Скриншоты настроек выложены.

Отправлено спустя 1 минуту 50 секунд:
EgorKa писал(а): 03 сен 2019, 20:13 не понимаю как настроить Jinx! для матрицы 30*10
по горизонтали 30, по вертикали 22 в настройках матрицы в джинкс .
Mining
Сержант
Сообщения: 142
Зарегистрирован: 31 окт 2016, 15:01
Имя: Алексей

ESP8266, WS2812 и Jinx!

Сообщение Mining »

aidar_i писал(а): 03 сен 2019, 06:33 Mining, сможете проверить этот код?
4 юниверса на одну ногу D1 Wemos или Nodemcu (с изменённой библиотекой )
Почему то загорается белым в верхней строке первый справа диод , текст урезанный бежит только по верхним 5-и строкам, диод остается светить постоянно.
EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09 мар 2019, 17:49
Имя: Egor

ESP8266, WS2812 и Jinx!

Сообщение EgorKa »

[ref]aidar_i[/ref], протестировал выложенный Вами скетч, получил следующие результаты:
universe 0 -не работает. Засвечивает 30-й диод на матрице
universe 1 -не работает. Засвечивает 30-й диод на матрице
universe 2 -не работает. Засвечивает 30-й диод на матрице
universe 3 -работает с дефектом, засвечивает 30-й диод на матрице

Нашел первоисточник от автора скетча, на форуме кто пытался повторить работу скетча, получили такой же результат.
EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09 мар 2019, 17:49
Имя: Egor

ESP8266, WS2812 и Jinx!

Сообщение EgorKa »

Немного погуглил нашелся вот такой проект
https://www.youtube.com/watch?v=4viy1FxyLiY
Автор активно отвечает. Есть библиотеки и примеры на https://github.com/hpwit/artnet/blob/ma ... Artnet.ino
tobotobo
Рядовой
Сообщения: 12
Зарегистрирован: 26 дек 2020, 04:31
Имя: Владимир

ESP8266, WS2812 и Jinx!

Сообщение tobotobo »

Друзья, подскажите пожалуйста в чем может быть проблема, плата NodeMcu V3 V2 Lua, sd модуль видит отлично, файл out читает и выводит на матрицу.
Проблема в следующем.на матрице 8х8 зеркалит изображение по вертикали. а матрица 9 на 17, 9 - х , 17 -y .(153 шт.светодиода) получается каша. То есть впечатление будто светодиоды сдвинуты со своих мест на несколько позиций.
Да, забыл упомянуть , что матрица это вертикальная змейка с началом в правом нижнем углу. Судя по всему это и причина(?) Но можно же (https://github.com/macetech/FastLED-XY-Map-Generator) прописать свои параметры матрицы?
Подскажите пожалуйста где и как это сделать?
и еще, количество диодов 153, а какое число необходимо ставить в скетче? ведь в библиотеках в начале матриц диодам присваивают номер ,,0,, значит последний, в моём случае, должен быть 152. А я везде в скетче ставил 153.
Это может быть причиной неправильного отображения эффектов?
Прошу не ругать меня. Я пытаюсь разобраться.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Число равен количеству светодиодов.
В джинкс настройки поставьте правильно.
В первом сообщении есть скриншоты настроек, в них нужно поставить свои
tobotobo
Рядовой
Сообщения: 12
Зарегистрирован: 26 дек 2020, 04:31
Имя: Владимир

ESP8266, WS2812 и Jinx!

Сообщение tobotobo »

В джинкс я ставлю те настройки, с которыми эта матрица корректно работает в режиме онлайн.
Или для записи out. файла надо их как то изменять?
Дело в том ещё, что я обратил внимания на один момент. Похоже для записи файла out. вообще не важно какие настройки стоят в джинксе. Пробовал перебирать разные и записывать на карту- результат с разными настройками один((((
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

ESP8266, WS2812 и Jinx!

Сообщение aidar_i »

Просто выложите скриншоты своих настроек
tobotobo
Рядовой
Сообщения: 12
Зарегистрирован: 26 дек 2020, 04:31
Имя: Владимир

ESP8266, WS2812 и Jinx!

Сообщение tobotobo »

ИзображениеВот такие настройки, но повторю - их меняю а на матрице ничего не меняется

Отправлено спустя 1 час 20 минут 3 секунды:
на всякий случай уточню - 8х8 геометрия корректна, но зеркально по вертикали.
тот же скетч, но с размерами 9х17 абсолютный хаос. проверял на вертикальной линии, которая двигается справа налево, вместо линии рандомные пиксели по всей матрице.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «ESP8266»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя