งานที่มอบหมาย ครูประภาส

บทความประกอบการเรียนรู้ => IOT : Internet of Thing (ESP8266, NodeMCU, WeMos D1 mini) => ข้อความที่เริ่มโดย: admin ที่ เมษายน 19, 2018, 11:55:30 AM

หัวข้อ: งานครั้งที่ 40 [iot#15 Anto] แสดงค่าจากดาต้าเซอร์วิส (ราคาน้ำมัน,NGV ,สภาพอากาศ)
เริ่มหัวข้อโดย: admin ที่ เมษายน 19, 2018, 11:55:30 AM
งานครั้งที่ 40 [iot#15 Anto] แสดงค่าจากดาต้าเซอร์วิส (ราคาน้ำมัน, NGV ,สภาพอากาศ ฯลฯ)
Anto มีบริการเสริมให้ผู้ใช้งานสามารถเรียกค่าเอาไปใช้งานตามความต้องการได้ ค่าจากบริการเสริมนี้อยู่ในกลุ่มของ Data Service มีให้ใช้งานหลายค่าได้แก่ราคาน้ำมันทุกประเภท ราคาแก้ส NGV ค่าอุณหภูมิ,ความชื้น,สภาพอากาศต่าง ๆ (ปัจจุบันมีเฉพาะกรุงเทพ) สำหรับผู้ที่ยังไม่ได้สมัครใช้งาน Anto สามารถศึกษาขั้นตอนได้จากงานครั้งที่ 36 [iot#11 Anto ] เริ่มต้นการใช้งาน Anto (ควบคุม LED) (http://www.praphas.com/forum/index.php?topic=347.0)

คอนเซ็ปต์หลักของงาน
บอร์ดอ่านค่าเฉพาะส่วนที่ต้องการจากดาต้าเซอร์วิสทุก 3 วินาที


[ขั้นตอนการดำเนินการ]
-ใช้ Thing เดิมที่ใช้งานอยู่
-ใช้ key เดิมใน Thing ที่ใช้งานอยู่
-นำค่า Thing, Key มาใส่ในโค้ดเพื่อสื่อสารกับเซิร์ฟเวอร์
-เขียนโค้ดเพื่อใช้งาน

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

2. รายการข้อมูลจากดาต้าเซอร์วิสที่มีให้บริการ
   (1) คลิก Data Service
   (2) ชื่อเซอร์วิส
   (3) เซอร์วิสโค้ด (ค่าที่นำไปใส่ในโค้ดโปรแกรม)
   (4) ค่าล่าสุดของเซอร์วิสนั้น ๆ
   (5) เวลาที่อัพเดตล่าสุด
(http://www.praphas.com/PhotoForum/iot/Lab-40-DataService/2.png)

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

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

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

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

ส่วนจัดการโค้ด
6. แก้ค่าต่าง ๆ ของโค้ดโปรแกรมดังนี้
    (1) ใส่รายละเอียดของไวไฟที่บอร์ดควบคุมใช้เชื่อมต่อ
    (2) ใส่ค่า user(UserName), token(key),thing(Thing) ที่คัดลอกมาจากเวปไซต์จากข้อ 3-5
    (3) กำหนดค่าราคาน้ำมันที่เพิ่มขึ้นในแต่ละพื้นที่ เป็นราคาในแต่ละพื้นที่-ราคากรุงเทพ
   *สามารถเข้าไปดูได้ที่ https://www.pttor.com/th/oil_price (https://www.pttor.com/th/oil_price)
(http://www.praphas.com/PhotoForum/iot/Lab-40-DataService/6.png)

7. ฟังก์ชั่นที่ใช้อ่านค่าจากเซอร์วิสที่ส่งมาจากเซิร์ฟเวอร์ Anto เป็นดังรูป
    (1) ตัวแปรสตริงค์สำหรับเก็บค่าที่ได้รับจากเซอร์วิส
    (2) ค่าเซอร์วิสที่ต้องการอ่านจากเซิร์เวอร์ Anto (ในที่นี้ต้องการอ่านค่าน้ำมันแก้สโซฮอล 95 ซึ่งโค้ดเซอร์วิสเป็น "gas.95e10.price")
   (3) บวกราคาเพิ่มเมื่ออยู่ต่างจังหวัด ซึ่งจะต้องแปลงค่าจากตัวแปรสตริงค์เป็นตัวแปรทศนิยมก่อนการบวก
(http://www.praphas.com/PhotoForum/iot/Lab-40-DataService/7.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);

float localCharge=0.32;             /* price of chaiyaphum*/

void setup()
{ Serial.begin(115200);
  Serial.println();
  Serial.println();
  Serial.print("Anto library version: ");
  Serial.println(anto.getVersion());
  Serial.print("\nTrying to connect ");
  Serial.print(ssid);
  Serial.println("...");
  while (!anto.wifi.begin(ssid, pass));
  Serial.println("\nConnected");
}
void loop() {
  testService();
  delay(3000);
}
void testService(void)
{
  String str;
  float price;
  if (anto.http.request(str, "gas.95e10.price")){
    price=localCharge+str.toFloat();
    Serial.print("Gasohol 95(E10) price :");
    Serial.println(price);
  }
  else{
    Serial.println("Can't Read Gasohol 95(E10) price");   
  }
  if (anto.http.request(str, "gas.hsd.price")){
    price=localCharge+str.toFloat();
    Serial.print("High-speed Diesel price :");
    Serial.println(price);
  }
  else{
    Serial.println("Can't Read High-speed Diesel price");
  } 
  Serial.println();
}
ทดสอบการทำงาน
8. หลังจากการ upload โค้ด เปิดดูสถานะของบอร์ดได้จาก Channel  เมื่อบอร์ดยังออนไลน์อยู่สถานะจะสลับไปมาแต่ถ้าหากบอร์ดหลุดจากการเชื่อมต่อกับเซิร์ฟเวอร์สถานะจะหยุดนิ่ง
(http://www.praphas.com/PhotoForum/iot/Lab-40-DataService/8.png)