Daftar Isi:

Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: 6 Langkah (dengan Gambar)
Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: 6 Langkah (dengan Gambar)

Video: Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: 6 Langkah (dengan Gambar)

Video: Alexa Voice Controlled Raspberry Pi Drone Dengan IoT dan AWS: 6 Langkah (dengan Gambar)
Video: Employee Attendance Monitoring System using Face Recognition 2024, Juli
Anonim
Image
Image
Drone Raspberry Pi Terkendali Suara Alexa Dengan IoT dan AWS
Drone Raspberry Pi Terkendali Suara Alexa Dengan IoT dan AWS
Drone Raspberry Pi Terkendali Suara Alexa Dengan IoT dan AWS
Drone Raspberry Pi Terkendali Suara Alexa Dengan IoT dan AWS

Hai! Nama saya Arman. Saya seorang anak laki-laki berusia 13 tahun dari Massachusetts. Tutorial ini menunjukkan, seperti yang dapat Anda simpulkan dari judulnya, cara membuat Raspberry Pi Drone. Prototipe ini menunjukkan bagaimana drone berkembang dan juga seberapa besar peran mereka di masa depan. Saya pasti bisa melihat diri saya bangun dalam 10 tahun dan meminta drone untuk mendapatkan sarapan untuk saya. Drone menggunakan Amazon Alexa, Amazon Web Services, IoT (Internet of Things), dan yang paling penting Raspberry Pi untuk dijalankan. Ini dimaksudkan untuk mendemonstrasikan dan menginformasikan tentang drone dan bagaimana mereka berkembang setiap hari. Semoga Anda sukses dan belajar tentang drone dalam prosesnya. Selamat mencoba dan terima kasih telah membaca. -Armaan

Perlengkapan

Untuk membangun prototipe terdapat berbagai kebutuhan perangkat keras dan perangkat lunak. Saya menggunakan tutorial online oleh The Drone Dojo untuk membuat drone dan mengintegrasikan teknologi yang terdaftar. Untuk drone, Anda dapat menemukan daftar bagiannya di sini:

Daftar Suku Cadang Drone

Persyaratan Perangkat Lunak:

  • Layanan Web Amazon
  • Sebuah laptop
  • Perangkat Lunak Misi Planer
  • Balena Etcher
  • Kartu MicroSD dengan File Raspbian ditemukan di sini
  • Amazon Alexa, fisik atau virtual

Langkah 1: Mengumpulkan dan Memahami Bagian

Mengumpulkan dan Memahami Bagian
Mengumpulkan dan Memahami Bagian

Setiap bagian yang disebutkan dalam daftar persediaan diperlukan, dan begitu juga pemahaman yang jelas tentang setiap bagian. Anda dapat menemukan bagian-bagiannya secara online dan setelah dikumpulkan, lanjutkan membaca. Daftar putar oleh The Drone Dojo untuk pemahaman penuh tentang bagian-bagiannya dapat ditemukan di sini. Penjelasan 4 menit di saluran youtube saya dapat ditemukan di sini. Ketika berbicara tentang drone, satu-satunya bagian, terlepas dari apa yang dipikirkan kebanyakan orang, bukan hanya motor dan baling-baling. Di bawah ini adalah tujuan dasar dari setiap bagian.

Raspberry Pi dengan Emlid Navio2

Bagian ini cukup banyak menjadi prosesor sentral dan poin utama dari drone. Raspberry Pi bertindak seperti CPU komputer yang mengirimkan perintah ke Navio2 untuk dieksekusi melalui PWM (Sinyal Modulasi Lebar Pulsa) ke bagian lain dari drone

2. ESC (Pengontrol Kecepatan Elektronik)

Bagian kuning ini ditemukan di bawah bingkai. Mereka 4 dicolokkan ke Navio, satu untuk setiap motor. Setelah menerima sinyal PWM, mereka memutar motor dan mulai terbang.

3. Motor

Motor tidak perlu terlalu banyak penjelasan karena Anda mungkin sudah familiar dengan mereka. Mereka memutar dan memutar baling-baling untuk menciptakan daya dorong.

4. Baling-baling

Baling-baling menciptakan daya dorong agar drone dapat terbang. Mereka berputar ke arah yang sama dengan motor untuk mengangkat kendaraan.

5. Modul Baterai dan Daya

Baterai LiPo memberi daya pada seluruh drone melalui bingkai menggunakan modul daya. Ini memberikan sekitar 15-20 menit waktu penerbangan dan bertindak sebagai sumber daya.

6. GPSnya

GPS berkomunikasi dengan satelit untuk menentukan posisi drone. Ini menentukan ketinggian, garis lintang, dan garis bujur. Dapat digunakan untuk Geofencing, waypoint, dan juga berpindah ke posisi atau arah tertentu.

7. Modul Telemetri

Modul telemetri menghubungkan drone kami ke stasiun kontrol darat, dalam kasus kami, Mission Planner, untuk dipantau.

8. Pengontrol dan Modul RC bersama dengan Encoder PPM

RC Controller menggunakan radio untuk mengirimkan sinyal dan perintah ke RC Module untuk mengemudikan drone secara manual. Encoder PPM menerjemahkan sinyal-sinyal ini untuk Navio + RPI untuk diproses dan dijalankan.

9. Bingkai

Bingkai merah putih ini berfungsi sebagai dasar atau platform untuk bagian lain yang akan ditempatkan. Bingkainya aerodinamis dan ringan, oleh karena itu sempurna untuk pembuatan drone kami.

Sekarang dengan pengetahuan setiap bagian, kita akhirnya bisa membuat drone! Lanjut ke langkah berikutnya!

Langkah 2: Merakit Drone

Merakit Drone
Merakit Drone

Langkah ini mungkin yang paling sulit dalam hal upaya fisik. Saya sarankan meminta bantuan orang lain atau mencoba menggunakan uluran tangan dalam daftar bagian. Prosesnya terlalu lama untuk didemonstrasikan di sini, jadi saya akan memberikan tautan lain yang saya gunakan oleh The Drone Dojo.

Membangun Drone Raspberry Pi

Sekali lagi, karena saya tidak akan membahas terlalu detail, saya hanya akan menyoroti dasar-dasar setiap langkah.

1. Atur Persediaan Anda - Kumpulkan materi kami dan pastikan mudah diakses

2. Rencanakan Bangun Anda - Atur bagian-bagian Anda pada bingkai untuk membuat cetak biru dari apa yang akan Anda bangun

3. Pekerjaan Solder - Ini adalah pekerjaan yang agak sulit dilakukan sendiri. Anda harus menyolder konektor peluru emas yang disertakan dengan motor ke ESC. Selanjutnya, Anda harus mengambil bagian bawah bingkai dan menyolder ESC ke bingkai bawah atau Power Distribution Board. Modul Baterai juga akan disolder ke Papan Distribusi Daya

4. Memasang Bingkai - Anda kemudian harus mengencangkan bagian atas bingkai bersama dengan lengannya. Anda kemudian dapat memasang Raspberry Pi di atas dengan cara apa pun yang Anda inginkan. (Saya menggunakan lakban). Kemudian Anda dapat mengamankan ESC ke lengan dengan ikatan ritsleting. Sekarang kita hampir selesai.

5. Mengikat Kontroler RC ke Penerima - Coba ikuti petunjuk dalam daftar putar di atas untuk mengikat Kontroler RC menggunakan ESC.

6. Menyelesaikan Bagian pada Rangka - Lakban atau tali pada modul telemetri ke rangka. Lakban Encoder PPM ke lengan juga. Sekarang Anda dapat menyambungkan ESC dan Encoder PPM ke Navio.

7. Dudukan GPS + Baterai - Pasang Dudukan GPS dengan berbagai sekrup dan bagian. Menggunakan ikatan ritsleting, pasang GPS ke Bingkai. Saya tidak harus menggunakan GPS Mount karena kerapuhannya, tetapi terserah Anda. Selanjutnya, Anda dapat memasukkan baterai di antara Power Dist. Papan. Saya mengikat dan menempelkan modul daya ke bingkai juga. Sekarang perangkat keras Anda sudah cukup banyak diatur. Sekarang untuk bagian yang kita tunggu-tunggu!

8. Memasang Baling-Baling!!! - Anda dapat mengencangkan baling-baling menggunakan bagan yang disebutkan dalam daftar putar. Kemudian Anda dapat mencolokkan ESC ke motor dan kami akhirnya selesai membuat drone.

