ESP, IoT Анализатор аудиоспектра на ESP32

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric, у меня на скрине скеч ток скаченый по умолчанию все стоит так что меняй версию ядра
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Вот как бывает Более свежая версия строит козни а старая все ставит на свои места век живи век учись.
 

Вложения

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Отключил WEB строка 55 поставил вместо 1 ноль и выдал просто зачитаешься.
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino: In function 'void spectrus_Mode()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:726:26: error: 'posOffset' was not declared in this scope
posLevel = vReal[posOffset[pos]];
^~~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino: In function 'void lamp_Mode()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:55: error: 'months' was not declared in this scope
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:55: note: suggested alternative: 'smooth'
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:87: error: 'weekDays' was not declared in this scope
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino: In function 'void buttonTick()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:80:13: error: 'local_IP' was not declared in this scope
if (local_IP != "") {
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:80:13: note: suggested alternative: 'locale_t'
if (local_IP != "") {
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino: In function 'void buttonTick1()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:144:13: error: 'local_IP' was not declared in this scope
if (local_IP != "") {
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:144:13: note: suggested alternative: 'locale_t'
if (local_IP != "") {
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino: In function 'void ir_tick_spectrus()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:99:26: error: 'local_IP' was not declared in this scope
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:99:26: note: suggested alternative: 'locale_t'
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:55: error: 'months' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:55: note: suggested alternative: 'smooth'
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:87: error: 'weekDays' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino: In function 'void ir_tick_lamp()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:230:26: error: 'local_IP' was not declared in this scope
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:230:26: note: suggested alternative: 'locale_t'
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:55: error: 'months' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:55: note: suggested alternative: 'smooth'
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:87: error: 'weekDays' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~~~
exit status 1

Compilation error: 'posOffset' was not declared in this scope

Снимок экрана (6).png

Тишина образовалась не на шутку, Так кто ни будь попробовал внести изменения в строке 55 единицу поменять на ноль и запустить компиляцию.

В строке 60 цифра должна быть 24 а не 18 и не 16 (как кто то писал) если ширина матрице 48 это количество диодов в строке 58.
 

bort707

★★★★★★✩
21 Сен 2020
3,368
978
Тишина потому что вряд ли кто помнит код наизусть, чтобы по номеру строки сразу понять, о чем вы.
Если вы хотите осмысленного разговора - пишете подробно и со ссылками на части текста.
По мне так фраза
если ширина матрице 48 это количество диодов в строке 58.
звучит бредово. Обоснуйте
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric,
C++:
//===== Параметры LED-ленты (матрицы) =======================================================
58 #define WIDTH 48                         // Ширина матрицы
59 #define HEIGHT 16                        // Высота матрицы
60 #define NUM_BANDS 48                     // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)
61 #define VOLUME_SCALE max(WIDTH, HEIGHT)  // длина шкалы громкости
по русски же написана ширина это и есть количество столбиков в матрице тобишь в 58 и 60 строке их должно быть одинаково
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
57 //===== Параметры LED-ленты (матрицы) =======================================================
58 #define WIDTH 32 // Ширина матрицы
59 #define HEIGHT 16 // Высота матрицы
60 #define NUM_BANDS 16 // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)

Я имел в виду вот это #define NUM_BANDS
Матрица 16Х16 #define NUM_BANDS 8
Матрица 32Х16 #define NUM_BANDS 16
Матрица 48Х16 #define NUM_BANDS 24
и в комментарии написано максимум 24 столбика
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric,
все понимаю но кусок кода в студию пожплуста ( через параметр вставить код пожалуста )
просмотрел код не нашол такова
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Посмотрите видео по ссылке с 6.08 по 6.55 минуты для чего это делается и вы поймете
а ставить неопределенное число это фантазии самого пользователя.

Вот скриншот
 

Вложения

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric, ну незнаю может автор что ошибся
C++:
//===== Параметры LED-ленты (матрицы) =======================================================
#define WIDTH 32                         // Ширина матрицы
#define HEIGHT 16                        // Высота матрицы
#define NUM_BANDS 32                     // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)
нашол как сам шил 2 матрицы 16х16 тобыш получилось ширина 32 высота 16 у меня работала . шас в другом месте не под рукой

да заметил как автор и писал что просаживается фпс на больших матрицах

@Seric, у тебя какая ширина ? и высота ?
 
Изменено:

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
@wulf,
Нет автор не ошибся а улучшил визуализацию

32Х16 значит будет #define NUM_BANDS 16 два плавных подъёма столбов сначала один затем второй первый затухает второй отстает.

И самое важное не забываем автор сделал все правильно в первом проекте но потом второй автор переписал код и если что то не так я здесь не причем сам пытаюсь разобраться что тут не так как нужно не зря я затронул тему нарвавшись на ошибки.
 

Олег Поляков

★★★★✩✩✩
18 Янв 2022
340
247
www.1812.ru
О, как много всего написано в один день!
WIDTH и HEIGHT - это физические значения ширины и высоты светодиодной матрицы.
NUM_BANDS - это количество столбиков.
Например, мы имеем матрицу шириной в 32 светодиода. Если хотим, чтобы каждый столбик был шириной в 2 светодиода, то выставляем NUM_BANDS в 16.

На матрице 48x16 при ширине столбика в 1 светодиод скорость отрисовки экрана у меня получалась 20-21 кадр в секунду.
На матрице 64x16 - 16-18 кадров, что уже визуально смотрелось плохо. Появлялся эффект запаздывания от звука.
 
Изменено:

weacomeout

✩✩✩✩✩✩✩
22 Фев 2025
7
2
@Олег Поляков
Олег, выручай, сильно прошу. Как в твоей прошивке сказать плате стартовать не с левого нижнего края, а с правого нижнего? Пихал диоды в корпус, пока он лежал лицом вниз. Теперь вся картинка отзеркалена ((

@wulf, извини, тебя тоже пингану, кажется, ты тоже довольно неплохо разбираешься в этом. Помоги, пожалуйста, если не затруднит.
 

Олег Поляков

★★★★✩✩✩
18 Янв 2022
340
247
www.1812.ru
@weacomeout, если и можно исправить, то только тут:
C++:
// FastLED_NeoMaxtrix - see https://github.com/marcmerlin/FastLED_NeoMatrix for Tiled Matrixes, Zig-Zag and so forth
FastLED_NeoMatrix *matrix = new FastLED_NeoMatrix(leds, kMatrixWidth, kMatrixHeight,
                                                  NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +  // Замечено, что LED-лента, спаянная по схеме "змейка" и готовая матрица 16x16 по разному реагируют на эту настройку (зеркалят по вертикали). Поэтому: RIGHT - для матрицы; LEFT - для ленты
                                                  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG + NEO_TILE_BOTTOM + NEO_TILE_LEFT + NEO_TILE_ROWS);
 

88Павел88

✩✩✩✩✩✩✩
27 Ноя 2025
1
0
Здравствуйте.Ребята помогите Пожалуйста с проектом. Схему сделал, но почему то яркость сама повышается до максимума и не понижается, иногда управление одной кнопкой не работает, помогает перезагрузка esp32, но это временно. Еще переключение с пульта между анализатором и лампой на кнопку звездочка происходит через несколько раз с трудом. Какую версию Ардуино нужно использовать 1.8.19 или 2.3.6. Какая версия ядра esp32 нужно установить?. Я так понял есть не совместимость библиотек.В проекте указанные библиотеки я установил но с ними идут их зависимости. Помогите с версиями библиотек нужных для проекта.
 
Изменено:

Олег Поляков

★★★★✩✩✩
18 Янв 2022
340
247
www.1812.ru
@88Павел88, знаю про эту неприятность. Она появляется только в том случае, когда меняются режимы с Анализатора на Лампу и обратно. Пока локализовать ошибку не удалось.
 

avr2012

✩✩✩✩✩✩✩
2 Апр 2020
9
1
Всем привет!
При компиляции выдается ошибка
In file included from C:\Users\admin\Documents\Arduino\Spectrus_esp32\Spectrus_esp32.ino:21:0:
C:\Program Files (x86)\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.h:12:32: fatal error: Adafruit_I2CDevice.h: No such file or directory
compilation terminated.

^
Spectrus_esp32:96:1: error: 'arduinoFFT' does not name a type
arduinoFFT FFT = arduinoFFT(vReal, vImag, SAMPLES, SAMPLING_FREQ);
^
C:\Users\admin\Documents\Arduino\Spectrus_esp32\Spectrus_esp32.ino: In function 'void spectrus_Mode()':
Spectrus_esp32:705:7: error: 'FFT' was not declared in this scope
FFT.DCRemoval();


Ошибка приложенной в архиве приложенной в посте библиотеки. Кто-то знает как исправить?
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,368
978
все библиотеки установлены - все равно выдает ошибку.
Значит не все. Или установлены неправильно.
Компилятору виднее.

Покажите скрин каталога библиотек, чтобы было видно библиотеку Adafruit_I2CDevice
 

avr2012

✩✩✩✩✩✩✩
2 Апр 2020
9
1
Значит не все. Компилятору виднее.
Если бы было так все просто, то я бы не спрашивал. С Adafruit_I2CDevice.h поборолся. Установил альтернативную библиотеку. А вот arduinoFFT компелятор находит, но все равно пишет ошибку
 

bort707

★★★★★★✩
21 Сен 2020
3,368
978
А вот arduinoFFT компелятор находит, но все равно пишет ошибку
Потому что там дело не в библиотеке, там ошибка другая. Компилятор же по каждой проблеме пишет, что не так и в какой строке.

Покажите, откуда вы скачивали код.
 

avr2012

✩✩✩✩✩✩✩
2 Апр 2020
9
1
Потому что там дело не в библиотеке, там ошибка другая. Компилятор же по каждой проблеме пишет, что не так и в какой строке.

Покажите, откуда вы скачивали код.
Код скачен с первой страницы данного поста по спектроанализатору
 

bort707

★★★★★★✩
21 Сен 2020
3,368
978
В архиве нет библиотеки arduinoFFT. Вы должны были установить ее сами. Вы это сделали? Какой номер версии?
 
Изменено: