Контроллер кондиционера на Wemos D1 R1 ESP8266

Уже неделю бьюсь над этой задачкой, прочитал несколько статей на русском и англ, посмотрел видосы, сохранил какие-то коды потом залил скетч для их отправки, расстояние до кондея 1.5м реакции нет, диод на камеру телефона мигает. оказалось что коды отличаются в зависимости от того каким скетчем их сохранять, поэтому даже не могу предположить каким скетчем правильно сохранять IRrecvDumpV3 или IRrecvDumpV2 или этим который вайбкоднул с ИИ

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// Номер пина ИК-приёмника (D7 = GPIO13)
const uint16_t kRecvPin = 13;

// Настройки буфера
const uint16_t kCaptureBufferSize = 1024;
const uint8_t kTimeout = 50;  // для кондиционеров
const uint8_t kMinUnknownSize = 12;
const uint8_t kTolerancePercentage = kTolerance;

IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true);
decode_results results;

void setup() {
  Serial.begin(115200);
  delay(200);  // Дать Serial стартовать

  irrecv.setUnknownThreshold(kMinUnknownSize);
  irrecv.setTolerance(kTolerancePercentage);
  irrecv.enableIRIn();

  Serial.println("IRrecvDump готов. Жми на кнопки пульта...");
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(resultToHumanReadableBasic(&results));
    Serial.println(resultToSourceCode(&results));
    Serial.println();  // пустая строка для читаемости
    irrecv.resume();   // готов к следующему приёму
  }
}
буду рад дельным подсказкам.

Информацию приняли, держи нас в курсе.

3 лайка

Приведённый скетч предназначен исключительно для приёма сигнала, отправки чего либо в нём нет от слова “совсем”. Так что, только Вы знаете, что у Вас там:

именно это я это и писал.

в общем IRrecvDumpV3 вырвал такой код, и насколько я понимаю успешно декодировал

Timestamp : 000260.105
Library : v2.8.6

Protocol : TCL112AC
Code : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3084, 1616, 470, 1114, 472, 1114, 472, 326, 494, 326, 492, 326, 494, 1112, 472, 326, 494, 324, 494, 1112, 472, 1114, 472, 326, 492, 1114, 472, 326, 492, 326, 494, 1112, 474, 1112, 472, 324, 494, 1092, 494, 1112, 472, 324, 494, 324, 496, 1110, 474, 324, 494, 324, 494, 324, 494, 1112, 472, 324, 496, 322, 496, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 494, 324, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 494, 326, 494, 324, 494, 324, 494, 1112, 474, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 1090, 494, 324, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 494, 1092, 494, 1092, 494, 324, 494, 324, 496, 322, 494, 324, 494, 324, 494, 1112, 474, 324, 494, 324, 496, 324, 496, 322, 496, 324, 496, 322, 492, 326, 492, 326, 472, 346, 472, 348, 470, 348, 472, 348, 472, 346, 472, 346, 478, 342, 496, 322, 498, 320, 524, 294, 524, 294, 524, 294, 498, 320, 496, 322, 496, 324, 494, 324, 494, 324, 494, 326, 492, 326, 492, 326, 492, 326, 492, 326, 492, 326, 492, 326, 492, 326, 492, 326, 492, 328, 490, 1114, 472, 328, 490, 1114, 472, 328, 490, 328, 490}; // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};

Timestamp : 000260.298
Library : v2.8.6

Protocol : TCL112AC
Code : 0x23CB2601002403070200000080C5 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3082, 1596, 492, 1094, 492, 1094, 492, 328, 490, 326, 492, 326, 492, 1112, 476, 324, 492, 326, 492, 1094, 492, 1116, 468, 328, 492, 1112, 472, 330, 490, 328, 490, 1114, 472, 1114, 472, 328, 490, 1114, 472, 1114, 472, 328, 490, 328, 490, 1114, 472, 328, 490, 328, 490, 1114, 472, 328, 492, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 492, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 328, 490, 1114, 470, 328, 490, 328, 490, 1116, 470, 328, 490, 328, 490, 1114, 470, 1116, 470, 330, 490, 328, 490, 330, 490, 328, 490, 330, 488, 330, 488, 1116, 470, 1116, 470, 1116, 470, 330, 488, 330, 488, 330, 488, 330, 488, 330, 488, 330, 488, 1116, 470, 330, 488, 352, 466, 352, 468, 350, 468, 350, 468, 350, 468, 350, 468, 352, 466, 352, 468, 350, 468, 352, 468, 350, 468, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 352, 466, 354, 466, 352, 466, 352, 466, 354, 466, 352, 466, 354, 464, 354, 466, 354, 464, 354, 466, 352, 466, 354, 464, 354, 464, 354, 464, 354, 464, 354, 464, 1122, 464, 1122, 462, 354, 464, 1122, 462, 354, 464, 354, 464, 356, 462, 1124, 460, 1124, 462}; // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC5};

Timestamp : 000269.687
Library : v2.8.6

