วันอาทิตย์ที่ 11 ธันวาคม พ.ศ. 2559

Anto.io Internet of Things

Anto.io

Anto คือสื่อกลางในการสื่อสารและตัวช่วยเหลือที่ช่วยให้คุณสร้างสรรค์นวัตกรรมโดยเฉพาะทางด้าน IoT ได้ง่ายขึ้น โดยที่ไม่ต้องมีปัญหาจุกจิก หรือตั้งค่าอะไรให้วุ่นวาย
Anto เป็นสื่อกลางในการสื่อสาร Anto ตั้งเซิร์ฟเวอร์ให้คุณใช้บริการฟรี เป็นเสมือนตัวกลางในการสื่อสารระหว่างสิ่งต่างๆบนโลกอินเตอร์เน็ตเช่น คุณต้องการสั่งงานบอร์ดไมโครคอลโทรลเลอร์ผ่านอินเตอร์เน็ตโดยใช้โทรศัพท์มือถือของคุณ เป็นต้น ซึ่งปัจจุบันระบบเรารองรับการติดต่อสื่อสารผ่าน HTTP, HTTPS, MQTT, MQTTS, Websocket ทำให้: ทีมของคุณไม่ต้องเสียเวลาในการติดตั้งและตั้งค่าเซิร์ฟเวอร์ รวมถึงคอยมาดูแลรักษาระบบ
Anto สร้าง Library/API ที่ใช้งานง่าย Anto สร้าง Library ในการเขียนโปรแกรมและสร้าง API ให้นักพัฒนาสามารถเข้าถึงใช้งานและพัฒนาต่อยอดได้อย่างง่ายดาย ยกตัวอย่าง คุณสามารถส่งค่าไปยัง server โดยใช้เพียงแค่หนึ่งคำสั่งเช่น Anto.DigitalUpdate(“led”,true); ทั้งนี้เพื่อความง่ายในการเขียนโปรแกรม ซึ่งปัจจุบันเราได้ทำ Library รองรับ ESP8266 (Nodemcu), Arudino แล้ว และกำลังพัฒนาเพื่อให้รองรับ Rasserby Pi และอื่นๆ ทำให้: ทีมของคุณพัฒนาได้อย่างรวดเร็วมากขึ้น ใช้เวลากับส่วนอื่นได้มากขึ้นเช่น การทำฮาร์ดแวร์-กลไก การออกแบบผลิตภัณฑ์ เรื่องติดต่อธุรกิจอื่น เป็นต้นครับ

เตรียมตัวเริ่มต้นกับ Anto

HardWare ที่ต้องการ

  1. NodeMCU or Esp8266

SoftWare ที่ต้องการ

  1. Aruino IDE v1.9

ขั้นตอนเตรียมพร้อม

1.การติดตั้ง Virtual COM Port เพื่อใช้ในการติดต่อส่วนของ Hardware
  • ถ้าหากใช้ NodeMCU version 0.9 ให้ดาวน์โหลด Driver และติดตั้ง ดาวน์โหลด
  • ถ้าหากใช้ NodeMCU version 1.0 ให้ดาวน์โหลด Driver และติดตั้ง ดาวน์โหลด
2.การติดตั้ง Arduino IDE ที่รองรับ NodeMCU
  • ดาว์โหลด และ ติดตั้ง Arduino IDE v1.6.9+
  • ทำให้ Arduino IDE ของเรารู้จักกับบอร์ด NodeMCU เข้าเมนู File > Preferences จากนั้นใส่ข้อความว่า
    ลงไปในช่อง Additional Board Manager URLs แล้วกดตกลง
  • Install lib โดยเข้าเมนู Tools > Boards Manager พิมพ์ในช่องค้นหาว่า
    esp8266
    จากนั้นกดเลือก Install รอการติดตั้งสักครู่
