Не читается больше 5 датчиков

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

Модератор: immortal

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

Не читается больше 5 датчиков

Сообщение woow » Чт фев 18, 2021 5:21 pm

Столкнулся с такой проблемой.
Нужно мерить температуру в семи точках, на столе у компютера обкатал всё с пятью датчиками работало, но когда всё прикрутил к котлу - смотрю а там везде 0 температуры, на котёл семь датчиков DS18B20, скетчь тоже написал на семь, как только один отключаю всё данные пошли , как только подключаю любой больше 5-ти всё нолики. Где беда.
Датчики подключены примерно по такой схеме, и выкладываю часть скетча, где про температуры.
sensors.jpg
sensors.jpg (25.99 КБ) 1433 просмотра

Код: Выделить всё

#include <SPI.h>                
#include <Ethernet2.h>           
#include <PubSubClient.h>       
#include <OneWire.h>
#include <DallasTemperature.h>

byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 1, 24};      
IPAddress server{192, 168, 1, 240};  

void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;                                
PubSubClient client(server, 1883, callback, ethClient);  

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

float temp1;
float temp2;
float temp3;
float temp4;
float temp5;
float temp6;
float temp7;

byte sensor1[8] = {0x28, 0x88, 0xD9, 0x46, 0x92, 0x11, 0x02, 0xE2}; 
byte sensor2[8] = {0x28, 0xCC, 0xAF, 0x45, 0x92, 0x0C, 0x02, 0x57}; 
byte sensor3[8] = {0x28, 0x95, 0x03, 0x46, 0x92, 0x09, 0x02, 0x8A}; 
byte sensor4[8] = {0x28, 0x04, 0x2B, 0x46, 0x92, 0x05, 0x02, 0x87}; 
byte sensor5[8] = {0x28, 0x76, 0x7F, 0x53, 0x2D, 0x19, 0x01, 0xE2}; 
byte sensor6[8] = {0x28, 0x18, 0xF0, 0x3C, 0x2D, 0x19, 0x01, 0x9C}; 
byte sensor7[8] = {0x28, 0xB0, 0x87, 0x70, 0x2D, 0x19, 0x01, 0xAF}; 

//--------------------------- MQTT ---------------------------------------------------------

void callback(char* topic, byte* payload, unsigned int length){

	// Выделяем необходимое кол-во памяти для копии payload
	byte* p = (byte*)malloc(length);
	// Копирование payload в новый буфер
	memcpy(p, payload, length);
	client.publish("Heater", p, length);
	// clear memory
	free(p);
}

void setup(){   
  
  sensors.begin();
  Ethernet.begin(mac, ip);  
}

void loop(){   

sensors.requestTemperatures();
    
//----------------------------------------------------------------------------------------   
   
   if (client.connect("MAJORDOMO")){
      
    client.publish("Heater/alarm", (buttonState == 0) ? "0" : "1");
    client.publish("Heater/level", (Liquid_level == 0) ? "0" : "1");
    client.publish("Heater/VK1", String(temp1).c_str()); 
    client.publish("Heater/VK2", String(temp2).c_str()); 
    client.publish("Heater/HK",  String(temp3).c_str()); 
    client.publish("Heater/GR",  String(temp4).c_str());
    client.publish("Heater/KVP", String(temp5).c_str());
    client.publish("Heater/TP",  String(temp6).c_str());
    client.publish("Heater/TG",  String(temp7).c_str());   
     
    delay(2000);      
    client.disconnect();      // 
	}
}
//-----------------------------------------------------------------------------------------
void printTemperature(DeviceAddress address) {
  
  float tempC = sensors.getTempC(address);
//  Serial.print(tempC);
//  Serial.println();
   if (address == sensor1){temp1 = tempC;}
   if (address == sensor2){temp2 = tempC;}
   if (address == sensor3){temp3 = tempC;}
   if (address == sensor4){temp4 = tempC;}
   if (address == sensor5){temp5 = tempC;}
   if (address == sensor6){temp6 = tempC;}
   if (address == sensor7){temp7 = tempC;}
   
}
Raspberry Pi 3B+
homester
Сообщения: 194
Зарегистрирован: Вт дек 24, 2019 2:09 pm
Благодарил (а): 112 раз
Поблагодарили: 34 раза

Re: Не читается больше 5 датчиков

Сообщение homester » Чт фев 18, 2021 6:50 pm

woow писал(а):
Чт фев 18, 2021 5:21 pm
byte sensor1[8] = {0x28, 0x88, 0xD9, 0x46, 0x92, 0x11, 0x02, 0xE2};
byte sensor2[8] = {0x28, 0xCC, 0xAF, 0x45, 0x92, 0x0C, 0x02, 0x57};
byte sensor3[8] = {0x28, 0x95, 0x03, 0x46, 0x92, 0x09, 0x02, 0x8A};
byte sensor4[8] = {0x28, 0x04, 0x2B, 0x46, 0x92, 0x05, 0x02, 0x87};
byte sensor5[8] = {0x28, 0x76, 0x7F, 0x53, 0x2D, 0x19, 0x01, 0xE2};
byte sensor6[8] = {0x28, 0x18, 0xF0, 0x3C, 0x2D, 0x19, 0x01, 0x9C};
byte sensor7[8] = {0x28, 0xB0, 0x87, 0x70, 0x2D, 0x19, 0x01, 0xAF};
А зачем так заморачиваться ?
Проще вот-так:

Код: Выделить всё

#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(2);
DallasTemperature sensors(&oneWire);

//-----------------------------------------------------------------------------------------
void printTemperature(uint8_t nd) {
// nd - номер опрашиваемого датчика
// !!! номера датчиков начинаются с 0 !!!  
  float tempC = sensors.getTempCByIndex(nd);
	switch (nd) {
	case 0: temp1 = tempC; break;
	case 1: temp2 = tempC; break;
	case 2: temp3 = tempC; break;
	case 3: temp4 = tempC; break;
	case 4: temp5 = tempC; break;
	case 5: temp6 = tempC; break;
	case 6: temp7 = tempC; break;
}
// А лучше всего использовать массив temp[nd] = tempC
Raspberry Pi3 B+, v4.44, внешняя з/к
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Не читается больше 5 датчиков

Сообщение woow » Чт фев 18, 2021 9:23 pm

я понимаю, есть разные подходы такому решению, но не решает мою проблему и не отвечает на вопрос почему 5 датчиков работает, а 5+1 уже нет (не говоря о 7-ми шт), хотя каких то ограничений такому количеству не нашёл. Каждый по отдельности датчик тоже работает.
Raspberry Pi 3B+
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Не читается больше 5 датчиков

Сообщение Jilber » Чт фев 18, 2021 9:24 pm

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

Re: Не читается больше 5 датчиков

Сообщение woow » Чт фев 18, 2021 9:55 pm

Вот так решилось. Может кому ещё поможет. Конденсатор оставил, и добавил 1.6ком резистор паралелэно к 4.7ком резистору.
sensors.jpg
sensors.jpg (27.04 КБ) 1378 просмотров
За это сообщение автора woow поблагодарили (всего 2):
lihodeev (Пт фев 19, 2021 12:33 am) • stellhawk (Сб фев 20, 2021 11:19 am)
Рейтинг: 2.33%
Raspberry Pi 3B+
Ответить