нужна помощь для загрузки данных в mqtt

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

нужна помощь для загрузки данных в mqtt

Сообщение 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 раза

Re: нужна помощь для загрузки данных в mqtt

Сообщение 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)
Рейтинг: 1.16%
Raspberry Pi3 B+, v4.44, внешняя з/к
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: нужна помощь для загрузки данных в mqtt

Сообщение 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+
Ответить