Lab 1
การแสดงผลข้อมูลเซนเซอร์ด้วย NETPIE Feed
Lab นี้เป็นการทบทวนการประยุกต์ใช้ NETPIE Feed ในการดูข้อมูลอุณหภูมิและความชื้นที่ได้รับจากเซนเซอร์โมดูล DHT11 ผู้อบรมสามารถฝึกการนาข้อมูลที่เก็บจาก Feed มาใช้แสดงผลในรูปแบบต่างๆ พร้อมทั้งเข้าใจขีดจากัดการใช้งานของระบบและบริการ
1.สร้างไฟล์ feed_dht.ino ตามโค้ดด้านล่าง โดยระบุข้อมูลการเข้าถึงเครือข่าย Wifi ข้อมูล APPID, KEY และ SECRET และทาการ Upload ไฟล์เข้า NodeMCU ให้เชื่อมต่อกับ NETPIE
2.สร้าง Feed เพื่อรองรับค่าของข้อมูลอุณหภูมิและความชื้นที่เซนเซอร์ส่งมา ปรับแต่งการแสดงผลตามความเหมาะสม (ใน Data Display)
3.เพิ่ม Datasource สาหรับ Feed ในหน้า Freeboard
4.เพิ่ม Widget เพื่อแสดงผล Feed ในหน้า Freeboard
5.ทดลองเปลี่ยนอัตราการส่งข้อมูลของ Feed จาก NodeMCU ให้เร็วกว่าค่าของ INTERVAL ที่ระบุ (หรือเร็วกว่าอัตราเฉลี่ยที่เขียนได้คือ 15 วินาที ต่อ 1 จุด) สังเกตการเปลี่ยนแปลงในการแสดงผลของข้อมูลว่าเป็นอย่างไร มีผลต่อ Rate Limit หรือไม่ ในการดูระยะห่างระหว่างจุดของข้อมูลในระดับวินาที ควรปรับแต่งช่วงเวลาในการแสดงผลให้สั้นลง เช่น อยู่ในระดับ 1 นาที เป็นต้น
feed_dht.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 "YOUR_MICROGEAR_NAME"
#define FEEDID "YOUR_FEED_ID"
#define INTERVAL 15000
#define T_INCREMENT 200
#define T_RECONNECT 5000
#define BAUD_RATE 115200
#define MAX_TEMP 100
#define MAX_HUMID 100
WiFiClient client;
int timer = 0;
char str[32];
#define DHTTYPE DHT11 //Define sensor type
#define DHTPIN D4 // Define sensor pin
DHT dht(DHTPIN, DHTTYPE); //Initialize DHT sensor
float humid;
float temp;
MicroGear microgear(client);
// when the other thing send a msg to this board
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(BAUD_RATE);
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.print("*");
microgear.loop();
if (timer >= INTERVAL) {
humid = dht.readHumidity();
temp = dht.readTemperature();
Serial.print("\nHumidity: ");
Serial.print(humid);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" C%\n");
String data = "{\"humid\":";
data += humid ;
data += ", \"temp\":";
data += temp ;
data += "}";
if (isnan(humid) || isnan(temp) || humid >= MAX_HUMID || temp>= MAX_TEMP) {
Serial.println("Failed to read from DHT sensor!");
}else{
Serial.print("Sending -->");
Serial.println((char*) data.c_str());
microgear.writeFeed(FEEDID,data); //YOUR FEED ID, API KEY
}
timer = 0;
}
else timer += T_INCREMENT;
}
else {
Serial.println("connection lost, reconnect...");
if (timer >= T_RECONNECT) {
microgear.connect(APPID);
timer = 0;
}
else timer += T_INCREMENT;
}
delay(200);
}
หมายเหตุ: ไฟล์ feed_dht.ino ได้รับการทดสอบด้วยการ compile กับ ESP8266 Microgear Version 1.2.2 และ DHT Sensor Library by Adafruit Version 1.2.3