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

Решено Отправка данных с датчика на другую ардуину

Тема в разделе "Arduino + ESP8266", создана пользователем Com731, 7 фев 2019.

  1. Com731

    Com731 Новичок

    Сообщения:
    4
    Симпатии:
    0
    Привет, нужна помощь. Есть два комплекта iskra neo + troyka WIFI (леонардо и esp8266). На одной tcp сервер а на второй клиент. Я шлю с клиента данные о температуре с датчика, но на сервере получаю кракозябры.
    Клиент (раскрыть)

    Код (C):
    1. uint8_t buffer[128] = {};
    2.     static uint8_t mux_id = 2;
    3.      unsigned long currentMillis = millis();
    4.     thermometer.read();
    5.    if(currentMillis - previousMillis > interval){
    6.     wifi.createTCP(mux_id, HOST_NAME, HOST_PORT);
    7.     previousMillis = currentMillis;
    8.     Serial.println(thermometer.getTemperatureC());
    9.     uint8_t hello[] = {thermometer.getTemperatureC()} ;
    10.     wifi.send(mux_id, (uint8_t*)hello, strlen(hello));
    11.         Serial.println("send ok");

    Сервер (раскрыть)

    Код (C):
    1.  uint8_t mux_id;
    2.   uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 100);
    3.    Serial.write(buffer,len);
    4.     if (len > 0) {
    5.         Serial.print("Status:[");
    6.         Serial.print(wifi.getIPStatus().c_str());
    7.         Serial.println("]");
    8.        
    9.         Serial.print("Received from :");
    10.         Serial.print(mux_id);
    11.         Serial.print("[");
    12.        
    13.             Serial.write(buffer,len);
    14.        
    15.         Serial.print("]\r\n");

    Кракозябры (раскрыть)

    upload_2019-2-7_18-2-37.png
     
  2. CodeNameHawk

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

    Сообщения:
    1.564
    Симпатии:
    178
    Код (Text):
    1.     uint8_t hello[] = {thermometer.getTemperatureC()} ;
    2.     wifi.send(mux_id, (uint8_t*)hello, strlen(hello));
    Вы посылаете переменную типа uint8_t , а на приемной стороне принимаете как текст.

    Попробуйте преобразовать переменную в текст, а затем отослать.
     
    Com731 нравится это.
  3. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.050
    Симпатии:
    175
    Вы массиву byte (uint8_t) присваиваете float ... "uint8_t hello[] = {thermometer.getTemperatureC()} ;" да еще и в скобках :)
     
    Com731 нравится это.
  4. Com731

    Com731 Новичок

    Сообщения:
    4
    Симпатии:
    0
    Я правильно понимаю, преобразование из float в текст выглядит так?
    Код (C):
    1. String s;
    2. float a;
    3. void setup() {
    4.   a = 25.77;
    5.   Serial.begin(9600);
    6. }
    7. void loop()
    8. {
    9.   s = "S0_"+String(a);
    10.   Serial.println(s);
    11.   delay(100);
    12. }
     
  5. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.148
    Симпатии:
    226
    @Com731 это не совсем текст. Это String. Лучше преобразовать до int16_t и через sprintf().
    Или
     
    Com731 нравится это.
  6. Com731

    Com731 Новичок

    Сообщения:
    4
    Симпатии:
    0
    Спасибо, как приду домой попробую
     
  7. Com731

    Com731 Новичок

    Сообщения:
    4
    Симпатии:
    0
    Получилось, большое спасибо
     

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