Как передать отрицательное число на сервер MQTT

Всем привет! Сделал показометр температуры/ влажности/давления для нескольких радио датчиков на BME230. И в отсутствии меня на даче решил все это дело еще слать на сервер MQTT с помошью ESP8266. Вроде как все заработало, но вот температура когда уходит ниже нуля отображается некорректно, выше нуля все отлично. Подскажите как дельно исправить проблему. Данные прилетают по воздуху на приемник 433MHz, в виде 2532(т.е. 25.32*С), далее они умножаются на 0.01 и отправляются на сервер.
Что делаю не так с этой функцией? client.publish(“user_###/test/temp”, String(temp));

float temp;
unsigned int pres, hum;
float temp2, hum2;
float temp3, hum3;
//---------------------------------------
void GetData433() {
  if (rx.tickWait()) {      // Ждем пакет по радио
    switch (rx.buffer[0]) { // Получаем адрес модуля
      case 0xA1:            // BME280
        temp = (rx.buffer[1] << 8 | rx.buffer[2]);  //приходят данные в виде 2532
        temp = temp * 0.01;           //переводим в 25,32
        pres = (rx.buffer[3] << 8 | rx.buffer[4]);
        hum = (rx.buffer[5]);
        break;
      case 0xA2:            // HTU21D
        temp2 = (rx.buffer[1] << 8 | rx.buffer[2]); //приходят данные в виде 2532
        hum2 = (rx.buffer[3] << 8 | rx.buffer[4]);
        temp2 = temp2 / 100; //переводим в 25,32
        hum2 = hum2 / 100;
        break;
      case 0xA3:            // AHT20
        temp3 = (rx.buffer[1] << 8 | rx.buffer[2]); //приходят данные в виде 2532
        hum3 = (rx.buffer[3] << 8 | rx.buffer[4]);
        temp3 = temp3 / 100; //переводим в 25,32
        hum3 = hum3 / 100;
        break;
    }
    flag_data = true;
  }
}

// Функция отправки показаний с термодатчика
void SendDataMQTT() {
    client.publish("user_###/test/temp", String(temp)); 
    client.publish("user_###/test/pres", String(pres)); 
    client.publish("user_###/test/hum", String(hum)); 

    client.publish("user_###/test/temp2", String(temp2));
    client.publish("user_###/test/hum2", String(hum2)); 

    client.publish("user_###/test/temp3", String(temp3)); 
    client.publish("user_###/test/hum3", String(hum3)); 
  }
  flag_data = false; //После передачи сбросили флаг
}

void loop() {
  GetData433(); // Получаем данные по радиоканалу
  
  if (flag_data) { 
    SendDataMQTT(); 
  }  
} //END loop

Ты с беззнаковыми типами работаешь, откуда у тебя отрицательным числам взяться.

как же с безнаковыми когда float temp;
вывожу в терминал вижу -1,52С на экране вижу -1,52С
через mqtt вижу 645,52*С

Точно также, как и положительное. Никакой разницы.

1 лайк

Порядок операций не забыл?

Прежде чем присваивать, приведи правую часть к int16_t

может и забыл, ответь развернуто?! я самоучка, может и не знаю чего самого обыкновенного из азов((( поэтому и хожу вокруг да около…

Отправлять строку с текстом

1 лайк