Protocol : TCL112AC
Code : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3084, 1594, 494, 1114, 472, 1114, 472, 324, 494, 324, 494, 324, 494, 1114, 472, 324, 496, 322, 496, 1092, 494, 1112, 472, 324, 494, 1092, 494, 324, 494, 324, 494, 1092, 494, 1092, 492, 324, 496, 1110, 474, 1112, 474, 324, 496, 324, 494, 1112, 472, 324, 494, 324, 494, 324, 494, 1114, 472, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 496, 322, 496, 324, 494, 324, 496, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 496, 322, 496, 324, 494, 324, 496, 1090, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 496, 324, 494, 324, 496, 1112, 472, 324, 494, 324, 494, 324, 496, 324, 496, 322, 496, 322, 496, 322, 496, 324, 496, 324, 494, 1092, 494, 1092, 492, 324, 496, 322, 496, 324, 496, 322, 496, 324, 494, 1090, 494, 324, 494, 324, 494, 326, 494, 324, 494, 324, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 322, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 322, 496, 324, 494, 324, 496, 324, 494, 324, 494, 324, 496, 322, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 322, 494, 324, 494, 324, 494, 324, 496, 1090, 494, 324, 494, 1090, 494, 324, 494, 324, 494}; // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};

Timestamp : 000269.879
Library : v2.8.6

Protocol : TCL112AC
Code : 0x23CB2601002003070200000080C1 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3084, 1594, 494, 1092, 492, 1092, 494, 322, 494, 324, 496, 324, 494, 1092, 492, 324, 494, 326, 494, 1090, 494, 1090, 494, 326, 492, 1112, 474, 324, 494, 324, 496, 1092, 492, 1092, 492, 324, 494, 1092, 494, 1092, 494, 324, 494, 326, 494, 1092, 494, 324, 494, 324, 494, 1092, 492, 324, 494, 324, 494, 324, 494, 326, 492, 326, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 326, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 1092, 492, 326, 494, 324, 494, 1112, 474, 1112, 472, 326, 496, 322, 494, 324, 494, 324, 494, 324, 494, 324, 494, 1110, 474, 1092, 494, 1112, 472, 326, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 1112, 474, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 494, 324, 494, 324, 494, 324, 494, 324, 494, 324, 496, 324, 496, 324, 494, 324, 494, 324, 494, 324, 492, 326, 494, 324, 494, 326, 494, 324, 494, 324, 494, 326, 492, 326, 492, 326, 490, 330, 470, 348, 472, 348, 470, 348, 470, 348, 470, 348, 470, 348, 470, 348, 472, 348, 472, 346, 472, 1134, 450, 1116, 470, 348, 494, 324, 496, 324, 496, 322, 496, 322, 496, 1088, 496, 1090, 496}; // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC1};

к сожалению ИИ не может собрать скетч для отправки кода, может быть есть готовый прототип скетча для отправки кодов как есть готовый пример для считывания IRrecvDumpV3 ?

А мне казалось, что Вы писали:

Нет? Ну, простите.

Может, просто Вы не можете его об этом правильно попроить.

Конечно, есть. В примерах к библиотеке. Неужели Вы туда не заглядывали?

1 лайк

С:\Documents\Arduino\libraries\IRremoteESP8266\examples


я не телепат, не подскажите какой из них подойдет для моей платы?

Это заметно.

Никто не знает, пример чего именно Вам нужен. Примеры отправки информации там есть и не один. Смотрите, изучайте, пробуйте.

Все эти подходят для вашей платы :face_with_monocle:

за основу и по совету ИИ взял содержимое CommonAcControl и предложил ему его переделать под мои коды

Timestamp : 000260.105
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3084, 1616,  470, 1114,  472, 1114,  472, 326,  494, 326,  492, 326,  494, 1112,  472, 326,  494, 324,  494, 1112,  472, 1114,  472, 326,  492, 1114,  472, 326,  492, 326,  494, 1112,  474, 1112,  472, 324,  494, 1092,  494, 1112,  472, 324,  494, 324,  496, 1110,  474, 324,  494, 324,  494, 324,  494, 1112,  472, 324,  496, 322,  496, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 326,  494, 324,  494, 324,  494, 1112,  474, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1090,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 1092,  494, 1092,  494, 324,  494, 324,  496, 322,  494, 324,  494, 324,  494, 1112,  474, 324,  494, 324,  496, 324,  496, 322,  496, 324,  496, 322,  492, 326,  492, 326,  472, 346,  472, 348,  470, 348,  472, 348,  472, 346,  472, 346,  478, 342,  496, 322,  498, 320,  524, 294,  524, 294,  524, 294,  498, 320,  496, 322,  496, 324,  494, 324,  494, 324,  494, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 328,  490, 1114,  472, 328,  490, 1114,  472, 328,  490, 328,  490};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};