Perangkat lunak berikutnya, seterusnya!

Langkah 3: Konfigurasi Raspberry Pi dan GCS (Perencana Misi)

Mengonfigurasi Raspberry Pi dan GCS (Perencana Misi)
Mengonfigurasi Raspberry Pi dan GCS (Perencana Misi)

Sekali lagi, Anda dapat menemukan petunjuk yang lebih rinci dalam daftar putar dari langkah terakhir. Namun, Anda mungkin tahu cara mengatur RasPi. Tapi kali ini, kami melakukannya tanpa kepala. Gunakan Balena Etcher untuk membakar OS dari situs web Navio OS ke kartu MicroSD. Saat dicolokkan ke komputer Anda, masuk ke pemohon wpa menggunakan notepad ++. Setelah itu, masukkan ssid dan kata sandi untuk Raspberry Pi untuk terhubung ke WiFi Anda. Kemudian Anda harus menambahkan file bernama SSH. Ini bisa melalui Command Line atau metode lain. Sekarang kita bisa SSH. Anda dapat menggunakan command prompt atau Putty. Saya menggunakan command prompt dan mengetik "ssh pi@navio" untuk menghubungkan dalam kasus saya, atau Anda dapat menemukan alamat IP dan ssh dengan cara itu. Saat menghubungkan, gunakan video ini untuk mengatur dan mengonfigurasi Navio. Untuk mengatur telemetri, Anda harus terlebih dahulu mengedit Raspberry Pi. Ikuti ini untuk mengedit dan coba sambungkan ke Mission Planner. Jika telemetri tidak berfungsi, Anda dapat membatalkan pengeditan dan menghubungkan menggunakan koneksi UDB dengan memasukkan IP GCS (Ground Control Station seperti laptop) Anda. Setelah terhubung ke Mission Planner, Anda dapat menggunakan wizard pengaturan untuk mengkalibrasi semua bagian drone. Jika Anda memerlukan bantuan, lihat kembali daftar putar. Biasanya, setiap kali Anda mengatur, hampir selalu ada kesalahan. Pemecahan masalah adalah salah satu bagian terbesar dari proyek ini. Saya tidak dapat membantu Anda di sana karena saya tidak mengetahui kesalahan Anda, tetapi sebagian besar kesalahan dapat diperbaiki dengan bantuan dari internet. Setelah semuanya siap, maka drone pun siap untuk terbang! Anda dapat mengatur pengontrol RC dan mode penerbangan Anda di Mission Planner. Coba pegang tongkat kiri ke kanan bawah selama lima detik untuk mempersenjatai drone. Saya tidak merekomendasikan terbang tanpa melihat tutorial karena drone sangat rapuh dan mudah pecah. Bagi saya, pertama kali saya menerbangkannya, saya merusak Mount GPS dan beberapa baling-baling. Jika Anda tidak memerlukan kontrol suara, Anda dapat berhenti di sini. Untuk mempelajari tentang AWS dan memprogram drone, lanjutkan!

Langkah 4: Memprogram Drone untuk Terbang Dengan Python

Memprogram Drone untuk Terbang Dengan Python
Memprogram Drone untuk Terbang Dengan Python

Sebelum masuk ke AWS, sebaiknya kita pahami dulu cara memprogram drone untuk terbang. Setelah pengaturan awal, mengintegrasikan kontrol suara seharusnya tidak terlalu sulit. Hal pertama yang dapat kita coba pahami adalah membuat program lepas landas dan mendarat sederhana. Setelah mengatur Raspberry Pi, kita bisa SSH ke dalamnya lagi. Anda dapat melihat daftar putar lagi atau mengikuti instruksi saya.

1. Pertama mari kita download Source Code ArduPilot di direktori di Raspberry Pi

mkdir src

Kemudian, dapatkan file dari GitHub menggunakan git clone

git clone -b Copter-3.6.11

Sekarang, mari navigasikan ke /src/ardupilot

cd src

cd ardupilot

Sekarang, mari kita inisialisasi file sumber

git submodule update --init --recursive

2. Selanjutnya kita harus mengkompilasi firmware pada Raspberry Pi

Pastikan untuk menavigasi ke /src/ardupilot/ dengan cd sebelum melakukan langkah selanjutnya

Kemudian untuk mengkofigurasi secara khusus ke Navio menggunakan

./waf configure --board=navio2

Kemudian Anda dapat mengkompilasi dengan

./waf --targets bin/arducopter

3. Sekarang kita dapat menginstal kode sumber ke Navio

Pertama mari kita arahkan ke direktori yang benar.

cd/etc/systemd/system

Kemudian edit filenya

sudo vi arducopter.service

Di mana dikatakan ExecStart, masukkan yang berikut ini alih-alih yang sudah ada

ExecStart=/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter ${ARDUPILOT_OPTS}"

Sekarang, untuk menjalankan kode sumber ardupilot, kita dapat menggunakan

sudo systemctl daemon-reload

Kemudian kita dapat memulai kembali dengan

sudo systemctl restart arducopter

Dengan langkah terakhir, kami akhirnya menyelesaikan pengaturan ArduPilot di drone kami

4. Memasang DroneKit

DroneKit adalah software yang akan kita gunakan untuk memprogram drone agar bisa terbang. Untuk memahami beberapa kode, Anda dapat menemukan dokumentasinya di sini. Pertama kita harus menginstal paket pada drone kita sebelum menulis skrip.

Kita dapat menginstal paket python dengan

pip install dronekit==2.9.1

Ini mungkin, atau mungkin bukan versi terbaru, tetapi ini adalah yang saya gunakan sehingga saya dapat membantu pemecahan masalah.

Untuk memeriksa apakah sudah terinstal, kita dapat melakukan a

pembekuan pip | grep dronekit

Sekarang kita akhirnya siap untuk membuat skrip python pertama kita

5. takeoff_and_land.py

PERINGATAN! Saya sarankan membangun pemahaman dasar tentang python, sehingga Anda dapat mempelajari dan memahami kodenya. Jika Anda ingin menulis programnya sendiri, ikuti video ini.

##Pertama mari kita buat direktori untuk menyimpan kode ini

cd dk ##Jika Anda ingin melakukannya sendiri, gunakan vi takeoff_and_land.py ##untuk membuat program

Jika tidak, Anda dapat melihat atau menggunakan file terlampir dan menggunakan protokol transfer file. Kita bisa mencoba program ini setelahnya. Pertama untuk mengklarifikasi bahwa itu adalah file python yang harus kita gunakan

chmod +x takeoff_and_land.py

Kemudian, untuk mencoba menggunakan kode berikut untuk menjalankan

python takeoff_and_land.py --connect 127.0.0.1:14550

Pertama kali juga tidak berhasil untuk saya. Jika ada batas waktu tautan, maka jangan khawatir ada sesuatu yang dapat Anda lakukan. Buka prompt lain dan ssh. Anda dapat mencoba menginstal sesuatu yang disebut mavproxy dan mencoba menjalankannya. Setelah itu, Anda bisa menjalankan keduanya secara bersamaan. Ini akan membantu menghubungkan drone. Setelah itu selesai, saya punya tantangan untuk Anda. Cobalah untuk mencari tahu apa yang dilakukan program lain (set_velocity_body.py) dan bagaimana membuatnya bekerja. Jika Anda melakukannya, pekerjaan bagus.

6. Maju!

Kami sekarang dapat menggunakan pengetahuan ini untuk membuat drone kami dikendalikan oleh suara. Kontrol drone Alexa menggunakan banyak fitur ini dan banyak lagi. Semoga sukses dan seterusnya!

Langkah 5: Menggunakan Amazon Alexa dan Amazon Web Services untuk Mengintegrasikan Kontrol Suara

Menggunakan Amazon Alexa dan Amazon Web Services untuk Mengintegrasikan Kontrol Suara
Menggunakan Amazon Alexa dan Amazon Web Services untuk Mengintegrasikan Kontrol Suara
Menggunakan Amazon Alexa dan Amazon Web Services untuk Mengintegrasikan Kontrol Suara
Menggunakan Amazon Alexa dan Amazon Web Services untuk Mengintegrasikan Kontrol Suara

