-
Notifications
You must be signed in to change notification settings - Fork 0
/
esp8266-dh22.ino
104 lines (83 loc) · 2.46 KB
/
esp8266-dh22.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define DHTPIN D4
#define DHTTYPE DHT22
#define MQTT_TOPIC_HUMIDITY "home/sensors/livingroom/humidity"
#define MQTT_TOPIC_TEMPERATURE "home/sensors/livingroom/temperature"
#define MQTT_TOPIC_STATE "home/iot/status/esp8266dht22-livingroom"
#define MQTT_PUBLISH_DELAY 10000
const char* MQTT_CLIENT_ID = "esp8266dht22-livingroom";
const char* WIFI_SSID = "WIFI_SSID";
const char* WIFI_PASSWORD = "WIFI_PASSWORD";
const char *MQTT_SERVER = "mqtt";
const char *MQTT_USER = NULL;
const char *MQTT_PASSWORD = NULL;
float humidity;
float temperature;
long lastMsgTime = 0;
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient mqttClient(espClient);
void setup() {
Serial.begin(115200);
while (! Serial);
setupWifi();
mqttClient.setServer(MQTT_SERVER, 1883);
dht.begin();
}
void loop() {
if (!mqttClient.connected()) {
mqttReconnect();
}
mqttClient.loop();
long now = millis();
if (now - lastMsgTime > MQTT_PUBLISH_DELAY) {
lastMsgTime = now;
// Reading DHT22 sensor data
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("DHT22 sensor is not ready yet");
return;
}
mqttPublish(MQTT_TOPIC_TEMPERATURE, temperature);
mqttPublish(MQTT_TOPIC_HUMIDITY, humidity);
}
}
void setupWifi() {
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void mqttReconnect() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (mqttClient.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD, MQTT_TOPIC_STATE, 1, true, "disconnected", false)) {
Serial.println("connected");
// Once connected, publish an announcement...
mqttClient.publish(MQTT_TOPIC_STATE, "connected", true);
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void mqttPublish(char* topic, float payload) {
Serial.print(topic);
Serial.print(": ");
Serial.println(payload);
mqttClient.publish(topic, String(payload).c_str(), true);
}