Timestamp : 000260.298
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB2601002403070200000080C5 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3082, 1596,  492, 1094,  492, 1094,  492, 328,  490, 326,  492, 326,  492, 1112,  476, 324,  492, 326,  492, 1094,  492, 1116,  468, 328,  492, 1112,  472, 330,  490, 328,  490, 1114,  472, 1114,  472, 328,  490, 1114,  472, 1114,  472, 328,  490, 328,  490, 1114,  472, 328,  490, 328,  490, 1114,  472, 328,  492, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  492, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 1114,  470, 328,  490, 328,  490, 1116,  470, 328,  490, 328,  490, 1114,  470, 1116,  470, 330,  490, 328,  490, 330,  490, 328,  490, 330,  488, 330,  488, 1116,  470, 1116,  470, 1116,  470, 330,  488, 330,  488, 330,  488, 330,  488, 330,  488, 330,  488, 1116,  470, 330,  488, 352,  466, 352,  468, 350,  468, 350,  468, 350,  468, 350,  468, 352,  466, 352,  468, 350,  468, 352,  468, 350,  468, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 354,  466, 352,  466, 352,  466, 354,  466, 352,  466, 354,  464, 354,  466, 354,  464, 354,  466, 352,  466, 354,  464, 354,  464, 354,  464, 354,  464, 354,  464, 1122,  464, 1122,  462, 354,  464, 1122,  462, 354,  464, 354,  464, 356,  462, 1124,  460, 1124,  462};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC5};


Timestamp : 000269.687
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3084, 1594,  494, 1114,  472, 1114,  472, 324,  494, 324,  494, 324,  494, 1114,  472, 324,  496, 322,  496, 1092,  494, 1112,  472, 324,  494, 1092,  494, 324,  494, 324,  494, 1092,  494, 1092,  492, 324,  496, 1110,  474, 1112,  474, 324,  496, 324,  494, 1112,  472, 324,  494, 324,  494, 324,  494, 1114,  472, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  496, 322,  496, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  496, 322,  496, 324,  494, 324,  496, 1090,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  496, 324,  494, 324,  496, 1112,  472, 324,  494, 324,  494, 324,  496, 324,  496, 322,  496, 322,  496, 322,  496, 324,  496, 324,  494, 1092,  494, 1092,  492, 324,  496, 322,  496, 324,  496, 322,  496, 324,  494, 1090,  494, 324,  494, 324,  494, 326,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 322,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 322,  496, 324,  494, 324,  496, 324,  494, 324,  494, 324,  496, 322,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 322,  494, 324,  494, 324,  494, 324,  496, 1090,  494, 324,  494, 1090,  494, 324,  494, 324,  494};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};


Timestamp : 000269.879
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB2601002003070200000080C1 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3084, 1594,  494, 1092,  492, 1092,  494, 322,  494, 324,  496, 324,  494, 1092,  492, 324,  494, 326,  494, 1090,  494, 1090,  494, 326,  492, 1112,  474, 324,  494, 324,  496, 1092,  492, 1092,  492, 324,  494, 1092,  494, 1092,  494, 324,  494, 326,  494, 1092,  494, 324,  494, 324,  494, 1092,  492, 324,  494, 324,  494, 324,  494, 326,  492, 326,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 326,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1092,  492, 326,  494, 324,  494, 1112,  474, 1112,  472, 326,  496, 322,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1110,  474, 1092,  494, 1112,  472, 326,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1112,  474, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  496, 324,  494, 324,  494, 324,  494, 324,  492, 326,  494, 324,  494, 326,  494, 324,  494, 324,  494, 326,  492, 326,  492, 326,  490, 330,  470, 348,  472, 348,  470, 348,  470, 348,  470, 348,  470, 348,  470, 348,  472, 348,  472, 346,  472, 1134,  450, 1116,  470, 348,  494, 324,  496, 324,  496, 322,  496, 322,  496, 1088,  496, 1090,  496};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC1};



----------------------



Timestamp : 000274.526
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3086, 1592,  494, 1090,  494, 1092,  494, 324,  520, 298,  508, 312,  520, 1066,  494, 324,  520, 298,  520, 1064,  496, 1090,  496, 324,  520, 1066,  494, 324,  520, 298,  520, 1064,  494, 1092,  494, 324,  496, 1088,  494, 1090,  494, 324,  520, 298,  498, 1086,  496, 322,  520, 298,  496, 322,  520, 1066,  494, 324,  496, 322,  496, 322,  496, 322,  512, 306,  496, 322,  520, 298,  496, 320,  498, 322,  520, 298,  520, 298,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 1088,  494, 324,  496, 322,  496, 322,  498, 320,  496, 322,  496, 322,  498, 320,  496, 1088,  494, 324,  496, 322,  496, 322,  496, 322,  496, 322,  504, 314,  496, 322,  496, 322,  496, 322,  496, 1088,  494, 1090,  498, 320,  506, 314,  520, 298,  496, 322,  504, 314,  498, 1088,  496, 322,  520, 298,  498, 320,  498, 320,  520, 298,  512, 306,  496, 322,  498, 320,  520, 298,  520, 300,  496, 322,  496, 322,  520, 298,  496, 322,  502, 316,  500, 318,  500, 318,  520, 298,  520, 298,  520, 298,  520, 298,  520, 298,  506, 314,  520, 298,  520, 298,  520, 298,  520, 298,  520, 298,  520, 298,  498, 320,  520, 298,  518, 300,  520, 298,  520, 298,  506, 310,  498, 1088,  494, 326,  518, 1064,  494, 324,  522, 298,  506};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};


Timestamp : 000274.714
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB2601002403070200000080C5 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3084, 1592,  496, 1090,  496, 1090,  496, 324,  494, 324,  496, 324,  494, 1090,  494, 324,  494, 326,  492, 1090,  496, 1088,  496, 324,  494, 1090,  496, 324,  494, 324,  494, 1090,  496, 1090,  496, 324,  494, 1090,  496, 1090,  494, 324,  494, 324,  494, 1092,  494, 324,  494, 324,  494, 1090,  496, 324,  494, 324,  496, 322,  496, 324,  494, 322,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 322,  496, 324,  494, 324,  494, 1090,  494, 324,  494, 324,  494, 1092,  494, 324,  494, 324,  494, 1090,  494, 1092,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1092,  494, 1090,  494, 1092,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 1090,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 326,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  496, 322,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 324,  494, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 1112,  472, 1112,  472, 326,  472, 1134,  472, 324,  472, 348,  470, 348,  470, 1134,  472, 1092,  470};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC5};


Timestamp : 000277.761
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB260200404000830000000028 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 2, Quiet: Off
uint16_t rawData[227] = {3084, 1590,  496, 1090,  496, 1092,  492, 324,  494, 324,  496, 324,  496, 1090,  496, 322,  496, 324,  494, 1090,  494, 1090,  494, 322,  494, 1092,  496, 322,  494, 324,  494, 1090,  496, 1090,  496, 322,  494, 1092,  496, 1090,  494, 322,  496, 322,  496, 1090,  496, 324,  496, 322,  496, 322,  496, 1090,  494, 322,  496, 324,  494, 324,  496, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  496, 322,  496, 324,  494, 322,  496, 324,  494, 322,  496, 324,  496, 322,  496, 324,  496, 1088,  494, 324,  496, 322,  520, 300,  520, 298,  498, 322,  496, 322,  496, 322,  520, 1066,  494, 324,  520, 298,  498, 322,  496, 322,  498, 320,  498, 322,  498, 320,  496, 322,  496, 322,  496, 1088,  494, 1090,  494, 324,  498, 320,  498, 320,  496, 324,  496, 322,  498, 1086,  494, 324,  496, 324,  494, 324,  494, 324,  472, 346,  470, 348,  470, 348,  470, 348,  472, 348,  470, 348,  472, 346,  472, 346,  472, 346,  494, 324,  494, 324,  496, 322,  496, 322,  498, 322,  498, 320,  498, 322,  498, 320,  498, 320,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  496, 322,  494, 324,  494, 324,  496, 324,  494, 324,  494, 324,  494, 1090,  494, 324,  494, 1092,  494, 326,  492, 328,  494};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x40, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x28};


Timestamp : 000277.947
Library   : v2.8.6

Protocol  : TCL112AC
Code      : 0x23CB2601002003070200000080C1 (112 Bits)
Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
uint16_t rawData[227] = {3084, 1592,  494, 1090,  494, 1090,  494, 324,  494, 324,  496, 322,  494, 1090,  494, 324,  494, 324,  494, 1092,  494, 1090,  496, 324,  494, 1092,  494, 324,  494, 326,  492, 1092,  494, 1092,  492, 326,  494, 1092,  494, 1092,  494, 326,  492, 326,  492, 1092,  492, 326,  492, 326,  492, 1092,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 326,  492, 328,  492, 326,  492, 328,  490, 326,  492, 326,  490, 1096,  494, 324,  490, 328,  490, 1094,  490, 1096,  488, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 1096,  490, 1114,  470, 1116,  470, 330,  490, 328,  490, 328,  490, 328,  490, 328,  490, 328,  490, 1116,  470, 328,  488, 330,  490, 330,  490, 328,  490, 330,  488, 330,  490, 330,  488, 330,  488, 330,  488, 330,  488, 330,  488, 332,  486, 332,  488, 330,  488, 330,  488, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 350,  468, 352,  466, 352,  468, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 352,  466, 1120,  466, 1120,  466, 352,  466, 352,  466, 354,  464, 354,  466, 352,  466, 1120,  464, 1120,  464};  // TCL112AC
uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC1};

он сделал следующий скетч, сразу скажу что с ошибкой, почему-то вписал #include <ir_Tcl112Ac.h> но гуглеж подсказывает что надо #include <ir_Tcl.h>

и все равно после этой правки вылезает такая ошибка

скетч

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
// !!! Используем правильный заголовочный файл для TCL112AC !!!
// Это специализированный протокол, и для него есть свой заголовок в библиотеке.
#include <ir_Tcl.h>
// Для работы с общим AC-интерфейсом (который мы имитируем для структурирования)
// нам нужен IRac.h. Однако, для TCL112AC мы будем использовать
// напрямую класс IRTcl112Ac, который уже умеет отправлять сигналы.
// #include <IRac.h> // Этот заголовок нам не нужен, так как мы не используем IRac как общий контроллер.
#include <IRutils.h> // Полезные утилиты, включая typeToString() для отладки.

