Daftar Isi:

Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi: 5 Langkah
Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi: 5 Langkah

Video: Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi: 5 Langkah

Video: Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi: 5 Langkah
Video: Arduino project 😎^ Arduino #arduino #2022 #2021 #2023 #dc #arduinoproject #diy #foryou 2024, Juli
Anonim
Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi
Tambahkan Kontrol Alexa Kustom ke Proyek Raspberry Pi

Proyek ini ditujukan untuk siapa saja yang memiliki proyek Raspberry Pi yang menggunakan Python yang ingin menambahkan kontrol suara melalui perangkat Amazon Echo yang ada. Anda tidak perlu menjadi programmer berpengalaman, tetapi Anda harus nyaman menggunakan baris perintah dan mengadaptasi kode yang ada agar sesuai dengan kebutuhan Anda.

Saya awalnya memulai sebuah proyek untuk memungkinkan Raspberry Pi saya dikontrol suara dengan Alexa sehingga bisa memanaskan air dalam ketel ke suhu tertentu. Meskipun interaksi yang saya inginkan cukup sederhana (lewati satu nomor dari Alexa ke Raspberry Pi), butuh banyak usaha untuk mencapai keadaan itu dari tutorial yang ada. Saya harap tutorial ini akan membuat proses itu secepat mungkin untuk orang lain.

Dalam contoh saya, saya memulai dengan Raspberry Pi Zero W dengan Raspbian. Saya memiliki program Python3 di Pi saya yang mampu menulis teks ke tampilan SPI, dan saya memiliki probe termometer yang dapat saya baca. Untuk Anda, program ini bisa apa saja, tetapi idenya adalah Anda mungkin memiliki beberapa perangkat input yang ingin Anda baca melalui Alexa dan/atau beberapa perangkat output yang ingin Anda kendalikan menggunakan Alexa.

Tujuannya adalah untuk beralih dari program dasar seperti yang dijelaskan di atas ke perangkat yang dapat Anda kendalikan dengan mudah dengan Echo saya. Dengan asumsi Anda sudah memiliki perangkat keras ini, proyek ini seharusnya tidak membebani Anda dengan uang. Pada akhirnya, Anda akan sampai pada titik di mana Anda dapat mengatakan hal-hal seperti:

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

Tanggapan Alexa: "Probe membaca 72,31 derajat."

atau

Saya: "Alexa, beri tahu gadget saya untuk menulis George Washington"

Tanggapan: Layar yang terhubung ke Raspberry Pi saya sekarang bertuliskan "George Washington"

Di bagian selanjutnya, saya akan menjelaskan apa yang perlu terjadi di balik layar untuk membuat ini berhasil. Jika Anda hanya ingin ini bekerja pada proyek Anda dan tidak peduli bagaimana cara kerjanya, jangan ragu untuk melewatinya (meskipun mungkin akan lebih sulit jika terjadi kesalahan).

Langkah 1: Latar Belakang

Latar belakang
Latar belakang

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

Saat Anda mengatakan sesuatu ke perangkat Echo Anda, itu mengirimkan audio ke Alexa Cloud, di mana itu diproses dan di mana respons dihasilkan untuk merespons Anda. Ketika Anda bertanya apa cuacanya, hanya mereka berdua yang berkomunikasi. Sekarang anggaplah Anda ingin menambahkan kontrol suara ke salah satu proyek kecil Anda di Raspberry Pi. Memproses semua yang ada di dalamnya akan membutuhkan perangkat keras yang signifikan dan basis kode yang sangat canggih untuk menjalankannya. Solusi yang lebih baik adalah dengan memanfaatkan Alexa Cloud, yang sangat canggih dan telah menjadi sangat baik dalam menangani pola bicara yang kompleks. Alexa Gadgets menyediakan cara yang baik bagi Anda untuk melakukan ini.

Gadget Alexa berkomunikasi dengan perangkat Echo menggunakan bluetooth. Setelah koneksi ini dibuat, keduanya saling mengirimkan pesan menggunakan pengkodean UTF-8. Ketika Echo melewati sesuatu ke gadget, itu disebut direktif. Arah lain disebut sebagai peristiwa. Sebelum masuk ke alur yang tepat dari semua ini, kita harus memperkenalkan elemen kunci lain: Keterampilan Alexa khusus.

