Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <SPI.h>
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
- #define BME_SCK 13
- #define BME_MISO 12
- #define BME_MOSI 11
- #define BME_CS 10
- const float cToKOffset = 273.15;
- Adafruit_BME280 bme; // I2C
- WiFiClient espClient;
- PubSubClient client(espClient);
- String zimmer = "Sebastian Zimmer";
- const char* ssid = "Dev-Network";
- const char* password = "----";
- const char* mqtt_server = "192.168.1.109";
- const char* mqtt_user = "mqtt";
- const char* mqtt_pass = "mqtt";
- const char* mqtt_root = "/Zimmer/Sebastians Zimmer";
- String tversion = "1.0";
- #define ALTITUDE 164 //Höhe über dem Meer
- #define CONFIG_MQTT_TOPIC_GET "/get"
- #define CONFIG_MQTT_TOPIC_GET_TEMP "/temperature"
- #define CONFIG_MQTT_TOPIC_GET_DEW "/dewpoint"
- #define CONFIG_MQTT_TOPIC_GET_HUM "/humidity_abs"
- #define CONFIG_MQTT_TOPIC_GET_HUMR "/humidity"
- #define CONFIG_MQTT_TOPIC_GET_PRES "/pressure"
- #define CONFIG_MQTT_TOPIC_GET_PRESR "/pressure_rel"
- class PubSubClientWrapper : public PubSubClient{
- private:
- public:
- PubSubClientWrapper(Client& espc);
- bool publish(StringSumHelper topic, String str);
- bool publish(StringSumHelper topic, unsigned int num);
- bool publish(const char* topic, String str);
- bool publish(const char* topic, unsigned int num);
- bool publish(StringSumHelper topic, String str, bool retain);
- bool publish(StringSumHelper topic, unsigned int num, bool retain);
- bool publish(const char* topic, String str, bool retain);
- bool publish(const char* topic, unsigned int num, bool retain);
- };
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- Serial.setTimeout(20);
- // Wait for serial to initialize.
- while(!Serial) {
- delay(1);
- }
- Serial.println("Device started!");
- Serial.println("----------------------------------------");
- Serial.print("Temperatur Messung ");
- Serial.println(tversion);
- Serial.print("MQTT: ");
- Serial.println(mqtt_root);
- Serial.println("----------------------------------------");
- Serial.println();
- Serial.print("Verbinde Wlan");
- WiFi.begin(ssid, password);
- int t = 12;
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- if ((t % 29) == 0) {
- Serial.println();
- }
- Serial.print(".");
- t = t + 1;
- if(t == 150) {
- Serial.println();
- Serial.print("Wlan nicht verfügbar. Erneuter Versuch in 5 min");
- ESP.deepSleep(300e6);
- }
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- Serial.println();
- client.setServer(mqtt_server, 1883);
- Serial.print("Attempting MQTT connection");
- String clientId = "ESP-";
- clientId += zimmer;
- if (client.connect(clientId.c_str(), mqtt_user, mqtt_pass)) {
- Serial.println("connected");
- }
- bool status;
- // default settings
- // (you can also pass in a Wire library object like &Wire2)
- status = bme.begin(0x76);
- if (!status) {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- while (1);
- }
- }
- void loop() {
- // put your main code here, to run repeatedly:
- float temperature = bme.readTemperature();
- float humidity_r = bme.readHumidity();
- float humidity = absoluteHumidity(temperature, humidity_r);
- float pressure_r = bme.readPressure() / 100.0F;
- float pressure = bme.seaLevelForAltitude(ALTITUDE, pressure_r);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_TEMP), (String)temperature);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_DEW), (String)dew);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_HUM), (String)humidity);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_HUMR), (String)humidity_r);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_PRES), (String)pressure);
- client.publish(((String)mqtt_root + CONFIG_MQTT_TOPIC_GET + CONFIG_MQTT_TOPIC_GET_PRESR), (String)pressure_r);
- Serial.println();
- ESP.deepSleep(30e6);
- }
- // Relative to absolute humidity
- // Based on https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
- float absoluteHumidity(float temperature, float humidity) {
- return (13.2471*pow(EULER,17.67*temperature/(temperature+243.5))*humidity/(cToKOffset+temperature));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement