#include #include #include #include #include #include #include #define DHTPIN 3 // Digital pin connected to the DHT sensor #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT_Unified dht(DHTPIN, DHTTYPE); // WiFi-Credentials const char *ssid = "xxxxxxxxxxxxxx"; const char *password = "xxxxxxxxxxxxxxxx"; // MQTT Broker IP address const char *sub_identifier = "xxxxxxxxxxxx"; const char *mqtt_identifier = "xxxxxxxxxxxxx"; const char *mqtt_server = "xxxxxxxxxxxxxxx"; const char *mqtt_user = "xxxxxxxxxxx"; const char *mqtt_pass = "xxxxxxxxxxxxxxxxx"; WiFiClient espClient; PubSubClient client(espClient); char msg[50]; char topic[50]; int value = 0; #define SLAVE_ADDR 0x10 String receivedText = ""; void setup(void) { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); dht.begin(); Wire.begin(SLAVE_ADDR); Wire.onReceive(receiveEvent); delay(2000); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); 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() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(mqtt_identifier, mqtt_user, mqtt_pass)) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void receiveEvent(int numBytes) { receivedText = ""; while (Wire.available()) { char c = Wire.read(); if (isPrintable(c)) { receivedText += c; } } Serial.print("Received: "); Serial.println(receivedText); receivedText.trim(); if (receivedText == "get") { //get temperature sensors_event_t event; dht.temperature().getEvent(&event); // Convert the value to a char array char tempString[8]; dtostrf(event.temperature, 1, 2, tempString); Serial.print("Temperature: "); Serial.println(tempString); //changes the topic to publish to strcpy(topic, sub_identifier); strcat(topic, "/temperature"); //and publish it to MQTT client.publish(topic, tempString); //get humidityy dht.humidity().getEvent(&event); // Convert the value to a char array and publish it to MQTT char humString[8]; dtostrf(event.relative_humidity, 1, 2, humString); Serial.print("Humidity: "); Serial.println(humString); //changes the topic to publish to strcpy(topic, sub_identifier); strcat(topic, "/humidity"); //and publish it to MQTT client.publish(topic, humString); } }