//ผมแก้ CODE ตตามนี้ครับ
#include "DHT.h"
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
#define WIFI_AP "XXXXXX"
#define WIFI_PASSWORD "XXXXXX"
#define TOKEN "jyFESG8ZUbRHJjStAY7l" // thingsboard token
// DHT
#define DHTPIN 5
#define DHTTYPE DHT11
char thingsboardServer[] = "104.196.24.70"; //demo.thingsboard.io
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;
//}
h = 60.00;
t = 38.00;
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/dht11/", 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 );
}
}
}
////////////////////////////////////////////////////////////////////////////
ในหน้าต่าง Serial Monitor ของ Arduino IDE ก็ขึ้นว่าเชื่อมต่อได้และส่งข้อมุลออกไปในรูปแบบของ JSON
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
.......................Connected to AP
Connecting to Thingsboard node ...[DONE]
Collecting temperature data.
Humidity: 60.00 % Temperature: 38.00 *C Sending temperature and humidity : [38.00,60.00] -> {"temperature":38.00,"humidity":60.00}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ตามรูปนี้
https://www.picz.in.th/images/2018/06/15/4R9tWt.png
แต่ใน ค่าของ Latest telemetry ใน Devices ไม่แสดงค่าอะไรเลย
ตามรูปนี้
https://www.picz.in.th/images/2018/06/15/4R95Wn.png
ซึ่งผมก็ใส่ thingsboard token ให้เหมือนกันแล้ว
ตามรูปนี้
https://www.picz.in.th/images/2018/06/15/4R9l31.png
ผมต้องตั้งค่าหรือทำอะไรเพิ่มเติมอีกมั้ยครับ
หัดใช้ thingsboard ครับ ในเว็บ demo.thingsboard.io ค่าของ Latest telemetry ใน Devices ไม่แสดงค่าอะไรเลยครับ
#include "DHT.h"
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
#define WIFI_AP "XXXXXX"
#define WIFI_PASSWORD "XXXXXX"
#define TOKEN "jyFESG8ZUbRHJjStAY7l" // thingsboard token
// DHT
#define DHTPIN 5
#define DHTTYPE DHT11
char thingsboardServer[] = "104.196.24.70"; //demo.thingsboard.io
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;
//}
h = 60.00;
t = 38.00;
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/dht11/", 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 );
}
}
}
////////////////////////////////////////////////////////////////////////////
ในหน้าต่าง Serial Monitor ของ Arduino IDE ก็ขึ้นว่าเชื่อมต่อได้และส่งข้อมุลออกไปในรูปแบบของ JSON
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
.......................Connected to AP
Connecting to Thingsboard node ...[DONE]
Collecting temperature data.
Humidity: 60.00 % Temperature: 38.00 *C Sending temperature and humidity : [38.00,60.00] -> {"temperature":38.00,"humidity":60.00}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ตามรูปนี้ https://www.picz.in.th/images/2018/06/15/4R9tWt.png
แต่ใน ค่าของ Latest telemetry ใน Devices ไม่แสดงค่าอะไรเลย
ตามรูปนี้ https://www.picz.in.th/images/2018/06/15/4R95Wn.png
ซึ่งผมก็ใส่ thingsboard token ให้เหมือนกันแล้ว
ตามรูปนี้ https://www.picz.in.th/images/2018/06/15/4R9l31.png
ผมต้องตั้งค่าหรือทำอะไรเพิ่มเติมอีกมั้ยครับ