From a31c9ddb5f0a3eb4a20e62fdc3cc84fa4b20d670 Mon Sep 17 00:00:00 2001 From: Domagoj Zecevic Date: Fri, 10 Feb 2023 15:32:42 +0100 Subject: [PATCH] Working everything --- arduino_mqtt/arduino_mqtt.ino | 119 +++++++++++++++++++++++++--------- 1 file changed, 89 insertions(+), 30 deletions(-) diff --git a/arduino_mqtt/arduino_mqtt.ino b/arduino_mqtt/arduino_mqtt.ino index c0b635f..e49c9a1 100644 --- a/arduino_mqtt/arduino_mqtt.ino +++ b/arduino_mqtt/arduino_mqtt.ino @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -29,6 +29,7 @@ const char* mqttServer = "192.168.1.11"; const int mqttPort = 1883; const char* mqttUser = "yourMQTTuser"; const char* mqttPassword = "yourMQTTpassword"; +const char topic[] = "solar/114182126368/0/power"; //Diplay and DHT update data long previousMillis = 0; @@ -41,22 +42,44 @@ float temperature; //Start WiFi client WiFiClient espClient; -PubSubClient MQTTclient(espClient); +MqttClient MQTTclient(espClient); -void callback(char* topic, byte* payload, unsigned int length) { +// void callback(char* topic, byte* payload, unsigned int length) { - Serial.print("Message arrived in topic: "); - Serial.println(topic); +// Serial.print("Message arrived in topic: "); +// Serial.println(topic); - Serial.print("Message:"); +// Serial.print("Message:"); +// global_power = ""; +// for (int i = 0; i < length; i++) { +// Serial.print((char)payload[i]); +// global_power += char(payload[i]); +// } +// } + +void onMqttMessage(int messageSize) { + // Serial.println("Received a message with topic '"); + // Serial.print(MQTTclient.messageTopic()); + // Serial.print("', length "); + // Serial.print(messageSize); + // Serial.println(" bytes:"); + global_power = ""; - for (int i = 0; i < length; i++) { - Serial.print((char)payload[i]); - global_power += char(payload[i]); + while (MQTTclient.available()) { + //Serial.print((char)MQTTclient.read()); + global_power += char(MQTTclient.read()); } -} + // Serial.println(global_power); + // Serial.println(); +} void showDisplay() { + //int length = global_power.length(); + //Serial.println(lenght); + if (global_power.length() > 5) { + global_power = global_power.substring(0,global_power.length()-1); + } + display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); @@ -92,11 +115,29 @@ String prepareHtmlPage() htmlPage += F("

" "

Humidity: "); htmlPage += humidity; + htmlPage += "

"; + htmlPage += F("

" + "

MQTT Connected: "); + htmlPage += MQTTclient.connected(); htmlPage += "

"; htmlPage += F("" "\r\n"); return htmlPage; } + +void reconect() { + while (!MQTTclient.connect(mqttServer, mqttPort)) { + Serial.println("Connecting to MQTT..."); + + // if (MQTTclient.connect()) { + // Serial.println("Connected to mqtt!"); + // } else { + // Serial.print("failed with state "); + // Serial.print(MQTTclient.connectError()); + // delay(2000); + // } + } +} void setup() { @@ -115,22 +156,13 @@ void setup() { } Serial.println("Connected to WiFi"); - MQTTclient.setServer(mqttServer, mqttPort); - MQTTclient.setCallback(callback); - - while (!MQTTclient.connected()) { - Serial.println("Connecting to MQTT..."); + //MQTTclient.setServer(mqttServer, mqttPort); + //MQTTclient.setCallback(callback); + MQTTclient.onMessage(onMqttMessage); + MQTTclient.subscribe(topic); - if (MQTTclient.connect("ESP32Client", mqttUser, mqttPassword )) { - Serial.println("Connected to mqtt!"); - } else { - Serial.print("failed with state "); - Serial.print(MQTTclient.state()); - delay(2000); - } - } - //Get info from Solar - MQTTclient.subscribe("solar/114182126368/0/power"); + //Get info from Solar + //MQTTclient.subscribe("solar/114182126368/0/power"); server.begin(); Serial.printf("Web server started, open %s in a web browser\n", WiFi.localIP().toString().c_str()); @@ -147,7 +179,19 @@ void setup() { } void loop() { - MQTTclient.loop(); + if (!MQTTclient.connected()) { + reconect(); + //Serial.print("loop "); + //Serial.println(MQTTclient.connected()); + MQTTclient.poll(); + MQTTclient.available(); + //Serial.println((char)MQTTclient.read()); + } + MQTTclient.poll(); + MQTTclient.available(); + MQTTclient.subscribe(topic); + //Serial.println((char)MQTTclient.read()); + WiFiClient serverClient = server.available(); if (serverClient) { @@ -171,16 +215,31 @@ void loop() { // close the connection: serverClient.stop(); } - String MQTTmessage; - char out[255]; + unsigned long currentMillis = millis(); + //Serial.println("outside for"); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; humidity = dht.readHumidity(); temperature = dht.readTemperature(); showDisplay(); - MQTTclient.publish("my/office/Temperature", String(temperature).c_str()); - MQTTclient.publish("my/office/Humidity", String(humidity).c_str()); + if (!MQTTclient.connected()) { + reconect(); + } + //Serial.println(MQTTclient.connected()); + + MQTTclient.beginMessage("my/office/Temperature"); + MQTTclient.print(String(temperature).c_str()); + MQTTclient.endMessage(); + + MQTTclient.beginMessage("my/office/Humidity"); + MQTTclient.print(String(humidity).c_str()); + MQTTclient.endMessage(); + + + // MQTTclient.publish("my/office/Temperature", String(temperature).c_str()); + // MQTTclient.publish("my/office/Humidity", String(humidity).c_str()); + } } \ No newline at end of file