3.ติดตั้ง Lib Anto และ สมัครสมาชิก Anto
  • ดาวน์โหลด Lib Anto (Ver. 0.5.2) แล้วแตกไฟล์ที่ดาวน์โหลด เปลี่ยนชื่อโฟลเดอร์เป็น AntoIO
  • วางโฟลเดอร์ AntoIO ไปไว้ที่ Documents > Arduino > Libraries
  • สมัครสมาชิกเป็นครอบครัว Anto กรอกข้อมูลให้ครบถ้วนแล้วกดยืนยันการสมัคร
  • Login เข้าสู่ระบบ

เริ่มต้นโปรเจค : ควบคุมหลอดไฟ LED ผ่าน Internet

ในบทนี้เราจะพูดถึงตัวอย่างในการคุม การเปิด/ปิด หลอดไฟ LED ได้ง่ายๆผ่านอินเทอร์เน็ต และแน่นอนว่ามันทำงานผ่านเว็บบราวเซอร์ ดังนั้นคุณจะสามารถควบคุมหลอดไฟของคุณผ่าน smart phone ก็ได้ เพียงเปิดเว็บบราวเซอร์บน smart phone

สิ่งที่ต้องเตรียมพร้อม

  • จากเตรียมการเบื้องต้นสำหรับ Anto (คุณสามารถดูรายละเอียดได้ ที่นี่)
  • สัญญาณ WiFi ในการเชื่อมต่อ nodeMCU กับ Internet
  • Prototype Board
  • LED 3 ตัว ตัวต้านทาน
  • R 330(หรือ < 10k) 3ตัว
  • สายจัมป์

Create Thing & Channels

สร้าง Thing และ Channel

Thing ก็คือ อุปกรณ์ที่เชื่อมต่อกับ Anto เช่น NodeMCU , ESP8266 เป็นต้น
Channel ก็คือ ช่องเก็บข้อมูลต่างๆ เช่น ข้อมูลของเซนเซอร์วัดอากาศ ข้อมูลการกดปุ่ม เป็นต้น
ตัวอย่างเช่น ในโปรเจคนี้
เราใช้ NodeMCU หนึ่งตัวในการควบคุม LED 3 หลอด
สรุปที่เราต้องสร้างก็คือ เรามี NodeMCU (1 Thing) ที่ต้องการเก็บค่าในการควบคุม LED (3 Channel)
ซึ่งสุดท้ายแล้วเวลาที่เราจะอ้างอิงถึงข้อมูล ไม่ว่าจะดึงค่าหรือเก็บค่า จะอ้างอิงถึง Thing และ Channel
ขั้นตอนการสร้าง
  1. Login เข้าสู่เว็บไซค์ กรอก Username และ Pasword ให้ถูกต้อง
  2. กดเข้าไปที่ Thing จากเมนูทางด้านซ้าย
  3. กด  ในการสร้าง Thing
  4. กรอก NAME : NodeMCU , DESCREIPTION : Example control LED แล้วกด Add new
  5. เมื่อสร้างเสร็จแล้วจะได้ดังภาw กดไปที่เครื่องหมาย  ของ Thing NodeMCU
  1. กด  ในการสร้าง Channel
  2. กรอก NAME : LED1 , DESCREIPTION : controlLED ,TYPE : Switch on/off แล้วกด Add new
  3. สร้าง Channel LED2 และ LED3 เมื่อสร้างเสร็จแล้วจะได้ดังภาพ
  1. เข้ามาที่แถบเมนู Key ทางด้านซ้ายมือเพื่อเข้ามาสร้าง key ในการเชื่อมต่อฮาร์ดแวร์
  2. กด  ในการสร้าง Key
  3. กรอก DESCREIPTION : NodeMCUkey , แล้วกดเลือก Permission ให้กับ Chanal ทั้ง 3 เป็น Read และ Update ดังรูป แล้วกด Add new 
    +
  4. เราก็จะได้ key ตามรูปภาพ เพื่อนำไปใช้ใน Hardware Programming ต่อไป 

Hardware & program

ต่อ Hardware

  • นำ Nodemcu ต่อเข้ากับ Prototype board
  • ต่อ LED1 ขั้วบวก เข้ากับ D1 และ LED1 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
  • ต่อ LED2 ขั้วบวก เข้ากับ D2 และ LED2 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
  • ต่อ LED3 ขั้วบวก เข้ากับ D3 และ LED3 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
  • นำสาย USB ต่อ NodeMCU เข้าคอม จะได้ดังรูป

