03-05-2022, 11:56
Witam.
Panowie/Panie.
Potrzebuję pomocy, jak w prosty sposób zmienić kod aby do kolejnych pinów 23, 24, 25.. dołączyć po dwa następne czujniki DS18B20, itd. i ich dane wysłać do HA poprzez MQTT (Ethernet W5100).
Jak na razie mam podstawowy kod, który czyta obecnie dwa czujniki z jednego pinu i wysyła dane po MQTT.
Nie mogę poradzić sobie jak dodać następne reguły.
Próbowałem podwoić wpisy i ponazywać je inaczej, lecz finał był taki, że zamiast dwóch wyników było ich aż 16.
Kod na którym bazuje poniżej który działa nawet na kilka czujników w jednym pinie.
Co gdzie zmienić, poproszę o poradę.
Panowie/Panie.
Potrzebuję pomocy, jak w prosty sposób zmienić kod aby do kolejnych pinów 23, 24, 25.. dołączyć po dwa następne czujniki DS18B20, itd. i ich dane wysłać do HA poprzez MQTT (Ethernet W5100).
Jak na razie mam podstawowy kod, który czyta obecnie dwa czujniki z jednego pinu i wysyła dane po MQTT.
Nie mogę poradzić sobie jak dodać następne reguły.
Próbowałem podwoić wpisy i ponazywać je inaczej, lecz finał był taki, że zamiast dwóch wyników było ich aż 16.
Kod na którym bazuje poniżej który działa nawet na kilka czujników w jednym pinie.
Co gdzie zmienić, poproszę o poradę.
Kod:
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
const byte ONEWIRE_PIN = 22;
const byte NUM_SENSORS = 2;
unsigned long teraz,ostatnio;
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 8, 180 };
byte ip[] = { 192, 168, 8, 112 };
const byte sensorsAddress[NUM_SENSORS][8] = {
0x28, 0x60, 0xE6, 0x96, 0xF0, 0x1, 0x3C, 0x27,
0x28, 0x23, 0x43, 0x96, 0xF0, 0x1, 0x3C, 0xEA,
};
void callback(char* topic, byte* payload, unsigned int length) {
}
OneWire oneWire (ONEWIRE_PIN);
DallasTemperature sensors(&oneWire);
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void setup() {
Ethernet.begin(mac, ip);
sensors.requestTemperatures();
delay(5000);
sensors.setWaitForConversion(0);
if (client.connect("arduinoClient")) {
client.publish("out", "OK");
}
}
void loop() {
teraz = millis();
if((uint32_t) (teraz-ostatnio)>5000)
{
ostatnio=teraz;
for (int i = 0; i < NUM_SENSORS; i++)
{
char buffer[50] = { 0 };
char num_buffer[50] = { 0 };
char payload[50] = { 0 };
float temperature = sensors.getTempC(sensorsAddress[i]);
dtostrf(temperature, 5, 2, buffer);
sprintf(num_buffer, "%d", i);
strcat(payload, "{ id");
strcat(payload, num_buffer);
strcat(payload, " : ");
strcat(payload, buffer);
strcat(payload, " }");
client.publish("out", payload);
}
sensors.requestTemperatures();
}
client.loop();
}