Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Вопрос Передача данных по WiFi TCP. Приходят некорректные данные.

Тема в разделе "ESP32 - все о железе", создана пользователем zik-888, 14 мар 2019.

Метки:
  1. zik-888

    zik-888 Новичок

    Сообщения:
    2
    Симпатии:
    0
    Прошу помощи, так как сил бороться больше нет. Посылаю по TCP с компа сообщение [набор чисел] + метка "JZ". Числа в виде short. Если одно из чисел оказывается меньше 256 (то есть содержат ноль в одном из двух байтов), то сообщение сразу превращается в нечитабельное, не удаётся считать даже последние символы, не смотря на то что длина сообщения корректная. С компа приходят точно корректные данные, проверял в приложении с телефона. Во всех остальных случаях всё работает и как-то не особо хочется колхозить велосипед.

    Код (C):
    1. #include <WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <WiFiAP.h>
    4.  
    5. #include <TCP_Stuct.h>
    6.  
    7. // Set these to your desired credentials.
    8. const char *ssid = "yourAP";
    9. const char *password = "yourPassword";
    10.  
    11. WiFiServer server(1024);
    12. Joint6 joint;
    13.  
    14. void InitTCPWiFi(){
    15.  
    16.   pinMode(LED_BUILTIN, OUTPUT);
    17.  
    18.   Serial.begin(115200);
    19.   Serial.println();
    20.   Serial.println("Configuring access point...");
    21.  
    22.   // You can remove the password parameter if you want the AP to be open.
    23.   WiFi.softAP(ssid, password);
    24.   IPAddress myIP = WiFi.softAPIP();
    25.   Serial.print("AP IP address: ");
    26.   Serial.println(myIP);
    27.   server.begin();
    28.  
    29.   Serial.println("Server started");
    30. }
    31. void TestLoop() {
    32.   WiFiClient client = server.available();   // listen for incoming clients
    33.  
    34.   if (client) {                             // if you get a client,
    35.     Serial.println("New Client.");           // print a message out the serial port
    36.     String currentLine = "";                // make a String to hold incoming data from the client
    37.     while (client.connected()) {            // loop while the client's connected
    38.       if (client.available()) {             // if there's bytes to read from the client,
    39.  
    40.         currentLine= client.readString(); // читаю данные
    41.         // print it out the serial monitor
    42.         Serial.print("Data: ");
    43.         Serial.println(currentLine);
    44.         Serial.print("Data lenth: ");
    45.         Serial.println(currentLine.length());
    46.         if (currentLine.endsWith("JZ")){
    47.           currentLine.remove(currentLine.length() - 2, 2);
    48.           joint.IntoString(currentLine, 6); // здесь происходит запись в структуру, с ней всё в порядке
    49.         }
    50.       }
    51.     }
    52.     // close the connection:
    53.     client.stop();
    54.     Serial.println("Client Disconnected.");
    55.   }
    56. }
     
  2. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.279
    Симпатии:
    144
    Посылаете
    , а прочитать хотите строку типа String. Перед передачей преобразуйте числа в строку.
    Ноль в строке признак конца строки.
     
    Последнее редактирование: 14 мар 2019
    zik-888 нравится это.
  3. zik-888

    zik-888 Новичок

    Сообщения:
    2
    Симпатии:
    0
    Хоспаде, спасибо мил человек. Вот что тупняк с людьми делает...
     
  4. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.279
    Симпатии:
    144
    Все такие
    могут прочитать не целую строку ( особенно, если она длинная), а лишь ее часть( если еще не все данные поступили).
    Если нужна надежность, посылаете признак начала строки- данные - признак конца строки, а на приемной стороне все собираете.
     

Поделиться этой страницей