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\] หมายถึงค่าถัดมา

results matching ""

    No results matching ""