เขียนโปรแกรม

เปิดเข้าโปรแกรม Arduino IDE เลือกบอร์ดที่ใช้เป็น NodeMCU
เข้าเมนู Tool > Board > NodeMCU 1.0 (หรือ NodeMCU 0.9 ตามที่ผู้ใช้เลือกใช้)
เลือก Port ในการลงโปรแกรม
เข้าเมนู Tool > Port > Port ของ NodeMCU (ถ้าไม่รู้ลองถอดสายแล้วดูว่าเมนูไหนหายไปแล้วเสียบใหม่)
เลือก Programmer ในการ Burn program
เข้าเมนู Tool > Programmer > Arduino ISP Parallel Programmer (ถ้า v1.0 ใช้ Parallel Programmer)

ตัวอย่าง โปรแกรม

สามารถดาว์นโหลดได้ ที่นี่
ดึง Library Anto มาใช้
#include
กำหนดการตั้งค่าต่างๆ
// username of anto.io account
const char *user = "user";

// key of permission, generated on control panel anto.io
const char* key = "key";

// your default thing.
const char* thing = "NodeMCU";

// create AntoIO object named anto.
// using constructor AntoIO(user, key, thing)
// or use AntoIO(user, key, thing, clientId)
// to generate client_id yourself.
AntoIO anto(user, key, thing);

bool bIsConnected = false;
User ใช้ username ที่กดดูได้จาก ลิงค์
key ใช้ key ที่เราได้สร้างมาจากหัวข้อ Prepare
thing ใช้ NodeMCU ที่เราได้สร้างมาจากหัวข้อ Create Thing
สร้าง object anto ขึ้นมาเพื่อนำไปใช้งาน
กำหนดตัวแปรที่ใช้ในการรับค่าจาก channel
int Led1,Led2,Led3 = 0;
ตั้งค่าพื้นฐานในการเชื่อมต่อ Wifi,Anto และ กำหนดขา Output ให้กับ Hardware
void setup() {
     // SSID and Password of your WiFi access point.
    const char* ssid = "ssid";
    const char* pwd  = "pass";

    Serial.begin(115200);
    delay(10);

    Serial.println();
    Serial.println();
    Serial.print("Anto library version: ");
    Serial.println(anto.getVersion());


    // Connect to your WiFi access point
    if (!anto.begin(ssid, pwd)) {
        Serial.println("Connection failed!!");

        // Stop everything.
        while (1);
    }

    Serial.println();
    Serial.println("WiFi connected");  
    Serial.println("Connecting to MQTT broker");

    // register callback functions
    anto.mqtt.onConnected(connectedCB);
    anto.mqtt.onDisconnected(disconnectedCB);
    anto.mqtt.onData(dataCB);
    anto.mqtt.onPublished(publishedCB);

    // Connect to Anto.io MQTT broker
    anto.mqtt.connect();

    //port output
  //pinMode(D0,OUTPUT);
    pinMode(D1,OUTPUT);
    pinMode(D2,OUTPUT);
    pinMode(D3,OUTPUT);
}

