From a4b95097bab9116b3f04da1bc9809051ad05a7a5 Mon Sep 17 00:00:00 2001 From: Joachim Hummel Date: Thu, 8 Feb 2024 18:46:35 +0000 Subject: [PATCH] Added DSP310 Sensor with MQTT and Wifi --- mqtt-wifi-dsp310-sensor/ardunio_secrets.h | 3 + mqtt-wifi-dsp310-sensor/dsp310.ino | 114 ++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 mqtt-wifi-dsp310-sensor/ardunio_secrets.h create mode 100644 mqtt-wifi-dsp310-sensor/dsp310.ino diff --git a/mqtt-wifi-dsp310-sensor/ardunio_secrets.h b/mqtt-wifi-dsp310-sensor/ardunio_secrets.h new file mode 100644 index 0000000..e4f639a --- /dev/null +++ b/mqtt-wifi-dsp310-sensor/ardunio_secrets.h @@ -0,0 +1,3 @@ +//arduino_secrets.h header file +#define SECRET_SSID "xxxx" +#define SECRET_PASS "xxxx" diff --git a/mqtt-wifi-dsp310-sensor/dsp310.ino b/mqtt-wifi-dsp310-sensor/dsp310.ino new file mode 100644 index 0000000..0c4ff57 --- /dev/null +++ b/mqtt-wifi-dsp310-sensor/dsp310.ino @@ -0,0 +1,114 @@ +#include +#include +#include +#include +#include "arduino_secrets.h" + +Adafruit_DPS310 dps; +Adafruit_Sensor *dps_temp = dps.getTemperatureSensor(); +Adafruit_Sensor *dps_pressure = dps.getPressureSensor(); + +// Please enter your sensitive data in the Secret tab/arduino_secrets.h +char ssid[] = SECRET_SSID; // Your network SSID (name) +char pass[] = SECRET_PASS; // Your network password (use for WPA, or use as key for WEP) +const char* mqtt_server = "192.168.10.7"; // IP of your MQTT Broker + +WiFiClient espClient; +PubSubClient client(espClient); +unsigned long lastMsg = 0; +#define MSG_BUFFER_SIZE (50) +char msg[MSG_BUFFER_SIZE]; +int value = 0; + +void setup_wifi() { + delay(100); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, pass); + + 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) { + // Handle incoming MQTT messages if needed +} + +void reconnect() { + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + String clientId = "ESP8266Client-"; + clientId += String(random(0xffff), HEX); + if (client.connect(clientId.c_str())) { + Serial.println("connected"); + client.publish("outTopic", "Sensor Online!"); + client.subscribe("inTopic"); + } else { + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 5 seconds"); + delay(5000); + } + } +} + +void setup() { + Serial.begin(115200); + while (!Serial) delay(10); + + Serial.println("DPS310"); + if (! dps.begin_I2C()) { + Serial.println("Failed to find DPS"); + while (1) yield(); + } + Serial.println("DPS OK!"); + + // Setup highest precision + dps.configurePressure(DPS310_64HZ, DPS310_64SAMPLES); + dps.configureTemperature(DPS310_64HZ, DPS310_64SAMPLES); + + setup_wifi(); + client.setServer(mqtt_server, 1883); + client.setCallback(callback); +} + +void loop() { + if (!client.connected()) { + reconnect(); + } + client.loop(); + StaticJsonDocument<32> doc; + char output[55]; + + sensors_event_t temp_event, pressure_event; + + if (dps.temperatureAvailable() && dps.pressureAvailable()) { + dps_temp->getEvent(&temp_event); + dps_pressure->getEvent(&pressure_event); + + Serial.print(F("Temperature = ")); + Serial.print(temp_event.temperature); + Serial.println(" *C"); + Serial.print(F("Pressure = ")); + Serial.print(pressure_event.pressure); + Serial.println(" hPa"); + Serial.println(); + + doc["temperature"] = temp_event.temperature; + doc["pressure"] = pressure_event.pressure; + + serializeJson(doc, output); + client.publish("/home/sensors", output); + + delay(5000); + } +}