• Скидка по промокоду FORUM_CHIPSTUDIO продолжает работать в магазине.

Reflex 2.0 CLI + ESP32 WiFi

sPave

Well-known member
Нет никакой разницы, каким образом значения задаются.
Совершенно точно CLI не отдает актуальное значение с потенциометра, а только, которое было задано командой. После включения всегда ноль показывает, хотя по факту не первое и не последнее значение в таблице. Мне снять видео? Я не придираюсь, продукт помогаю совершенствовать. Ну надеюсь.

то значит "начинает использовать значения со всех потенциометров"?
Нет такого, показалось.
 

sPave

Well-known member

Вложения

sPave

Well-known member
@Евгений приветствую! По поводу CLI. Уже поднимал вопрос, не помню чем закончилось. Reflex перед корректным ответом шлет "мусор". Я пытаюсь фильтровать, но это не решение. Вот что вижу:
16:48:54.945 -> Ответ от Reflex: ]Pxy`Hi2.7.0

16:48:54.945 -> ]
16:48:54.945 -> Ответ от Reflex: =!SVzYSlew vol 1
16:48:54.977 -> ]

16:49:08.936 -> ]
16:49:08.936 -> Ответ от Reflex: a}P"Slew vol 1
16:49:08.968 -> ]
16:49:08.968 -> ]

16:49:09.087 -> ]
16:49:14.904 -> Команда отправлена: SYS+FW
16:49:15.935 -> ]

16:49:15.935 -> ]
16:49:15.935 -> Ответ от Reflex: yyD@X9@y2.7.0
16:49:15.935 -> ]

"Slew vol 1" и "2.7.0" это чистый кусок ответов, что ожидаю.

Это ESP32, Chip info: ESP32-D0WD-V3 (Вроде WROOM называется). На Ардуино Uno не удалось получить ответа, даже не вижу что там, логаналайзер сломался.
К Рефлексу ничего не подключено. Система собрана в лотке из под кота(но чистом), провода не экранированные, но 6-8 см. Два USB от ПК, но землю между платами прокинул(плохо, но сомневаюсь, что в этом дело).


#include <HardwareSerial.h>
HardwareSerial mySerial(1); // Используем UART1 на ESP32
const int RX_PIN = 16; // Подключите TX Reflex
const int TX_PIN = 17; // Подключите RX Reflex
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 6000;
void setup() {
Serial.begin(115200); // USB для монитора порта
mySerial.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN); // UART для Reflex
delay(1000);
Serial.println("Инициализация...");
}
void loop() {
// Отправка команды раз в 3 секунды
if (millis() - lastSendTime >= sendInterval) {
mySerial.print("SYS+FW?\r\n"); // Корректный формат
Serial.println("Команда отправлена: SYS+FW");
delay(1000);
mySerial.print("CS+NAME+0?\r\n"); // Корректный формат
lastSendTime = millis();
}
// Прием ответа
static String response = "";
while (mySerial.available()) {
char c = mySerial.read();
// Печатаемые символы ASCII (от 32 до 126)
if (c >= 32 && c <= 126) {
response += c;
}
// Если пришёл символ окончания строки
if (c == '\n' || c == '\r') {
if (response.length() > 0) {
Serial.println("Ответ от Reflex: " + response);
response = ""; // Очистить строку
}
}
// Отображение непечатаемых байтов (для отладки)
if (c < 32 && c != '\n' && c != '\r') {
//Serial.print("Непечатаемый символ [HEX: ");
//Serial.print((uint8_t)c, HEX);
Serial.println("]");
}
}
}
 

Вложения

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

Евгений

Administrator
Команда форума
Reflex перед корректным ответом шлет "мусор".
Он шлет, что нужно, без всякого мусора. Возьмите за основу готовый пример из темы

Смотрите свой код.
 

sPave

Well-known member
Смотрите свой код.
Сложновато для меня, не могу понять в чем дело. Очень выручили бы, если готовый простейший скетч показали, который тупа каждые несколько сек. шлет любой запрос и, главное, ответ корректно отображается в мониторе порта.
 

Евгений

Administrator
Команда форума
Очень выручили бы, если готовый простейший скетч показали, который тупа каждые несколько сек. шлет любой запрос и, главное, ответ корректно отображается в мониторе порта.
Это все уже сделано в примере по ссылке выше. Активируйте в нем режим отладки и в мониторе порта будут отображаться запросы / ответы.
 

sPave

Well-known member
Это все уже сделано в примере по ссылке выше. Активируйте в нем режим отладки и в мониторе порта будут отображаться запросы / ответы.
Приветствую. Reflex_WiFi.ino у меня не компилируется, там много ошибок. Опечатку в plane и plain я нашел, другие ошибки выше компетенции. Похоже, второй раунд с CLI проигран.

Я нашел старый и рабочий скетч и он так же возвращает что-то лишнее
1745252217540.png

Стирал Рефлек, пробовал старую. новую прошивку.
Я то криворукий, скормил исходники нейросети, оно тоже не может понять в чем дело.
 

Евгений

Administrator
Команда форума
Опечатку в plane и plain я нашел, другие ошибки выше компетенции.
Там нет никаких опечаток; как написано, так и должно быть. Проверьте, те ли библиотеки установлены и вообще установлены ли. Поддержка модулей ESP32 точно такая, как указано в примере?

Я то криворукий, скормил исходники нейросети, оно тоже не может понять в чем дело.
Еще погадать можно.

Для того, чтобы "поиграться", можно взять любой переходник USB-UART, подключить его к выводам CLI модуля Reflex, открыть любой терминал, например, Putty или тот же монитор порта в Ардуино. И вручную набирать команды, отправлять их на Reflex и наблюдать ответы. В терминале должна быть активирована явная передача символов CR, LF(NL).
 

sPave

Well-known member
Проверьте, те ли библиотеки установлены
Приветствую. Да, дело было в библиотеках. Там обновилось, пришлось установить старые версии и Ваш проект прошился. При подключении к сети ReflexConfig ввожу пароль, перезапускаю ESP32 и подключение к моей сети не происходит, сеть ReflexConfig опять поднимается на адресе 192.168.4.1.
Мне нужно опустить како-то пин(31, вроде) в LOW, что бы конфигуратор не запускался или оно само должно запускать конфиг только один раз, если все в штатном режиме?
И если все хорошо после конфигурирования, я смогу использовать монитор порта Ардуино для общения с Reflex (мне только это нужно, управление через браузер пока не интересует).

Спасибо за идею с переходником USB-UART, буду ждать, как и новый логический анализатор.
 

Евгений

Administrator
Команда форума
Мне нужно опустить како-то пин(31, вроде) в LOW, что бы конфигуратор не запускался или оно само должно запускать конфиг только один раз, если все в штатном режиме?
Да, после сохранения настроек модуль должен запускаться в рабочем режиме. Т.к. у вас другой модуль, попробуйте физически соединить GPIO35 модуля ESP32 с GND.

И если все хорошо после конфигурирования, я смогу использовать монитор порта Ардуино для общения с Reflex
Нет. Активировав отладочный режим ( SERIAL0_LOG ), в мониторе порта можно будет только наблюдать запросы / ответы как реакцию на действия пользователя на странице управления и периодический запрос частоты / разрядности. Можно, например, понажимать кнопки управления плеером.
Чтобы управлять Reflex через монитор порта нужно реализовать на ESP32 прием по serial0 и вывод полученных данных на порт, к которому подключен Reflex. Также и с приемом. Либо через переходник USB-UART, как писал выше.
 

sPave

Well-known member
Чтобы управлять Reflex через монитор порта нужно реализовать на ESP32 прием по serial0 и вывод полученных данных на порт
Жаль. Моя цель научить Пайтон приложение общаться с Рефлексом через UART, это подвижки с сторону панели управления, как у царских аудио интерфейсов.
Есть скетч, который точно успешно работал с одной из моих ESP32, а сейчас что-то пошло не так и вижу лишнее перед ответом. Нет ли мыслей, что с ним не так?

#include <HardwareSerial.h>
HardwareSerial mySerial(1); // Аппаратный UART, TX = GPIO17, RX = GPIO16
String userInput = ""; // Буфер для ввода команды вручную
void setup() {
Serial.begin(115200); // Отладка через USB
mySerial.begin(115200, SERIAL_8N1, 16, 17); // UART1 с указанными пинами RX/TX
delay(1000);
mySerial.print("SYS?\r\n");
Serial.println("Команда отправлена: SYS?");
}
void loop() {
// Чтение ответа от Reflex 3.0
if (mySerial.available()) {
uint8_t c = mySerial.read();
Serial.print((char)c); // Отображение в человекочитаемом виде
}
// Чтение пользовательского ввода из монитора порта
if (Serial.available()) {
char c = (char)Serial.read();
if (c == '\n' || c == '\r') { // Конец строки: отправка команды
if (userInput.length() > 0) {
mySerial.print(userInput + "\r\n"); // Добавляем \r\n к команде
Serial.println("Команда отправлена: " + userInput);
userInput = ""; // Очистка буфера
}
} else {
userInput += c; // Записываем символы команды
}
}
}
 

Евгений

Administrator
Команда форума
Моя цель научить Пайтон приложение общаться с Рефлексом через UART
Тогда через переходник USB-UART.

это подвижки с сторону панели управления, как у царских аудио интерфейсов.
Можете привести пример таких интерфейсов?
 

Aleksandr

Well-known member
Жаль. Моя цель научить Пайтон приложение общаться с Рефлексом через UART, это подвижки с сторону панели управления, как у царских аудио интерфейсов.
Есть скетч, который точно успешно работал с одной из моих ESP32, а сейчас что-то пошло не так и вижу лишнее перед ответом. Нет ли мыслей, что с ним не так?

#include <HardwareSerial.h>
HardwareSerial mySerial(1); // Аппаратный UART, TX = GPIO17, RX = GPIO16
String userInput = ""; // Буфер для ввода команды вручную
void setup() {
Serial.begin(115200); // Отладка через USB
mySerial.begin(115200, SERIAL_8N1, 16, 17); // UART1 с указанными пинами RX/TX
delay(1000);
mySerial.print("SYS?\r\n");
Serial.println("Команда отправлена: SYS?");
}
void loop() {
// Чтение ответа от Reflex 3.0
if (mySerial.available()) {
uint8_t c = mySerial.read();
Serial.print((char)c); // Отображение в человекочитаемом виде
}
// Чтение пользовательского ввода из монитора порта
if (Serial.available()) {
char c = (char)Serial.read();
if (c == '\n' || c == '\r') { // Конец строки: отправка команды
if (userInput.length() > 0) {
mySerial.print(userInput + "\r\n"); // Добавляем \r\n к команде
Serial.println("Команда отправлена: " + userInput);
userInput = ""; // Очистка буфера
}
} else {
userInput += c; // Записываем символы команды
}
}
}
Добавлено очистка буфера
 

Вложения

Евгений

Administrator
Команда форума
Universal Audio. Apollo или Volt. Вроде самое продвинутое ПО...
Благодарю за информацию.


сейчас что-то пошло не так и вижу лишнее перед ответом.
В этой проверке теряется последний символ: ответ заканчивается символом '\n', а чтение всегда прервется символом '\r', поэтому символ '\n' будет первым при следующем чтении. Нужно проверять так: if (c == '\n')
 
Верх