#include "DHT.h" #include #include #define WIFI_AP "YOUR_WIFI_AP" #define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" #define TOKEN "ESP8266_DEMO_TOKEN" // DHT #define DHTPIN 2 #define DHTTYPE DHT22 char thingsboardServer[] = "YOUR_THINGSBOARD_HOST_OR_IP"; WiFiClient wifiClient; // Initialize DHT sensor. DHT dht(DHTPIN, DHTTYPE); PubSubClient client(wifiClient); int status = WL_IDLE_STATUS; unsigned long lastSend; void setup() { Serial.begin(115200); dht.begin(); delay(10); InitWiFi(); client.setServer( thingsboardServer, 1883 ); lastSend = 0; } void loop() { if ( !client.connected() ) { reconnect(); } if ( millis() - lastSend > 1000 ) { // Update and send only after 1 seconds getAndSendTemperatureAndHumidityData(); lastSend = millis(); } client.loop(); } void getAndSendTemperatureAndHumidityData() { Serial.println("Collecting temperature data."); // Reading temperature or humidity takes about 250 milliseconds! float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); String temperature = String(t); String humidity = String(h); // Just debug messages Serial.print( "Sending temperature and humidity : [" ); Serial.print( temperature ); Serial.print( "," ); Serial.print( humidity ); Serial.print( "] -> " ); // Prepare a JSON payload string String payload = "{"; payload += "\"temperature\":"; payload += temperature; payload += ","; payload += "\"humidity\":"; payload += humidity; payload += "}"; // Send payload char attributes[100]; payload.toCharArray( attributes, 100 ); client.publish( "v1/devices/me/telemetry", attributes ); Serial.println( attributes ); } void InitWiFi() { Serial.println("Connecting to AP ..."); // attempt to connect to WiFi network WiFi.begin(WIFI_AP, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("Connected to AP"); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { status = WiFi.status(); if ( status != WL_CONNECTED) { WiFi.begin(WIFI_AP, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("Connected to AP"); } Serial.print("Connecting to ThingsBoard node ..."); // Attempt to connect (clientId, username, password) if ( client.connect("ESP8266 Device", TOKEN, NULL) ) { Serial.println( "[DONE]" ); } else { Serial.print( "[FAILED] [ rc = " ); Serial.print( client.state() ); Serial.println( " : retrying in 5 seconds]" ); // Wait 5 seconds before retrying delay( 5000 ); } } }