บทความประกอบการเรียนรู้ => IOT : Internet of Thing (ESP8266, NodeMCU, WeMos D1 mini) => ข้อความที่เริ่มโดย: admin ที่ กุมภาพันธ์ 26, 2018, 11:10:15 PM

หัวข้อ: งานครั้งที่ 39 [iot#14 Anto] แสดงสถานะการออนไลน์ของบอร์ด
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 26, 2018, 11:10:15 PM
งานครั้งที่ 39 [iot#14 Anto] แสดงสถานะการออนไลน์ของบอร์ด
การควบคุมบอร์ด iot ไม่ว่าจะใช้บริการ cloud จากค่ายไหนก็ตามเป็นการสั่งการผ่านเครือข่ายอินเตอร์เน็ตซึ่งบอร์ดจะสามารถทำงานตามที่สั่งได้บอร์ดนั้นจะต้องเชื่อมต่ออินเตอร์เน็ตและจะต่อเชื่อมต่อกับ cloud อยู่ด้วย วิธีที่จะให้ผู้ใช้งานรู้ว่าบอร์ดที่กำลังจะสั่งงานนั้นออนไลน์อยู่หรือไม่นั้นใช้วิธีการให้บอร์ดส่งค่าสถานะมาแสดงผลอยู่ต่อเนื่องหากยังเชื่อมต่ออยู่ ทำให้ผู้ใช้งานรับรู้สถานะการออนไลน์ได้ วิธีนี้สามารถใช้กับ cloud ทุกค่าย แต่มีข้อเสียหนึ่งประการคือจะต้องเสียช่องทางการสื่อสารไป 1 ช่องทางเพื่อใช้ในการแสดงสถานะการออนไลน์ของบอร์ด งานครั้งนี้ยกตัวอย่างการใช้ cloud ของค่าย Anto สำหรับผู้ที่ยังไม่ได้สมัครใช้งาน Anto สามารถศึกษาขั้นตอนได้จากงานครั้งที่ 36 [iot#11 Anto ] เริ่มต้นการใช้งาน Anto (ควบคุม LED) (http://www.praphas.com/forum/index.php?topic=347.0)

คอนเซ็ปต์หลักของงาน
บอร์ดส่งสถานะ 0 และ 1 สลับกันไปทุก 1 วินาทีขึ้นเซิร์ฟเวอร์เพื่อแสดงผลหน้าเวปไซต์


[ขั้นตอนการดำเนินการ]
-ใช้ Thing เดิมที่ใช้งานอยู่
-สร้าง Channel สำหรับแสดงสถานะบอร์ด (Channel คือช่องทางการสื่อสารซึ่งอยู่ภายใน Thing)
-กำหนดค่า Channel ใน key
-นำค่า Thing, Channel, Key มาเขียนโค้ดเพื่อส่งข้อมูลขึ้นเซิร์ฟเวอร์
-ออกแบบหน้าเวปสำหรับใช้สื่อสารกับบอร์ด
-เขียนโค้ดเพื่อใช้งาน

ซึ่งรายละเอียดเป็นดังนี้
1. วงจรที่ใช้ทดลอง ทั้งที่เป็นบอร์ด NodeMCU และ WeMOS D1 mini ที่ใช้งานเชื่อมต่อเดิมในงานนั้น ๆ ตัวอย่างเช่น
(http://www.praphas.com/PhotoForum/iot/Lab-38-AntoStatus/1.png)

2. งานครั้งนี้เป็นการแสดงสถาะนะของบอร์ด หากมีการเชื่อมต่อปกติสถานะจะสลับไปมาดังรูป แต่ถ้าหากบอร์ดหลุดจากการเชื่อมต่อสถานะจะหยุดนิ่ง
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/1.gif)

ส่วนจัดการเวปไซต์
3. ทำการสร้าง Channel สำหรับการแสดงผลสถานะของบอร์ด
   (1) คลิก Thing
   (2) รายการ Thing ที่สร้างไว้แล้ว
   (3) คลิกที่แว่นขยายเพื่อเพิ่ม Channel สำหรับแสดงสถานะบอร์ด (เพิ่มเข้าใน Thing ที่ใช้งานปกติ)
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/2.png)

4. คลิกสร้าง Channel  สำหรับแสดงสถานะบอร์ด
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/3.png)

5. ใส่รายละเอียดของ Channel ที่จะสร้าง
   (1) ชื่อ Channel
   (2) คำอธิบาย
   (3) ชนิดของการแสดงผล
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/4.png)