Serial.println("WiFi connected & Connecting to MQTT broker");

}
ตั้งค่า ssid และ password ในการเชื่อมต่อ wifi
กำหนดค่า Serial ที่ใช้ในการติดต่อสื่อสารเป็น 115200
แสดงเลขเวอร์ชัน Lib ของ Anto สามารถนำไปเชคว่าเป็นเวอร์ชันล่าสุดหรือไม่
เชื่อมต่อ wifi และ anto ด้วย anto.begin แล้วสั่ง Serial print เมื่อเชื่อมต่อสำเร็จ
กำหนดค่า call back functions (คำอธิบายแต่ละ function ดูด้านล่าง)
ตั้งค่า Pin ที่ต่อกับหลอดไฟ D1,D2,D3 ให้เป็น OUTPUT
ในส่วนของ void loop() จะไม่ได้เขียนโปรแกรมอะไรเพราะเราจะใช้ในส่วนของ call back fuction อย่างเดียว
void loop() {
    // put your main code here, to run repeatedly:
}
สร้าง function connectedCB() ขึ้นมา
/*
* connectedCB(): a callback function called when the connection to the MQTT broker is establised.
*/
void connectedCB()
{   
    // If the connection is establised, subscribe channels.

    bIsConnected = true;
    Serial.println("Connected to MQTT Broker");

    anto.sub("LED1");
    anto.sub("LED2");
    anto.sub("LED3");
}
เพื่อกำหนดว่า เมื่อ connect กับ MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้
เปลี่ยนค่าตัวแปร bIsConnected เป็น true เพื่อบอกว่าต่อกับ MQTT broker ได้แล้ว และ Serial print ออกมา
Anto.sub("LED1") เพื่อ Subscribe channel ที่เราต้องการดึงค่ามาดูเมื่อมีการเปลี่ยนแปลงในที่นี้เรา Subscribe ไว้ 3 channel คือ LED1 , LED2 , LED3
สร้าง function disconnectedCB() ขึ้นมา
/*
* disconnectedCB(): a callback function called when the connection to the MQTT broker is broken.
*/
void disconnectedCB()
{   
    bIsConnected = false;
    Serial.println("Disconnected to MQTT Broker");
}
เพื่อกำหนดว่า เมื่อ disconnect กับ MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้ ให้ Serial print ออกมาบอก
สร้าง function msgArrvCB(String& topic, String& msg) ขึ้นมา
/*
* msgArrvCB(): a callback function called when there a message from the subscribed channel.
*/
void dataCB(String& topic, String& msg)
{
    uint8_t index = topic.indexOf('/');

    index = topic.indexOf('/', index + 1);
    index = topic.indexOf('/', index + 1);

    topic.remove(0, index + 1);

    Serial.print(topic);
    Serial.print(": ");
    Serial.println(msg);

    if(topic.equals("LED1")){
      value = msg.toInt();
      if(value == 1){
        digitalWrite(D1,HIGH);
      }
      else{
        digitalWrite(D1,LOW);
      }

    }
    else if(topic.equals("LED2")){
     value = msg.toInt();
     if(value == 1){
        digitalWrite(D2,HIGH);
      }
      else{
        digitalWrite(D2,LOW);
      }
    }
    else if(topic.equals("LED3")){
      value = msg.toInt();
      if(value == 1){
        digitalWrite(D3,HIGH);
      }
      else{
        digitalWrite(D3,LOW);
      }
    }
}
[สำคัญ]
เพื่อรับข้อความจาก channel ที่เราไป Subscribe ไว้ โดยจะเก็บไว้ในตัวแปร topic และ msg
เบื้องต้นเราตัด string topic ให้เหลือเฉพาะ ชื่อของ channel ที่ส่งมา
ทำการเช็ค if ว่าชื่อ channel ที่ส่งมาตรงกับ channel ที่เราต้องการใหม ในที่นี้เราดู channel LED1, LED2, LED3
เมื่อมีข้อความจาก channel ให้เราทำอะไรต่อ ในที่นี้เราต้องการคุมหลอดไฟ ตามค่าที่เราได้มาจาก chanal นั้นๆ
ใช้ตัวแปร Led1, led2, led3 รับค่าจากข้อความ msg ที่แปลงเป็น int ด้วย msg.toInt()
สั่งเปิดปิดหลอดไฟ ตามค่า Led1 , led2 , led3 ด้วย digitalWrite()
สร้าง function publishedCB() ขึ้นมา
/*
* publishedCB(): a callback function called when the message is published.
*/
void publishedCB(void)
{
    Serial.println("published");
}
เพื่อกำหนดว่า เมื่อ published ค่าขึ้นไปบน MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้ ให้ Serial print ออกมาบอก จบเพียงเท่านี้ Part หน้าจะมีอะไรเพิ่มเติมโปรดติดตาม

วันเสาร์ที่ 10 ธันวาคม พ.ศ. 2559

NETPIE Freeboard [Part3]

[IoT] NETPIE Freeboard [Part3]