Langkah ini adalah salah satu yang kurang terdokumentasi. Ini berarti bahwa itu akan menjadi yang paling sulit untuk dipecahkan. Hanya membuatnya bekerja membutuhkan waktu sekitar satu bulan, mungkin lebih. Yang paling penting di sini adalah bersabar. Fitur ini, jika diterapkan dalam kehidupan nyata, dapat mengubah hidup. Anda bisa memberi tahu Alexa untuk membeli bahan makanan untuk Anda alih-alih pergi sendiri. Bayangkan itu! Jadi tanpa basa-basi lagi mari kita masuk ke dalamnya!

1. Mendaftarkan Raspberry Pi sebagai Sesuatu di AWS IoT

Untuk menggunakan IoT (Internet of Things), kita membutuhkan sesuatu. Jadi kita harus login ke AWS Console untuk menggunakan AWS IoT terlebih dahulu. Kemudian pergi ke IoT Core. Sesampai di sana, Anda harus mengklik Kelola dan kemudian buat sesuatu. Setelah menambahkan nama, untuk menghubungkan, kita memerlukan sertifikat. Saya akan merekomendasikan mengklik sertifikasi Satu-klik. Kemudian setelah melihat layar sertifikat, pastikan untuk mengunduh setiap kunci termasuk CA root. Kemudian Anda bisa pergi dan menyelesaikan pembuatan benda itu. Selanjutnya kita harus membuat kebijakan. Kembali ke IoT Core. Kemudian klik aman dan klik kebijakan. Kemudian tekan buat kebijakan. Anda kemudian dapat membuat nama dan menambahkan sumber daya. Di bawah tindakan, ketik iot* dan ketik * di bawah sumber daya dan tekan izinkan efek. Kemudian kembali ke hal Anda dan pergi ke sertifikat Anda. Setelah di sini, klik pada kebijakan. Anda kemudian dapat melampirkan kebijakan Anda untuk hal itu dan semuanya sudah siap!

2. Menyiapkan Kode di Raspberry Pi dan berinteraksi dengan IoT

Untuk bagian ini, Anda akan memerlukan Klien SFTP (saya menggunakan WinSCP) untuk transfer file. Setelah terhubung ke Raspberry Pi kami, kami harus memiliki kunci sertifikat. Anda harus mentransfer file kunci ke Raspberry Pi. Anda juga harus menginstal pip AWSIoTPythonSDK pada Raspberry Pi. Kemudian masuk ke direktori dk pada Raspberry Pi. Anda menggunakan file Alexa Drone Control yang saya berikan untuk berkomunikasi dengan IoT. Untuk menggunakan file ini saya menggunakan Shell Script untuk memulai. Saya akan menunjukkan kode di bawah ini karena saya tidak dapat mengunggah file karena beberapa alasan. Jika program tidak mengambil pesan dari AWS IoT saat pengujian, jangan khawatir! Ini mungkin salah saya karena File Kontrol Alexa Drone mungkin tidak sesuai dengan Hal Anda. Jadi, untuk memperbaikinya, kembali ke AWS IoT dan tekan belajar di panel kiri. Ikuti instruksi dan Anda mungkin harus memulai ulang. Maaf tentang itu. Setelah IoT Anda mulai bekerja dengan program di RasPi, Anda dapat mengintegrasikan kode dronekit dari file Alexa Drone Control yang saya berikan. Setelah itu, gunakan Shell Script yang saya berikan dengan sertifikat Anda dan Rest API Endpoint dari IoT.

# hentikan skrip pada errorset -e # Periksa untuk melihat apakah file CA root ada, unduh jika tidak jika [! -f./root-CA.crt]; lalu printf "\nMengunduh sertifikat AWS IoT Root CA dari AWS…\n" curl https://www.amazontrust.com/repository/AmazonRoot…> > root-CA.crt fi # install AWS Device SDK for Python jika belum diinstal jika [! -d./aws-iot-device-sdk-python]; lalu printf "\nMenginstal AWS SDK…\n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# jalankan aplikasi sampel pub/sub menggunakan sertifikat yang diunduh dalam paket

printf "\nMenjalankan aplikasi pub/sub sample…\n" python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e "Your IoT ARN" -r root-CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Ini tidak akan berhasil untuk Anda semua karena namanya berbeda. Alih-alih kunci yang saya gunakan ganti dengan nama kunci Anda saat Anda mentransfer file. Pastikan untuk keluar dari dk sebelum mentransfer file! Itu saja yang harus Anda lakukan untuk saat ini.

