ESP8266: สั่งการ ESP ด้วยฟ้าใสผ่าน Anto.io

สวัสดีครับ

หลังจากที่ตอนที่แล้วเราอัพเดตเฟิร์มแวร์ไปแล้ว วันนี้เราจะมาลองใช้ ESP8266 เป็นสถานีลูกข่ายในการควบคุมไฟฟ้าและส่งข้อมูลไปกลับกับฟ้าใส เลขาแว่นส่วนตัวผ่านระบบของ Anto.io ครับ

หมายเหตุ : ณ วันที่เขียนบทความ ฟ้าใสยังรองรับแค่ระบบของ Anto.io และ NETPIE แต่ผมลองของ NETPIE แล้วใช้งานยาก ไม่สะดวกเท่าที่ควร เลยใช้ระบบของ Anto นะครับ

สร้าง Endpoint บน Anto.io

หน้า Dashboard ส่วน Channels ของ Anto

หน้า Dashboard ส่วน Channels ของ Anto

หลักๆ สามารถไล่ตาม Tutorial ของ Anto ได้เลยครับ อธิบายชัดเจนดี แต่หลักสำคัญคือ

  1. สร้าง Thing เพื่อให้มีหมวดหมู่ของข้อมูล
  2. สร้าง Channel และกำหนดประเภทข้อมูลตามรูปแบบที่ต้องการ
  3. สร้าง Key ที่สามารถอ่านค่าได้ (และ/หรืออัพเดตค่าได้หากต้องการให้ส่งค่า) สำหรับ ESP
  4. สร้าง Key ที่สามารถอัพเดตค่าได้สำหรับแอพฟ้าใส (จริงๆ ใช้ key เดียวกับ ESP ก็ได้ แต่ผมแนะนำให้แยกกันเพื่อให้ง่ายต่อการควบคุมสิทธิ์)

มีข้อสังเกตนิดนึงครับว่าค่าแบบ Integer ไม่สามารถบันทึกได้แบบทศนิยม หากจะุบันทึกค่าต้องแปลงให้เป็นจำนวนเต็มก่อน (เหมือนที่ผมบันทึกค่าอุณหภูมิผมก็ใช้การคูณ 100 เพื่อให้บันทึกค่าแบบทศนิยม 2 ตำแหน่ง)

โปรแกรมลงบน ESP

ในที่นี้ผมใช้การโปรแกรมด้วยภาษา C บน Arduino IDE นะครับ

ขั้นแรกสุดก็ให้ดาวน์โหลด Library ของ Anto.io มาใช้ก่อนครับ

หลังจากนั้นให้ลองเรียก Example Quick_start_anto แล้วแก้ค่าที่จำเป็น ดังนี้

  • ssid ชื่อ Wi-fi ที่เราจะเชื่อมต่อด้วย
  • password รหัส WI-fi
  • token คือ key ของ ESP ที่เราสร้างไว้ตอนอรก
  • thing คือชื่ออุปกรณ์ (Thing) ที่เราสร้างไว้
  • user คือ  username ที่เราใช้กับ anto.io

เสร็จแล้วไปดูที่ connectedCB จะมีคำสั่ง Anto.sub นั่นเป็นคำสั่งให้ตามค่าของ Channels หากมีการเปลี่ยนแปลงค่า ระบบจะเรียก function msgArrvCB ขึ้นมา เราสามารถกำหนดพฤติกรรมที่เราต้องการ เช่นปิดเปิดหลอดไฟ เป็นต้น

ส่วนสุดท้ายคือ loop สามารถส่งค่าได้ไปอัพเดตได้ผ่าน Anto.pub("[ชื่อ Channel ที่ต้องการ update]", (const char*)String([ค่าของตัวแปรที่ต้องการอัพเดต]).c_str()); ทั้งนี้ หากมีการอัพเดตค่าไปแล้ว จะเรียกฟังก์ชัน publishedCB ครับ

