พอเราใช้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ควบคุมปลั๊กไฟอัตโนมัติได้แล้ว มันก็ชวนให้คิดต่อว่า "ทำไมไม่สั่งงานด้วยเสียงเลยล่ะ!" (ใครจะไม่อยากมีบ้างล่ะ ว่ามั้ย?)
แค่เขียนโค้ด Sketch ง่ายๆ บนบอร์ดที่ต่อ WiFi ไว้ แล้วตั้งค่า Port Forwarding บนเราเตอร์ เราก็สามารถเชื่อมต่อตรงไปยังบริการอย่าง IFTTT (If This Then That) และ Google Assistant / Amazon Alexa เพื่อสั่งงานด้วยเสียงและอื่นๆ ได้แล้ววว!
ทำให้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ของเราออนไลน์ซะที
ขั้นแรก เราต้องทำให้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ของเราเข้าถึงได้จากที่ไหนก็ได้บนอินเทอร์เน็ต โดยใช้เทคนิคที่เรียกว่า Port Forwarding บนเราเตอร์ที่บ้านนั่นเอง
การทำแบบนี้ คุณจะต้องตั้งค่า IP Address ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ให้เป็นแบบ Static (หรือเพิ่ม "Reservation" สำหรับ MAC Address ของมันในเราเตอร์)
จากนั้น เราต้องเลือก Port หมายเลขหนึ่ง (เช่น 9090) สำหรับ Web Server บน [Arduino](https://s.shopee.co.th/7fUgFAWSki) ของเรา (Port 80 มักจะถูกใช้โดยหน้าเว็บจัดการเราเตอร์อยู่แล้วจากภายนอก คุณสามารถใช้ Port 80 นี้ได้เลย ถ้าอยากให้ทุกคำขอวิ่งมาหา Arduino ของเราโดยไม่ต้องเปลี่ยนอะไรเพิ่ม)
พอตัดสินใจได้แล้ว เราก็เพิ่ม "Service" ที่กำหนดช่วงของ Port นั้น แล้วเพิ่มมันเป็นกฎ (rule) เพื่อจับคู่กับ IP Address จากขั้นตอนที่แล้ว
เมื่อตั้งค่าเสร็จแล้ว คุณจะสามารถเข้าถึงมันผ่าน External IP ของเราเตอร์ (ดูได้จากหน้าเซ็ตอัพเราเตอร์ หรือเว็บไซต์ตรวจสอบ IP ทั่วไป) พร้อมกับ Port ที่ตั้งไว้ เช่น http://90.98.241.123:9090, แต่ตอนนี้ยังไม่มีอุปกรณ์รันอะไรอยู่ คุณอาจจะเจอแต่หน้า 404 ไปก่อน
เพื่อให้เข้าถึงง่ายขึ้น ลองตั้งค่า Dynamic DNS (เช่น บริการฟรีจาก No-IP) ซึ่งในเราเตอร์หลายรุ่นสามารถตั้งค่าได้ตรงๆ เลย จากนั้นคุณก็จะเข้าถึง [Arduino](https://s.shopee.co.th/7fUgFAWSki) ของคุณผ่าน URL ที่จำง่ายกว่าได้ เช่น http://visualmicrohomeproject.ddns.net:9090
สมัครใช้งาน IFTTT
IFThis Then That (IFTTT) เป็นบริการเชื่อมโยงระหว่างเครื่องมือหลากหลายประเภท เช่น Google Assistant / Alexa รวมถึงสามารถเชื่อมกับ Web hooks ทั่วไปได้ด้วย
เริ่มต้นด้วยการสมัครใช้งานที่เว็บไซต์ IFTTT โดยใช้ บัญชี Google เดียวกันกับที่ใช้บนอุปกรณ์ Assistant ของคุณ (เช่น โทรศัพท์หรือสมาร์ทสปีกเกอร์)
(ถ้าใช้คนละบัญชี มันจะไม่ทำงานนะจ๊ะน้อง!)
ตั้งค่า IFTTT
หลังจากล็อกอินแล้ว > คลิก Create > คลิก "This"
จากนั้น Search หา Google > เลือก Google Assistant
ตรงนี้คุณสามารถกำหนดประเภทของประโยคคำสั่งได้ ในตัวอย่างนี้เราจะใช้คำว่า "On" หรือ "Off" เป็นตัวแปร ในประโยค "Turn the light On/Off" ซึ่งเราจะพิมพ์เป็น "Turn the light $"
ทีนี้เราต้องเชื่อม Trigger นี้โดยคลิก "That"
Search หา Webhooks > เลือก Webhooks
ในส่วนนี้เราจะกำหนด URL และ Port ตามที่ตั้งค่าไว้ในขั้นตอนก่อนหน้า และเราสามารถเพิ่มตัวแปร "ingredient" จากขั้นบนลงมาได้
เพื่อความง่าย เราจะเพิ่มมันลงใน URL เลย แต่ถ้าคุณต้องการส่งข้อมูลมากขึ้น ก็มักจะส่งในส่วน Body (มักเป็นรูปแบบ JSON) ซึ่งคุณสามารถใช้ไลบรารี [Arduino](https://s.shopee.co.th/7fUgFAWSki) JSON มาช่วยอ่านค่าบน Arduino ของคุณได้
เมื่อตั้งค่า Applet เสร็จแล้ว เราก็สามารถไปปรับโค้ดบนบอร์ดของเราได้ตามต้องการ
ปรับโค้ดและอัปโหลด
ถ้าใช้บอร์ด ESP8266/8285/32 แค่แก้ไขรหัสผ่าน WiFi และชื่อเครือข่าย (SSID) ในโค้ด มันจะดึงไลบรารีที่จำเป็นมาให้อัตโนมัติ
สำหรับบอร์ดอื่นๆ ให้ปรับส่วน Header และเมธอดเกี่ยวกับเว็บตามความเหมาะสม
ลองใช้งานเลย!
ตอนนี้คุณน่าจะสามารถพูดกับ Assistant ของคุณได้แล้วว่า "Hey Google, turn the light On" และมันก็จะตอบกลับมาด้วยประโยคที่คุณตั้งไว้
ไฟก็ควรจะติดแล้วด้วยนะ!
คุณจะเห็นใน Serial Monitor ว่ามีคำขอส่งเข้ามาพร้อมกับ Keyword "On" ต่อท้าย URL และ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ของคุณก็จะส่งสัญญาณ RF ไปเปิดไฟตามที่เราเขียนโค้ดไว้
จากจุดนี้ ความเป็นไปได้มันไม่มีขีดจำกัดแล้วล่ะ เพราะตอนนี้คุณมีเว็บอินเทอร์เฟซเป็นของตัวเองบนอุปกรณ์ได้แล้ว แถมยังส่งข้อมูลไปมาผ่าน IFTTT ได้ และควบคุมโปรเจกต์ของคุณด้วยเสียงผ่าน Assistant ไม่ว่าจะเป็นโทรศัพท์หรืออุปกรณ์อื่นๆ งานนี้หล่อเท่สุดๆ!
ข้อมูลเพิ่มเติม
IFTTT Website
Google Assistant IFTTT Support
[Arduino](https://s.shopee.co.th/7fUgFAWSki) JSON Library
รายละเอียดเทคนิคเพิ่มเติม (แบบจัดเต็ม)
การประมวลผลคำสั่งเสียงแบบ Edge-Acoustic
โปรเจกต์ขั้นสูงนี้ทำให้เราสามารถโต้ตอบด้วยภาษาธรรมชาติกับ Arduino ได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ตตลอดเวลา ใช้การวิเคราะห์เสียงความเร็วสูง
- การผสานรวม Assistant SDK: ใช้ประโยชน์จากไลบรารีจดจำเสียงระดับมืออาชีพ (หรือเชื่อมต่อกับ PC/Google Assistant) เพื่อแปลงเสียงพูดให้เป็นโทเค็นดิจิทัล
- เมทริกซ์ส่งคำสั่ง: เมื่อจดจำคำได้ (เช่น "ไฟ", "พัดลม", "ประตู") Arduino จะค้นหาตารางคำสั่งภายในและดำเนินการฟังก์ชันที่เกี่ยวข้องผ่านพิน GPIO ของมัน
การปรับแต่ง
- การดีบักด้วย Visual Micro: ปรับแต่งให้เหมาะสมโดยใช้ Visual Micro ใน Visual Studio 2017 ซึ่งช่วยให้นักพัฒนาสามารถเฝ้าดู "ระดับความมั่นใจ" ของคำสั่งเสียงหลายๆ คำได้แบบเรียลไทม์ เพื่อปรับแต่งความแม่นยำให้ดีขึ้น