ครั้งที่แล้วได้ใช้ aREST บน Arduino กันไปแล้ว ครั้งนี้มาลองเล่น Xively กันดูบ้าง Xively เป็นบริการ PaaS สำหรับ Internet of Things คุณสามารถเขียน/อ่านข้อมูลที่ได้จาก sensor ไปเก็บไว้ที่ Xively ได้ และข้อมูลสามารถเก็บได้หลายแบบไม่ว่าจะเป็นค่าตัวเลข, พิกัด GPS และสามารถทำ Triggers ผ่าน HTTP POST ได้ หากค่าที่อ่านได้จาก sensor ตรงกับเงื่อนไขที่คุณตั้งไว้ เช่น แดดออก อุณหภูมิมากกว่า 35 องค์ศาเซลเซียส ให้เปิด sprinkler ถ้าอุณหภูมิลดลงเหลือ 30 ให้ปิด sprinkler เป็นต้น

ไหนๆ ยกตัวอย่างเรื่องอุณหภูมิแล้ว มี sensor ที่เกี่ยวกับ อุณหภูมิอยู่หลายตัว เช่น TMP35 เป็น Temperature Sensor แบบ Analog มี 3 ขา ใช้งานง่ายๆ เอาไฟ 2.7-5.5V ต่อเข้าขา V in และอ่านค่าจาก V out แล้วเอาค่าที่ได้จาก V out มาคำนวณเพื่อหาค่า Temperature ตัวอย่างการคำนวณ ดังนี้

  • VOLT_OUT = 100*5/1024.0
  • TEMP_CEL = (VOLT_OUT-0.5)*100
  • TEMP_FAR = (TEMP_CEL * 9/5) + 32;

ลองมาต่อกับ Arduino + CC300 กันจะได้แบบนี้

ถ้าใช้ Wifi Shield จะได้แบบนี้

ก่อนจะเริ่มเขียนโค้ดมาสมัครสมาชิก Xively แล้วเพิ่ม Device กันก่อน

จากนั้นเพิ่ม Channel สำหรับ sensor ของเรา

ตอนนี้เราจะได้ Channel สำหรับส่งค่าไปให้ Xively กันแล้ว วิธีการส่งค่าต้องใช้ REST API ที่ Xively ให้บริการ เปิดไปที่ Xively API Doc ดูตรง Write Datapoint จะพบว่า ใช้ PUT request ส่งไปที่ https://api.xively.com ส่วน Enpoint เป็น /v2/feeds/FEED_ID แล้วก็ตามด้วยข้อมูล json อีกนิดหน่อย

ลองใช้ REST Client ทดสอบส่งค่าดูก่อนได้ ว่าเข้าใจถูกต้องหรือไม่

เราจะพบว่า Xively รับข้อมูลได้ :) Xively มี Library สำหรับ Arduino Wifi Shield แต่ไม่สามารถใช้กับ CC3000 ที่ผมมีได้ ดังนี้เราต้องส่งค่าผ่าน Web Client แทน วิธีการมีดังนี้

  • เชื่อมต่อ AP ตาม SSID และ WPA ที่กำหนด
  • เมื่อเชื่อมต่อได้แล้วให้ Query หาว่า api.xively.com มี IP Address อะไร
  • อ่านข้อมูลจาก Sensor
  • เชื่อมต่อ Web Client ไปที่ api.xively.com
  • สร้าง header string และ
  • สร้าง json string พร้อมข้อมูล temperature
  • ส่งข้อมูลทั้งชุดผ่าน Web Client

ง่ายแค่นี้เอง โค้ดตามนี้

ลองทดสอบดูเราจะได้ค่าอุณหภูมิมาดังนี้

ดูบน Xively จะได้ค่าแบบนี้

ลองเอาไปประยุกต์ใช้กันดูครับ

Comments are closed.