[RPi] AlexaPi สั่งงานด้วยเสียงง่ายๆด้วย Raspberry Pi

Sathittham (Phoo) Sangthong
SS Blog
Published in
6 min readSep 10, 2016

บทความนี้เราจะมาลองทำ 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
ต่อวงจรตามรูปนี้นะครับ
Raspberry Pi GPIO Pin (จาก Element14)
ต่อปุ่มกดและ LED
  • ต่อลำโพงเข้ากับแจ๊ค 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”
  • ที่แถบเมนู 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 ครั้งครับ
Image20160910-151211

เข้าสู่ 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
  • เท่านี้ก็เรียบร้อยครับ

Ref

--

--

Sathittham (Phoo) Sangthong
SS Blog

Hi! It's me Phoo! I’m a Software Developer 👨‍💻 , a Startup Entrepreneur 📱 and a Runner 🏃 . Currently, I’m a Co-Founder and CTO of a Startup name “Urbanice”.