ผังการต่อ LED กับ ESP (ตัว R ของ DHT11 ต้องเป็น 4.7kOhm และในนี้ยังไม่มี 7 segments display)

ผังการต่อ LED กับ ESP (ตัว R ของ DHT11 ต้องเป็น 4.7kOhm และในนี้ยังไม่มี 7 segments display)

สำหรับฮาร์ดแวร์มีสิ่งที่ควรรู้ 2 ข้อครับ คือ

  1. ESP เพียวๆ จะไม่มีชื่อพินมาให้ แนะนำให้ดูค่าจากขาแล้วเอาเลขนั้นมาใช้ได้เลย (ถ้าไม่ชนกับพินที่สงวนไว้) ตัวอย่างเช่น LED ที่ผมใช้ผมต่อกับพิน 15 ตอนสั่งค่าก็กำหนดพินเป็น 15 ได้เลย
  2. ตอนโปรแกรมอย่าลืมต่อ GPIO0 ลงกราวน์และรีเซ็ตตัว ESP ก่อนสั่งโปรแกรม (แบบเดียวกับตอนสั่งแฟลช Firmware) และแนะนำว่าพอโปรแกรมเสร็จให้ปล่อยลอย GPIO0 ด้วยก็จะดีครับ ป้องกันการเผลอโปรแกรม/เข้า bootloader mode โดยไม่ตั้งใจ
วงจรที่ต่อจริง

วงจรที่ต่อจริง

สำหรับ ESP-12E ผมใช้การตั้งค่าดังนี้ครับ

ตัวอย่างการตั้งค่า ESP-12E ใน Arduino IDE

ตัวอย่างการตั้งค่า ESP-12E ใน Arduino IDE

ตั้งค่าในฟ้าใส

ในแอพฯ ฟ้าใส ให้สั่งตามลำดับดังนี้ครับ

  • “เชื่อมต่ออุปกรณ์ผ่านเน็ต”
  • “เพิ่มคำสั่ง”
  • “ส่งค่าผ่าน URL” (จริงๆ แค่ URL ฟ้าใสก็เข้าใจครับ)
ตัวอย่างหน้า "เชื่อมต่ออุปกรณ์ผ่านเน็ต"

ตัวอย่างหน้า “เชื่อมต่ออุปกรณ์ผ่านเน็ต” ของแอพฟ้าใส

แล้วกำหนดคำสั่งด้วยรูปแบบ

[คำสั่งที่ต้องการ] ส่งค่า https://api.anto.io/channel/set/[key]/[thing]/[channel]/[ค่าที่ต้องการกำหนด]

เมื่อ

  • คำสั่งที่ต้องการ คือชื่อคำสั่งที่ต้องการให้ฟ้าใสสั่ง URL
  • key คือ key ที่ได้จากหน้า key ของฟ้าใสใน Anto
  • thing คือชื่ออุปกรณ์
  • channel คือชื่อตัวแปรที่ต้องการอัพเดต
  • ค่าที่ต้องการกำหนด ก็คือค่าที่ต้องการกำหนดนั่นแหละครับ (สมมติเป็นสวิตช์ 0 คือปิด 1 คือเปิด เป็นต้น)

ตอนใช้ แค่สั่ง “เชื่อมต่ออุปกรณ์ผ่านเน็ต” และตามด้วยคำสั่งที่เรากำหนด แล้วฟ้าใสจะเรียก URL ที่เราใส่ไปให้ ESP รันคำสั่งเองครับ

ตัวอย่างการสั่งการฯ บนแอพฯ ฟ้าใส

ตัวอย่างการสั่งการฯ บนแอพฯ ฟ้าใส

Code ที่ผมใช้กับตัวอย่างนี้อยู่ใน Github itpcc.net : ESP Article series ครับ ลองโหลดมาเล่นกันได้

เช่นเคยครับ มีอะไรสงสัย Comment ถามกันมาได้ครับ