Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.
Модератор: immortal
-
woow
- Сообщения: 821
- Зарегистрирован: Пн июл 04, 2016 8:46 am
- Откуда: Mazeikiai
-
Благодарил (а):
125 раз
-
Поблагодарили:
46 раз
Сообщение
woow » Вт янв 26, 2021 1:12 am
Собрал код для замеры температуры на 6 DS18B20. Тестирую по ка на двух. На сериал мониторе всё хорошо:
Sensor 1: 22.06
Sensor 2: -127.00
но как это запихнуть в mqtt.
Получаю пока что неадекватные данные по mqtt:
A/B/T1 16
A/B/T2 8
понимаю что непорядок м коде но как конвертировать не знаю.
Если объявляю float всё падает Вот кусок кода:
byte temp1;
byte sensor1[8] = {0x28, 0x76, 0x7F, 0x53, 0x2D, 0x19, 0x01, 0xE2};
void setup(){
sensors.begin();
Ethernet.begin(mac, ip);
}
void loop(){
sensors.requestTemperatures();
Serial.print("Sensor 1: ");
printTemperature(sensor1);
if (client.connect("MDMClient")) {
client.publish("A/B/T1", String(вот сюда надо вытащить данные).c_str(),TRUE );
}
void printTemperature(DeviceAddress address) {
float tempC = sensors.getTempC(address);
Serial.print(tempC);
Serial.println();
}
.
Raspberry Pi 3B+
-
homester
- Сообщения: 194
- Зарегистрирован: Вт дек 24, 2019 2:09 pm
-
Благодарил (а):
112 раз
-
Поблагодарили:
34 раза
Сообщение
homester » Вт янв 26, 2021 2:19 am
woow писал(а): ↑Вт янв 26, 2021 1:12 am
понимаю что непорядок м коде но как конвертировать не знаю.
У меня вот так:
Код: Выделить всё
sensors.requestTemperatures();
int16_t t1 = sensors.getTempCByIndex(0); // температура на улице
int16_t t2 = sensors.getTempCByIndex(1); // температура теплицы 1
int16_t t3 = sensors.getTempCByIndex(2); // температура теплицы 2
// Если температура изменилась, то передаем
if (mt1!=t1){mt1=t1; client.publish(topic2, String(t1).c_str());}
if (mt2!=t2){mt2=t2; client.publish(topic3, String(t2).c_str());}
if (mt3!=t3){mt3=t3; client.publish(topic4, String(t3).c_str());}
Если нужны десятые градуса, то в место int16_t напиши float
- За это сообщение автора homester поблагодарил:
- woow (Вт янв 26, 2021 2:47 am)
Raspberry Pi3 B+, v4.44, внешняя з/к
-
woow
- Сообщения: 821
- Зарегистрирован: Пн июл 04, 2016 8:46 am
- Откуда: Mazeikiai
-
Благодарил (а):
125 раз
-
Поблагодарили:
46 раз
Сообщение
woow » Вт янв 26, 2021 2:53 am
Спасибо попробую и ваш код, я пока набросал вот такую конструкцию, вроде работает, сервер получает данные, только если отключен датчик значение чередуются с 0,00 на -127,00
Код: Выделить всё
void printTemperature(DeviceAddress address) {
float tempC = sensors.getTempC(address);
if (address == sensor1){ temp1 = tempC; }
if (address == sensor2){ temp2 = tempC; }
if (client.connect("MDMClient")) {
client.publish("A/B/T1", String(temp1).c_str(),TRUE );
client.publish("A/B/T1", String(temp2).c_str(),TRUE );
}
Raspberry Pi 3B+