สารบัญ:

เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับโครงการ Raspberry Pi: 5 ขั้นตอน
เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับโครงการ Raspberry Pi: 5 ขั้นตอน

วีดีโอ: เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับโครงการ Raspberry Pi: 5 ขั้นตอน

วีดีโอ: เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับโครงการ Raspberry Pi: 5 ขั้นตอน
วีดีโอ: DIY Raspberry Pi Amazon Alexa (Echo) ✔ Voice Activation & Control Project 2024, มิถุนายน
Anonim
เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับ Raspberry Pi Project
เพิ่มการควบคุม Alexa แบบกำหนดเองให้กับ Raspberry Pi Project

โปรเจ็กต์นี้มีไว้สำหรับทุกคนที่มีโปรเจ็กต์ Raspberry Pi ที่ใช้ Python ที่ต้องการเพิ่มการควบคุมด้วยเสียงผ่านอุปกรณ์ Amazon Echo ที่มีอยู่ คุณไม่จำเป็นต้องเป็นโปรแกรมเมอร์ที่มีประสบการณ์ แต่คุณควรจะสบายใจกับการใช้บรรทัดคำสั่งและปรับโค้ดที่มีอยู่ให้เหมาะกับความต้องการของคุณ

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

ในตัวอย่างของฉัน ฉันเริ่มต้นด้วย Raspberry Pi Zero W กับ Raspbian ฉันมีโปรแกรม Python3 บน Pi ที่สามารถเขียนข้อความไปยังจอแสดงผล SPI และฉันมีเครื่องวัดอุณหภูมิที่สามารถอ่านได้ สำหรับคุณ โปรแกรมนี้อาจเป็นอะไรก็ได้ แต่แนวคิดก็คือ คุณอาจมีอุปกรณ์อินพุตบางตัวที่คุณต้องการอ่านผ่าน Alexa และ/หรืออุปกรณ์ส่งออกบางอย่างที่คุณต้องการควบคุมโดยใช้ Alexa

เป้าหมายคือเปลี่ยนจากโปรแกรมพื้นฐานเช่นโปรแกรมที่อธิบายไว้ข้างต้นไปยังอุปกรณ์ที่คุณสามารถควบคุมด้วย Echo ของฉันได้อย่างง่ายดาย สมมติว่าคุณมีฮาร์ดแวร์นี้อยู่แล้ว โปรเจ็กต์นี้ไม่ควรทำให้คุณเสียเงิน ในท้ายที่สุด คุณจะมาถึงจุดที่คุณสามารถพูดสิ่งต่างๆ เช่น:

ฉัน: "Alexa ขอให้อุปกรณ์ของฉันตรวจสอบอุณหภูมิบนเซ็นเซอร์ 1"

การตอบสนองของ Alexa: "โพรบอ่าน 72.31 องศา"

หรือ

ฉัน: "Alexa บอกแกดเจ็ตของฉันให้เขียน George Washington"

การตอบสนอง: จอแสดงผลที่เชื่อมต่อกับ Raspberry Pi ของฉันตอนนี้อ่านว่า "George Washington"

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

ขั้นตอนที่ 1: พื้นหลัง

พื้นหลัง
พื้นหลัง

