ESP8266, WS2812 и Jinx!
- Ivan_Kornege
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 29 апр 2017, 08:24
- Откуда: гАндурас
- Имя: Ivan
ESP8266, WS2812 и Jinx!
Автор ответил что одну ESP01 использует.
Hello!
Using one ESP01?
yusuf120581
Yes
Hello!
Using one ESP01?
yusuf120581
Yes
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 13 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP8266, WS2812 и Jinx!
Он скорее использовал 3 вывода есп по 4 юниверса на каждую ногу. 3х4х170=2040 пикселей.
Я не смог вывести на одну ногу 4 юниверса, только по одному. И чтобы подключить 1800 пикселей нужно мне 11 выводов есп по 1 юниверсу на каждом пине!
Не нашел готовое решение.
Я не смог вывести на одну ногу 4 юниверса, только по одному. И чтобы подключить 1800 пикселей нужно мне 11 выводов есп по 1 юниверсу на каждом пине!
Не нашел готовое решение.
ESP8266, WS2812 и Jinx!
[ref]aidar_i[/ref], здесь возможно ответ https://github.com/rstephan/ArtnetWifi/ ... -343058001
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 13 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP8266, WS2812 и Jinx!
Mining, сможете проверить этот код?
4 юниверса на одну ногу D1 Wemos или Nodemcu (с изменённой библиотекой )
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!
может чего то не догоняю, но на сайте ардуино есть тема 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.)
Или это не то?
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 13 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP8266, WS2812 и Jinx!
Пусть 300, должен вывести полностью экран. 170+130, уже будут задействованы 2 юниверса , если даже так заработает, можно считать рабочим скетчем.
Настройте экран как будто 170х4=680, Длину поставьте как у Вашего экрана, высоту побольше чтобы было 680 светодиодов.
Отправлено спустя 9 минут 41 секунду:
Когда я пробовал не заработал, сейчас не помню на каком контроллере я его пробовал. Может NODEMCU был, выводами которого была путаница.
Попробуйте разобраться с кодами приведенными там, у меня туго сейчас временем.
Настройте экран как будто 170х4=680, Длину поставьте как у Вашего экрана, высоту побольше чтобы было 680 светодиодов.
Отправлено спустя 9 минут 41 секунду:
Скетч оттуда.
Когда я пробовал не заработал, сейчас не помню на каком контроллере я его пробовал. Может NODEMCU был, выводами которого была путаница.
Попробуйте разобраться с кодами приведенными там, у меня туго сейчас временем.
ESP8266, WS2812 и Jinx!
[ref]aidar_i[/ref], сделал рекпликацию Вашей матрицы 30*10 диодов и запустил
половина матрицы 30*5 работает.
сегодня смог бы проверить Ваш код, но не понимаю как настроить Jinx! для матрицы 30*10 .
где поставить?
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 13 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP8266, WS2812 и Jinx!
Примеры все я проверял, работают. Этот пример для двух ЕСП. Скриншоты настроек выложены.EgorKa писал(а): 03 сен 2019, 20:13 aidar_i, сделал рекпликацию Вашей матрицы 30*10 диодов и запустил
aidar_i писал(а): ↑01.07.2019{, 01:23}
ArtNet_1_univers.flp
Отправлено спустя 1 минуту 50 секунд:
по горизонтали 30, по вертикали 22 в настройках матрицы в джинкс .
ESP8266, WS2812 и Jinx!
Почему то загорается белым в верхней строке первый справа диод , текст урезанный бежит только по верхним 5-и строкам, диод остается светить постоянно.aidar_i писал(а): 03 сен 2019, 06:33 Mining, сможете проверить этот код?
4 юниверса на одну ногу D1 Wemos или Nodemcu (с изменённой библиотекой )
ESP8266, WS2812 и Jinx!
[ref]aidar_i[/ref], протестировал выложенный Вами скетч, получил следующие результаты:
universe 0 -не работает. Засвечивает 30-й диод на матрице
universe 1 -не работает. Засвечивает 30-й диод на матрице
universe 2 -не работает. Засвечивает 30-й диод на матрице
universe 3 -работает с дефектом, засвечивает 30-й диод на матрице
Нашел первоисточник от автора скетча, на форуме кто пытался повторить работу скетча, получили такой же результат.
universe 0 -не работает. Засвечивает 30-й диод на матрице
universe 1 -не работает. Засвечивает 30-й диод на матрице
universe 2 -не работает. Засвечивает 30-й диод на матрице
universe 3 -работает с дефектом, засвечивает 30-й диод на матрице
Нашел первоисточник от автора скетча, на форуме кто пытался повторить работу скетча, получили такой же результат.
ESP8266, WS2812 и Jinx!
Немного погуглил нашелся вот такой проект
https://www.youtube.com/watch?v=4viy1FxyLiY
Автор активно отвечает. Есть библиотеки и примеры на https://github.com/hpwit/artnet/blob/ma ... Artnet.ino
https://www.youtube.com/watch?v=4viy1FxyLiY
Автор активно отвечает. Есть библиотеки и примеры на https://github.com/hpwit/artnet/blob/ma ... Artnet.ino
ESP8266, WS2812 и Jinx!
Друзья, подскажите пожалуйста в чем может быть проблема, плата 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.
Это может быть причиной неправильного отображения эффектов?
Прошу не ругать меня. Я пытаюсь разобраться.
Проблема в следующем.на матрице 8х8 зеркалит изображение по вертикали. а матрица 9 на 17, 9 - х , 17 -y .(153 шт.светодиода) получается каша. То есть впечатление будто светодиоды сдвинуты со своих мест на несколько позиций.
Да, забыл упомянуть , что матрица это вертикальная змейка с началом в правом нижнем углу. Судя по всему это и причина(?) Но можно же (https://github.com/macetech/FastLED-XY-Map-Generator) прописать свои параметры матрицы?
Подскажите пожалуйста где и как это сделать?
и еще, количество диодов 153, а какое число необходимо ставить в скетче? ведь в библиотеках в начале матриц диодам присваивают номер ,,0,, значит последний, в моём случае, должен быть 152. А я везде в скетче ставил 153.
Это может быть причиной неправильного отображения эффектов?
Прошу не ругать меня. Я пытаюсь разобраться.
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 13 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP8266, WS2812 и Jinx!
Число равен количеству светодиодов.
В джинкс настройки поставьте правильно.
В первом сообщении есть скриншоты настроек, в них нужно поставить свои
В джинкс настройки поставьте правильно.
В первом сообщении есть скриншоты настроек, в них нужно поставить свои
ESP8266, WS2812 и Jinx!
В джинкс я ставлю те настройки, с которыми эта матрица корректно работает в режиме онлайн.
Или для записи out. файла надо их как то изменять?
Дело в том ещё, что я обратил внимания на один момент. Похоже для записи файла out. вообще не важно какие настройки стоят в джинксе. Пробовал перебирать разные и записывать на карту- результат с разными настройками один((((
Или для записи out. файла надо их как то изменять?
Дело в том ещё, что я обратил внимания на один момент. Похоже для записи файла out. вообще не важно какие настройки стоят в джинксе. Пробовал перебирать разные и записывать на карту- результат с разными настройками один((((
ESP8266, WS2812 и Jinx!

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