// === Настройки ===
// Пин, к которому подключен ИК светодиод.
// D7 на платах NodeMCU/Wemos D1 Mini обычно соответствует GPIO13.
const uint16_t kIrLed = 13;

// === Инициализация объектов ===
// Создаем объект IRsend, который будет управлять ИК-светодиодом.
// Он нужен для базовой отправки ИК-импульсов.
IRsend irsend(kIrLed);

// !!! Инициализация объекта для управления кондиционером TCL112AC !!!
// Этот класс специально разработан для вашего кондиционера.
// Он принимает номер пина, к которому подключен ИК-светодиод.
IRTcl112Ac ac(&irsend); // IRTcl112Ac принимает указатель на IRsend

// === Данные для команды "ВКЛЮЧИТЬ" ===
// Эти байтовые данные представляют собой полное состояние кондиционера
// для включения (Холод, 24C, Вент. 2, Свет ВКЛ)
const uint8_t STATE_ON[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC5};

// === Данные для команды "ВЫКЛЮЧИТЬ" ===
// Эти байтовые данные представляют собой полное состояние кондиционера
// для выключения.
const uint8_t STATE_OFF[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC1};


void setup() {
  Serial.begin(115200);
  delay(200); // Даем Serial немного времени для инициализации.

  // Инициализация ИК-передатчика. Обязательный шаг.
  irsend.begin();
  // Инициализация объекта протокола TCL112AC.
  // Это устанавливает его внутреннее состояние по умолчанию.
  ac.begin();

  Serial.println("==========================================");
  Serial.println("ИК управление для TCL TAC09CHSD готово!");
  Serial.println("------------------------------------------");
  Serial.println("Доступные команды:");
  Serial.println("  'on'       -> Включить (Холод, 24C, Вент. 2, Свет ВКЛ)");
  Serial.println("  'off'      -> Выключить");
  Serial.println("  'temp20'   -> Установить температуру 20C (вкл. Холод, Вент. Авто)");
  Serial.println("  'fan3'     -> Установить скорость вентилятора 3 (Medium) (вкл. Холод, Темп. текущая)");
  Serial.println("  'auto'     -> Установить режим АВТО (вкл. Темп. текущая, Вент. Авто)");
  Serial.println("==========================================");
  Serial.println("Ожидание команд через Serial Monitor...");
}

void loop() {
  // Проверяем, есть ли данные в последовательном порту.
  if (Serial.available()) {
    // Считываем введенную команду до символа новой строки.
    String cmd = Serial.readStringUntil('\n');
    cmd.trim(); // Удаляем лишние пробелы и символы новой строки.
    cmd.toLowerCase(); // Преобразуем команду в нижний регистр для удобства сравнения.

    Serial.print("Получена команда: '");
    Serial.print(cmd);
    Serial.println("'");

    if (cmd == "on") {
      Serial.println("--> Отправка: ВКЛЮЧЕНИЕ (Холод 24C, Вент. 2, Свет ВКЛ)...");
      // Для команды "on", мы устанавливаем полное состояние из захваченных байтов.
      // Это наиболее точный способ воспроизвести исходный сигнал включения.
      ac.setRawState(STATE_ON);
      ac.send(); // Отправляем сигнал.
    } else if (cmd == "off") {
      Serial.println("--> Отправка: ВЫКЛЮЧЕНИЕ...");
      // Для команды "off", аналогично, используем захваченные байты выключения.
      ac.setRawState(STATE_OFF);
      ac.send(); // Отправляем сигнал.
    } else if (cmd == "temp20") {
      Serial.println("--> Отправка: Установка температуры 20C...");
      // Чтобы изменить конкретный параметр, сначала загрузим базовое состояние "включено",
      // затем модифицируем его.
      ac.setRawState(STATE_ON); // Начинаем с настроек "ON"
      ac.setPower(true);        // Убедимся, что кондиционер включен
      ac.setTemp(20);           // Устанавливаем желаемую температуру
      // Дополнительно можно явно установить режим и скорость вентилятора,
      // если не уверены, что они уже в нужном состоянии после setRawState(STATE_ON).
      ac.setMode(kTcl112AcCool);     // Режим охлаждения
      ac.setFan(kTcl112AcFanAuto);   // Автоматическая скорость вентилятора
      ac.send();
    } else if (cmd == "fan3") {
      Serial.println("--> Отправка: Установка вентилятора на Среднюю (3)...");
      ac.setRawState(STATE_ON); // Начинаем с настроек "ON"
      ac.setPower(true);        // Убедимся, что кондиционер включен
      ac.setFan(kTcl112AcFanMedium); // Устанавливаем среднюю скорость вентилятора
      ac.send();
    } else if (cmd == "auto") {
      Serial.println("--> Отправка: Установка режима АВТО...");
      ac.setRawState(STATE_ON); // Начинаем с настроек "ON"
      ac.setPower(true);        // Убедимся, что кондиционер включен
      ac.setMode(kTcl112AcAuto); // Устанавливаем режим АВТО
      ac.send();
    } else {
      Serial.println("Неизвестная команда. Пожалуйста, используйте 'on', 'off', 'temp20', 'fan3' или 'auto'.");
    }
    // Небольшая задержка, чтобы избежать слишком быстрой обработки команд
    // и дать кондиционеру время на реакцию.
    delay(500);
  }
}

