• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

TCP сервер

007_1

New member
Здравствуйте, была как то здесь тема "простая передача данных" (https://esp8266.ru/forum/threads/prostaja-peredacha-dannyx.1037/), подскажите пожалуйста как можно изменить код, чтобы читать на сервере не один, а два символа?

uint8_t i;
if(server.hasClient())
{
for(i=0;i<MAX_CLIENT;i++)
{
if (!client || !client.connected()){
if(client) client.stop();
client = server.available();

continue;
}
}
}
for(i = 0; i < MAX_CLIENT; i++){
if (client && client.connected()){
if(client.available()){
while(client.available()){

char chr = client.read(); // чтение символа
if(chr == '2') digitalWrite(RELAY,LOW); // если 0, гасим светодиод
if(chr == '1') digitalWrite(RELAY,HIGH); // если 1, зажигаем светодиод
 

Сергей_Ф

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

007_1

New member
Не надо ничего менять. Этот сервер читает все символы последовательно, сколько бы их не было.
Либо вы неверно сформулировали вопрос.
Здравствуйте Сергей, согласен, вопрос сформулирован не верно. Подскажите как конвертировать полученные символы в строку?
 

Сергей_Ф

Moderator
Команда форума
Код:
String str;

...

str += client.read();

...
str = "";
Но боюсь это вам тоже не поможет.
 

Сергей_Ф

Moderator
Команда форума
Да, не помогло, подскажите пожалуйста как обработать команду, состоящую из двух символов, чтобы помигать светодиодом.
Код:
if ( str == "on" ) {
digital.write(RELAY, HIGH);
str = "";
} else if ( str == "of" ) {
digital.write(RELAY,LOW);
str = "";
} else if ( str.length() >= 2 ) {
str = "";
}
Самый простой и тупой вариант. Работать будет, но не факт что как вы хотите.
Но вам лучше сформулировать как то попроще, что именно вы хотите. Или засесть за учебники.
 

007_1

New member
Код:
if ( str == "on" ) {
digital.write(RELAY, HIGH);
str = "";
} else if ( str == "of" ) {
digital.write(RELAY,LOW);
str = "";
} else if ( str.length() >= 2 ) {
str = "";
}
Самый простой и тупой вариант. Работать будет, но не факт что как вы хотите.
Но вам лучше сформулировать как то попроще, что именно вы хотите. Или засесть за учебники.
Код:
str +=  client[i].read();
       
        if ( str == "on" ) {
        digitalWrite(RELAY,HIGH);
        str = "";
        } else if ( str == "of" ) {
        digitalWrite(RELAY,LOW);
        str = "";
        } else if ( str.length() >= 2 ) {
        str = "";
        }
Не работает.
Попробую сформулировать, отправляю серверу "21", он выключает светодиод, отправляю "11" светодиод включается.
Потом ещё конечно ответить сервер должен, но сначала нужно с этим разобраться.
 

007_1

New member
"Не работает" - по отправке команды ничего не происходит со светодиодом.
Сама ESP работает, так как до этого есть кусок кода для управления с кнопки, с кнопки работает.
Отправлять пробую из Simple TCP Socket Tester (Android) и Putty (Windows). Ответ по TCP получаю.
C отладочным выводом в Serial было бы конечно проще, но программатор без кнопки (постоянный "-" на ноге для программирования), надо перепаивать.

Спасибо, что помогаете!
 

Сергей_Ф

Moderator
Команда форума
"Не работает" - по отправке команды ничего не происходит со светодиодом.
Сама ESP работает, так как до этого есть кусок кода для управления с кнопки, с кнопки работает.
Отправлять пробую из Simple TCP Socket Tester (Android) и Putty (Windows). Ответ по TCP получаю.
C отладочным выводом в Serial было бы конечно проще, но программатор без кнопки (постоянный "-" на ноге для программирования), надо перепаивать.

Спасибо, что помогаете!
Уверены что шлёте именно два символа? Может там и третий есть, типа '\n'? А может и четвертый '\r'?
 
Сверху Снизу