Alexa memungkinkan pengembang untuk membuat keterampilan khusus mereka sendiri, yang memungkinkan mereka untuk merancang interaksi dan perilaku mereka sendiri untuk digunakan di semua perangkat Echo. Misalnya, pengembang dapat membuat keterampilan khusus untuk memberi tahu Anda jarak antara dua bandara di AS. Seorang pengguna akan berkata: "Alexa, tanyakan kalkulator jarak kustom saya berapa jarak antara LAX dan JFK" dan itu bisa menjawab dengan "2.475 mil". Bagaimana cara melakukannya? Saat pengembang membuat keterampilan khusus, mereka mendefinisikan apa yang disebut "niat khusus" dengan "contoh ucapan" yang berisi "slot". Misalnya, dalam keterampilan ini saya mungkin memiliki maksud "calc_dist" untuk menghitung jarak antara dua titik. Contoh ucapannya adalah "berapa jarak antara {slot1} dan {slot2}" atau "seberapa jauh antara {slot1} dan {slot2}". Slot yang ditunjukkan dalam tanda kurung memiliki tipe tertentu. Dalam hal ini jenis tersebut akan menjadi kode bandara seperti LAX, JFK, BOS, ATL. Saat pengguna meminta keterampilan khusus, Alexa Cloud mencoba mencocokkan apa yang dikatakan pengguna dengan maksud khusus menggunakan contoh ucapan yang disediakan dan mencoba menemukan nilai slot yang valid untuk permintaan itu. Dalam contoh ini, akan ditemukan bahwa pengguna menginginkan maksud "calc_dist" dan bahwa slot1 adalah LAX dan slot2 adalah JFK. Pada titik ini, Alexa Cloud meneruskan pekerjaan ke kode pengembang sendiri. Pada dasarnya, ini memberi tahu kode pengembang apa maksud yang diterimanya dan apa semua nilai slotnya, di antara detail lainnya.

Pengembang dapat memutuskan di mana kode mereka berada, tetapi opsi yang sangat populer adalah menggunakan fungsi AWS Lambda. Jika Anda tidak tahu apa itu, pada dasarnya ini adalah layanan yang memungkinkan Anda mengunggah kode yang dapat dijalankan kapan saja dan kemudian menagih Anda hanya untuk jumlah waktu kode Anda dijalankan. Jika kita melanjutkan dengan contoh kita, kode pengembang mungkin merupakan fungsi Python yang menerima dua kode bandara, mencari lokasi mereka, menghitung jarak, dan kemudian mengirimkan respons kembali ke Alexa Cloud untuk menyampaikan sesuatu kepada pengguna. Alexa Cloud kemudian akan mengirim informasi ucapan itu kembali ke perangkat pengguna, dan mereka akan mendapatkan jawabannya.

Sekarang kita bisa kembali ke gadget. Kami dapat membuat keterampilan khusus yang dirancang untuk bekerja secara khusus dengan gadget. Pengembang dapat menulis keterampilan yang mengirimkan arahan ke gadget yang terhubung. Arahan tersebut memiliki muatan yang dapat digunakan namun dibutuhkan oleh gadget. Skill tersebut juga dapat mengirimkan directive kemudian mendengarkan suatu event dari gadget sehingga kode skill tersebut dapat mengakses informasi yang dikirimkan dari gadget tersebut.

Menetapkan aliran ini memungkinkan menciptakan alat yang sangat kuat karena gadget murah dapat memiliki kemampuan untuk berkomunikasi dengan kode di awan dan untuk menanggapi perintah suara menggunakan beberapa pengenalan suara terbaik yang tersedia.

Perlu dicatat bahwa sebagian besar keterampilan memungkinkan berbagai cara untuk berinteraksi dengan mereka. Misalnya, pengguna mungkin langsung masuk ke maksud dengan mengatakan "Alexa, tanyakan kalkulator jarak kustom saya berapa jarak antara LAX dan JFK" (disebut doa satu kali) atau mereka mungkin hanya menggunakan maksud peluncuran: "Alexa, buka kalkulator jarak kustom saya". Contoh terakhir ini biasanya diikuti oleh Alexa yang merespons dengan prompt untuk informasi lebih lanjut. Tutorial ini sengaja menghilangkan dukungan untuk yang terakhir. Lebih khusus lagi, tanpa memodifikasi fungsi Lambda, Anda hanya dapat memanggil keterampilan menggunakan pemanggilan satu kali. Pilihan desain ini memungkinkan model menjadi lebih sederhana (tidak harus mendukung maksud peluncuran atau alur percakapan), dan saya telah menemukan bahwa saya biasanya ingin berinteraksi dengan gadget saya menggunakan permintaan satu kali karena biasanya lebih cepat.