3. Membangun Keterampilan Alexa Anda

Langkah ini tampaknya jauh lebih sulit daripada yang sebenarnya. Pertama, kita harus login ke Alexa Developer console. Kemudian, tekan saja create skill. Saat diminta untuk memilih model untuk keahlian Anda, tekan saja custom. Saat diminta untuk memilih metode, tekan ketentuan Anda sendiri. Anda dapat menamainya apa pun yang Anda inginkan. Tidak diperlukan template, jadi pilih mulai dari awal. Selanjutnya, setelah membuat keterampilan Anda, Anda akan tiba di layar Pembuat keterampilan dengan daftar periksa di sebelah kanan. Dari sini, kita bisa mulai membangun keterampilan kita. Pertama pada daftar periksa adalah nama doa. Inilah yang akan Anda beri tahu Alexa untuk memanggil keahlian Anda. Bagi saya, saya hanya memasukkan nama panggilan saya sebagai drone. Sekarang kita bisa pergi ke maksud, ucapan, dan slot kita. Di sini, Anda dapat membuat perintah untuk drone seperti naik 1 meter atau ke kanan atau ke bawah. Milik saya hanya benar-benar berfungsi dengan satu meter untuk saat ini. Anda dapat mengklik Editor JSON di bagian bawah panel kiri. Anda kemudian dapat menempelkan kode berikut ke dalamnya.

