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 символами.
Спасибо за помощь.
@Bonar Scripta, 👍0
Обсуждение0
Смотрите также:
- ESP8266 TCP-соединение WiFiClient проблема
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Несколько клиентских серверов через Wi-Fi
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
Поток данных TCP не ориентирован на пакеты, скорее, это деталь, скрытая в самой реализации; правильно реализованный TCP-сервер *должен* принимать данные, поступающие в любой комбинации пакетов, включая один символ на пакет, слова или строки, разбитые между пакетами, пакеты, содержащие конец одного объекта и начало другого и т. д., @Chris Stratton
Вы можете попробовать отправить все символы одним print(), но по сути вы пытаетесь использовать недокументированное поведение одного объекта, чтобы приспособиться к ошибочному поведению другого., @Chris Stratton
Похоже, проблема на принимающей стороне. Попробуйте сдвинуть/сделать ИЛИ всех значений в один
unsigned long
и отправить его одним вызовомprint
., @Johnny Mopp