ошибка

Arduino: 1.8.13 (Windows 10), Board: "LOLIN(WeMos) D1 R1, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

sketch_jul06a:26:15: error: invalid conversion from 'IRsend*' to 'uint16_t' {aka 'short unsigned int'} [-fpermissive]

   26 | IRTcl112Ac ac(&irsend); // IRTcl112Ac принимает указатель на IRsend

      |               ^~~~~~~

      |               |

      |               IRsend*

In file included from J:\Documents\Arduino\sketch_jul06a\sketch_jul06a.ino:6:

J:\Documents\Arduino\libraries\IRremoteESP8266\src/ir_Tcl.h:127:38: note:   initializing argument 1 of 'IRTcl112Ac::IRTcl112Ac(uint16_t, bool, bool)'

  127 |   explicit IRTcl112Ac(const uint16_t pin, const bool inverted = false,

      |                       ~~~~~~~~~~~~~~~^~~

J:\Documents\Arduino\sketch_jul06a\sketch_jul06a.ino: In function 'void loop()':

sketch_jul06a:78:10: error: 'class IRTcl112Ac' has no member named 'setRawState'

   78 |       ac.setRawState(STATE_ON);

      |          ^~~~~~~~~~~

sketch_jul06a:83:10: error: 'class IRTcl112Ac' has no member named 'setRawState'

   83 |       ac.setRawState(STATE_OFF);

      |          ^~~~~~~~~~~

sketch_jul06a:89:10: error: 'class IRTcl112Ac' has no member named 'setRawState'

   89 |       ac.setRawState(STATE_ON); // Начинаем с настроек "ON"

      |          ^~~~~~~~~~~

sketch_jul06a:99:10: error: 'class IRTcl112Ac' has no member named 'setRawState'

   99 |       ac.setRawState(STATE_ON); // Начинаем с настроек "ON"

      |          ^~~~~~~~~~~

sketch_jul06a:101:17: error: 'kTcl112AcFanMedium' was not declared in this scope; did you mean 'kTcl112AcFanMed'?

  101 |       ac.setFan(kTcl112AcFanMedium); // Устанавливаем среднюю скорость вентилятора

      |                 ^~~~~~~~~~~~~~~~~~

      |                 kTcl112AcFanMed

sketch_jul06a:105:10: error: 'class IRTcl112Ac' has no member named 'setRawState'

  105 |       ac.setRawState(STATE_ON); // Начинаем с настроек "ON"

      |          ^~~~~~~~~~~

exit status 1

invalid conversion from 'IRsend*' to 'uint16_t' {aka 'short unsigned int'} [-fpermissive]



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

вот актуальный gemini скетч, с моими комментами чтоб компилировался. как обычно диод мигнет на камеру кондер не реагирует. расстояние 1.5 метра. на али в описании товара сказано что должен на 8 метров работать. завтра проверю с транзистором 2222 (вдруг не хватает тока) если остались от бурной молодости

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
// !!! ИСПОЛЬЗУЕМ ВАШ ЗАГОЛОВОЧНЫЙ ФАЙЛ !!!
#include <ir_Tcl.h> // Теперь используем <ir_Tcl.h> по вашему запросу

// === Настройки ===
// Пин, к которому подключен ИК светодиод.
// D7 на платах NodeMCU/Wemos D1 Mini обычно соответствует GPIO13.
const uint16_t kIrLed = 13;

// === Инициализация объектов ===
// Создаем объект IRsend, который будет управлять ИК-светодиодом.
IRsend irsend(kIrLed);

// !!! ИСПРАВЛЕНИЕ: Конструктор IRTcl112Ac в вашей версии (из ir_Tcl.h)
// ожидает номер пина, а НЕ указатель на IRsend.
// Это самая важная поправка для этой ошибки.
IRTcl112Ac ac(kIrLed); // Передаем номер пина, а не &irsend

// ВНИМАНИЕ: Так как 'setRawState' НЕТ, эти массивы 'STATE_ON' и 'STATE_OFF'
// будут использоваться только как справочная информация для ручной установки
// параметров, а не для прямой загрузки состояния.
// Их наличие все равно полезно для понимания целевых значений.
// === Данные для команды "ВКЛЮЧИТЬ" (Охлаждение, 24C, Вент. 2, Свет ВКЛ) ===
const uint8_t STATE_ON[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC5};

// === Данные для команды "ВЫКЛЮЧИТЬ" ===
const uint8_t STATE_OFF[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x80, 0xC1};


void setup() {
  Serial.begin(115200);
  delay(200);

  irsend.begin();
  // Для этой версии IRTcl112Ac (из ir_Tcl.h),
  // вызов begin() не принимает аргументов.
  ac.begin();

  Serial.println("==========================================");
  Serial.println("ИК управление для TCL TAC09CHSD готово!");
  Serial.println("------------------------------------------");
  Serial.println("Доступные команды:");
  Serial.println("  'on'       -> Включить (Холод, 24C, Вент. 2, Свет ВКЛ)");
  Serial.println("  'off'      -> Выключить");
  Serial.println("  'temp20'   -> Установить температуру 20C (вкл. Холод, Вент. Авто)");
  Serial.println("  'fan3'     -> Установить скорость вентилятора 3 (Medium) (вкл. Холод, Темп. текущая)");
  Serial.println("  'auto'     -> Установить режим АВТО (вкл. Темп. текущая, Вент. Авто)");
  Serial.println("==========================================");
  Serial.println("Ожидание команд через Serial Monitor...");
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    cmd.toLowerCase();

    Serial.print("Получена команда: '");
    Serial.print(cmd);
    Serial.println("'");

    if (cmd == "on") {
      Serial.println("--> Отправка: ВКЛЮЧЕНИЕ (Холод 24C, Вент. 2, Свет ВКЛ)...");
      // !!! ИСПРАВЛЕНИЕ: Так как setRawState() отсутствует,
      // устанавливаем параметры вручную на основе STATE_ON.
      ac.setPower(true);            // Включить
      ac.setMode(kTcl112AcCool);    // Режим: Охлаждение (Cool)
      ac.setTemp(24);               // Температура: 24C
      ac.setFan(kTcl112AcFanLow);   // Вентилятор: Low (это соответствует Fan 2 в вашем описании)
      ac.setLight(true);            // Свет: ВКЛ
      // Другие параметры (Swing, Econo, Health, Turbo, Quiet, Sleep, Clean, Clock)
      // установим в их "дефолтные" значения для STATE_ON, если они отличаются от стандартных
      // значений при включении кондиционера.
      // Судя по описанию "Mesg Desc.: ... Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off",
      // можно их также явно установить:
//      ac.setSwingV(kTcl112AcSwingVAuto); // Вертикальный свинг: Авто
  //    ac.setSwingH(kTcl112AcSwingHOff);  // Горизонтальный свинг: Откл
      ac.setEcono(false);
      ac.setHealth(false);
      ac.setTurbo(false);
      ac.setQuiet(false);
//      ac.setSleep(0); // 0 или -1 для "нет режима сна"
//      ac.setClean(false);
//      ac.setClock(-1); // Для "не устанавливать время"

      ac.send(); // Отправляем сигнал.
    } else if (cmd == "off") {
      Serial.println("--> Отправка: ВЫКЛЮЧЕНИЕ...");
      // !!! ИСПРАВЛЕНИЕ: Так как setRawState() отсутствует,
      // устанавливаем параметры вручную для выключения.
      // Для выключения достаточно установить Power(false).
      // Кондиционер должен сам сбросить остальные параметры или запомнить последние.
      ac.setPower(false);           // Выключить
      // Остальные параметры можно оставить как есть или сбросить на "безопасные" значения,
      // если кондиционер требует полный "пакет" данных даже при выключении.
      // Обычно достаточно только power: false.
      // Однако, из ваших данных 'STATE_OFF' видно, что даже при выключении
      // остальные параметры остаются на определенных значениях.
      // Mesg Desc.: Model: 1 (TAC09CHSD), Type: 1, Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 2 (Low), Swing(V): 0 (Auto), Swing(H): Off, Econo: Off, Health: Off, Turbo: Off, Light: On, On Timer: Off, Off Timer: Off
      // Это означает, что кондиционер ожидает полный пакет, даже если он выключен.
      // Поэтому мы также установим эти параметры:
      ac.setMode(kTcl112AcCool);
      ac.setTemp(24);
      ac.setFan(kTcl112AcFanLow);
      ac.setLight(true); // Свет остаётся включенным в коде выключения
//      ac.setSwingV(kTcl112AcSwingVAuto);
//      ac.setSwingH(kTcl112AcSwingHOff);
      ac.setEcono(false);
      ac.setHealth(false);
      ac.setTurbo(false);
      ac.setQuiet(false);
//      ac.setSleep(0);
//      ac.setClean(false);
//      ac.setClock(-1);

      ac.send();
    } else if (cmd == "temp20") {
      Serial.println("--> Отправка: Установка температуры 20C...");
      // !!! ИСПРАВЛЕНИЕ: Удалено ac.setRawState(STATE_ON);
      // Теперь вручную устанавливаем базовые параметры, как при включении,
      // а затем модифицируем температуру.
      ac.setPower(true);
      ac.setMode(kTcl112AcCool);     // Режим охлаждения по умолчанию
      ac.setFan(kTcl112AcFanAuto);   // Автоматическая скорость вентилятора по умолчанию
      ac.setTemp(20);                // Устанавливаем желаемую температуру
      ac.send();
    } else if (cmd == "fan3") {
      Serial.println("--> Отправка: Установка вентилятора на Среднюю (3)...");
      // !!! ИСПРАВЛЕНИЕ: Удалено ac.setRawState(STATE_ON);
      // Теперь вручную устанавливаем базовые параметры, а затем модифицируем скорость вентилятора.
      ac.setPower(true);
      ac.setMode(kTcl112AcCool); // Сохраняем режим охлаждения
      ac.setTemp(ac.getTemp()); // Сохраняем текущую температуру (важно!)
      // !!! ИСПРАВЛЕНИЕ: Имя константы было kTcl112AcFanMed, а не Medium !!!
      ac.setFan(kTcl112AcFanMed); // Средняя скорость вентилятора
      ac.send();
    } else if (cmd == "auto") {
      Serial.println("--> Отправка: Установка режима АВТО...");
      // !!! ИСПРАВЛЕНИЕ: Удалено ac.setRawState(STATE_ON);
      // Теперь вручную устанавливаем базовые параметры, а затем модифицируем режим.
      ac.setPower(true);
      ac.setTemp(ac.getTemp()); // Сохраняем текущую температуру
      ac.setFan(kTcl112AcFanAuto); // Устанавливаем вентилятор на Авто
      ac.setMode(kTcl112AcAuto); // Режим АВТО
      ac.send();
    } else {
      Serial.println("Неизвестная команда. Пожалуйста, используйте 'on', 'off', 'temp20', 'fan3' или 'auto'.");
    }
    delay(500);
  }
}

Вы бы упростили, для начала скетч. Оставьте, к примеру только две команды - вкл. и выкл. через определённый интервал времени, и, добейтесь их выполнения.

1 лайк

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

void loop() {
  unsigned long currentMillis = millis();

  // --- Чтение с датчика AM2320 каждые 30 секунд ---
  if (currentMillis - previousMillisSensorRead >= sensorReadInterval) {
    previousMillisSensorRead = currentMillis;
    Serial.println("\n--- Обновление данных с AM2320 ---"); // Разкомментировано для вывода

    currentTemperature = am2320.readTemperature();
    // Добавляем небольшую задержку между чтениями температуры и влажности
    delay(200); 
    currentHumidity = am2320.readHumidity();

    if (isnan(currentTemperature) || isnan(currentHumidity)) {
      Serial.println("AM2320: Ошибка чтения данных! (Возможно, датчик не подключен или завис)");
      // Для отладки можно вывести raw значения, если они не NaN, чтобы понять, что происходит
      // Serial.print("Температура (raw): "); Serial.println(currentTemperature);
      // Serial.print("Влажность (raw): "); Serial.println(currentHumidity);
    } else {
      Serial.print("Температура: ");
      Serial.print(currentTemperature, 1);
      Serial.println(" °C");
      Serial.print("Влажность: ");
      Serial.print(currentHumidity, 2);
      Serial.println(" %");
    }
    Serial.println("---------------------------------");
  }

// --- Обработка команд через Serial ---
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    cmd.toLowerCase();
    Serial.print("Получена команда: '");
    Serial.print(cmd);
    Serial.println("'");

    if (cmd == "111") {
      Serial.println("Ручной запрос данных с AM2320 по команде '111'...");
      currentTemperature = am2320.readTemperature();
      // Добавляем небольшую задержку между чтениями температуры и влажности для ручного запроса
      delay(200); 
      currentHumidity = am2320.readHumidity();
  if (!isnan(currentTemperature) && !isnan(currentHumidity)) {
    Serial.print("AM2320 (ручной): Температура: ");
    Serial.print(currentTemperature, 1);
    Serial.print(" C, Влажность: ");
    Serial.print(currentHumidity, 2);
    Serial.println(" %");
  } else {
    Serial.println("AM2320 (ручной): Ошибка получения данных.");
  }
}

результат

Получена команда: ‘111’
Ручной запрос данных с AM2320 по команде ‘111’…
AM2320 (ручной): Ошибка получения данных.

— Обновление данных с AM2320 —
AM2320: Ошибка чтения данных! (Возможно, датчик не подключен или завис)

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

Ну, пристыдите его как-нибудь. Пригрозите в “Спортлото” написать, что ли.

1 лайк

Все, Петрович, форум надо закрывать, нихрена ты через полгода/год дельного не не скажешь, супротив ИИ))

1 лайк

Для проверки, попробуйте задержку 2200мс

1 лайк

троль сделай добро, свали из этой темы.

благодарю за совет, 500мс уже решили проблему.

1 . На форуме действует принцип “Со своим уставом в чужой монастырь не суйся”. Не следует указывать старожилам, для чего нужен форум, и что на нем следует делать.

3 лайка

благодарю, тролинг является неотъемлемой частью привилегией старожилов форума?

Это зависит от того как себя проявит новичок. Иногда не то что неотъемлемой, а вполне себе - Первостепенной! :smile:

5 лайков