ในภาพนี้ (เครดิต: https://developer.amazon.com/en-US/docs/alexa/alex… เราจะเห็นสถาปัตยกรรมทั่วไปของ Alexa Gadgets

เมื่อคุณพูดอะไรบางอย่างกับอุปกรณ์ Echo ของคุณ เสียงนั้นจะส่งไปยัง Alexa Cloud ซึ่งจะถูกประมวลผลและที่ซึ่งการตอบสนองจะถูกสร้างขึ้นเพื่อตอบสนองต่อคุณ เมื่อคุณถามว่าสภาพอากาศเป็นอย่างไร มันเป็นเพียงสองสิ่งนี้ในการสื่อสาร ตอนนี้ สมมติว่าคุณต้องการเพิ่มการควบคุมด้วยเสียงให้กับหนึ่งในโปรเจ็กต์เล็กๆ ของคุณบน Raspberry Pi การประมวลผลทุกอย่างบนเครื่องจะต้องใช้ฮาร์ดแวร์ที่สำคัญและฐานรหัสที่ซับซ้อนมากเพื่อให้สิ่งต่างๆ ดำเนินไป ทางออกที่ดีกว่าคือการใช้ประโยชน์จาก Alexa Cloud ซึ่งมีความซับซ้อนมากและสามารถจัดการกับรูปแบบคำพูดที่ซับซ้อนได้เป็นอย่างดี Alexa Gadgets เป็นวิธีที่ดีสำหรับคุณในการทำเช่นนี้

Alexa Gadget สื่อสารกับอุปกรณ์ Echo โดยใช้บลูทูธ เมื่อสร้างการเชื่อมต่อนี้แล้ว ทั้งสองจะส่งข้อความถึงกันโดยใช้การเข้ารหัส UTF-8 เมื่อเสียงสะท้อนส่งผ่านบางสิ่งไปยังแกดเจ็ต จะเรียกว่าคำสั่ง ทิศทางอื่นเรียกว่าเหตุการณ์ ก่อนที่จะเข้าสู่ขั้นตอนที่แน่นอนของสิ่งเหล่านี้ เราควรแนะนำองค์ประกอบสำคัญอื่น: ทักษะของ Alexa แบบกำหนดเอง

Alexa ช่วยให้นักพัฒนาสามารถสร้างทักษะที่กำหนดเองได้ ซึ่งช่วยให้พวกเขาสามารถออกแบบการโต้ตอบและพฤติกรรมของตนเองเพื่อใช้กับอุปกรณ์ Echo ทั้งหมด ตัวอย่างเช่น นักพัฒนาซอฟต์แวร์สามารถสร้างทักษะที่กำหนดเองเพื่อบอกคุณถึงระยะห่างระหว่างสนามบินสองแห่งในสหรัฐอเมริกา ผู้ใช้จะพูดว่า: "Alexa ถามเครื่องคำนวณระยะทางที่กำหนดเองของฉันว่าระยะห่างระหว่าง LAX และ JFK คืออะไร" และมันสามารถตอบสนองได้ด้วย "2475 ไมล์" มันทำอย่างนี้ได้อย่างไร? เมื่อนักพัฒนาสร้างทักษะที่กำหนดเอง พวกเขากำหนดสิ่งที่เรียกว่า "ความตั้งใจที่กำหนดเอง" ด้วย "คำพูดตัวอย่าง" ที่มี "ช่อง" ตัวอย่างเช่น ในทักษะนี้ ฉันอาจมีเจตนา "calc_dist" เพื่อคำนวณระยะห่างระหว่างจุดสองจุด ตัวอย่างคำพูดจะเป็น "ระยะห่างระหว่าง {slot1} และ {slot2}" หรือ "ระยะห่างระหว่าง {slot1} และ {slot2} เป็นอย่างไร สล็อตที่แสดงในวงเล็บมีประเภทเฉพาะ ในกรณีนี้ประเภทเหล่านั้นจะเป็นรหัสสนามบิน เช่น LAX, JFK, BOS, ATL เมื่อผู้ใช้ขอทักษะที่กำหนดเอง Alexa Cloud จะพยายามจับคู่สิ่งที่ผู้ใช้พูดกับความตั้งใจที่กำหนดเองโดยใช้ตัวอย่างคำพูดที่ให้มาและพยายามค้นหาค่าช่องที่ถูกต้องสำหรับคำขอนั้น ในตัวอย่างนี้ จะพบว่าผู้ใช้ต้องการความตั้งใจ "calc_dist" และ slot1 นั้นคือ LAX และ slot2 คือ JFK ณ จุดนี้ Alexa Cloud ส่งต่องานไปยังโค้ดของผู้พัฒนาเอง โดยพื้นฐานแล้วมันจะบอกนักพัฒนาโค้ดว่าได้รับเจตนาอะไรและค่าสล็อตทั้งหมดคืออะไร ท่ามกลางรายละเอียดอื่นๆ

นักพัฒนาจะต้องตัดสินใจว่าโค้ดของพวกเขาจะอยู่ที่ใด แต่ตัวเลือกยอดนิยมคือการใช้ฟังก์ชัน AWS Lambda หากคุณไม่รู้ว่ามันคืออะไร มันเป็นบริการที่ให้คุณอัปโหลดโค้ดที่สามารถเรียกใช้ได้ตลอดเวลา จากนั้นจะเรียกเก็บเงินจากคุณตามระยะเวลาที่โค้ดของคุณทำงานเท่านั้น หากเราดำเนินการต่อด้วยตัวอย่างของเรา โค้ดของนักพัฒนาซอฟต์แวร์อาจเป็นฟังก์ชัน Python ที่รับรหัสสนามบินสองรหัส ค้นหาที่ตั้ง คำนวณระยะทาง แล้วส่งการตอบกลับกลับไปยัง Alexa Cloud เพื่อพูดบางสิ่งกับผู้ใช้ Alexa Cloud จะส่งข้อมูลคำพูดนั้นกลับไปที่อุปกรณ์ของผู้ใช้และจะได้รับคำตอบ

ตอนนี้เรากลับไปที่แกดเจ็ตได้แล้ว เราสามารถสร้างทักษะแบบกำหนดเองที่ออกแบบมาเพื่อทำงานกับแกดเจ็ตโดยเฉพาะ นักพัฒนาสามารถเขียนทักษะที่ส่งคำสั่งไปยังอุปกรณ์ที่เชื่อมต่อ คำสั่งนั้นมีเพย์โหลดที่สามารถใช้ได้ อย่างไรก็ตาม แกดเจ็ตนั้นจำเป็น ทักษะนั้นยังสามารถส่งคำสั่งแล้วฟังเหตุการณ์จากแกดเจ็ตเพื่อให้รหัสทักษะสามารถเข้าถึงข้อมูลที่ส่งจากแกดเจ็ตได้

การสร้างโฟลว์นี้ทำให้เกิดเครื่องมือที่ทรงพลังมาก เนื่องจากอุปกรณ์ราคาถูกสามารถสื่อสารกับโค้ดในคลาวด์และตอบสนองต่อคำสั่งเสียงโดยใช้การจดจำเสียงที่ดีที่สุดที่มีอยู่

ควรสังเกตว่าทักษะส่วนใหญ่อนุญาตให้มีปฏิสัมพันธ์กับพวกเขาได้หลากหลายวิธี ตัวอย่างเช่น ผู้ใช้อาจกระโจนตรงไปยังเจตนาโดยพูดว่า "Alexa ถามเครื่องคำนวณระยะทางที่กำหนดเองของฉันว่าระยะห่างระหว่าง LAX กับ JFK อยู่ที่เท่าไร" (เรียกว่าการเรียกนัดเดียว) หรืออาจใช้เพียงแค่ความตั้งใจในการเปิดตัว: "Alexa, เปิดเครื่องคำนวณระยะทางที่กำหนดเองของฉัน" ตัวอย่างสุดท้ายนี้มักจะตามมาด้วย Alexa ที่ตอบกลับพร้อมรับข้อมูลเพิ่มเติม บทช่วยสอนนี้จงใจละเว้นการสนับสนุนสำหรับหลัง โดยเฉพาะอย่างยิ่ง โดยไม่ต้องแก้ไขฟังก์ชัน Lambda คุณสามารถเรียกใช้ทักษะได้โดยใช้คำสั่งแบบครั้งเดียวเท่านั้น ตัวเลือกการออกแบบนี้ช่วยให้โมเดลดูเรียบง่ายขึ้น (ไม่จำเป็นต้องรองรับความตั้งใจในการเปิดหรือขั้นตอนการสนทนา) และฉันพบว่าฉันมักจะต้องการโต้ตอบกับแกดเจ็ตของฉันโดยใช้การเรียกใช้แบบช็อตเดียวอยู่แล้ว เนื่องจากโดยปกติแล้วจะเร็วกว่า

ขั้นตอนที่ 2: ลงทะเบียน Gadget บน Alexa Voice Service Developer Console

ต่อไปนี้เป็นคำอธิบายของขั้นตอนที่จำเป็น ฉันได้สร้างวิดีโอที่เทียบเท่ากันซึ่งแสดงวิธีการทำตามขั้นตอนเหล่านี้ทั้งหมด คุณสามารถใช้อย่างใดอย่างหนึ่งหรือทั้งสองอย่างเพื่อทำตามขั้นตอนนี้

  1. ไปที่
  2. หากคุณยังไม่มีบัญชีฟรี ให้สร้างบัญชีใหม่
  3. คลิกที่ "สินค้า"
  4. กรอกป้ายกำกับและเลือก "Alexa Gadget"
  5. กรอกข้อมูลที่ต้องการในช่องที่เหลือ
  6. คลิกเสร็จสิ้น

ขั้นตอนที่ 3: สร้างฟังก์ชัน AWS Lambda และทักษะที่กำหนดเอง

สร้างทักษะที่กำหนดเองบน Alexa Skills Kit Developer Console

รหัสสำหรับบทช่วยสอนนี้สามารถพบได้ที่นี่

ก่อนทำตามขั้นตอนนี้ คุณจะต้องสร้างไฟล์.zip ที่มีแพ็คเกจการปรับใช้สำหรับฟังก์ชัน AWS Lambda ตามที่แสดงในบทช่วยสอนที่นี่

  1. ดาวน์โหลดโฟลเดอร์ "lambda" จาก Github ของฉันซึ่งมี "lambda_function.py" และ "requirements.txt"
  2. เปิดเทอร์มินัลแล้วเปลี่ยนไดเร็กทอรีปัจจุบันให้อยู่ในโฟลเดอร์นี้
  3. รันลำดับต่อไปนี้:

pip install -r requirements.txt -t skill_env

cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip

ไฟล์.zip ของคุณจะอยู่ในไดเร็กทอรีที่มีโฟลเดอร์ lambda และชื่อ "skill-code.zip"

หมายเหตุเกี่ยวกับค่าใช้จ่ายในการโฮสต์บน AWS: บทช่วยสอนนี้กำหนดให้คุณมีบัญชี AWS (สร้างได้ฟรี) ฟังก์ชัน Lambda มีค่าใช้จ่าย แต่ราคาปัจจุบันในภูมิภาค N. Virginia อยู่ที่ $0.000000208 ต่อ 100ms ที่ใช้กับหน่วยความจำ 128MB สำหรับการอ้างอิง การเรียกใช้ทักษะของฉันแต่ละครั้งจะเรียกเก็บเงินประมาณ 800 มิลลิวินาทีของการใช้งานในระดับนี้ หากต้องการเรียกเก็บเงิน $1.00USD คุณจะต้องเรียกใช้ฟังก์ชันนี้ประมาณ 600,000 ครั้ง ซึ่ง (หากคุณใช้เวลา 5 วินาทีต่อการเรียกใช้แต่ละครั้ง) จะใช้เวลา 34 วันในการเรียกใช้ฟังก์ชันของคุณแบบไม่หยุดหย่อน ค่าใช้จ่ายไม่ควรเป็นปัญหาสำคัญ เว้นแต่คุณจะเผยแพร่ทักษะของคุณและผู้คนจำนวนมากเริ่มใช้งาน หากคุณกังวลเกี่ยวกับการเรียกเก็บเงินใน AWS ให้พิจารณาตั้งค่าการเตือนการใช้งานที่แจ้งให้คุณทราบหากการใช้งานผ่านเกณฑ์ที่กำหนดไว้

ต่อไปนี้เป็นคำอธิบายของขั้นตอนที่จำเป็น ฉันได้สร้างวิดีโอที่เทียบเท่ากันซึ่งแสดงวิธีการทำตามขั้นตอนเหล่านี้ทั้งหมด คุณสามารถใช้อย่างใดอย่างหนึ่งหรือทั้งสองอย่างเพื่อทำตามขั้นตอนนี้

  1. ไปที่ https://aws.amazon.com/ และลงชื่อเข้าใช้คอนโซลหรือสร้างบัญชีฟรีหากคุณไม่มี
  2. ค้นหาและคลิกที่ Lambda ภายใต้บริการ
  3. คลิก "สร้างฟังก์ชัน"
  4. เลือก "ผู้เขียนตั้งแต่เริ่มต้น" ตั้งชื่อและเลือก Python 3 เวอร์ชันล่าสุดสำหรับรันไทม์
  5. เปลี่ยน "แก้ไขโค้ดในบรรทัด" เป็น "อัปโหลดไฟล์.zip" และเลือกไฟล์.zip ที่สร้างขึ้นด้านบน
  6. ในหน้าต่างใหม่ ไปที่ https://developer.amazon.com/alexa/console/ask และลงชื่อเข้าใช้
  7. คลิกที่ "สร้างทักษะ"
  8. ติดป้ายกำกับ เลือกโมเดล "กำหนดเอง" และ "จัดเตรียมของคุณเอง" แล้วคลิก "สร้างทักษะ"
  9. คลิก "เริ่มจากศูนย์" และคลิก "เลือก"
  10. ภายใต้ "ความตั้งใจ" คลิก "เพิ่ม"
  11. สร้างความตั้งใจที่กำหนดเองที่เรียกว่า "alexa_to_pi" และกรอก "เขียน {person}" เป็นตัวอย่างคำพูด
  12. ทำช่องเจตนาเรียกว่า "บุคคล" ด้วยประเภท "AMAZON. Person"
  13. สร้างความตั้งใจที่กำหนดเองที่เรียกว่า "pi_to_alexa" และกรอก "ตรวจสอบอุณหภูมิจากเซ็นเซอร์ {sensor_num}
  14. สร้าง Intent slot ชื่อ "sensor_num" ด้วยประเภท "AMAZON. NUMBER"
  15. ภายใต้อินเทอร์เฟซ เปิด "ตัวควบคุมอินเทอร์เฟซแบบกำหนดเอง"
  16. ภายใต้ Endpoint เลือก "AWS Lambda ARN" และคัดลอก "Your Skill ID"
  17. กลับไปที่ AWS Console
  18. คลิก "เพิ่มทริกเกอร์"
  19. เลือก "Alexa Skills Kit" เลือก "เปิดใช้งาน" ภายใต้การตรวจสอบ ID ทักษะ วางใน Skill ID ที่คุณเพิ่งคัดลอกและคลิกเพิ่ม
  20. คัดลอก Lambda ARN ที่มุมขวาบน
  21. กลับไปที่ Alexa Developer Console และวาง Lambda ARN ลงในฟิลด์ "Default Region"
  22. ภายใต้ Invocation ให้ตั้งชื่อ Skill Invocation Name เป็น "my gadget"
  23. คลิก "บันทึกโมเดล" จากนั้น "สร้างโมเดล"
  24. คลิก "ทดสอบ" ในแท็บด้านบนและเปลี่ยนตัวเลือกจาก "ปิด" เป็น "การพัฒนา"
  25. โปรดทราบว่าบันทึกสำหรับฟังก์ชัน Lambda จะพบได้ในบริการ "CloudWatch" บน AWS

ขั้นตอนที่ 4: ตั้งค่ารหัสบน Raspberry Pi ของคุณ

เพื่อให้ Raspberry Pi สื่อสารกับอุปกรณ์ Alexa ได้ จำเป็นต้องมีโค้ดเพื่ออำนวยความสะดวกในการส่งข้อมูลผ่านบลูทูธและคงการเชื่อมต่อนั้นไว้ นอกเหนือจากไฟล์อื่นๆ อีกสองสามไฟล์ วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งานไฟล์ล่าสุดจาก Amazon คือการโคลนที่เก็บ Raspberry Pi Gadgets ไปที่ไดเร็กทอรีของโปรเจ็กต์ปัจจุบันของคุณและรัน

โคลน git

สิ่งนี้จะโหลดพื้นที่เก็บข้อมูลทั้งหมดด้วยรหัสที่จำเป็นทั้งหมดบน Pi ของคุณ มีตัวอย่างโครงการที่แสดงความสามารถบางอย่างของ Alexa Gadgets หากคุณต้องการข้อมูลเพิ่มเติม โปรดดู readme บนหน้า Github ของพวกเขา

เรียกใช้ฟังก์ชันการตั้งค่าเพื่อรับทุกอย่างที่กำหนดค่า

cd /home/pi/Alexa-Gadgets-Raspberry-Pi-Samples

sudo python3 launch.py --setup

ทำตามคำแนะนำและตอบ "y" เมื่อถูกถามว่าคุณต้องการกำหนดค่าโดยใช้ข้อมูลรับรอง Gadget ของคุณหรือไม่ เรียกคืน Amazon ID และ Gadget Secret จากการตั้งค่าแกดเจ็ตของคุณบนคอนโซลนักพัฒนาซอฟต์แวร์ เนื่องจากระบบจะถามคุณที่นี่ ฉันเลือกโหมดการส่ง "bt" สำหรับ Raspberry Pi Zero W ของฉัน อุปกรณ์ Echo รุ่นเก่าทั้งหมดไม่รองรับ BLE แต่คุณสามารถค้นหาว่าฮาร์ดแวร์ของคุณมีความสามารถใดบ้าง หากคุณกำลังใช้ Pi ในโหมดเดสก์ท็อป Amazon แนะนำให้คลิกขวาที่ไอคอนบลูทูธที่ด้านบนขวาแล้วคลิก "ลบ "บลูทูธ" ออกจากแผงควบคุม" เพื่อหลีกเลี่ยงปัญหาการเชื่อมต่อ

หมายเหตุ: ขั้นตอนนี้อาจใช้เวลาสักครู่ขึ้นอยู่กับว่าจำเป็นต้องติดตั้งมากน้อยเพียงใด

ตอนนี้คุณจะมีไฟล์สนับสนุนที่จำเป็นทั้งหมดเพื่อกลับไปที่โครงการของคุณ และเริ่มเพิ่มในฟังก์ชันเพื่อให้สามารถสื่อสารกับ Echo ของคุณได้

หากคุณเลือก คุณสามารถลบโฟลเดอร์ "ตัวอย่าง" ใน "Alexa-Gadgets-Raspberry-Pi-Samples/src"

คุณสามารถมีรหัสโปรเจ็กต์ได้ทุกที่ตามต้องการ แต่ฉันจะสร้างโฟลเดอร์ในโฮมไดเร็กตอรี่สำหรับมัน หรือคุณสามารถดาวน์โหลดโฟลเดอร์ที่มีโค้ดจาก Github ของฉันได้ เพียงแค่ต้องแน่ใจว่าได้แก้ไขไฟล์.ini ตามที่อธิบายไว้ด้านล่าง

cd /home/pi

mkdir my_project cd my_project touch my_gadget.py touch my_gadget.ini

ตอนนี้ฉันได้สร้างสองไฟล์ในโฟลเดอร์ชื่อ "my_project" ไฟล์.ini มีความสำคัญ ตรวจสอบให้แน่ใจว่ามีสิ่งต่อไปนี้และแทนที่ใน Amazon ID และ Gadget Secret ของคุณ:

[การตั้งค่าแกดเจ็ต]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] กำหนดเอง MyGadget = 1.0

ทีนี้มาดูไฟล์ python กันก่อนจะลงรายละเอียด:

นำเข้า json

จาก agt นำเข้า AlexaGadget

คลาส MyGadget (AlexaGadget):

def _init_ (ตัวเอง):

สุดยอด()._init_()

def on_custom_mygadget_alexatopi (ตัวเอง, คำสั่ง):

payload = json.loads(directive.payload.decode("utf-8")) print("ข้อมูลที่ได้รับ: " + str(payload)) write_text(str(payload['data']['person']['value ']))

def on_custom_mygadget_pitoalexa (ตัวเอง, คำสั่ง):

payload = json.loads(directive.payload.decode("utf-8")) พิมพ์ ("ข้อมูลที่ได้รับ: " + str (payload)) payload = {'data': "โพรบอ่าน " + str (get_temp (payload) ['data'] ['sensor_num']['value'])) + " องศา."} self.send_custom_event('Custom. MyGadget', 'PiToAlexa', เพย์โหลด) MyGadget().main()

ขั้นแรก คุณจะสังเกตเห็นว่ามันเรียกฟังก์ชันสองอย่าง: write_text() และ get_temp() ในโค้ดของฉัน ฉันกำหนดฟังก์ชันเหล่านี้ในไฟล์เดียวกัน แต่ฟังก์ชันเหล่านี้ขึ้นอยู่กับฮาร์ดแวร์ของฉัน ดังนั้นฉันจึงเลือกที่จะละเว้น ฉันได้แนบไฟล์นี้พร้อมกับฟังก์ชันที่กำหนดไว้เพื่อพิมพ์และส่งคืนข้อมูลจำลอง ในกรณีที่คุณต้องการเรียกใช้โค้ดที่แน่นอนนี้ ฉันขอแนะนำให้ทดสอบด้วยรหัสที่แน่นอนนี้ก่อนที่คุณจะแก้ไขเพื่อให้ทำงานกับโครงการของคุณ ฉันได้แนบไฟล์.ini มาด้วย แต่ให้แน่ใจว่าคุณเข้าไปข้างในและเปลี่ยนรหัสลับและแกดเจ็ต ฟังก์ชันระดับบนสุดรับข้อมูลที่ส่งผ่านมาจาก Alexa ฟังก์ชันด้านล่างรับข้อมูลในรูปแบบเดียวกัน แต่อุปกรณ์ Alexa จะรอเป็นเวลาห้าวินาทีเพื่อให้เหตุการณ์ถูกส่งกลับพร้อมเพย์โหลดของตัวเอง เพย์โหลดนี้พิเศษตรงที่อุปกรณ์ Alexa จะพูดเนื้อหา