{ "interactionModel": { "languageModel": { "invocationName": "drone", "intents": [{ "name": "AMAZON. FallbackIntent", "samples": }, { "name": "AMAZON. CancelIntent", "samples": }, { "name": "AMAZON. HelpIntent", "samples": }, { "name": "AMAZON. StopIntent", "samples": }, { "name": "AMAZON. NavigateHomeIntent", "samples": }, { "name": "GoIntent", "slots": [{ "name": "Arah", "type": "Arah" }, { "name": "Distance", "type": "AMAZON. NUMBER" }, { "name": "Unit", "type": "Unit" }], "samples": ["Go {Arah} {Jarak} {Unit}", "Pergi {Jarak} {Unit} {Arah}"] }, { "name": "CommandIntent", "slots": [{ "name": "Tugas", "type": "Tugas" }], "sampel": ["Perintah drone ke {Tugas}"] }, { "name": "TurnIntent", "slots": [{ "name": "Direction", "type": " Arah" }, { "name": "Rotation", "type": "AMAZON. NUMBER" }], "sampel": ["Putar {Arah} {Rotasi} derajat" }], "jenis": [{ "nama": "Arah", "nilai": [{ "nama": { "nilai": "Lurus", "sinonim": ["Terus ards", "Maju"] } }, { "nama": { "nilai": "Kembali", "sinonim": ["Mundur", "Mundur"] } }, { "nama": { "nilai": "Kanan" } }, { "nama": { "nilai": "Kiri" } }, { "nama": { "nilai": "Bawah" } }, { "nama": { "nilai": "Naik " } }] }, { "nama": "Satuan", "nilai": [{ "nama": { "nilai": "Meter", "sinonim": ["Meter"] } }, { "nama": { "nilai": "Pekar", "sinonim": ["Pekarangan"] } }, { "nama": { "nilai": "Kaki", "sinonim": ["Kaki"] } }] }, { "nama": "Tugas", "nilai": [{ "nama": { "nilai": "Tanah" } }, { "nama": { "nilai": "Tahan" } }, { "nama": { "nilai": "Tetap" } }, { "nama": { "nilai": "RTL", "sinonim": ["Kembali ke Peluncuran"] } }] }] } } }

Setelah menempelkan kode ke Editor JSON, Anda dapat mengklik langkah ketiga dari daftar periksa dan itu akan membangun model interaksi Anda untuk Anda. Dengan langkah ini, Anda akan selesai untuk saat ini. Anda dapat membiarkan slot titik akhir kosong untuk saat ini!

Langkah 4: Membangun Fungsi Lambda Anda

Sekarang, langkah ini adalah salah satu yang Anda harus mencari tahu sendiri. Saya akan memberi tahu Anda cara menghubungkannya ke Alexa Skill, tetapi Anda harus mengkodekannya sendiri. Jadi, pertama-tama buka konsol manajemen AWS. Lalu, pergi ke Lambda. Anda kemudian dapat membuat fungsi yang menamainya apa pun yang Anda inginkan. Pastikan untuk menulisnya dari awal dan membuat runtime bahasa pemrograman apa pun yang Anda inginkan. Saya menggunakan Node.js. Untuk menambahkan Alexa Skill, tambahkan trigger dan pilih Alexa Skills Kit(ASK). Salin ARN Lambda Anda dan kembali ke Skill Alexa. Sekarang, pergi ke titik akhir. Anda dapat menempelkan ARN, menyimpan, dan membuat model baru. Kemudian, ambil ID Keterampilan Alexa, dan tempel di bagian pemicu di mana ia meminta Anda di Lambda. Selanjutnya, gulir ke bawah pada Lambda dan temukan pengaturan dasar dan buat batas waktu 10 detik. Sekarang, terserah Anda untuk mencari tahu kodenya. Untuk petunjuk, Anda dapat situs web di bawah ini.

github.com/aws/aws-iot-device-sdk-js

www.hackster.io/veggiebenz/voice-controlle…

dan Anda dapat menggunakan file yang saya lampirkan, tetapi tidak lengkap dan tidak akan berfungsi.

/** * Kontrol quadcopter APM / Pixhawk Anda dengan suara Anda, menggunakan Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = membutuhkan('aws-iot-device-sdk'); var config = membutuhkan("./config"); var deviceName = "EchoDroneControl"; // perangkat ini benar-benar pengontrol var mqtt_config = { "keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, //+ "-Lambda-" + (Tanggal baru().getTime()), "region":"us-east-1", "debug":true }; var ctx = nol; var klien = nol; // Merutekan permintaan masuk berdasarkan jenis (LaunchRequest, IntentRequest, dll.) Badan JSON dari permintaan disediakan dalam parameter event. export.handler = function (event, konteks) { coba { console.log("event.session.application.applicationId=" + event.session.application.applicationId); ctx = konteks; if (event.session.application.applicationId !== app_id) { ctx.fail("ID Aplikasi Tidak Valid"); } klien = awsIot.device(mqtt_config); client.on("koneksi", function(){ console.log("Terhubung ke AWS IoT"); // callback(); });

if (event.session.new) {

onSessionStarted({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") { onLaunch(event.request, event.session); } else if (event.request.type === "IntentRequest") { onIntent(event.request, event.session); } else if (event.request.type === "SessionEndedRequest") { onSessionEnded(event.request, event.session); ctx.berhasil(); } } catch (e) { console.log("PENGECUALIAN di handler: " + e); ctx.fail("Pengecualian: " + e); } }; /** * Dipanggil saat sesi dimulai. */ function onSessionStarted(sessionStartedRequest, session) { console.log("onSessionStarted requestId=" + sessionStartedRequest.requestId + ", sessionId=" + session.sessionId); }

/**

* Dipanggil saat pengguna meluncurkan keterampilan tanpa menentukan apa yang mereka inginkan. */ function onLaunch(launchRequest, session, callback) { console.log("onLaunch requestId=" + launchRequest.requestId + ", sessionId=" + session.sessionId); // Kirim ke peluncuran keterampilan Anda. getWelcomeResponse(panggilan balik); } /** * Dipanggil saat pengguna menetapkan maksud untuk keterampilan ini. */ function onIntent(intentRequest, session) { //, callback) { console.log("onIntent requestId=" + intentRequest.requestId + ", sessionId=" + session.sessionId); var intent = intentRequest.intent, intentName = intentRequest.intent.name; console.log("PERMINTAAN ke string =" + JSON.stringify(intentRequest)); var panggilan balik = nol; // Kirim ke pengendali maksud keahlian Anda if ("GoIntent" === intentName) { doGoIntent(intent, session); } else if ("CommandIntent" === intentName) { doCommandIntent(niat, sesi); } else if ("TurnIntent" === intentName) { doTurnIntent(niat, sesi); } else if ("HelpIntent" === intentName) { getWelcomeResponse(); } else { throw "Niat tidak valid"; } } /** * Dipanggil saat pengguna mengakhiri sesi. * Tidak dipanggil saat skill kembali shouldEndSession=true. */ function onSessionEnded(sessionEndedRequest, session) { console.log("onSessionEnded requestId=" + sessionEndedRequest.requestId + ", sessionId=" + session.sessionId); // Tambahkan logika pembersihan di sini } // --------------- Fungsi yang mengontrol perilaku keterampilan -------------------- --- function getWelcomeResponse() { // Jika kita ingin menginisialisasi sesi agar memiliki beberapa atribut, kita bisa menambahkannya di sini. var sessionAttributes = {}; var cardTitle = "Selamat datang"; var speechOutput = "Selamat datang di DRONE CONTROL."; // TODO: apakah drone online atau offline? Jika online, apakah ARMED? var repromptText = "Drone siap menerima perintah."; var shouldEndSession = false; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } /** * menangani maksud GO. */ function doGoIntent(maksud, sesi, panggilan balik) { // var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var pidatoOutput = ""; var direction = intent.slots. Direction.value; var distance = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["maju", "maju", "mundur", "mundur", "kanan", "kiri", "atas", "bawah", "lurus", "depan", "lurus ke depan"]; var validUnits = ["kaki", "kaki", "meter", "meter", "yard", "yard"]; repromptText = "Beri tahu saya seberapa jauh untuk pergi dan ke arah mana."; var gagal = salah; // validasi input if (!(parseInt(distance) >= 1)) { speechOutput = "Saya tidak dapat memahami jarak yang Anda inginkan untuk saya tempuh. "; gagal = benar; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf(direction) == -1) { speechOutput = "Saya tidak dapat memahami arah yang Anda inginkan untuk saya tempuh. "; gagal = benar; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf(unit) == -1) { speechOutput = "Saya tidak dapat memahami unit yang Anda ingin saya kunjungi. "; gagal = benar; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (!gagal) { var cardTitle = "Drone pergi " + arah + " " + jarak + " " + satuan; speechOutput = "Pergi" + arah + " " + jarak + " " + satuan; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }

function doCommandIntent(niat, sesi, panggilan balik) {

// var cardTitle = "Perintah Drone…"; var repromptText = nol; var sessionAttributes = {}; var shouldEndSession = false; var pidatoOutput = ""; repromptText = "Beri tahu saya apa perintah untuk drone."; var tugas = intent.slots. Task.value; var validTasks = ["luncurkan", "tanah", "r. t. l.", "tahan", "tetap", "berhenti", "kembali untuk meluncurkan", "batalkan"]; if (validTasks.indexOf(task) == -1) { speechOutput = "Saya tidak mengerti perintahnya."; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } else { var cardTitle = "Melaksanakan perintah Drone" + tugas; speechOutput = "Melaksanakan perintah" + tugas; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }

function doTurnIntent(niat, sesi, panggilan balik) {

// var cardTitle = "Putaran Drone…"; var repromptText = nol; var sessionAttributes = {}; var shouldEndSession = false; var pidatoOutput = ""; repromptText = "Beri tahu saya bagaimana Anda ingin memutar drone."; var direction = intent.slots. Direction.value; var validDirections = ["kanan", "kiri", "sekitar"]; if (validDirections.indexOf(direction) == -1) { speechOutput = "Saya tidak mengerti arah belokan."; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } else { var cardTitle = "Drone berputar " + arah; speechOutput = "Memutar" + arah; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }

function mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{ var strIntent = JSON.stringify(niat); console.log("mqttPublish: INTENT teks = " + strIntent); // client.publish("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish(config.topic, strIntent, false); klien.akhir(); client.on("close", (function () { console.log("MQTT CLIENT CLOSE - anggap sudah selesai, berhasil. "); ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); })); client.on("error", (fungsi (err, diberikan) { console.log("MQTT CLIENT ERROR!! " + err); })); }

// --------------- Pembantu yang membangun semua tanggapan -----------------------

function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { return { outputSpeech: { type: "PlainText", text: output }, card: { type: "Simple", title: title, content: output }, reprompt: { outputSpeech: { ketik: "PlainText", teks: repromptText } }, shouldEndSession: shouldEndSession } } function buildResponse(sessionAttributes, speechletResponse) { return { versi: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse } }

Direkomendasikan: