Bezüglich der Verbindung mit MQTT - ich hab folgenden Code für eine Drehzahlmessung verwendet.
Bin gerade unterwegs - das Editieren ist etwa mühsam, deshalb der gesamte Code.
Die Bemerkung, dass der Broker nicht publishen darf - war nur bei mir, wegen der zeitkritischen Aufgabe erforderlich!
Ich verwende auch nicht den Standardport!
/ #include <arduino.h>#include <esp8266wifi.h>#include <pubsubclient.h>void callback(char* topic, byte* payload, unsigned int length);
WiFiClient espClient;
PubSubClient client("192.168.0.221", 1888, callback, espClient);
volatile unsigned long RPM_T2, RPM_Count;
unsigned long RPM , RPM_T1;
unsigned long i;
//char* message_buff;
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
} //ioBroker darf keine States senden!!!! WWWIIIICCCCHHHTTTTIIIIGGG !!!!!!!!
void unterbrechung () {
RPM_Count++;
RPM_T2 = millis();
// Serial.println("Interrupt");
};
void setup() {
pinMode(14, INPUT_PULLUP);
RPM_T1 = 0;
RPM_T2 = 0;
RPM_Count = 0;
attachInterrupt ( digitalPinToInterrupt (14), unterbrechung, FALLING);
Serial.begin(9600);
WiFi.begin("Schubi", "XXX");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Start erfolgreich!");
if (client.connect("Engine_1")) {
Serial.println("Connected to MQTT broker");}
}
void loop() {
if (RPM_T2 > RPM_T1) {
RPM = (unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1));
RPM_T1 = RPM_T2;
RPM_Count = 0;
}
else {
RPM = 0;
}
noInterrupts();
client.publish("Engine_1/Drehzahl/", String(RPM).c_str());
interrupts();
//i++;
//Serial.print("Drehzahl= ");
//Serial.println(RPM);
delay(500);
}</pubsubclient.h></esp8266wifi.h></arduino.h>