ผู้เขียน หัวข้อ: งานครั้งที่ 40 [iot#15 Anto] แสดงค่าจากดาต้าเซอร์วิส (ราคาน้ำมัน,NGV ,สภาพอากาศ)  (อ่าน 3025 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 688
    • ดูรายละเอียด
    • อีเมล์
งานครั้งที่ 40 [iot#15 Anto] แสดงค่าจากดาต้าเซอร์วิส (ราคาน้ำมัน, NGV ,สภาพอากาศ ฯลฯ)
Anto มีบริการเสริมให้ผู้ใช้งานสามารถเรียกค่าเอาไปใช้งานตามความต้องการได้ ค่าจากบริการเสริมนี้อยู่ในกลุ่มของ Data Service มีให้ใช้งานหลายค่าได้แก่ราคาน้ำมันทุกประเภท ราคาแก้ส NGV ค่าอุณหภูมิ,ความชื้น,สภาพอากาศต่าง ๆ (ปัจจุบันมีเฉพาะกรุงเทพ) สำหรับผู้ที่ยังไม่ได้สมัครใช้งาน Anto สามารถศึกษาขั้นตอนได้จากงานครั้งที่ 36 [iot#11 Anto ] เริ่มต้นการใช้งาน Anto (ควบคุม LED)

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


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

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


2. รายการข้อมูลจากดาต้าเซอร์วิสที่มีให้บริการ
   (1) คลิก Data Service
   (2) ชื่อเซอร์วิส
   (3) เซอร์วิสโค้ด (ค่าที่นำไปใส่ในโค้ดโปรแกรม)
   (4) ค่าล่าสุดของเซอร์วิสนั้น ๆ
   (5) เวลาที่อัพเดตล่าสุด


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

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


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


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


ส่วนจัดการโค้ด
6. แก้ค่าต่าง ๆ ของโค้ดโปรแกรมดังนี้
    (1) ใส่รายละเอียดของไวไฟที่บอร์ดควบคุมใช้เชื่อมต่อ
    (2) ใส่ค่า user(UserName), token(key),thing(Thing) ที่คัดลอกมาจากเวปไซต์จากข้อ 3-5
    (3) กำหนดค่าราคาน้ำมันที่เพิ่มขึ้นในแต่ละพื้นที่ เป็นราคาในแต่ละพื้นที่-ราคากรุงเทพ
   *สามารถเข้าไปดูได้ที่ http://www.pttplc.com/th/media-center/oil-price/pages/province-oil-price.aspx?s=2


7. ฟังก์ชั่นที่ใช้อ่านค่าจากเซอร์วิสที่ส่งมาจากเซิร์ฟเวอร์ Anto เป็นดังรูป
    (1) ตัวแปรสตริงค์สำหรับเก็บค่าที่ได้รับจากเซอร์วิส
    (2) ค่าเซอร์วิสที่ต้องการอ่านจากเซิร์เวอร์ Anto (ในที่นี้ต้องการอ่านค่าน้ำมันแก้สโซฮอล 95 ซึ่งโค้ดเซอร์วิสเป็น "gas.95e10.price")
   (3) บวกราคาเพิ่มเมื่ออยู่ต่างจังหวัด ซึ่งจะต้องแปลงค่าจากตัวแปรสตริงค์เป็นตัวแปรทศนิยมก่อนการบวก


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

« แก้ไขครั้งสุดท้าย: เมษายน 19, 2018, 12:10:57 PM โดย admin »