Langkah 2: Daftarkan Gadget di Konsol Pengembang Layanan Suara Alexa

Berikut penjelasan langkah-langkah yang diperlukan. Saya telah membuat video yang setara yang menunjukkan cara melakukan semua langkah ini. Anda dapat menggunakan salah satu, atau keduanya, untuk menyelesaikan langkah ini.

  1. Arahkan ke
  2. Jika Anda belum memiliki akun gratis, buatlah
  3. Klik "Produk"
  4. Isi label dan pilih "Gadget Alexa"
  5. Isi apa pun yang Anda inginkan untuk sisa bidang
  6. Klik Selesai

Langkah 3: Buat Fungsi AWS Lambda dan Keterampilan Kustom

Buat Keterampilan Kustom di Konsol Pengembang Alexa Skills Kit

Kode untuk tutorial ini dapat ditemukan di sini

Sebelum menyelesaikan langkah ini, Anda perlu membuat file.zip yang berisi paket penerapan untuk fungsi AWS Lambda seperti yang ditunjukkan dalam tutorial di sini.

  1. Unduh folder "lambda" dari Github saya yang berisi "lambda_function.py" dan "requirements.txt"
  2. Buka terminal dan ubah direktori saat ini menjadi di dalam folder ini.
  3. Jalankan urutan berikut:

pip install -r requirements.txt -t skill_env

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

File.zip Anda sekarang akan berada di direktori tempat folder lambda berada dan akan disebut "skill-code.zip".

Catatan tentang biaya hosting di AWS: Tutorial ini mengharuskan Anda memiliki akun AWS (gratis untuk dibuat). Fungsi Lambda memang membutuhkan biaya, namun, harga mereka saat ini di wilayah N. Virginia adalah $0,000000208 per 100 ms penggunaan dengan memori 128MB. Sebagai referensi, setiap permintaan keahlian saya membutuhkan sekitar 800 ms penggunaan di tingkat ini. Untuk mengumpulkan tagihan sebesar $1,00USD, Anda harus menjalankan fungsi ini sekitar 600.000 kali yang (jika Anda membutuhkan 5 detik per doa) akan membawa Anda lebih dari 34 hari tanpa henti memanggil fungsi Anda. Biaya seharusnya tidak menjadi masalah yang signifikan kecuali Anda mempublikasikan keahlian Anda dan sejumlah besar orang mulai menggunakannya. Jika Anda khawatir tentang mendapatkan tagihan di AWS, pertimbangkan untuk menyiapkan alarm penggunaan yang memberi tahu Anda jika penggunaan melewati ambang batas yang ditentukan.

