งานครั้งที่ 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)
โค้ดโปรแกรม
#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)