[RPi] AlexaPi สั่งงานด้วยเสียงง่ายๆด้วย Raspberry Pi
บทความนี้เราจะมาลองทำ AlexaPi ตามที่คุณ Sam Machin พัฒนาเอาไว้ โดยเดิมที่ Alexa app ทำงานบนบอร์ด CHIP ซึ่งพัฒนาด้วย Python จากนั้นก็มีการปรับมาให้ Raspberry Pi ด้วยครับ ซึ่งถือว่าทำให้เรา ได้เล่น Alexa ได้ง่ายขึ้นมาก ๆ ครับ
ใครที่แค่อยากลองเล่นเฉย ๆ ผมแนะนำเจ้า Echosim.io ครับ เป็นเว็บแอพพลิเคชั่น ลองเล่น ลองคุย ลองถามน้อง Alexa ได้เลย ไม่ต้องติดตั้งอะไรเลยครับ
Amazon Echo คืออะไร ?
ลองดูวีดีโอแนะนำก่อนดีกว่าครับ เพื่อความเข้าใจตรงกัน
สรุปมันก็คือ Hardware ของน้อง Alexa ของเรานั้นเองครับ โดย Alexa มีบริการที่เรียกว่า Alexa Voice Service (AVS) เป็นซอฟแวร์ที่เราสามารถนำมาพัฒนาต่อยอดได้ครับ … ในเมื่อ Amazon Echo ไม่ส่งมาที่ไทย เราก็ต้องทำเองสิครับ ลุย !
แล้วมันทำอะไรได้บ้าง ?
Amazon Echo ไม่ร้องรับการทำงานในประเทศไทยนะครับ (ณ ปัจจุบันคือแค่ USA ประเทศเดียวครับ)
- สั่งงานด้วยเสียง (voice-control)
- เล่นเพลงจาก Prime Music, Spoify, Pandora, iHeartRadio, TuneIn และอื่นๆ
- ตอบคำถามได้ครับ อ่านหนังสือ ข่าว สภาพอากาศ สภาพจราจร ผลการแข่งขันกีฬา และอื่นๆ
- สั่งการพวกระบบ Smart Home ต่างๆได้ครับ ทั้ง ไฟ สวิตท์ thermostat (เช่น WeMo, Philips Hue, Samsung SmartThings, Wink, Insteon, Nest, และ ecobee)
- เรียก Uber หรือ สั่ง Domino Pizza ก็ได้ครับ
มาสร้าง AlexaPi กันเลย !
สิ่งที่ต้องเตรียมพร้อม
- 1 x Raspberry Pi 3 (หรือรุ่นอื่นๆ)
- 1 x Micro SD Card + Jessie OS
- 1 x Internet (ใช้สาย LAN หรือ WiFi ก็ได้ครับ)
- 1 x USB Microphone (ในตัวอย่างผมใช้ไมโครโฟนผ่าน Webcam อีกทีนะครับ)
- 1 x ปุ่มกด (กดติด ปล่อยดับ)
- 1 x LED สีแดง (หรือสีอะไรก็ได้ครับ)
- 1 x LED สีเหลือง (หรือสีอะไรก็ได้ครับ)
- 2 x R 330 Ohm
- 1 x R 10k Ohm
- 1 x โปรโตบอร์ด
- สายจั๊มแบบตัวผู้-ตัวเมีย (M/F)
- สายจั๊มแบบตัวผู้-ตัวผู้ (M/M)
1. เตรียมความพร้อม Raspberry Pi
- ติดตั้ง Jessie OS ก่อนนะครับ ดังลิงค์ต่อไปนี้เลยครับ > http://www.sathittham.com/raspberry-pi/rpi-ep-2/
- ทำการ Update และ Upgrade ระบบปฎิบัติการด้วยคำสั่ง
sudo apt-get updatesudo apt-get upgrade
- ให้ทำการต่อวงจร ปุ่ม และ LED เข้ากับขา GPIO ดังต่อไปนี้ครับ (*ควร Shutdown ก่อนเสียบสายไฟนะครับ)
- LED สีแดงต่อกับ GPIO 24
- LED สีเหลืองต่อกับ GPIO 25
- ปุ่ม (Pull-up) ต่อกับ GPIO 18
- ต่อลำโพงเข้ากับแจ๊ค Audio 3.5mm
- ต่อกล้อง Webcam เข้ากับ USB port ครับ
- ใช้ LAN ก็เสียบ LAN ครับ, ถ้าใช้ WiFi ก็ได้เช่นกันครับ
2. สมัคร Alexa Voice Service
- หากใครยังไม่ได้เป็น Amazon Developer ก็ไปสมัครได้ที่ลิงค์นี้ครับ (ฟรี) >> https://developer.amazon.com/login.html ใครสมัครแล้วก็ Login เข้าใช้างานเลยครับ
- เลือก ALEXA ที่เมนูบาร์ด้านบนครับ
- จากนั้นเลือก Alexa Voice Service โดยกดที่ Get Started > ได้เลยครับ
- เข้ามาแล้ว ที่ปุ่ม Register a Product Type ให้เลือก Device ครับ
- กรอกข้อมูลดังต่อไปนี้ครับ
- ที่เมนู Device Type Info
- Device Type ID: my_device
- Display Name: My Device
- กด Next ได้เลยครับ
- ที่เมนู Security Profile
- คลิ๊กที่ Security Profile dropdown แล้วเลือก “Create a new profile”
- ที่แถบเมนู General
- Security Profile Name: Alexa Voice Service Sample App Security Profile
- Security Profile Description: Alexa Voice Service Sample App Security Profile Description
- กด Next ได้เลยครับ
- จากนั้นระบบจะสร้าง Client ID และ Client Secret มาให้ครับ ดังตัวอย่างด้านล่าง
- ที่แถบเมนู Web Settings
- ที่ช่อง Security Profile ให้เลือก Security profile ที่เราทำการสร้างไว้ แล้วกดปุ่ม “Edit”
- ที่ช่อง Allowed Origins: คลิ๊ก “Add Another”แล้วพิมพ์ข้อความดังต่อไปนี้ครับ
- http://localhost:5000
- http://[IP ของ Raspberry Pi เรา]:5000 เช่น http://192.168.1.110:5000
- ที่ช่อง Allowed Return URLs: คลิ๊ก “Add Another”แล้วพิมพ์ข้อความดังต่อไปนี้ครับ
- http://localhost:5000/code
- http://[IP ของ Raspberry Pi เรา]:5000/code เช่น http://192.168.1.110:5000/code
- กด Next ได้เลยครับ
- ที่แถบเมนู Device Details
- Image: รูปที่จะมาเป็น Avatar ครับ อะไรก็ได้ครับ รองอัพโหลดดูก็ได้ครับ
- Category: เลือก Other
- Description: พิมพ์คำอธิบาย เช่น MyAlexaPi
- What is your expected timeline for commercialization?: คาดว่าจะทำขายอีกนานไหม๊ ? เลือกตอบ Longer than 4 months / TBD ไปครัช
- How many devices are you planning to commercialize?: จะทำขายกี่อัน ? ก็ตอบ 0 หรือ 1 ก็แล้วแต่ครับ
- กด Next
- ที่แถบเมนู Amazon Music
- Enable Amazon Music?: ตอบ No ครับ เพราะยังไงบ้านเราก็ใช้งานไม่ได้อยู่แล้ว
- กดปุ่ม Submit เป็นอันเสร็จครับ
3. ติดตั้ง AlexaPi ลง Raspberry Pi
มาที่ Raspberry Pi ของเราครับ ให้ทำการล๊อคอินเข้ามาก่อนครับ
ตั้งรหัส root
- ด้วยการพิมพ์คำสั่ง
sudo passwd root
- แล้วก็พิมพ์รหัสไป 2 ครั้งครับ
เข้าสู่ root
- พิมพ์คำสั่ง
su
- พิมพ์รหัสผ่านที่เพิ่มตั้งเมื่อสักครู่
ติดตั้ง git
- พิมพ์คำสั่ง
apt-get install git
ติดตั้ง mpg123
- พิมพ์คำสั่ง
apt-get install mpg123
เข้าไปไดเร็ททรอรี่ root
- พิมพ์คำสั่ง
cd /root
ดาวโหลด AlexaPi
- พิมพ์คำสั่ง
git clone https://github.com/sammachin/AlexaPi.git
- รอดาวโหลดจนเสร็จครับ
- พิมพ์คำสั่ง
cd /root/AlexaPi
ติดตั้ง AlexaPi
- พิมพ์คำสั่ง
./setup.sh
- หากมีการถามให้ติดตั้งโปรแกรมที่เกี่ยวข้อง ให้กด y ไปครับ
- โดยในขั้นตอนนี้จะมีการอัพเดทระบบด้วย
- เมื่อติดตั้งเสร็จ สคิปจะหยุดเพื่อถามหารายละเอียดของ AVS ครับ
- ซึ่งรายละเอียดทั้งหมดจะอยู่ในหน้า Amazon Developer Account > Alexa > Alexa Voice Service > my_device ที่เราเคยกรอกไว้ ดังข้อ 2 ครับ
- ใส่ Device Type ID แล้วกด Enter
- ใส่ Security Profile Description แล้วกด Enter
- ใส่ Security Profile ID แล้วกด Enter
- ใส่ Security Client ID แล้วกด Enter
- ใส่ Security Client Secret แล้วกด Enter
- เมื่อกรอกเสร็จให้เข้ามาที่หน้าเว็บบราวเซอร์ โดยพิมพ์
- http://[IP ของ Raspberry Pi เรา]:5000 เช่น http://192.168.1.110:5000
- ระบบจะ redirect มาให้เราเข้า account ของ Amazon Developer ครับ
- ให้เรากดยอมรับเงื่อนไขการใช้งาน AVS ครับ
- กด Okay
- ถ้าสำเร็จ จะขึ้น Success ! และแสดง token ครับ
- จากนั้นก็ Reboot เพื่อเริ่มใช้งานได้เลยครับ
- พิมพ์คำสั่ง
sudo reboot
4. ทดลองใช้งาน AlexaPi
- เมื่อรีบูทระบบมา AlexaPi จะทำงานอัตโนมัติครับ โดยเราจะได้ยินคำว่า “Hello”
- อยากทราบอะไร ให้กดปุ่มค้างไว้ครับ แล้วต้องเริ่มคำพูดว่า “Alexa,…”
- ตัวอย่างคำถามง่ายๆ
- “Alexa what time is it?”
- “Alexa, what’s the date?”
- “Alexa, what’s the weather like?”
- ตัวอย่างคำถามฮ่าๆ
- “Alexa, I am your father.”
- “Alexa, use the force.”
- ลองดูคำถามอื่นๆ ได้ >>ที่นี่<< ครับ
- สถานะของไฟ LED
- LED สีแดง (ที่ต่อกับ GPIO 24) จะติดเมื่อเรากดปุ่ม และพูดคำสั่ง
- LED สีแดง และ LED สีเหลือง (ที่ต่อกับ GPIO 25) จะติดพร้อมกัน เมื่อคำถามกำลังโพสไปที่ AVS และรอคำตอบ
- LED สีเหลือง จะติดเมื่อคำถามกำลังตอบ
- LED สีแดง จะกะพริบ 3 ครั้ง ถ้าเกิด error
- ตัวอย่างการทำงานครับ
ปล. มันตอบสนองช้า เพราะว่าเน็ตผมช้านะครับ
สรุป
สำหรับ Version นี้ ก็ยังมีหลายประเด็นให้พิจารณาครับ
- ใครที่อยากลองคุยเล่นๆกับ Alexa แนะนำเว็บ Echosim.io
- คำตอบจะช้าหรือเร็วอยู่ที่ Internet ครับ
- พูดภาษาอังกฤษสำเนียงไทยๆ ก็พออยู่ฟังออกอยู่ครับ
- ต้องกดปุ่ม(ค้างไว้) ก่อนพูดทุกครั้ง เพื่อเป็นการบอกว่าเราจะสั่งงานละนะ
- ต้องพูดคำว่า “Alexa,…” ก่อนออกคำสั่งทุกครั้ง (ไม่งั้นมันจะ Error)
- ยังไม่เสถียร มีค้าง มีเด้ง มี Error อยู่ครับ…รีสตาร์ทระบบก็หายครับ
- ฟีเจอร์พวก เวลา สถานที่ สภาพอากาศ ใช้ตรงๆ ไม่ได้ ต้องระบุสถานที่ไปด้วย เช่น What time is it in Bangkok ?
- ผมลองกับ IFTTT ไม่สำเร็จครับ (ใครทำได้มาแชร์กันบ้างนะครับ..)
- ยังไม่ได้ลองกับระบบอื่นๆ เช่น ระบบ Smart Home, Smart Plug
แนวทางการแก้ปัญหา
- ไม่รู้ว่า usb webcam/mic ทำงานได้ไหม?
- เช็คก่อนว่า Raspberry Pi เรามองเห็น usb webcam/mic ไหม
lsusb
- ถ้ามีชื่ออุปกรณ์ของเรา ก็พร้อมลุยต่อครับ
- ตรวจสอบความดังของเสียงในการอัด
alsamixer
- กดปุ่ม F6 เพื่อเลือก usb webcam/mic ของเรา
- ใช้ปุ่มลูกศรขึ้น-ลง เพื่อเพิ่มลดเสียง
- เช็คอีกทีว่าอุปกรณ์ของเราพร้อมที่จะทำการอัดเสียงไหม
arecord -l
- ถ้ามีชื่ออุปกรณ์ของเรา ก็พร้อมลุยต่อครับ
- ทดสอบอัดเสียง
arecord -D plughw:1,0 test.wav
- ไฟล์ที่อัดได้ จะอยู่ในชื่อ test.wav
- ทดสอบเล่นไฟล์ที่อัดไว้
aplay test.wav
- เท่านี้ก็เรียบร้อยครับ