В чем разница между типами данных CloudTemperature, CloudTemperatureSensor и Float?

temperature-sensor variables data-type temperature arduino-iot-cloud

У меня есть датчик SHT30 для Wemos, и я учусь использовать Arduino IOT Cloud.

Я использую тип данных float для переменной temperature, но вижу еще два типа данных:

Температура облака

Датчик температуры облака

В чем разница? Не следует использовать с плавающей запятой?

, 👍0


1 ответ


2

Из технической справки по Arduino Cloud на arduino.cc:

Для вашего удобства IoT Cloud предоставляет специализированные типы, которые представляют собой просто оболочки базовых типов, но с более явным объявлением семантики переменных. Это обеспечивает более эффективную интеграцию со сторонними службами (например, Alexa) и лучшую визуализацию виджетов на информационных панелях.

Их можно использовать так же, как и обычные переменные обернутого типа, поскольку они поддерживают операторы присваивания и сравнения.

Эти типы на самом деле являются классами-оболочками, которые добавляют некоторые функции для лучшей интеграции в облачные службы. Вы можете использовать их так же, как и обычные типы данных.


Вы даже можете посмотреть, как они определяются. Рассмотрим, например, CloudTemperature. Все файлы можно найти в репозитории ArduinoIoTCloud на github.

Типы определены в файле PropertyContainer.h:

< pre>... #include "types/CloudFloat.h" ... typedef CloudFloat CloudTemperature; ...

Поэтому CloudTemperature на самом деле просто CloudFloat, который включается из соответствующего заголовочного файла. Когда мы смотрим на файл CloudFloat.h, мы находим:

...
#include "types/CloudFloat.h"
...
typedef CloudFloat CloudTemperature;
...

Поэтому внутренне CloudFloat — это просто значение с плавающей запятой с дополнительными функциями. И вы можете использовать его как любое другое число с плавающей запятой, так как ниже той части, которую я показал здесь, все операторы (такие как /, *, +, ...) перезаписываются (чтобы класс знал, что делать с этими операторами).

CloudTemperatureSensor находится по адресу CloudTemperatureSensor.h и наследуется от CloudFloat, поэтому работает в основном одинаково (он перезаписывает только оператор присваивания; в остальном то же самое, что и CloudFloat).


Не следует использовать число с плавающей запятой?

Я сам не пробовал. Но из документации следует, что нет никаких причин не использовать специализированные типы, поскольку они обеспечивают ту же функциональность и даже больше.

,