Also......
ich hab mir die Programme von der Seite:
https://smarthome-blogger.de/tutorial/esp8266-mqtt-tutorial/
geklaut.
Das obere Prog hab ich so angepasst, das es mir vier Temperatursensoren DS18B20 ausließt und in vier Topics sendet. Das ganze alle 5 Sekunden.
Das untere Prog musste ich auch ein bisschen ändern, lief aber dann.
Dummer Weise laufen nicht beide Progs gemeinsam. Wenn beide ESP mit Spannung versorgt werden kommen die Temperaturwerte auf meinem mosquitto-Broker nur noch sporadisch.
Beide ESP haben laut meiner Fritzbox eine eigene ip-Adresse.
Hat jemand ne Idee warum der eine den anderen stört?
C
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Data wire is plugged TO GPIO 2
#define ONE_WIRE_BUS 2
const char* SSID = "***";
const char* PSK = "***";
const char* MQTT_BROKER = "***";
float tempC;
//const char* wert ="test123";
const char* pfad ="/home/data";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
char wert[50];
int value = 0;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Number of temperature devices found
int numberOfDevices;
// We'll use this variable to store a found device address
DeviceAddress tempDeviceAddress;
void setup(){
// start serial port
Serial.begin(115200);
setup_wifi();
client.setServer(MQTT_BROKER, 1883);
// Start up the library
sensors.begin();
// Grab a count of devices on the wire
numberOfDevices = sensors.getDeviceCount();
// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(numberOfDevices, DEC);
Serial.println(" devices.");
// Loop through each device, print out address
for(int i=0;i<numberOfDevices; i++){
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i)){
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
// printAddress(tempDeviceAddress);
Serial.println();
}
else {
Serial.print("Found ghost device at ");
Serial.print(i, DEC);
Serial.print(" but could not detect address. Check power and cabling");
}
}
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(SSID);
WiFi.begin(SSID, PSK);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Reconnecting...");
if (!client.connect("ESP8266Client")) {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
void loop(){
Serial.println("checkpoint 6 ");// testpunkt
sensors.requestTemperatures(); // Send the command to get temperatures
// Loop through each device, print out temperature data
for(int i=0;i<numberOfDevices; i++){
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i)){
// Output the device ID
Serial.println("checkpoint 7 ");// testpunkt
Serial.print("Temperature for device: ");
Serial.println(i,DEC);
// Print the data
tempC = sensors.getTempC(tempDeviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
//********************
if (!client.connected()) {
reconnect();
}
client.loop();
snprintf (wert, 50, "%f", tempC);
switch (i)
{
case 0:
client.publish("/home/data/1", wert);
break;
case 1:
client.publish("/home/data/2", wert);
break;
case 2:
client.publish("/home/data/3", wert);
break;
case 3:
client.publish("/home/data/4", wert);
break;
case 4:
client.publish("/home/data/5", wert);
break;
case 5:
client.publish("/home/data/6", wert);
break;
}
}
delay(5000);
}
Alles anzeigen
C
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* SSID = "***";
const char* PSK = "***";
const char* MQTT_BROKER = "***";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(MQTT_BROKER, 1883);
client.setCallback(callback);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(SSID);
WiFi.begin(SSID, PSK);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Received message [");
Serial.print(topic);
Serial.print("] ");
char msg[length+1];
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
msg[i] = (char)payload[i];
}
Serial.println();
Serial.println(msg);
Serial.println("msg");
if(strcmp(msg,"1")==0){
Serial.println("1!!");
digitalWrite(2, HIGH);
}
if(strcmp(msg,"0")==0){
Serial.println("0!!!");
digitalWrite(2, LOW);
}
}
void reconnect() {
while (!client.connected()) {
Serial.println("Reconnecting MQTT...");
if (!client.connect("ESP8266Client")) {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
client.subscribe("/home/data");
Serial.println("MQTT Connected...");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Alles anzeigen