Совершенно точно CLI не отдает актуальное значение с потенциометра, а только, которое было задано командой. После включения всегда ноль показывает, хотя по факту не первое и не последнее значение в таблице. Мне снять видео? Я не придираюсь, продукт помогаю совершенствовать. Ну надеюсь.
@Евгений приветствую! По поводу 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: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("]");
}
}
}
В качестве примера применения интерфейса командной строки (CLI) модулей Reflex 2.0 / 3.0 предлагаем проект управления по WiFi с помощью модуля ESP32. Во вложении есть pdf-версия данного описания. Что понадобится 1) Модуль Reflex 2.0 или Reflex 3.0 2) Модуль ESP32 (объем...
Сложновато для меня, не могу понять в чем дело. Очень выручили бы, если готовый простейший скетч показали, который тупа каждые несколько сек. шлет любой запрос и, главное, ответ корректно отображается в мониторе порта.
Очень выручили бы, если готовый простейший скетч показали, который тупа каждые несколько сек. шлет любой запрос и, главное, ответ корректно отображается в мониторе порта.
Приветствую. Reflex_WiFi.ino у меня не компилируется, там много ошибок. Опечатку в plane и plain я нашел, другие ошибки выше компетенции. Похоже, второй раунд с CLI проигран.
Я нашел старый и рабочий скетч и он так же возвращает что-то лишнее
Стирал Рефлек, пробовал старую. новую прошивку.
Я то криворукий, скормил исходники нейросети, оно тоже не может понять в чем дело.
Там нет никаких опечаток; как написано, так и должно быть. Проверьте, те ли библиотеки установлены и вообще установлены ли. Поддержка модулей ESP32 точно такая, как указано в примере?
Для того, чтобы "поиграться", можно взять любой переходник USB-UART, подключить его к выводам CLI модуля Reflex, открыть любой терминал, например, Putty или тот же монитор порта в Ардуино. И вручную набирать команды, отправлять их на Reflex и наблюдать ответы. В терминале должна быть активирована явная передача символов CR, LF(NL).
Приветствую. Да, дело было в библиотеках. Там обновилось, пришлось установить старые версии и Ваш проект прошился. При подключении к сети ReflexConfig ввожу пароль, перезапускаю ESP32 и подключение к моей сети не происходит, сеть ReflexConfig опять поднимается на адресе 192.168.4.1.
Мне нужно опустить како-то пин(31, вроде) в LOW, что бы конфигуратор не запускался или оно само должно запускать конфиг только один раз, если все в штатном режиме?
И если все хорошо после конфигурирования, я смогу использовать монитор порта Ардуино для общения с Reflex (мне только это нужно, управление через браузер пока не интересует).
Спасибо за идею с переходником USB-UART, буду ждать, как и новый логический анализатор.
Мне нужно опустить како-то пин(31, вроде) в LOW, что бы конфигуратор не запускался или оно само должно запускать конфиг только один раз, если все в штатном режиме?
Да, после сохранения настроек модуль должен запускаться в рабочем режиме. Т.к. у вас другой модуль, попробуйте физически соединить GPIO35 модуля ESP32 с GND.
Нет. Активировав отладочный режим ( SERIAL0_LOG ), в мониторе порта можно будет только наблюдать запросы / ответы как реакцию на действия пользователя на странице управления и периодический запрос частоты / разрядности. Можно, например, понажимать кнопки управления плеером.
Чтобы управлять Reflex через монитор порта нужно реализовать на ESP32 прием по serial0 и вывод полученных данных на порт, к которому подключен Reflex. Также и с приемом. Либо через переходник USB-UART, как писал выше.
Жаль. Моя цель научить Пайтон приложение общаться с Рефлексом через 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; // Записываем символы команды
}
}
}
Жаль. Моя цель научить Пайтон приложение общаться с Рефлексом через 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; // Записываем символы команды
}
}
}
Universal Audio. Apollo или Volt. Вроде самое продвинутое ПО, но не знаю, что там в лакшери сегменте, который в рэки устанавливается и майклыджексоны с металликой в них играют.
В этой проверке теряется последний символ: ответ заканчивается символом '\n', а чтение всегда прервется символом '\r', поэтому символ '\n' будет первым при следующем чтении. Нужно проверять так: if (c == '\n')