เมื่อคุณมีไฟล์เหล่านี้แล้ว ให้ไปที่โฟลเดอร์ "my_project" และเรียกใช้ไฟล์ python

sudo รีบูต

cd /home/pi/my_project sudo python3./my_gadget.py

หากนี่เป็นครั้งแรกที่คุณเรียกใช้โปรแกรม คุณจะต้องจับคู่กับอุปกรณ์ Echo ของคุณ ตรวจสอบให้แน่ใจว่าอุปกรณ์ Echo ของคุณอยู่ใกล้กับ Raspberry Pi เนื่องจากเราต้องอนุญาตการเชื่อมต่อบลูทูธ

ในแอป Alexa บนอุปกรณ์มือถือของคุณ คลิก "อุปกรณ์" ที่มุมล่างขวา

คลิก "Echo & Alexa" ที่ด้านบนซ้าย

คลิกที่อุปกรณ์ Echo ของคุณ

ในส่วน "ไร้สาย" ให้แตะ "อุปกรณ์บลูทูธ"

แตะ "จับคู่อุปกรณ์ใหม่" แล้วคุณจะเห็นแกดเจ็ตของคุณในรายการ

แตะที่แกดเจ็ตของคุณ คุณควรเห็นรายงาน Pi ว่าจับคู่สำเร็จแล้ว

ในขณะที่ดูผลลัพธ์บน Pi ของคุณ ให้ลองสั่งเสียงกับ Echo:

คุณ: "Alexa ขอให้อุปกรณ์ของฉันตรวจสอบอุณหภูมิจากเซ็นเซอร์ตัวหนึ่ง"

หากทุกอย่างทำงานอย่างถูกต้อง คุณควรได้ยิน:

Echo: "โพรบอ่าน 120.505 องศา"

คุณ: "Alexa บอกแกดเจ็ตของฉันให้เขียน George Washington"

Pi ควรพิมพ์:

ข้อมูลที่ได้รับ: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

จอร์จวอชิงตัน"

ขั้นตอนที่ 5: การสรุป

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

ตอนนี้คุณหวังว่าจะมีบางอย่างที่ใช้งานได้ คุณควรลองปรับแต่งสิ่งนี้เพื่อทำให้โครงการของคุณมีความสามารถมากขึ้น จำไว้ว่าคุณสามารถแก้ไข Intents ใน Alexa Developer Console ได้อย่างง่ายดาย และสล็อตทั้งหมดที่คุณใช้จะถูกส่งต่อไปยัง Pi ของคุณในเพย์โหลด นอกจากนี้ คุณสามารถให้ Alexa พูดอะไรก็ได้ที่คุณต้องการโดยเพียงแค่แก้ไขเพย์โหลดที่คุณส่งกลับในกิจกรรมจากโค้ด Raspberry Pi ของคุณ

โปรดทราบว่าบทช่วยสอนนี้ไม่ได้มีวัตถุประสงค์เพื่อเป็นทางออกสุดท้ายสำหรับความสามารถทั้งหมดที่คุณต้องการด้วย Alexa Gadget มีการจำกัดโดยเจตนาเพื่อให้คุณมีฟังก์ชันง่ายๆ สองฟังก์ชันสำหรับส่งข้อมูลในแต่ละทิศทางระหว่าง Alexa และ Gadget หากคุณสนใจที่จะสร้างโมเดลการโต้ตอบที่ซับซ้อนมากขึ้น เราขอแนะนำให้คุณอ่านไฟล์ readme ทั้งหมดใน https://github.com/alexa/Alexa-Gadgets-Raspberry-P… และลองตัวอย่างทั้งหมดที่มีให้. ฉันยังขอแนะนำให้คุณอ่านเอกสารประกอบของ Alexa Gadgets Toolkit และ Alexa Skills Kit

แนะนำ: