Isi kandungan:

Tambahkan Custom Alexa Control ke Projek Raspberry Pi: 5 Langkah
Tambahkan Custom Alexa Control ke Projek Raspberry Pi: 5 Langkah

Video: Tambahkan Custom Alexa Control ke Projek Raspberry Pi: 5 Langkah

Video: Tambahkan Custom Alexa Control ke Projek Raspberry Pi: 5 Langkah
Video: I Made a 3D Copy of My Emo Robot🤖🧬#emorobot#livingai #3dprinting#anker #fun#shorts 2024, Julai
Anonim
Tambahkan Custom Alexa Control ke Projek Raspberry Pi
Tambahkan Custom Alexa Control ke Projek Raspberry Pi

Projek ini ditujukan untuk sesiapa sahaja yang mempunyai projek Raspberry Pi yang menggunakan Python yang ingin menambahkan kawalan suara melalui peranti Amazon Echo yang ada. Anda tidak perlu menjadi programmer yang berpengalaman, tetapi anda harus selesa menggunakan baris perintah dan menyesuaikan kod yang ada agar sesuai dengan keperluan anda.

Pada mulanya saya memulakan projek untuk membolehkan Raspberry Pi saya dikendalikan suara dengan Alexa sehingga dapat memanaskan air dalam cerek ke suhu tertentu. Walaupun interaksi yang saya mahukan cukup mudah (lulus satu nombor dari Alexa ke Raspberry Pi), ia memerlukan banyak kerja untuk mencapai tahap itu dari tutorial yang ada. Saya harap tutorial ini menjadikan proses itu secepat mungkin untuk yang lain.

Dalam contoh saya, saya bermula dengan Raspberry Pi Zero W dengan Raspbian. Saya mempunyai program Python3 pada Pi saya yang mampu menulis teks ke paparan SPI, dan saya mempunyai probe termometer yang boleh saya baca. Bagi anda, program ini boleh jadi hampir apa-apa, tetapi idenya adalah bahawa anda mungkin mempunyai beberapa peranti input yang ingin anda baca melalui Alexa dan / atau beberapa peranti output yang ingin anda kendalikan menggunakan Alexa.

Tujuannya adalah untuk pergi dari program asas seperti yang dijelaskan di atas ke peranti yang dapat anda kendalikan dengan mudah dengan Echo saya. Dengan andaian anda mempunyai perkakasan ini, projek ini tidak akan membebankan anda. Pada akhirnya, anda akan sampai ke tahap di mana anda boleh mengatakan perkara seperti:

Saya: "Alexa, minta alat saya memeriksa suhu pada sensor 1."

Respons Alexa: "Probe membaca 72.31 darjah."

atau

Saya: "Alexa, beritahu alat saya untuk menulis George Washington"

Respons: Paparan yang disambungkan ke Raspberry Pi saya sekarang berbunyi "George Washington"

Di bahagian seterusnya, saya akan menerangkan apa yang perlu berlaku di sebalik tabir untuk menjayakannya. Sekiranya anda hanya ingin membuat ini berfungsi pada projek anda dan tidak peduli bagaimana ia berfungsi, jangan lewatkannya (walaupun mungkin menyukarkannya jika ada yang tidak kena).

Langkah 1: Latar belakang

Latar belakang
Latar belakang

Dalam gambar ini (kredit: https://developer.amazon.com/en-US/docs/alexa/alex… kita dapat melihat seni bina umum untuk Gadget Alexa.

Apabila anda mengatakan sesuatu ke peranti Echo anda, ia akan menghantar audio ke Alexa Cloud, di mana ia diproses dan di mana respons dihasilkan untuk memberi respons kepada anda. Apabila anda bertanya bagaimana cuaca, hanya kedua-duanya dalam komunikasi. Sekarang anggap anda mahu menambahkan kawalan suara ke salah satu projek kecil anda pada Raspberry Pi. Memproses semua yang ada di dalamnya memerlukan perkakasan yang signifikan dan pangkalan data yang sangat canggih untuk menyelesaikan sesuatu. Penyelesaian yang lebih baik adalah dengan memanfaatkan Alexa Cloud, yang sangat canggih dan sangat pandai menangani corak ucapan yang kompleks. Alat Alexa menyediakan cara yang baik untuk anda melakukan ini.

Gadget Alexa berkomunikasi dengan peranti Echo menggunakan bluetooth. Setelah hubungan ini terjalin, kedua-duanya saling menyampaikan mesej menggunakan pengekodan UTF-8. Apabila Echo menyampaikan sesuatu ke alat, ia dipanggil arahan. Arah yang lain disebut sebagai peristiwa. Sebelum memasuki aliran sebenar semua ini, kita harus memperkenalkan elemen penting lain: Kemahiran Alexa khusus.

Alexa membolehkan pemaju membuat kemahiran tersuai mereka sendiri, yang membolehkan mereka merancang interaksi dan tingkah laku mereka sendiri untuk digunakan pada semua peranti Echo. Sebagai contoh, pembangun boleh membuat kemahiran khusus untuk memberitahu anda jarak antara dua lapangan terbang di AS. Seorang pengguna akan mengatakan: "Alexa, tanyakan kalkulator jarak khusus saya berapa jarak antara LAX dan JFK" dan ia boleh bertindak balas dengan "2475 batu". Bagaimana ia dapat dilakukan? Apabila pembangun membuat kemahiran khusus, mereka menentukan apa yang disebut "maksud khusus" dengan "ujaran sampel" yang mengandungi "slot". Sebagai contoh, dalam kemahiran ini saya mungkin mempunyai maksud "calc_dist" untuk mengira jarak antara dua titik. Ucapan contoh adalah "berapa jarak antara {slot1} dan {slot2}" atau "sejauh mana antara {slot1} dan {slot2}". Slot yang ditunjukkan dalam kurungan mempunyai jenis tertentu. Dalam kes ini, jenis tersebut adalah kod lapangan terbang seperti LAX, JFK, BOS, ATL. Apabila pengguna meminta kemahiran khusus, Cloud Alexa cuba memadankan apa yang pengguna katakan dengan maksud khusus menggunakan ujaran sampel yang disediakan dan cuba mencari nilai slot yang sah untuk permintaan tersebut. Dalam contoh ini, pengguna akan mengetahui maksud "calc_dist" dan slot1 adalah LAX dan slot2 adalah JFK. Pada ketika ini, Alexa Cloud menyerahkan kerja kepada kod pemaju sendiri. Pada dasarnya, ia memberitahu pemaju kod apa maksud yang diterima dan semua nilai slot, antara lain.

Pembangun dapat memutuskan di mana kod mereka tinggal, tetapi pilihan yang sangat popular adalah menggunakan fungsi AWS Lambda. Sekiranya anda tidak tahu apa itu, pada dasarnya ini adalah perkhidmatan yang membolehkan anda memuat naik kod yang dapat dijalankan pada bila-bila masa dan kemudian mengenakan caj hanya pada berapa lama kod anda dijalankan. Sekiranya kita meneruskan contoh kita, kod pembangun mungkin merupakan fungsi Python yang menerima dua kod lapangan terbang, mencari lokasi mereka, mengira jarak, dan kemudian mengirim respons kembali ke Awan Alexa untuk menyampaikan sesuatu kepada pengguna. Cloud Alexa kemudian akan menghantar maklumat ucapan itu kembali ke peranti pengguna, dan mereka akan mendapat jawapannya.

Sekarang kita boleh kembali ke alat. Kami dapat membuat kemahiran khusus yang dirancang untuk bekerja secara khusus dengan alat. Pembangun boleh menulis kemahiran yang menghantar arahan ke alat yang bersambung. Arahan itu mempunyai muatan yang dapat digunakan namun diperlukan oleh alat. Kemahiran itu juga dapat mengirim arahan dan kemudian mendengarkan acara dari alat supaya kod kemahiran dapat mengakses maklumat yang dihantar dari alat.

Menetapkan aliran ini memungkinkan membuat alat yang sangat kuat kerana alat yang murah dapat memiliki kemampuan untuk berkomunikasi dengan kod di awan dan untuk bertindak balas terhadap perintah suara menggunakan beberapa pengenalan suara terbaik yang tersedia.

Harus diingat bahawa kebanyakan kemahiran memungkinkan pelbagai cara berinteraksi dengan mereka. Sebagai contoh, pengguna mungkin langsung memasuki maksud dengan mengatakan "Alexa, tanyakan kalkulator jarak khusus saya berapa jarak antara LAX dan JFK" (disebut pemanggilan satu kali) atau mereka mungkin hanya menggunakan niat pelancaran: "Alexa, buka kalkulator jarak khusus saya ". Contoh terakhir ini biasanya diikuti oleh Alexa yang bertindak balas dengan meminta lebih banyak maklumat. Tutorial ini dengan sengaja menghilangkan sokongan untuk yang terakhir. Lebih khusus lagi, tanpa mengubah fungsi Lambda, anda hanya boleh menggunakan kemahiran menggunakan pemanggilan satu pukulan. Pilihan reka bentuk ini membolehkan model menjadi lebih sederhana (tidak perlu menyokong tujuan pelancaran atau aliran percakapan), dan saya mendapati bahawa saya biasanya ingin berinteraksi dengan alat saya menggunakan doa satu kali kerana mereka biasanya lebih cepat.

Langkah 2: Daftarkan Gadget di Alexa Developer Service Console

Berikut adalah penerangan mengenai langkah-langkah yang diperlukan. Saya telah membuat video yang setara yang menunjukkan cara melakukan semua langkah ini. Anda boleh menggunakan salah satu atau kedua-duanya untuk menyelesaikan langkah ini.

  1. Navigasi ke
  2. Sekiranya anda belum mempunyai akaun percuma, buatlah
  3. Klik pada "Produk"
  4. Isi label dan pilih "Alexa Gadget"
  5. Isi apa sahaja yang anda mahukan untuk selebihnya bidang
  6. Klik Selesai

Langkah 3: Buat Fungsi LambS AWS dan Kemahiran Tersuai

Buat Kemahiran Tersuai di Alexa Skills Kit Developer Console

Kod untuk tutorial ini boleh didapati di sini

Sebelum menyelesaikan langkah ini, anda perlu membuat fail.zip yang mengandungi pakej penyebaran untuk fungsi AWS Lambda seperti yang ditunjukkan dalam tutorial di sini.

  1. Muat turun folder "lambda" dari Github saya yang mengandungi "lambda_function.py" dan "requirements.txt"
  2. Buka terminal dan ubah direktori semasa untuk berada di dalam folder ini.
  3. Jalankan urutan berikut:

pemasangan pip -r syarat.txt -t skill_env

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

Fail.zip anda sekarang akan berada di direktori di mana folder lambda berada dan akan dipanggil "skill-code.zip".

Catatan mengenai kos hosting di AWS: Tutorial ini memerlukan anda mempunyai akaun AWS (percuma untuk dibuat). Fungsi Lambda menelan belanja yang tinggi, namun, harga semasa mereka di wilayah N. Virginia adalah $ 0.000000208 per 100ms penggunaan dengan memori 128MB. Sebagai rujukan, setiap permintaan kemahiran saya menanggung penggunaan sekitar 800ms pada peringkat ini. Untuk mengumpulkan wang berjumlah $ 1.00USD, anda harus menggunakan fungsi ini sekitar 600, 000 kali yang (jika anda memerlukan 5 saat setiap permintaan) akan membawa anda lebih dari 34 hari tanpa henti memanggil fungsi anda. Kos tidak boleh menjadi masalah besar melainkan anda menerbitkan kemahiran anda dan sebilangan besar orang mula menggunakannya. Sekiranya anda bimbang untuk mendapatkan bil di AWS, pertimbangkan untuk menyiapkan penggera penggunaan yang memberitahu anda jika penggunaan melepasi ambang yang ditentukan.

Berikut adalah penerangan mengenai langkah-langkah yang diperlukan. Saya telah membuat video yang setara yang menunjukkan cara melakukan semua langkah ini. Anda boleh menggunakan salah satu atau kedua-duanya untuk menyelesaikan langkah ini.

  1. Navigasi ke https://aws.amazon.com/ dan log masuk ke konsol atau buat akaun percuma jika anda tidak memilikinya
  2. Cari dan klik Lambda di bawah perkhidmatan
  3. Klik "Buat Fungsi"
  4. Pilih "Pengarang dari awal", beri namanya, dan pilih versi Python 3 terbaru untuk waktu proses
  5. Tukar "edit kod sebaris" ke "muat naik fail.zip" dan pilih fail.zip yang dibuat di atas
  6. Di tetingkap baru, arahkan ke https://developer.amazon.com/alexa/console/ask dan log masuk
  7. Klik "Buat Kemahiran"
  8. Labelkannya, pilih model "Khusus" dan "Sediakan sendiri" dan klik "Buat Kemahiran"
  9. Klik "Mula dari Gores" dan klik "Pilih"
  10. Di bawah "Niat", klik "Tambah"
  11. Buat maksud tersuai yang disebut "alexa_to_pi" dan isikan "tulis {orang}" sebagai contoh ucapan
  12. Buat slot niat yang disebut "orang" dengan jenis "AMAZON. Person"
  13. Buat maksud khusus yang disebut "pi_to_alexa" dan isi "periksa suhu dari sensor {sensor_num}
  14. Buat slot maksud yang disebut "sensor_num" dengan jenis "AMAZON. NUMBER"
  15. Di bawah Antaramuka, hidupkan "Pengawal Antaramuka Tersuai"
  16. Di bawah Titik Akhir, pilih "AWS Lambda ARN" dan salin "ID Kemahiran Anda"
  17. Navigasi kembali ke AWS Console
  18. Klik "Tambah Pencetus"
  19. Pilih "Kit Kemahiran Alexa", periksa "Aktifkan" di bawah pengesahan ID Kemahiran, tampal di ID Kemahiran yang baru anda salin dan klik tambah
  20. Salin Lambda ARN di sudut kanan atas
  21. Navigasi Kembali ke Alexa Developer Console dan tampal Lambda ARN ke dalam bidang "Wilayah Lalai"
  22. Di bawah Permintaan, tetapkan Nama Peminta Kemahiran menjadi "alat saya"
  23. Klik "Simpan Model" dan kemudian "Bina Model"
  24. Klik "Uji" di tab atas dan ubah pemilih dari "Mati" menjadi "Pembangunan"
  25. Perhatikan bahawa log untuk fungsi Lambda terdapat dalam perkhidmatan "CloudWatch" di AWS.

Langkah 4: Sediakan Kod pada Raspberry Pi Anda

Agar Raspberry Pi anda dapat berkomunikasi dengan peranti Alexa, ia memerlukan beberapa kod untuk memudahkan menyampaikan maklumat melalui bluetooth dan mengekalkan sambungan itu, selain beberapa fail lain. Cara termudah untuk memulakan dengan fail paling terkini dari Amazon adalah dengan mengklon repositori Raspberry Pi Gadget mereka. Navigasi ke direktori projek semasa anda dan jalankan

git klon

Ini akan memuatkan keseluruhan repositori mereka dengan semua kod yang diperlukan ke Pi anda. Ia mempunyai beberapa contoh projek yang menunjukkan beberapa kemampuan Alexa Gadgets. Sekiranya anda mahukan lebih banyak maklumat, lihat readme di halaman Github mereka.

Jalankan fungsi persediaan mereka untuk mengatur semuanya.

cd / rumah / pi / Alexa-Gadget-Raspberry-Pi-Contoh

sudo python3 launch.py --setup

Ikuti arahan dan jawab "y" ketika ditanya sama ada anda ingin mengkonfigurasi menggunakan kelayakan Gadget anda. Ingat ID Amazon dan Rahsia Gadget daripada menyediakan alat anda di konsol pembangun kerana ia akan diminta di sini. Saya memilih mod penghantaran "bt" untuk Raspberry Pi Zero W. BLE saya tidak disokong oleh semua peranti Echo yang lebih tua, tetapi anda dapat melihat apa yang mampu dimiliki oleh perkakasan anda. Sekiranya anda menggunakan Pi dalam mod Desktop, Amazon mengesyorkan mengklik kanan pada ikon bluetooth di kanan atas dan mengklik "Buang" Bluetooth "dari Panel" untuk mengelakkan masalah sambungan.

Catatan: langkah ini mungkin memerlukan sedikit masa bergantung pada berapa banyak yang perlu dipasang.

Sekarang anda akan mempunyai semua fail sokongan yang diperlukan untuk kembali ke projek anda dan mula menambahkan fungsi untuk membolehkan komunikasi dengan Echo anda.

Sekiranya anda memilih, anda boleh memadam folder "contoh" di "Alexa-Gadgets-Raspberry-Pi-Samples / src"

Anda boleh mempunyai kod projek anda di mana sahaja anda mahu, tetapi saya akan membuat folder di direktori utama untuk itu, sebagai alternatif anda boleh memuat turun folder dengan kod dari Github saya, pastikan anda mengedit fail.ini seperti yang dijelaskan di bawah.

cd / rumah / pi

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

Saya sekarang telah membuat dua fail dalam folder bernama "my_project". Fail.ini penting. Pastikan ia mengandungi yang berikut dan gantian dalam ID Amazon dan Rahsia Gadget anda:

[Tetapan Gadget]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] Custom. MyGadget = 1.0

Sekarang, mari kita lihat fail python sebelum masuk ke perinciannya:

import json

dari agt import AlexaGadget

kelas MyGadget (AlexaGadget):

def _init _ (diri):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (diri, arahan):

payload = json.loads (Directive.payload.decode ("utf-8")) print ("Data yang diterima:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (diri, arahan):

payload = json.loads (Directive.payload.decode ("utf-8")) print ("Data yang diterima:" + str (payload)) payload = {'data': "Probe berbunyi" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "darjah."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', muatan) MyGadget (). main ()

Pertama anda akan melihat bahawa ia memanggil dua fungsi: write_text () dan get_temp (). Dalam kod saya, saya menentukan fungsi ini dalam fail yang sama, tetapi mereka bergantung pada perkakasan saya jadi saya memilih untuk menghilangkannya. Saya telah melampirkan fail ini dengan fungsi yang ditentukan untuk hanya mencetak dan mengembalikan data palsu sekiranya anda ingin menjalankan kod tepat ini. Saya akan mencadangkan pengujian dengan kod tepat ini sebelum anda mengubahnya untuk berfungsi dengan projek anda. Saya juga telah melampirkan fail.ini, tetapi pastikan anda masuk dan menukar rahsia ID dan alat. Fungsi teratas menerima data yang dihantar dari Alexa. Fungsi bawah menerima data dalam format yang sama, tetapi peranti Alexa akan menunggu selama lima saat sehingga sesuatu peristiwa dapat dilanjutkan dengan muatannya sendiri. Muatan ini istimewa kerana peranti Alexa akan menyebutkan kandungannya.

Setelah anda mempunyai fail-fail ini, arahkan ke folder "my_project" dan jalankan fail python.

rebo sudo

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

Sekiranya ini adalah kali pertama anda menjalankan program, anda perlu memasangkannya ke peranti Echo anda. Pastikan peranti Echo anda berada di dekat Raspberry Pi, kerana kita perlu membenarkan sambungan bluetooth.

Dalam aplikasi Alexa pada peranti mudah alih anda, klik "peranti" di sudut kanan bawah.

Klik "Echo & Alexa" di kiri atas.

Klik pada peranti Echo anda.

Di bawah "WIRELESS", ketuk "Peranti Bluetooth".

Ketik "PAIR A DEVICE BARU" dan anda akan melihat alat anda dalam senarai.

Ketik alat anda. Anda harus melihat laporan Pi yang berjaya digandingkan.

Semasa menonton output pada Pi anda, cuba berikan arahan suara kepada Echo:

Anda: "Alexa, minta alat saya memeriksa suhu dari sensor satu"

Sekiranya semuanya berfungsi dengan baik, anda mesti mendengar:

Echo: "Probe membaca 120.505 darjah."

Anda: "Alexa, beritahu alat saya untuk menulis George Washington."

Pi harus mencetak:

Data yang diterima: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

Langkah 5: Mengemas

Video yang ditunjukkan di sini adalah contoh alat yang berfungsi dengan membaca suhu (probe yang sama dalam F vs C) dan menulis nama ke paparan sederhana.

Sekarang semoga anda berjaya, anda harus berusaha dan menyesuaikannya agar projek anda lebih mampu. Ingat bahawa anda dapat dengan mudah mengedit maksud di Alexa Developer Console dan semua slot yang anda gunakan akan diserahkan ke Pi anda dalam muatan. Selain itu, anda boleh meminta Alexa mengatakan apa sahaja yang anda mahukan dengan hanya mengedit muatan yang anda lalui dalam acara dari kod Raspberry Pi anda.

Harap maklum bahawa tutorial ini tidak bertujuan untuk menjadi penyelesaian terakhir untuk semua kemampuan yang anda mahukan dengan Gadget Alexa. Dengan sengaja dibatasi untuk memberi anda dua fungsi mudah untuk menyampaikan data ke setiap arah antara Alexa dan Gadget. Sekiranya anda berminat untuk membina model interaksi yang lebih canggih, saya menggalakkan anda membaca semua fail readme di https://github.com/alexa/Alexa-Gadgets-Raspberry-P… dan mencuba semua contoh yang mereka berikan. Saya juga mencadangkan agar anda membaca dokumentasi untuk Alexa Gadgets Toolkit dan Alexa Skills Kit.

Disyorkan: