Lab 1
การแสดงผลข้อมูลจากอุปกรณ์เซนเซอร์บน NETPIE Freeboard
Lab 1 เป็นการสร้างแอปพลิเคชั่นเซนเซอร์วัดอุณหภูมิและความชื้นด้วย NodeMCU และเซนเซอร์โมดูล DHT11 (อุปกรณ์ ZX-DHT11 ใน IoT Kit) ในขั้นแรกผู้ใช้ต้องติดตั้ง Library ที่เกี่ยวข้องกับเซนเซอร์ก่อน ซึ่งในที่นี้คือ DHT.h ซึ่งสามารถดาวน์โหลดได้ที่ https://github.com/adafruit/DHT-sensor-library ให้ผู้ใช้งานคัดลอกไปวางไว้ใน Folder Arduino\libraries
ในภาพด้านล่างแสดงการเชื่อมต่อ เซนเซอร์ DHT11 กับ NodeMCU
หลังจากเชื่อมต่อเสร็จ ให้ทาตามขั้นตอนดังนี้
1.ฝั่ง NodeMCU สามารถเขียนโค้ดสร้างไฟล์ piedht.ino ตามข้างล่างและ Upload ไฟล์เข้า NodeMCU
piedht.ino
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <MicroGear.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
#define APPID "YOUR_APPID"
#define KEY "YOUR_KEY"
#define SECRET "YOUR_SECRET"
#define ALIAS "piedht"
WiFiClient client;
int timer = 0;
char str[32];
#define DHTTYPE DHT11 //Define sensor type
#define DHTPIN D4 // Define sensor pin
DHT dht(DHTPIN, DHTTYPE, 15); //Initialize DHT sensor
int humid;
int temp;
MicroGear microgear(client);
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
Serial.print("Incoming message -->");
msg[msglen] = '\0';
Serial.println((char *)msg);
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
Serial.println("Connected to NETPIE...");
microgear.setAlias(ALIAS);
}
void setup(){
dht.begin();
microgear.on(MESSAGE,onMsghandler);
microgear.on(CONNECTED,onConnected);
Serial.begin(115200);
Serial.println("Starting...");
if (WiFi.begin(ssid, password)) {
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY,SECRET,ALIAS);
microgear.connect(APPID);
}
void loop(){
if (microgear.connected()) {
Serial.println("connected");
microgear.loop();
if (timer >= 1000) {
humid = dht.readHumidity();
temp = dht.readTemperature();
sprintf(str,"%d,%d",humid,temp);
Serial.println(str);
Serial.print("Sending -->");
microgear.publish("/dht",str);
timer = 0;
}
else timer += 100;
}
else {
Serial.println("connection lost, reconnect...");
if (timer >= 5000) {
microgear.connect(APPID);
timer = 0;
}
else timer += 100;
}
delay(100);
}
ในตัวอย่างนี้ คำสั่ง microgear.publish(“/dht”,str) คือการ Publish ข้อความ (ในที่นี้เป็น Message String str) ไปยัง Topic ที่ระบุคือ /dht ซึ่งข้อความคือค่าของอุณหภูมิและความชื้นที่วัดได้จากเซนเซอร์ DHT
2.เปิด Console โดยไปที่ Tools -> Serial Monitor เพื่อตรวจสอบว่าเซนเซอร์ทางานได้ปกติหรือไม่
รูปแสดงคอนโซลตรวจสอบการทางานของเซนเซอร์
3.ฝั่ง NETPIE Freeboard คลิกที่ Datasource ที่สร้างขึ้นก่อนหน้านี้ และแก้ไขในช่อง SUBSCRIBED TOPICS ให้เป็น /dht
4.กด + (ADD PANE) เพื่อสร้าง Widget ชนิด Gauge ใหม่ 2 Widget เพื่อแยกแสดงอุณหภูมิและความชื้น โดยกรอกตั้งค่าแต่ละ Widget ดังนี้
Widget 1:
- TITLE : Humidity
- VALUE : datasources["YourDatasourceName"]["/YourAppID/dht"].split(",")[0]
- UNIT : %
- MINIMUM : 0
- MAXIMUM : 100
Widget 2:
- TITLE : Temperature
- VALUE : datasources["YourDatasourceName"]["/YourAppID/dht"].split(",")[1]
- UNIT : C
- MINIMUM : 0
MAXIMUM : 50
ภาพด้านล่างแสดงตัวอย่างการกรอกข้อมูลเพื่อสร้าง Widget แสดงค่าความชื้น (Humidity)
รูปแสดงตัวอย่างหน้าจอตั้งค่า Widget แสดงค่าความชื้น
รูปแสดง Widget แสดงค่าอุณหภูมิและความชื้นที่วัดได้จากเซนเซอร์
คำอธิบายเพิ่มเติม
เนื่องจาก DHT ส่งค่ามาในรูปแบบ "Humidity, Temperature" เช่น " 40,24 " เวลาเรารับค่าเข้ามา จึงต้องทาการแยกออกเป็น Array โดยใช้เครื่องหมาย Comma “,” เป็นตัวแบ่ง จากนั้นก็อ้างอิงถึงช่องใน Array ของ Message String ที่ Publish ใน Topic /dht เช่น Index \[0\] หมายถึงค่าแรก และ Index \[1\] หมายถึงค่าถัดมา