6. Channel  ที่ถูกสร้างขึ้นเพื่อแสดงสถานะบอร์ด
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/5.png)

7. กำหนดการรับค่าเข้า Channel  โดยคลิกที่ key (1)-->(2) ตามลำดับ
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/6.png)

8. กำหนดการรับค่าของ Channel  แสดงสถานะบอร์ดที่ถูกสร้างขึ้น
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/7.png)

เตรียมค่าที่เอาไปใช้ในการเขียนโค้ดโปรแกรม
ซึ่งต้องนำค่าจากเวปไซต์ไปใส่ในโค้ดจำนวน 4 อย่างได้แก่
-USERNAME
-Key (Token)
-Thing
-Channel

9. UserName ดูได้จากเมนู Account ดังรูป
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/8.png)

10. Key (Token) ต้องเลือกรายการ Key ที่สร้างให้เชื่อมโยงใน Thing ที่ต้องการใช้งาน
   (1) เข้าไปที่เมนู Key
   (2) คลิกคัดลอก จากคีย์ที่ถูกสร้างใช้งานในครั้งนี้ (สังเกตจากคำอธิบาย)  แล้วนำไปวางในโค้ดโปรแกรม
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/9.png)

11. Thing คลิกที่เมนู Thing เลือกชื่อที่ต้องการนำไปเขียนโปรแกรม
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/10.png)

12. Channel สามารถเข้าไปดูรายการได้โดยคลิกที่แว่นขยายของ Thing
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/11.png)

ส่วนจัดการโค้ด
13. แก้ค่าต่าง ๆ ของโค้ดโปรแกรมดังนี้
    (1) ใส่รายละเอียดของไวไฟที่บอร์ดควบคุมใช้เชื่อมต่อ
    (2) ใส่ค่า user(UserName), token(key),thing(Thing) ที่คัดลอกมาจากเวปไซต์จากข้อ 9-12
    (3) เริ่มใช้งานไลบรารี่ SimpleTime (เรียกใช้ฟังก์ชั่นตามคาบเวลาที่กำหนด)
    (4) กำหนดตัวแปรสร้างสถานะ
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/12.png)

14. ฟังก์ชั่นที่ใช้สำหรับส่งสถานะขึ้นเซิร์ฟเวอร์ Anto เป็นดังรูป
    (1) ฟังก์ชั่นกำหนดคาบเวลาส่งค่าขึ้นเซิร์ฟเวอร์โดยให้เรียกใช้ฟังก์ชั่นย่อยตามเวลาที่กำหนด ตัวอย่างนี้ให้เรียกทุก ๆ 1 วินาที
    (2) ฟังก์ชั่นส่งค่าขึ้นเซิร์ฟเวอร์ โดยค่าจะถูกกลับเป็นตรงข้ามทุกครั้งเมื่อมีการเรียกใช้ และการส่งจะส่งไปยัง Channel "BoardStatus" ซึ่งได้สร้างขึ้นเพื่อรับค่าไว้แล้ว
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/13.png)

โค้ดโปรแกรม
โค๊ด: [Select]
#include <AntoIO.h>
#include <SimpleTimer.h>
const char *ssid = "wifi_name";
const char *pass = "wifi_password";
const char *user = "user_name";
const char *token = "TokenKey";
const char *thing = "thing_name";
AntoIO anto(user, token, thing);
SimpleTimer timer;
bool state;
void setup()
{
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Anto library version: ");
  Serial.println(anto.getVersion());
  Serial.print("\nTrying to connect ");
  Serial.print(ssid);
  Serial.println("...");
  timer.setInterval(1000, sendState);
  anto.begin(ssid, pass, messageReceived);
  Serial.println("\nConnected Anto done");
}
void sendState(){
  state=!state;
  anto.pub("BoardStatus",state); 
}
void loop() {
  anto.mqtt.loop();
  timer.run();
}
void messageReceived(String thing, String channel, String payload) {
  Serial.print("Recieved: ");
  Serial.print(thing);
  Serial.print("/");
  Serial.print(channel);
  Serial.print("-> ");
  Serial.println(payload);
}
ทดสอบการทำงาน
15. หลังจากการ upload โค้ด เปิดดูสถานะของบอร์ดได้จาก Channel  เมื่อบอร์ดยังออนไลน์อยู่สถานะจะสลับไปมาแต่ถ้าหากบอร์ดหลุดจากการเชื่อมต่อกับเซิร์ฟเวอร์สถานะจะหยุดนิ่ง
(http://www.praphas.com/PhotoForum/iot/Lab-39-BoardOnline/14.gif)