Berikut penjelasan langkah-langkah yang diperlukan. Saya telah membuat video yang setara yang menunjukkan cara melakukan semua langkah ini. Anda dapat menggunakan salah satu, atau keduanya untuk menyelesaikan langkah ini.

  1. Navigasikan ke https://aws.amazon.com/ dan masuk ke konsol atau buat akun gratis jika Anda belum memilikinya
  2. Cari dan klik Lambda di bawah layanan
  3. Klik "Buat Fungsi"
  4. Pilih "Penulis dari awal", beri nama, dan pilih versi Python 3 terbaru untuk runtime
  5. Ubah "edit kode sebaris" menjadi "unggah file.zip" dan pilih file.zip yang dibuat di atas
  6. Di jendela baru, navigasikan ke https://developer.amazon.com/alexa/console/ask dan masuk
  7. Klik "Buat Keterampilan"
  8. Beri label, pilih model "Kustom" dan "Sediakan milik Anda" dan klik "Buat Keterampilan"
  9. Klik "Mulai dari Awal" dan klik "Pilih"
  10. Di bawah "Niat", klik "Tambah"
  11. Buat maksud khusus yang disebut "alexa_to_pi" dan isi "tulis {person}" sebagai contoh ucapan
  12. Buat slot maksud yang disebut "orang" dengan ketik "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 ketik "AMAZON. NUMBER"
  15. Di bawah Antarmuka, aktifkan "Pengontrol Antarmuka Kustom"
  16. Di bawah Endpoint, pilih "AWS Lambda ARN" dan salin "ID Keterampilan Anda"
  17. Navigasikan kembali ke AWS Console
  18. Klik "Tambahkan Pemicu"
  19. Pilih "Alexa Skills Kit", centang "Aktifkan" di bawah verifikasi ID Keterampilan, rekatkan di ID Keterampilan yang baru saja Anda salin dan klik tambahkan
  20. Salin Lambda ARN di pojok kanan atas
  21. Arahkan Kembali ke Konsol Pengembang Alexa dan rekatkan Lambda ARN ke bidang "Wilayah Default"
  22. Di bawah Doa, atur Nama Panggilan Keterampilan menjadi "gadget saya"
  23. Klik "Simpan Model" dan kemudian "Bangun Model"
  24. Klik "Uji" di tab atas dan ubah pemilih dari "Tidak Aktif" menjadi "Pengembangan"
  25. Perhatikan bahwa log untuk fungsi Lambda ditemukan di layanan "CloudWatch" di AWS.

Langkah 4: Atur Kode di Raspberry Pi Anda

Agar Raspberry Pi Anda dapat berkomunikasi dengan perangkat Alexa, diperlukan beberapa kode untuk memfasilitasi penyampaian informasi melalui bluetooth dan mempertahankan koneksi itu, selain beberapa file lainnya. Cara termudah untuk memulai dengan file terbaru dari Amazon adalah dengan mengkloning repositori Raspberry Pi Gadgets mereka. Arahkan ke direktori proyek Anda saat ini dan jalankan

git clone

Ini akan memuat seluruh repositori mereka dengan semua kode yang diperlukan ke Pi Anda. Ini memiliki beberapa contoh proyek yang memamerkan beberapa kemampuan Alexa Gadgets. Jika Anda ingin informasi lebih lanjut, lihat readme di halaman Github mereka.

Jalankan fungsi pengaturannya untuk mengonfigurasi semuanya.

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

sudo python3 launch.py --setup

Ikuti petunjuknya dan jawab "y" ketika ditanya apakah Anda ingin mengonfigurasi menggunakan kredensial Gadget Anda. Ingat ID Amazon dan Rahasia Gadget dari menyiapkan gadget Anda di konsol pengembang karena akan diminta di sini. Saya memilih mode transmisi "bt" untuk Raspberry Pi Zero W. BLE saya tidak didukung oleh semua perangkat Echo yang lebih lama, tetapi Anda dapat mencari kemampuan perangkat keras Anda. Jika Anda menggunakan Pi Anda dalam mode Desktop, Amazon merekomendasikan untuk mengklik kanan ikon bluetooth di kanan atas dan mengklik "Hapus "Bluetooth" dari Panel" untuk menghindari masalah konektivitas.

Catatan: langkah ini mungkin memakan waktu cukup lama tergantung pada seberapa banyak yang perlu diinstal.

Sekarang Anda akan memiliki semua file dukungan yang diperlukan untuk kembali ke proyek Anda dan mulai menambahkan fungsi untuk memungkinkan komunikasi dengan Echo Anda.

Jika Anda memilih, Anda dapat menghapus folder "contoh" di "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Anda dapat memiliki kode proyek Anda di mana pun Anda suka, tetapi saya akan membuat folder di direktori home untuk itu, atau Anda dapat mengunduh folder dengan kode dari Github saya, pastikan untuk mengedit file.ini seperti yang dijelaskan di bawah ini.

cd /home/pi

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

Saya sekarang telah membuat dua file dalam folder bernama "my_project". File.ini penting. Pastikan itu berisi yang berikut dan ganti di ID Amazon dan Rahasia Gadget Anda:

[Pengaturan Gadget]

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

Sekarang, mari kita lihat file python sebelum masuk ke detailnya:

impor json

dari agt import AlexaGadget

