Database and Grafana
full data summary :
https://drive.google.com/file/d/1OV12j5Vgo2thuWxoTZery4Xurr9p0JhG/view?usp=sharing
How to use Grafana and InfluxDB :
การสมัครเข้าใช้งาน ติดตั้ง InfluxDB และสร้าง key สำคัญ
ทำการติดตั้ง library ใน arduino เพื่อส่งข้อมูลเข้าใน InfluxDB
การสมัครเข้าใช้งาน และติดตั้ง Grafana
การเขียนโปรแกรมใน ESP32 เพื่อส่งค่าเข้าไปยัง InfluxDB
จากเว็บไซต์ https://europe-west1-1.gcp.cloud2.influxdata.com/orgs/b0251acf6c0622e5/load-data/clientlibraries/arduino จะมีตัวอย่างการเขียนโปรแกรมทั้งหมด 3 ส่วนแต่ที่ จําเป็นในการทดลองจะมีสองส่วนคือ ส่วนเข้า เชื่อมต่อกับ Database โดยในที่นี้จะต้องใช้คีย์สำคัญที่สมัครและสร้างไว้กับ InfluxDB
โค้ดโปรแกรมส่งค่าสุ่มอุณหภูมิและความชื้นใน ESP32
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
float temp;
float humd;
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#define WIFI_SSID "KengNeeHa"
#define WIFI_PASSWORD "0930963238"
#define INFLUXDB_URL "https://europe-west1-1.gcp.cloud2.influxdata.com"
#define INFLUXDB_TOKEN "plIl2kaYznrxJDiQUU8AxpFh937mfYHMksBG3cjM7e74eSgmp7R0UXyAikPNZYedVsFsDT0NZb-pclb381ijw=="
#define INFLUXDB_ORG "kengteeg28@gmail.com"
#define INFLUXDB_BUCKET "B6321031"
#define TZ_INFO "UTC+7"
#include "DHTesp.h"
DHTesp dht;
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN,
InfluxDbCloud2CACert);
Point sensor("temp&humd");
void setup() {
Serial.begin(115200);
dht.setup(15, DHTesp::DHT11);
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
sensor.addTag("device", DEVICE);
sensor.addTag("SSID", WiFi.SSID());
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
void loop() {
temp = dht.getTemperature();
humd = dht.getHumidity();
sensor.clearFields();
sensor.addField("rssi", WiFi.RSSI());
sensor.addField("temp", temp);
sensor.addField("humid", humd);
Serial.print("Writing: ");
Serial.println(sensor.toLineProtocol());
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("Wifi connection lost");
}
if (!client.writePoint(sensor)) {
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
Serial.println("Wait 1s");
delay(1000);
}
เช็คค่าข้อมูลใน InfluxDB
เปิดเว็บไซต์ที่ลงชื่อเข้าใช้กับ InfluxDB ให้เข้ามาที่ แถบ Explore เมื่อคลิกเข้าไปจะมีกล่องสีเทาด้านล่าง ให้ ทําการเลือก bucket คือขอบเขตข้อมูลที่ต้องการ ตามที่ได้ตั้งชื่อไว้ในโปรแกรมของ ESP32 โดยให้คลิกเลือก lastreport > temp&humid > เลือก temp และ humid จากนั้นกด Submit หากส่งข้อมูลถูกต้อง จะขึ้นกราฟเป็น ค่าที่ส่งมาจากESP 32 โดยสามารถปรับแต่งลักษณะการแสดงผลของข้อมูลได้ตามรูปแบบมุมซ้ายบน ค่าเฉลี่ย และ เวลาการอัพเดทที่ขวาล่าง
สร้าง Grafana Dashboard จากข้อมูลใน InfluxDB และการปรับแต่งค่า
Temperature Code
from(bucket: "B6321031")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r.device == "ESP32")
|> filter(fn: (r) => r._field == "temp")
|> drop(columns: ["_measurement"])
|> drop(columns: ["_field"])
|> aggregateWindow(every: 60s, fn:mean)
Humidity Code
from(bucket: "B6321031")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r.device == "ESP32")
|> filter(fn: (r) => r._field == "humid")
|> drop(columns: ["_measurement"])
|> drop(columns: ["_field"])
|> aggregateWindow(every: 60s, fn:mean)