ผู้เขียน หัวข้อ: งานครั้งที่ 39 [iot#14 Anto] แสดงสถานะการออนไลน์ของบอร์ด  (อ่าน 5098 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
งานครั้งที่ 39 [iot#14 Anto] แสดงสถานะการออนไลน์ของบอร์ด
การควบคุมบอร์ด iot ไม่ว่าจะใช้บริการ cloud จากค่ายไหนก็ตามเป็นการสั่งการผ่านเครือข่ายอินเตอร์เน็ตซึ่งบอร์ดจะสามารถทำงานตามที่สั่งได้บอร์ดนั้นจะต้องเชื่อมต่ออินเตอร์เน็ตและจะต่อเชื่อมต่อกับ cloud อยู่ด้วย วิธีที่จะให้ผู้ใช้งานรู้ว่าบอร์ดที่กำลังจะสั่งงานนั้นออนไลน์อยู่หรือไม่นั้นใช้วิธีการให้บอร์ดส่งค่าสถานะมาแสดงผลอยู่ต่อเนื่องหากยังเชื่อมต่ออยู่ ทำให้ผู้ใช้งานรับรู้สถานะการออนไลน์ได้ วิธีนี้สามารถใช้กับ cloud ทุกค่าย แต่มีข้อเสียหนึ่งประการคือจะต้องเสียช่องทางการสื่อสารไป 1 ช่องทางเพื่อใช้ในการแสดงสถานะการออนไลน์ของบอร์ด งานครั้งนี้ยกตัวอย่างการใช้ cloud ของค่าย Anto สำหรับผู้ที่ยังไม่ได้สมัครใช้งาน Anto สามารถศึกษาขั้นตอนได้จากงานครั้งที่ 36 [iot#11 Anto ] เริ่มต้นการใช้งาน Anto (ควบคุม LED)

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


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

ซึ่งรายละเอียดเป็นดังนี้
1. วงจรที่ใช้ทดลอง ทั้งที่เป็นบอร์ด NodeMCU และ WeMOS D1 mini ที่ใช้งานเชื่อมต่อเดิมในงานนั้น ๆ ตัวอย่างเช่น


2. งานครั้งนี้เป็นการแสดงสถาะนะของบอร์ด หากมีการเชื่อมต่อปกติสถานะจะสลับไปมาดังรูป แต่ถ้าหากบอร์ดหลุดจากการเชื่อมต่อสถานะจะหยุดนิ่ง


ส่วนจัดการเวปไซต์
3. ทำการสร้าง Channel สำหรับการแสดงผลสถานะของบอร์ด
   (1) คลิก Thing
   (2) รายการ Thing ที่สร้างไว้แล้ว
   (3) คลิกที่แว่นขยายเพื่อเพิ่ม Channel สำหรับแสดงสถานะบอร์ด (เพิ่มเข้าใน Thing ที่ใช้งานปกติ)


4. คลิกสร้าง Channel  สำหรับแสดงสถานะบอร์ด


5. ใส่รายละเอียดของ Channel ที่จะสร้าง
   (1) ชื่อ Channel
   (2) คำอธิบาย
   (3) ชนิดของการแสดงผล


6. Channel  ที่ถูกสร้างขึ้นเพื่อแสดงสถานะบอร์ด


7. กำหนดการรับค่าเข้า Channel  โดยคลิกที่ key (1)-->(2) ตามลำดับ


8. กำหนดการรับค่าของ Channel  แสดงสถานะบอร์ดที่ถูกสร้างขึ้น


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

9. UserName ดูได้จากเมนู Account ดังรูป


10. Key (Token) ต้องเลือกรายการ Key ที่สร้างให้เชื่อมโยงใน Thing ที่ต้องการใช้งาน
   (1) เข้าไปที่เมนู Key
   (2) คลิกคัดลอก จากคีย์ที่ถูกสร้างใช้งานในครั้งนี้ (สังเกตจากคำอธิบาย)  แล้วนำไปวางในโค้ดโปรแกรม


11. Thing คลิกที่เมนู Thing เลือกชื่อที่ต้องการนำไปเขียนโปรแกรม


12. Channel สามารถเข้าไปดูรายการได้โดยคลิกที่แว่นขยายของ Thing


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


14. ฟังก์ชั่นที่ใช้สำหรับส่งสถานะขึ้นเซิร์ฟเวอร์ Anto เป็นดังรูป
    (1) ฟังก์ชั่นกำหนดคาบเวลาส่งค่าขึ้นเซิร์ฟเวอร์โดยให้เรียกใช้ฟังก์ชั่นย่อยตามเวลาที่กำหนด ตัวอย่างนี้ให้เรียกทุก ๆ 1 วินาที
    (2) ฟังก์ชั่นส่งค่าขึ้นเซิร์ฟเวอร์ โดยค่าจะถูกกลับเป็นตรงข้ามทุกครั้งเมื่อมีการเรียกใช้ และการส่งจะส่งไปยัง Channel "BoardStatus" ซึ่งได้สร้างขึ้นเพื่อรับค่าไว้แล้ว


โค้ดโปรแกรม
โค๊ด: [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  เมื่อบอร์ดยังออนไลน์อยู่สถานะจะสลับไปมาแต่ถ้าหากบอร์ดหลุดจากการเชื่อมต่อกับเซิร์ฟเวอร์สถานะจะหยุดนิ่ง

« แก้ไขครั้งสุดท้าย: กุมภาพันธ์ 27, 2018, 09:09:01 PM โดย admin »