kelas MyGadget(AlexaGadget):

def _init_(sendiri):

super()._init_()

def on_custom_mygadget_alexatopi(self, directive):

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(sendiri, direktif):

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'])) + " derajat."} self.send_custom_event('Custom. MyGadget', 'PiToAlexa', payload) MyGadget().main()

Pertama, Anda akan melihat bahwa ia memanggil dua fungsi: write_text() dan get_temp(). Dalam kode saya, saya mendefinisikan fungsi-fungsi ini dalam file yang sama, tetapi mereka bergantung pada perangkat keras saya, jadi saya memilih untuk menghilangkannya. Saya telah melampirkan file ini dengan fungsi-fungsi yang ditentukan untuk hanya mencetak dan mengembalikan data dummy jika Anda ingin menjalankan kode yang tepat ini. Saya akan menyarankan pengujian dengan kode yang tepat ini sebelum Anda memodifikasinya agar berfungsi dengan proyek Anda. Saya juga telah melampirkan file.ini, tetapi pastikan Anda masuk dan mengubah ID dan rahasia gadget. Fungsi teratas menerima data yang dikirimkan dari Alexa. Fungsi bawah menerima data dalam format yang sama, tetapi perangkat Alexa akan menunggu selama lima detik hingga suatu peristiwa diteruskan kembali dengan muatannya sendiri. Payload ini khusus karena perangkat Alexa akan berbicara isinya.

Setelah Anda memiliki file-file ini, navigasikan ke folder "my_project" dan jalankan file python.

sudo reboot

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

Jika ini adalah pertama kalinya Anda menjalankan program, Anda harus memasangkannya ke perangkat Echo Anda. Pastikan perangkat Echo Anda berada di dekat Raspberry Pi, karena kami perlu mengizinkan koneksi bluetooth.

Di aplikasi Alexa di perangkat seluler Anda, klik "perangkat" di sudut kanan bawah.

Klik "Echo & Alexa" di kiri atas.

Klik pada perangkat Echo Anda.

Di bawah "NIRKABEL", ketuk "Perangkat Bluetooth".

Ketuk "PASANG PERANGKAT BARU" dan Anda akan melihat gadget Anda di daftar.

Ketuk gadget Anda. Anda akan melihat laporan Pi yang berhasil dipasangkan.

Saat menonton output di Pi Anda, coba berikan perintah suara ke Echo:

You: "Alexa, minta gadget saya untuk memeriksa suhu dari sensor satu"

Jika semuanya bekerja dengan benar, Anda akan mendengar:

Echo: "Probe membaca 120.505 derajat."

Anda: "Alexa, beri tahu gadget saya untuk menulis George Washington."

Pi harus mencetak:

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

George Washington"

Langkah 5: Mengakhiri

Video yang ditampilkan di sini adalah contoh gadget yang bekerja dengan membaca suhu (probe yang sama dalam F vs. C) dan menulis nama ke tampilan sederhana.

Sekarang semoga Anda memiliki sesuatu yang berfungsi, Anda harus mencoba untuk pergi dan menyesuaikan ini untuk membuat proyek Anda sendiri lebih mampu. Ingatlah bahwa Anda dapat dengan mudah mengedit maksud di Alexa Developer Console dan semua slot yang Anda gunakan akan diteruskan ke Pi Anda di payload. Selain itu, Anda dapat meminta Alexa mengatakan apa pun yang Anda inginkan hanya dengan mengedit payload yang Anda berikan kembali dari kode Raspberry Pi Anda.

Harap dicatat bahwa tutorial ini tidak dimaksudkan sebagai solusi akhir untuk semua kemampuan yang Anda inginkan dengan Gadget Alexa. Ini sengaja dibatasi untuk memberi Anda dua fungsi sederhana untuk melewatkan data di setiap arah antara Alexa dan Gadget. Jika Anda tertarik untuk membangun model interaksi yang lebih canggih, saya akan mendorong Anda untuk membaca semua file readme di https://github.com/alexa/Alexa-Gadgets-Raspberry-P… dan mencoba semua contoh yang mereka berikan. Saya juga menyarankan Anda membaca dokumentasi untuk Alexa Gadgets Toolkit dan Alexa Skills Kit.

Direkomendasikan: