ESP8266 отправляет TCP HEX-пакет из 4 символов

Я создаю пульт дистанционного управления для своих WiFi-RGB-ламп. У меня есть ESP8266, который должен отправлять один TCP-пакет с 4 символами.

Мой код:

#include <ESP8266WiFi.h>

const char* ssid     = "Wifi";
const char* password = "wifikey";

void WiFiEvent(WiFiEvent_t event) {
  Serial.printf("[WiFi-event] event: %d\n", event);  
}

void setup() {
  Serial.begin(115200);
  WiFi.disconnect(true);
  delay(1000);
  WiFi.onEvent(WiFiEvent);
  WiFi.begin(ssid, password);
}

void loop() {
  delay(1000);
  const uint16_t port = 5577;
  const char * host = "192.168.178.150";
  WiFiClient client;
  client.connect(host, port);
  client.print(char(0x71));
  client.print(char(0x24));
  client.print(char(0x0f));
  client.print(char(0xa4));
  client.flush();
  client.stop();
  delay(5000);   
}

Проблема: я отправляю 4 TCP-пакета, хотя должен отправить 1 TCP-пакет со всеми 4 символами.

Спасибо за помощь.

, 👍0

Обсуждение

Поток данных TCP не ориентирован на пакеты, скорее, это деталь, скрытая в самой реализации; правильно реализованный TCP-сервер *должен* принимать данные, поступающие в любой комбинации пакетов, включая один символ на пакет, слова или строки, разбитые между пакетами, пакеты, содержащие конец одного объекта и начало другого и т. д., @Chris Stratton

Вы можете попробовать отправить все символы одним print(), но по сути вы пытаетесь использовать недокументированное поведение одного объекта, чтобы приспособиться к ошибочному поведению другого., @Chris Stratton

Похоже, проблема на принимающей стороне. Попробуйте сдвинуть/сделать ИЛИ всех значений в один unsigned long и отправить его одним вызовом print., @Johnny Mopp