สวัสดีครับ
หลังจากที่ตอนที่แล้วเราอัพเดตเฟิร์มแวร์ไปแล้ว วันนี้เราจะมาลองใช้ ESP8266 เป็นสถานีลูกข่ายในการควบคุมไฟฟ้าและส่งข้อมูลไปกลับกับฟ้าใส เลขาแว่นส่วนตัวผ่านระบบของ Anto.io ครับ
หมายเหตุ : ณ วันที่เขียนบทความ ฟ้าใสยังรองรับแค่ระบบของ Anto.io และ NETPIE แต่ผมลองของ NETPIE แล้วใช้งานยาก ไม่สะดวกเท่าที่ควร เลยใช้ระบบของ Anto นะครับ
สร้าง Endpoint บน Anto.io
หลักๆ สามารถไล่ตาม Tutorial ของ Anto ได้เลยครับ อธิบายชัดเจนดี แต่หลักสำคัญคือ
- สร้าง Thing เพื่อให้มีหมวดหมู่ของข้อมูล
- สร้าง Channel และกำหนดประเภทข้อมูลตามรูปแบบที่ต้องการ
- สร้าง Key ที่สามารถอ่านค่าได้ (และ/หรืออัพเดตค่าได้หากต้องการให้ส่งค่า) สำหรับ ESP
- สร้าง 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
ครับ
สำหรับฮาร์ดแวร์มีสิ่งที่ควรรู้ 2 ข้อครับ คือ
- ESP เพียวๆ จะไม่มีชื่อพินมาให้ แนะนำให้ดูค่าจากขาแล้วเอาเลขนั้นมาใช้ได้เลย (ถ้าไม่ชนกับพินที่สงวนไว้) ตัวอย่างเช่น LED ที่ผมใช้ผมต่อกับพิน 15 ตอนสั่งค่าก็กำหนดพินเป็น 15 ได้เลย
- ตอนโปรแกรมอย่าลืมต่อ GPIO0 ลงกราวน์และรีเซ็ตตัว ESP ก่อนสั่งโปรแกรม (แบบเดียวกับตอนสั่งแฟลช Firmware) และแนะนำว่าพอโปรแกรมเสร็จให้ปล่อยลอย GPIO0 ด้วยก็จะดีครับ ป้องกันการเผลอโปรแกรม/เข้า bootloader mode โดยไม่ตั้งใจ
สำหรับ ESP-12E ผมใช้การตั้งค่าดังนี้ครับ
ตั้งค่าในฟ้าใส
ในแอพฯ ฟ้าใส ให้สั่งตามลำดับดังนี้ครับ
- “เชื่อมต่ออุปกรณ์ผ่านเน็ต”
- “เพิ่มคำสั่ง”
- “ส่งค่าผ่าน 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 ถามกันมาได้ครับ