NETPIE Freeboard สำหรับผู้เริ่มต้น
How-to Guide for NETPIE Freeboard's beginners 

PART3: "อุณหภูมิ" "ความชื้น" และ "ความเข้มแสง" 

(ตัวอย่างการส่งค่าเซนเซอร์ ผ่าน NETPIE)



ทักทาย...


      ครับหลังจาก Part ที่แล้วเราได้ลองเปิดปิดหลอดไฟ (LED) ผ่าน NETPIE กันแล้ว ซึ่งนั่นเป็น

รูปแบบของการส่งข้อมูลสถานะ "เปิด" หรือ "ปิด" ระหว่าง Freeboard ของเรากับอุปกรณ์ (Things) นั้น 

คาดว่าหลังจากได้ทดลองลงมือทำดูจริงๆแล้วคงทำให้เข้าใจระบบการทำงาน ของ NETPIE Freeboard

กันมากขึ้นแล้วนะครับ และใน Part นี้จะเป็นการทดลอง ส่งค่า "อุณหภูมิ" และ "ความชื้น" นะครับ 

ขอเรียกการทดลองนี้ว่า "SmartSensor" แล้วกันนะครับ ถ้าพร้อมแล้วก็ เริ่มกันเลยครับ ^_^

     



STEP1: เตรียมอุปกรณ์ 


สำหรับอุปกรณ์ที่ต้องเตรียมก็มีดังนี้นะครับ...

1.เช่นเคยครับ กับ บอร์ดไมโครคอนโทรลเลอร์ NodeMCU V.2 (ESP-12E)



2.ตามด้วยโปรโตบอร์ดครับ เพื่อให้การต่ออะไรๆง่ายขึ้น



3. โมดูล DHT11 หรือ DHT22 แบบเป็นโมดูลสำเร็จรูป 
หรือแบบที่เป็นเฉพาะเซนเซอร์ก็ได้ครับ (แค่อันเดียวก็พอนะครับ)


4. ตัวต้านทานแบบปรับค่าได้ตามแสง (LDR) ครับ 1 ตัว



5. และสุดท้าย คือ ตัวต้านทาน ค่า 10k (10 กิโลโอห์ม) ครับ
รหัสสี: น้ำตาล ดำ ส้ม ตามด้วยเงินหรือทอง ครับ
เตรียมไว้ซัก 2 ตัวนะครับ



STEP2: การต่อวงจร


     สำหรับการต่อวงจร ก็จะมี 2 แบบนะครับ ถ้าใช้ DHT แบบที่เป็นเซนเซอร์เปล่าๆ ก็จะมีการ
ต่อวงจรที่ต่างไป คือจะต้องต่อตัวต้านทาน 10k คร่อมระหว่างขา Vcc และขา Signal ด้วยครับ
ซึ่งในตัวอย่างนี้ผมเลือกใช้ DHT22 มาต่อให้ดูเป็นตัวอย่างนะครับ

การต่อวงจรแบบที่ 1 : ใช้ DHT22 แบบที่เป็นเซนเซอร์เปล่าๆ





การต่อวงจรแบบที่ 2 : ใช้ DHT22 แบบที่เป็นโมดูล


หมายเหตุ: LDR นั้นมีหลายขนาดและหลายเสป็คนะครับ 
ตัวต้านทานที่ต่อกับ LDR อาจปรับเปลี่ยนได้ตามความเหมาะสมครับผม

STEP3: ติดตั้งไลบรารี่สำหรับเซนเซอร์ DHT แบบต่างๆ


เนื่องจากในบทความนี้มีการใช้เซนเซอร์วัดอุณหภูมิและความชื้น
DHT22 (หรือ DHT11) ซึ่งจะมีการ include ไฟล์ DHT.h ซึ่งเป็น Library
ของ DHT Sensor สำหรับ Arduino ซึ่งขั้นตอนการติดตั้งก็จะมีดังนี้ครับ


ขั้นแรกก็ให้ เปิดโปรแกรม Arduino ขึ้นมาครับผม 
แล้วกดที่ Sketch > Include Library > Manage Libraries




