4.7 KiB
4.7 KiB
Протокол MideaUART
Основные параметры UART
- Бодовая скорость: 9600
- Формат кадра: 8N1 (8 бит данных, отсутствие стоп-бита, четность отключена)
- Таймаут: 50 мс
Структура команды
struct Control {
Mode mode; // Режим работы
float targetTemp; // Целевая температура (°C)
bool modeChange; // Флаг смены режима
bool tempChange; // Флаг смены целевой температуры
uint8_t pwmArg; // ШИМ-аргумент (2 байта)
bool powerState; // Состояние питания
int16_t presets; // Индекс предварительно установленных действий
};
Доступные режимы работы
enum class Mode {
MODE_OFF, // Выключено
MODE_COOL, // Охлаждение
MODE_HEAT, // Отопление
MODE_AUTO, // Авторегулировка
MODE_DRY, // Сушка
MODE_FAN, // Вентилятор
MODE_SLEEP, // Сон
MODE_TURBO, // Турбо
MODE_PRESET_1-16 // Предварительно заданные режимы
};
Команды управления
4.1. Изменение режима работы
Control control;
control.mode = Mode::MODE_COOL; // Установка режима охлаждения
control.modeChange = true; // Нужно отправить команду
ac.control(control); // Таймаут 50 мс
4.2. Изменение температуры
control.targetTemp = 25.0f; // 25°C
control.tempChange = true; // Нужно отправить команду
ac.control(control);
4.3. Изменение параметров подогрева (PWM)
control.pwmArg = 7000; // ШИМ-аргумент (мощность)
ac.control(control);
4.4. Изменение глушения (Swing Mode)
control.swingMode = SwingMode::VERTICAL; // Вертикальное
ac.control(control);
4.5. Изменение состояния питания
ac.setPowerState(false); // Выключить питание
4.6. Изменение режима и температуры одновременно
control.mode = MODE_COOL; // Режим охлаждения
control.targetTemp = 26.0f; // Изменение целевой температуры
control.modeChange = true;
control.tempChange = true;
ac.control(control);
Пример полного цикла управления
void setup() {
Serial.begin(9600);
ac.setStream(&Serial);
ac.setup();
}
void loop() {
// Пример: включить охлаждение на 25°C через 3 секунды
delay(3000);
Control control;
control.mode = MODE_COOL;
control.targetTemp = 25.0f;
control.modeChange = true;
control.tempChange = true;
ac.control(control); // Таймаут 50 мс
// Подождать 5 минут коммутации
delay(300000);
// Выключить
ac.setPowerState(false);
}
Дополнительные функции
-
Получение состояния:
float indoorTemp = ac.getIndoorTemp(); // Текущая температура Mode currentMode = ac.getMode(); // Текущий режим float targetTemperature = ac.getTargetTemp(); // Целевая температура -
Сброс всех настроек:
ac.reset(); -
Создание предварительных действий:
control.presets = 5; // Установить алгоритм 5 ac.control(control);
Особенности реализации
- Тайминг: Все команды должны быть отправлены через 50 мс после инициализации
- Мультиплексирование: Одну команду можно отправить каждые 50 мс
- Порядок команд:
- Выбор режима
- Изменение температуры
- Установка параметров подогрева
- Включение/выключение питания
Примечания
- Все значения температуры в целых десятых градусов (15.7 = 157)
- Для создания алгоритмов используйте
presets-ше - Не забывайте вызывать
ac.loop()каждые ~5 мс