จากนั้นจะขึ้นหน้าต่าง Library Manager ขึ้นมาครับก็ให้ทำตามนี้เลย
ของผมเลือกใช้ Library ของ Adafruit ตัวนี้นะครับ




เมื่อติดตั้งเรียบร้อยแล้วก็จะเป็นแบบนี้ครับ ก็ทำการกด Close เพื่อปิดหน้าต่างไปได้เลย




สำหรับใครที่ยังไม่ได้เตรียม Software สำหรับการใช้งาน Arduino และ NodeMCU V2
ตามไปดูขั้นตอนและวิธีการเซ็ทอัพโปรแกรมต่างๆที่ลิงค์นี้นะครับที่ลิ้งค์นี้นะครับ 

STEP4: อัพโหลดโปรแกรม


ก่อนอื่นก็ให้สร้าง Key สำหรับอุปกรณ์นี้บน NETPIE ก่อนนะครับ 
เช่นของผมสร้างไว้ภายใน AppID ชื่อ ZerefSmartHome โดยสร้างเป็น
Device Key ชื่อว่า SmartSensor ครับ สำหรับการใช้งาน NETPIE และการสร้าง
Key อย่างละเอียดนั้นให้ตามดูจากบทความก่อนหน้านี้ใน >>> Smart Home Part 5


สำหรับโค้ดโปรแกรมที่จะอัพโหลดก็จะเป็นแบบนี้นะครับ
ก่อนอัพโหลดก็ให้ทำการแก้ในส่วนของ APPID, KEY, และ SERCRET
โดยใส่ค่าตามที่ได้จากการสร้างไว้บน NETPIE นะครับ

//==============================================
// NETPIE FREEBOARD EXAMPLE
// SMART SENSOR ARDUINO CODE FOR NODEMCU V2
// REPRISED BY NARIN BANNASAN
// ORIGINAL BY ANUN PUNYA @NECTEC
//==============================================
#include "DHT.h"
#include <AuthClient.h>
#include <MicroGear.h>
#include <MQTTClient.h>
#include <SHA1.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
const char* ssid = "NarinGroup_Hotspot"; //ชื่อ SSID ของ WiFi ที่จะเชื่อมต่อ
const char* password = "142846325x"; //รหัสผ่านของ WiFi ที่จะเชื่อมต่อ
#define APPID "ZerefSmartHome" //ใส่ APPID ที่สร้างไว้ใน NETPIE
#define KEY "BdFKiBCbiWKzLuv" //ใส่ KEY ที่สร้างไว้สำหรับ SmartSensor
#define SECRET "CgCHOB9aFHCAUZK1BqsyYyPIZ" //ใส่ SECRET ของ KEY ที่สร้างไว้
#define ALIAS "SmartSensor" //ตั้งชื่อให้กับอุปกรณ์นี้ (เช่นตอนนี้ผมตั้งชื่อว่า) "SmartSensor"
#define DHTPIN D7 //ระบุขาที่ต่อกับเซนเซอร์ DHT
#define LDRPIN A0 //ระบุขาที่ต่อกับตัวต้านทานปรับค่าตามแสง (LDR)
#define DHTTYPE DHT22 //ระบุว่าใช้ DHT11 หรือ DHT22 (ในที่นี้ผมใช้เป็น DHT22)
#define LDRMax 300 //ปรับค่าสูงสุดของการวัดค่า LDR (หากใช้ตัวต้านทานที่มีค่ามากขึ้น ให้ปรับค่านี้มากขึ้น)
#define RefreshTime 100 //ค่าความถี่ของการส่งข้อมูล เช่นในที่นี้คือ ส่งข้อมูลออกไปทุกๆ 0.1 วินาที (100 ms)
WiFiClient client;
AuthClient *authclient;
DHT dht(DHTPIN, DHTTYPE);
int timer = 0;
MicroGear microgear(client);
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen)
{
Serial.println("Connected to NETPIE..."); //หากการเชื่อมต่อสำเร็จ ให้แสดงข้อความนี้ทาง Serial Monitor
}
void setup()
{
Serial.begin(115200);
Serial.println("Starting...");
dht.begin();
microgear.on(CONNECTED,onConnected);
microgear.init(KEY,SECRET,ALIAS);
microgear.connect(APPID);
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());
}
}
void loop()
{
if (microgear.connected())
{
microgear.loop();
timer=0;
float tempread = dht.readTemperature(); //เก็บค่าอุณหภูมิที่อ่านได้ไว้เป็นแบบ float ไว้ในตัวแปร "tempread"
float humidread = dht.readHumidity(); //เก็บค่าความชื้นที่อ่านได้ไว้เป็นแบบ float ไว้ในตัวแปร "humidread"
char temp[10]; //
char humid[10]; // สร้างตัวแปรไว้ใช้ส่งข้อมูลทาง microgear.chat (ต้องใช้รูปแบบ char)
char light[10]; //
int LDRread = analogRead(LDRPIN); //เก็บค่าที่อ่านจาก LDR ไว้ในตัวแปรแบบ int ที่ชื่อ LDRread
Serial.print("LDR Read = "); //แล้วแสดงข้อมูลค่า LDR ที่อ่านได้
Serial.println(LDRread); //ด้วยการแสดงค่าตัวแปร LDRread ทาง Serial Monitor
if (isnan(tempread) || isnan(humidread) || tempread > 100 || humidread > 100)
{
tempread = 0.0; // ถ้าอ่านค่าไม่ได้ หรืออ่านค่าได้มากกว่า 100
humidread = 0.0; // ให้แสดงค่าเป็น 0 แทน
}
int tempread_decimal = (tempread - (int)tempread) * 100; // เก็บส่วนของตัวเลขที่อยู่หลังจุดทศนิยม ไปเป็นแบบ int
int humidread_decimal = (humidread - (int)humidread) * 100; // เช่น 35.87 จะเก็บ 87 ไว้ในตัวแปร
if(LDRread<0)
{
LDRread = 0; //ถ้าอ่านค่าได้น้อยกว่า 0 ให้แสดงค่าเป็น 0 แทน
}
else if(LDRread>LDRMax)
{
LDRread = LDRMax; //ถ้าอ่านค่าได้มากกว่าค่าสูงสุดที่กำหนดไว้ ให้แสดงค่าเป็นค่าสูงสุดแทน
}
int lightread = map(LDRread,0,LDRMax,0,10); // ทำการ map ค่าใหม่ จากค่าต่ำสุด ถึงค่าสูงสุด ให้เป็นจาก 0 ถึง 10 แทน
sprintf(temp,"%d.%d", (int)tempread,tempread_decimal); // ยัดค่าตัวแปร int เข้าไปในตัวแปร char โดยมีรูปแบบ
sprintf(humid,"%d.%d", (int)humidread,humidread_decimal); // %d.%d = ส่วนจำนวนเต็ม.ส่วนทศนิยม (จะ chat ตัวแปรนี้ไป)
sprintf(light,"%d",lightread); // และเก็บค่า LDR ที่ทำให้เป็น 0-10 แล้ว เข้าไปในตัวแปร char เหมือนกัน
microgear.chat("SmartSensor/Temperature",temp); // ทำการ chat ตัวแปรต่างๆ ออกไป
microgear.chat("SmartSensor/Humidity",humid); // โดยใช้ชื่อผู้รับเป็น "SmartSensor/Temp,Humid,LightLevel"
microgear.chat("SmartSensor/LightLevel",light); // โดยจะไปรับค่านี้ในเกจแสดงผลอีกที
}
else
{
Serial.println("connection lost, reconnect...");
microgear.connect(APPID);
delay(timer);
timer+=100;
}
delay(RefreshTime); // รอเวลาเป็นจำนวนเท่ากับที่ตั้งไว้ในตัวแปร RefreshTime
}
view rawSmartSensor.ino hosted with ❤ by GitHub

เมื่ออัพโหลดแล้ว บอร์ดจะทำงาน ให้ทำการเปิด Serial Monitor ขึ้นมา
เพื่อดูสถานะการทำงานของบอร์ดนะครับ โดยทำการคลิ๊กที่ Tools > Serial Monitor
หากมีปัญหาในขั้นตอนการเชื่อมต่อหรือยังไงเราจะสามารถเห็นได้จากที่นี่ครับ


เท่านี้ก็เรียบร้อยครับสำหรับการอัพโหลดโค้ดโปรแกรมลงบอร์ด 
ต่อไปเราจะไปดูฝั่งของ Freeboard กันต่อเลยนะครับ


STEP5: รับข้อมูลบน NETPIE Freeboard


ก่อนอื่นก็ให้เปิด Freeboard ขึ้นมาครับ สำหรับอันนี้จะเป็น Freeboard ที่ต่อเนื่องมาจาก
บทความใน Part 1 และ 2 นะครับ (มีการสร้าง Datasource และมี Widgets ต่อเนื่องมาจากตอนที่แล้ว)




ก่อนอื่นผมก็จะทำการกดปุ่ม ADD PANE เพื่อเพิ่มแผงใหม่ขึ้นมานะครับ
สามารถลากแผงไปมาได้ตามใจชอบเลยครับ โดยการคลิ๊กตรงขอบบนแล้วลากได้ครับ




หลังจากลากมาวางแล้ว ก็จะทำการเพิ่ม Widget แบบ Gauge ครับ โดยจะมีค่าต่างๆ ดังนี้ครับ




สำหรับการใส่ช่องในค่า VALUE ให้คลิ๊กตามลำดับนี้นะครับ




ตรงนี้จะเห็นข้อมูลที่ chat มาจาก SmartSensor นะครับ ตอนนี้เราทำ Gauge 
สำหรับแสดงค่าอุณหภูมิอยู่ ก็ให้เลือก SmartSensor/Temperature ได้เลยครับ




จากนั้นกดที่ SAVE เพื่อบันทึกครับ 




จากนั้นเราก็จะได้ Gauge สำหรับแสดงอุณหภูมิแบบนี้ครับผม




จากนั้นก็ทำตามขั้นตอนเดิม เพื่อสร้างอีก Gauge นึง มาเพื่อแสดงค่าความชื้นครับ




โดยความชื้นนั้น จะมีหน่วยเป็น %RH ครับผม 




และทำเหมือนเดิมอีกครั้งนึง เพื่อสร้าง Gauge สำหรับแสดงค่าความเข้มแสงครับ
ตรงช่อง VALUE ก็ให้เลือกเป็น SmartSensor/LightLevel ครับ และจะมีการแก้ตรงช่อง
MAXIMUM เป็น 10 ครับ เพราะค่าความเข้มแสงที่ SmartSensor ส่งมา จะมีค่าเป็น 0 ถึง 10 ครับ




จากนั้นพอกด Save ไปอีกทีก็จะได้ครบแล้วครับ แต่การจัดเรียงยังดูวุ่นวายอยู่




ซึ่งพอคลิ๊ก-ลาก-วางไปมานิดหน่อย ก็จะออกมาดูสวยงามแล้วครับ




แล้วจากนั้น แต่ละแผง ยังสามารถตั้งชื่อ Title ได้นะครับ โดยทำแบบนี้ครับ




แล้วก็สามารถตั้งชื่อให้กับแผง แล้วกด Save ได้เลยครับ 
(ส่วน Column จะเป็นการกำหนดความกว้างของแผงนะครับ ลองปรับดูได้ครับผม)




พอตั้งชื่อให้กับทุกแผงแล้วก็จะออกมาสวยงามและดูชัดเจนแบบนี้เลยครับ




ก็เป็นอันเสร็จแล้วนะครับกับการสร้างอุปกรณ์ SmartSensor เพื่อแสดงข้อมูลอุณหภูมิ
ความชื้น และความเข้มแสง ผ่าน NETPIE Freeboard หวังว่าทั้งมือเก่าและมือใหม่ทุกท่าน
ที่ติดตามบทความนี้จะนำไปประยุกต์ใช้ต่อไปได้ในอนาคตได้นะครับ สำหรับ part นี้จะจบลงเพียงเท่านี้
ส่วนจะมี part ใหม่ต่อไปนั้น ต้องคิดตามกันต่อไปนะครับ