Πίνακας περιεχομένων:

Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Steps (with Pictures)
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Steps (with Pictures)

Βίντεο: Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Steps (with Pictures)

Βίντεο: Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Steps (with Pictures)
Βίντεο: Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi 2024, Ιούλιος
Anonim
Image
Image
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS

Γεια! Το όνομά μου είναι Armaan. Είμαι ένα αγόρι 13 ετών από τη Μασαχουσέτη. Αυτό το σεμινάριο δείχνει, όπως μπορείτε να συμπεράνετε από τον τίτλο, πώς να φτιάξετε ένα Raspberry Pi Drone. Αυτό το πρωτότυπο καταδεικνύει τον τρόπο με τον οποίο εξελίσσονται τα drones και επίσης πόσο μεγάλο ρόλο μπορούν να παίξουν στο μέλλον. Σίγουρα μπορώ να δω τον εαυτό μου να ξυπνάει σε 10 χρόνια και να ζητά από ένα drone να πάρει πρωινό για μένα. Το drone χρησιμοποιεί Amazon Alexa, Amazon Web Services, IoT (Internet of Things) και το πιο σημαντικό Raspberry Pi για να τρέξει. Έχει σκοπό να επιδείξει και να ενημερώσει σχετικά με τα drones και πώς βελτιώνονται κάθε μέρα. Ας ελπίσουμε ότι είστε επιτυχημένοι και μάθετε για τα drones στη διαδικασία. Καλή επιτυχία και ευχαριστώ που διαβάσατε. -Αρμαάν

Προμήθειες

Για την κατασκευή του πρωτοτύπου υπάρχουν διάφορες ανάγκες υλικού και λογισμικού. Χρησιμοποίησα ένα διαδικτυακό σεμινάριο από το The Drone Dojo για την κατασκευή του drone και ενσωμάτωσα τις αναφερόμενες τεχνολογίες. Για το drone μπορείτε να βρείτε τη λίστα με τα εξαρτήματα εδώ:

Λίστα ανταλλακτικών Drone

Απαιτήσεις λογισμικού:

  • Υπηρεσίες Ιστού Amazon
  • Ενα λάπτοπ
  • Mission Planer Software
  • Μπαλένα Έτσερ
  • Κάρτα MicroSD με αρχείο Raspbian βρίσκεται εδώ
  • Amazon Alexa, φυσική ή εικονική

Βήμα 1: Συγκέντρωση και κατανόηση τμημάτων

Συγκέντρωση και κατανόηση τμημάτων
Συγκέντρωση και κατανόηση τμημάτων

Κάθε μέρος που αναφέρεται στον κατάλογο προμηθειών είναι απαραίτητο, και έτσι είναι μια σαφής κατανόηση κάθε τμήματος. Μπορείτε να βρείτε τα μέρη στο διαδίκτυο και μόλις συγκεντρωθούν, συνεχίστε να διαβάζετε. Μια λίστα αναπαραγωγής του The Drone Dojo για πλήρη κατανόηση των τμημάτων μπορείτε να βρείτε εδώ. Μπορείτε να βρείτε μια εξήγηση 4 λεπτών στο κανάλι μου στο youtube εδώ. Όσον αφορά τα drones, τα μόνα μέρη, παρά τα όσα πιστεύουν οι περισσότεροι, δεν είναι μόνο κινητήρες και έλικες. Παρακάτω είναι οι βασικοί σκοποί κάθε μέρους.

Το Raspberry Pi με το Emlid Navio2

Αυτό το μέρος είναι σχεδόν ένας κεντρικός επεξεργαστής και το κύριο σημείο του drone. Το Raspberry Pi λειτουργεί όπως η CPU ενός υπολογιστή που στέλνει εντολές στο Navio2 για εκτέλεση μέσω PWM (Σήματα διαμόρφωσης παλμού πλάτους) σε άλλα μέρη του drone

2. Η ESC's (ηλεκτρονικοί ελεγκτές ταχύτητας)

Αυτά τα κίτρινα μέρη βρίσκονται κάτω από το πλαίσιο. Είναι 4 συνδεδεμένα στο Navio, ένα για κάθε κινητήρα. Μόλις λάβουν σήματα PWM, περιστρέφουν τους κινητήρες και ξεκινούν την πτήση.

3. Κινητήρες

Οι κινητήρες δεν χρειάζονται πολλές εξηγήσεις γιατί μάλλον τους γνωρίζετε. Περιστρέφουν και περιστρέφουν τις έλικες για να δημιουργήσουν ώθηση.

4. Έλικες

Οι έλικες δημιουργούν ώθηση για να πετάξει το drone. Περιστρέφονται στην ίδια κατεύθυνση με τους κινητήρες για να σηκώσουν το όχημα.

5. Η μονάδα μπαταρίας και ισχύος

Η μπαταρία LiPo τροφοδοτεί ολόκληρο το drone μέσω του πλαισίου χρησιμοποιώντας τη μονάδα ισχύος. Δίνει περίπου 15-20 λεπτά χρόνου πτήσης και λειτουργεί ως πηγή ενέργειας.

6. Το GPS

Το GPS επικοινωνεί με δορυφόρους για να καθορίσει τη θέση του κηφήνα. Καθορίζει το υψόμετρο, το γεωγραφικό πλάτος και το γεωγραφικό μήκος. Μπορεί να χρησιμοποιηθεί για Geofencing, σημεία διαδρομής, καθώς και για μετακίνηση σε συγκεκριμένες θέσεις ή κατευθύνσεις.

7. Η ενότητα τηλεμετρίας

Η ενότητα τηλεμετρίας συνδέει το drone μας με έναν σταθμό ελέγχου εδάφους, στην περίπτωσή μας Mission Planner, για παρακολούθηση.

8. Ο ελεγκτής και η μονάδα RC μαζί με τον κωδικοποιητή PPM

Ο ελεγκτής RC χρησιμοποιεί ραδιόφωνο για τη μετάδοση σημάτων και εντολών στη μονάδα RC για χειροκίνητο χειρισμό του drone. Ο κωδικοποιητής PPM μεταφράζει αυτά τα σήματα για την επεξεργασία και την εκτέλεση του Navio + RPI.

9. Το Πλαίσιο

Αυτό το κόκκινο και άσπρο πλαίσιο λειτουργεί ως βάση ή πλατφόρμα για τα άλλα μέρη που θα τοποθετηθούν. Το πλαίσιο είναι αεροδυναμικό και ελαφρύ, επομένως ιδανικό για την κατασκευή του drone.

Τώρα με γνώση κάθε μέρους, μπορούμε επιτέλους να κατασκευάσουμε το drone! Για το επόμενο βήμα!

Βήμα 2: Συναρμολόγηση του Drone

Συναρμολόγηση του Drone
Συναρμολόγηση του Drone

Αυτό το βήμα είναι ίσως το πιο δύσκολο από την άποψη της σωματικής προσπάθειας. Σας συνιστώ να ζητήσετε βοήθεια από άλλο άτομο ή να προσπαθήσετε να χρησιμοποιήσετε το χέρι βοήθειας στη λίστα ανταλλακτικών. Η διαδικασία είναι πολύ μεγάλη για να το δείξω εδώ, οπότε θα σας δώσω έναν άλλο σύνδεσμο που χρησιμοποίησα από το The Drone Dojo.

Χτίζοντας ένα Raspberry Pi Drone

Και πάλι, καθώς δεν θα μπω σε πολλές λεπτομέρειες, θα επισημάνω απλώς τα βασικά του κάθε βήματος.

1. Οργανώστε τα αναλώσιμά σας - Συγκεντρώστε τα υλικά μας και βεβαιωθείτε ότι είναι εύκολα προσβάσιμα

2. Σχεδιάστε την κατασκευή σας - Οργανώστε τα μέρη σας στο πλαίσιο για να σχεδιάσετε αυτό που θα φτιάξετε

3. Εργασία συγκόλλησης - Αυτή είναι η δουλειά που είναι λίγο δύσκολο να γίνει μόνος. Πρέπει να κολλήσετε τους χρυσούς συνδετήρες που συνοδεύουν τους κινητήρες στα ESC. Στη συνέχεια, πρέπει να πάρετε το κάτω μέρος του πλαισίου και να κολλήσετε τα ESC στο κάτω πλαίσιο ή στον πίνακα διανομής ισχύος. Η μονάδα μπαταρίας θα κολληθεί επίσης στον πίνακα διανομής ενέργειας

4. Ρύθμιση του πλαισίου - Στη συνέχεια πρέπει να βιδώσετε το πάνω μέρος του πλαισίου μαζί με τους βραχίονες. Στη συνέχεια, μπορείτε να επισυνάψετε το Raspberry Pi από πάνω με όποιον τρόπο θέλετε. (Χρησιμοποίησα κολλητική ταινία). Στη συνέχεια, μπορείτε να ασφαλίσετε τα ESC στα χέρια με φερμουάρ. Τώρα σχεδόν τελειώσαμε.

5. Σύνδεση του ελεγκτή RC στον δέκτη - Δοκιμάστε να ακολουθήσετε τις οδηγίες στην παραπάνω λίστα αναπαραγωγής για να συνδέσετε τον ελεγκτή RC χρησιμοποιώντας ένα ESC.

6. Ολοκλήρωση εξαρτημάτων σε πλαίσιο - Κολλητική ταινία ή λουρί στη μονάδα τηλεμετρίας στο πλαίσιο. Κολλήστε με ταινία τον κωδικοποιητή PPM σε ένα βραχίονα επίσης. Τώρα μπορείτε να συνδέσετε τον κωδικοποιητή ESC και PPM στο Navio.

7. GPS Mount + Μπαταρία - Συναρμολογήστε το GPS Mount με τις διάφορες βίδες και κομμάτια. Χρησιμοποιώντας φερμουάρ, συνδέστε το GPS στο πλαίσιο. Δεν χρησιμοποίησα απαραίτητα το GPS Mount λόγω της ευθραυστότητάς του, αλλά εξαρτάται από εσάς. Στη συνέχεια, μπορείτε να τοποθετήσετε την μπαταρία μεταξύ του Power Dist. Σανίδα. Έδεσα και κολλήσα την μονάδα ισχύος και στο πλαίσιο. Τώρα το υλικό σας έχει σχεδόν ρυθμιστεί. Τώρα για το μέρος που περιμέναμε!

8. Εγκατάσταση των προπέλων !!! - Μπορείτε να σφίξετε τις έλικες χρησιμοποιώντας το γράφημα που αναφέρεται στη λίστα αναπαραγωγής. Στη συνέχεια, μπορείτε να συνδέσετε τα ESC στους κινητήρες και τελικά τελειώσαμε την κατασκευή του drone.

Το λογισμικό είναι επόμενο, έτσι και μετά!

Βήμα 3: Διαμόρφωση Raspberry Pi και GCS (Mission Planner)

Διαμόρφωση Raspberry Pi και GCS (Mission Planner)
Διαμόρφωση Raspberry Pi και GCS (Mission Planner)

Και πάλι, μπορείτε να βρείτε πιο λεπτομερείς οδηγίες στη λίστα αναπαραγωγής από το τελευταίο βήμα. Ωστόσο, πιθανότατα γνωρίζετε πώς να ρυθμίσετε το RasPi. Αυτή τη φορά, όμως, το κάνουμε ακέφαλο. Χρησιμοποιήστε το Balena Etcher για να κάψετε το λειτουργικό σύστημα από τον ιστότοπο του Navio OS στην κάρτα MicroSD. Ενώ είναι συνδεδεμένο στον υπολογιστή σας, μεταβείτε στο wpa supplicant χρησιμοποιώντας το σημειωματάριο ++. Μετά από αυτό, εισαγάγετε το ssid και τον κωδικό πρόσβασης για το Raspberry Pi για σύνδεση στο WiFi σας. Στη συνέχεια, πρέπει να προσθέσετε ένα αρχείο που ονομάζεται SSH. Αυτό μπορεί να γίνει μέσω της γραμμής εντολών ή άλλης μεθόδου. Τώρα μπορούμε να κάνουμε SSH. Μπορείτε να χρησιμοποιήσετε τη γραμμή εντολών ή το Putty. Χρησιμοποίησα τη γραμμή εντολών και πληκτρολόγησα "ssh pi@navio" για σύνδεση στην περίπτωσή μου, ή μπορείτε να βρείτε τη διεύθυνση IP και το ssh με αυτόν τον τρόπο. Κατά τη σύνδεση, χρησιμοποιήστε αυτό το βίντεο για να ρυθμίσετε και να διαμορφώσετε το Navio. Για να ρυθμίσετε την τηλεμετρία πρέπει πρώτα να κάνετε μια επεξεργασία στο Raspberry Pi. Ακολουθήστε αυτό για να κάνετε την επεξεργασία και προσπαθήστε να συνδεθείτε στο Mission Planner. Εάν η τηλεμετρία δεν λειτουργεί, μπορείτε να αναιρέσετε την επεξεργασία και να συνδεθείτε χρησιμοποιώντας μια σύνδεση UDB εισάγοντας την IP του GCS (Σταθμός εδάφους ελέγχου όπως φορητός υπολογιστής). Μόλις συνδεθείτε στο Mission Planner, μπορείτε να χρησιμοποιήσετε τον οδηγό εγκατάστασης για να βαθμονομήσετε όλα τα μέρη του drone. Εάν χρειάζεστε βοήθεια, ανατρέξτε ξανά στη λίστα αναπαραγωγής. Συνήθως, κάθε φορά που εγκαθιστάτε, υπάρχει σχεδόν πάντα ένα σφάλμα. Η αντιμετώπιση προβλημάτων είναι ένα από τα μεγαλύτερα μέρη αυτού του έργου. Δεν μπορώ πραγματικά να σας βοηθήσω εκεί καθώς δεν γνωρίζω τα λάθη σας, αλλά τα περισσότερα σφάλματα μπορούν να διορθωθούν με τη βοήθεια του διαδικτύου. Αφού όλα είναι έτοιμα, τότε το drone είναι έτοιμο να πετάξει! Μπορείτε να ρυθμίσετε τον ελεγκτή RC και τις λειτουργίες πτήσης στο Mission Planner. Προσπαθήστε να κρατήσετε το αριστερό ραβδί προς τα κάτω δεξιά για πέντε δευτερόλεπτα για να οπλίσετε το drone. Δεν συνιστώ να πετάτε χωρίς να δείτε ένα σεμινάριο γιατί το drone είναι πολύ εύθραυστο και σπάει εύκολα. Για μένα, την πρώτη φορά που το πέταξα, έσπασα το GPS Mount και μερικές έλικες. Εάν δεν χρειάζεστε φωνητικό έλεγχο, τότε μπορείτε να σταματήσετε εδώ. Για να μάθετε για το AWS και τον προγραμματισμό, το drone συνεχίστε!

Βήμα 4: Προγραμματισμός του Drone για να πετάξει με Python

Προγραμματισμός του Drone για να πετάξει με Python
Προγραμματισμός του Drone για να πετάξει με Python

Πριν μπούμε στο AWS, θα πρέπει πρώτα να καταλάβουμε πώς να προγραμματίσουμε το drone να πετάει. Μετά την αρχική ρύθμιση, η ενσωμάτωση του φωνητικού ελέγχου δεν πρέπει να είναι πολύ δύσκολη. Το πρώτο πράγμα που μπορούμε να προσπαθήσουμε να το καταλάβουμε είναι να κάνουμε ένα απλό πρόγραμμα απογείωσης και προσγείωσης. Μετά τη ρύθμιση του Raspberry Pi, μπορούμε να κάνουμε SSH ξανά σε αυτό. Μπορείτε να κοιτάξετε ξανά τη λίστα αναπαραγωγής ή να ακολουθήσετε τις οδηγίες μου.

1. Αρχικά ας κατεβάσουμε τον πηγαίο κώδικα ArduPilot σε έναν κατάλογο στο Raspberry Pi

mkdir src

Στη συνέχεια, λάβετε τα αρχεία από το GitHub χρησιμοποιώντας τον κλώνο git

git clone -b Copter -3.6.11

Τώρα, ας μεταβούμε στο /src /ardupilot

cd src

cd ardupilot

Τώρα, ας προετοιμάσουμε τα αρχεία προέλευσης

git submodule update --init -recursive

2. Στη συνέχεια, πρέπει να μεταγλωττίσουμε το υλικολογισμικό στο Raspberry Pi

Βεβαιωθείτε ότι έχετε μεταβεί στο/src/ardupilot/με cd πριν κάνετε τα επόμενα βήματα

Στη συνέχεια, για να συγχωνεύσετε συγκεκριμένα στο Navio χρησιμοποιώντας

./waf διαμόρφωση --board = navio2

Στη συνέχεια, μπορείτε να κάνετε μεταγλώττιση με

./waf -δοχείο στόχων/arducopter

3. Μπορούμε τώρα να εγκαταστήσουμε τον πηγαίο κώδικα στο Navio

Αρχικά, αφήστε να μεταβείτε στον σωστό κατάλογο.

cd/etc/systemd/system

Στη συνέχεια, επεξεργαστείτε το αρχείο

sudo vi arducopter.service

Όπου λέει ExecStart, εισαγάγετε το ακόλουθο αντί για αυτό που υπάρχει ήδη

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

Τώρα, για να θέσουμε σε λειτουργία τον πηγαίο κώδικα ardupilot, μπορούμε να χρησιμοποιήσουμε

sudo systemctl δαίμονας-επαναφόρτωση

Στη συνέχεια, μπορούμε να κάνουμε επανεκκίνηση με

sudo systemctl επανεκκίνηση arducopter

Με το τελευταίο βήμα, ολοκληρώσαμε επιτέλους τη ρύθμιση του ArduPilot στο drone μας

4. Εγκατάσταση του DroneKit

Το DroneKit είναι το λογισμικό που θα χρησιμοποιήσουμε για να προγραμματίσουμε το drone να πετάξει. Για να κατανοήσετε μερικούς από τον κώδικα, μπορείτε να βρείτε την τεκμηρίωση εδώ. Πρώτα πρέπει να εγκαταστήσουμε το πακέτο στο drone μας πριν γράψουμε ένα σενάριο.

Μπορούμε να εγκαταστήσουμε το πακέτο python με

pip install dronekit == 2.9.1

Αυτή μπορεί να είναι ή να μην είναι η νεότερη έκδοση, αλλά είναι αυτή που χρησιμοποίησα για να μπορώ να βοηθήσω στην αντιμετώπιση προβλημάτων.

Για να ελέγξουμε αν είναι εγκατεστημένο, μπορούμε να κάνουμε ένα

πάγωμα pip | grep dronekit

Τώρα είμαστε επιτέλους έτοιμοι να φτιάξουμε το πρώτο μας σενάριο python

5. takeoff_and_land.py

ΠΡΟΕΙΔΟΠΟΙΗΣΗ! Προτείνω να δημιουργήσετε μια βασική κατανόηση του python, ώστε να μπορείτε να μάθετε και να κατανοήσετε τον κώδικα. Αν θέλετε να γράψετε μόνοι σας το πρόγραμμα ακολουθήστε αυτό το βίντεο.

## Πρώτα μην δημιουργήσετε έναν κατάλογο για να αποθηκεύσετε αυτόν τον κώδικα

cd dk ## Εάν θέλετε να το κάνετε μόνοι σας, χρησιμοποιήστε vi takeoff_and_land.py ## για να δημιουργήσετε ένα πρόγραμμα

Διαφορετικά, μπορείτε να ρίξετε μια ματιά ή να χρησιμοποιήσετε το συνημμένο αρχείο και να χρησιμοποιήσετε ένα πρωτόκολλο μεταφοράς αρχείων. Μπορούμε να δοκιμάσουμε αυτό το πρόγραμμα στη συνέχεια. Πρώτα για να διευκρινίσουμε ότι είναι ένα αρχείο python που πρέπει να χρησιμοποιήσουμε

chmod +x takeoff_and_land.py

Στη συνέχεια, για να δοκιμάσετε να χρησιμοποιήσετε τον ακόλουθο κώδικα για εκτέλεση

python takeoff_and_land.py --σύνδεση 127.0.0.1:14550

Την πρώτη φορά δεν λειτούργησε ούτε σε μένα. Εάν υπάρχει χρονικό όριο σύνδεσης, μην ανησυχείτε ότι μπορείτε να κάνετε κάτι. Ανοίξτε μια άλλη προτροπή και ssh. Μπορείτε να δοκιμάσετε να εγκαταστήσετε κάτι που ονομάζεται mavproxy και να δοκιμάσετε να το εκτελέσετε. Μετά από αυτό, μπορείτε να εκτελέσετε και τα δύο ταυτόχρονα. Αυτό θα βοηθήσει στη σύνδεση του drone. Μόλις γίνει αυτό, έχω μια πρόκληση για εσάς. Προσπαθήστε να καταλάβετε τι κάνει το άλλο πρόγραμμα (set_velocity_body.py) και πώς να το κάνετε να λειτουργεί. Αν το κάνετε, καλή δουλειά.

6. Εμπρός!

Μπορούμε τώρα να χρησιμοποιήσουμε αυτήν τη γνώση για να κάνουμε το drone μας ελεγχόμενο τη φωνή. Ο έλεγχος Alexa drone χρησιμοποιεί πολλά από αυτά τα χαρακτηριστικά και πολλά άλλα. Καλή επιτυχία και συνέχεια!

Βήμα 5: Χρήση των υπηρεσιών Amazon Alexa και Amazon Web Services για την ενσωμάτωση του φωνητικού ελέγχου

Χρήση Amazon Alexa και Amazon Web Services για την ενσωμάτωση του φωνητικού ελέγχου
Χρήση Amazon Alexa και Amazon Web Services για την ενσωμάτωση του φωνητικού ελέγχου
Χρήση Amazon Alexa και Amazon Web Services για την ενσωμάτωση του φωνητικού ελέγχου
Χρήση Amazon Alexa και Amazon Web Services για την ενσωμάτωση του φωνητικού ελέγχου

Αυτό το βήμα είναι ένα από τα λιγότερο τεκμηριωμένα. Αυτό σημαίνει ότι θα είναι το πιο δύσκολο να αντιμετωπιστεί. Απλώς για να δουλέψω μου πήρε περίπου ένα μήνα, ίσως και περισσότερο. Το πιο σημαντικό πράγμα εδώ είναι να είστε υπομονετικοί. Αυτό το χαρακτηριστικό, εάν εφαρμοστεί στην πραγματική ζωή, μπορεί να αλλάξει τη ζωή. Μπορείτε απλά να πείτε στην Alexa να πάρει τα παντοπωλεία σας αντί να πάτε εσείς. Φαντάσου το! Οπότε, χωρίς άλλο λόγο, ας ασχοληθούμε!

1. Εγγραφή του Raspberry Pi ως Πράγματος στο AWS IoT

Για να χρησιμοποιήσουμε το IoT (Internet of Things), χρειαζόμαστε ένα πράγμα. Πρέπει λοιπόν να συνδεθούμε στην Κονσόλα AWS για να χρησιμοποιήσουμε πρώτα το AWS IoT. Στη συνέχεια, μεταβείτε στο IoT Core. Μόλις βρεθείτε εκεί, πρέπει να κάνετε κλικ στη Διαχείριση και, στη συνέχεια, να δημιουργήσετε ένα πράγμα. Αφού προσθέσουμε ένα όνομα, για σύνδεση, χρειαζόμαστε ένα πιστοποιητικό. Θα συνιστούσα να κάνετε κλικ στην πιστοποίηση με ένα κλικ. Στη συνέχεια, αφού δείτε την οθόνη του πιστοποιητικού, βεβαιωθείτε ότι έχετε κατεβάσει κάθε κλειδί, συμπεριλαμβανομένης της αρχικής CA. Στη συνέχεια, μπορείτε να πάτε και να ολοκληρώσετε τη δημιουργία του πράγματος. Στη συνέχεια πρέπει να δημιουργήσουμε μια πολιτική. Επιστρέψτε στον πυρήνα IoT. Στη συνέχεια, κάντε κλικ στο ασφαλές και κάντε κλικ στις πολιτικές. Στη συνέχεια, πατήστε Δημιουργία πολιτικής. Στη συνέχεια, μπορείτε να δημιουργήσετε ένα όνομα και να προσθέσετε πόρους. Κάτω από δράση, πληκτρολογήστε iot * και πληκτρολογήστε * κάτω από τον πόρο και πατήστε επιτρέψτε το αποτέλεσμα. Στη συνέχεια, επιστρέψτε στο πράγμα σας και μεταβείτε στο πιστοποιητικό σας. Μόλις βρεθείτε εδώ, κάντε κλικ στις πολιτικές. Στη συνέχεια, μπορείτε να επισυνάψετε την πολιτική σας για αυτό το πράγμα και είναι έτοιμο!

2. Ρύθμιση κώδικα στο Raspberry Pi και αλληλεπίδραση με το IoT

Για αυτό το μέρος, θα χρειαστείτε έναν πελάτη SFTP (χρησιμοποίησα το WinSCP) για μεταφορά αρχείων. Κατά τη σύνδεση με το Raspberry Pi, θα χρειαστεί να έχουμε τα κλειδιά πιστοποιητικού στο χέρι. Πρέπει να μεταφέρετε τα βασικά αρχεία στο Raspberry Pi. Θα πρέπει επίσης να εγκαταστήσετε pip το AWSIoTPythonSDK στο Raspberry Pi. Στη συνέχεια, μεταβείτε στον κατάλογο dk στο Raspberry Pi. Χρησιμοποιείτε το αρχείο Alexa Drone Control που έδωσα για επικοινωνία με το IoT. Για να χρησιμοποιήσω αυτό το αρχείο, χρησιμοποίησα ένα σενάριο Shell για την εκκίνηση. Θα δείξω τον παρακάτω κώδικα καθώς δεν μπορώ να ανεβάσω το αρχείο για κάποιο λόγο. Εάν το πρόγραμμα δεν λαμβάνει μηνύματα από το AWS IoT κατά τη δοκιμή, μην ανησυχείτε! Αυτό μπορεί να είναι δικό μου λάθος, καθώς το αρχείο ελέγχου Alexa Drone μπορεί να μην ταιριάζει στο πράγμα σας. Έτσι, για να το διορθώσετε, επιστρέψτε στο AWS IoT και πατήστε Learn στο αριστερό πλαίσιο. Ακολουθήστε τις οδηγίες και ίσως χρειαστεί να κάνετε επανεκκίνηση. Συγνώμη για αυτό. Μόλις το IoT ξεκινήσει να λειτουργεί με το πρόγραμμα στο RasPi, μπορείτε να ενσωματώσετε τον κώδικα dronekit από το αρχείο Alexa Drone Control που έδωσα. Στη συνέχεια, χρησιμοποιήστε το Shell Script που έδωσα με τα πιστοποιητικά σας και το Rest API Endpoint από το IoT.

# διακοπή δέσμης ενεργειών στο Erroret -e # Ελέγξτε αν υπάρχει ριζικό αρχείο CA, κατεβάστε αν όχι [! -φ./root-CA.crt]; στη συνέχεια printf "\ nΛήψη πιστοποιητικού AWS IoT Root CA από το AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python εάν δεν είναι ήδη εγκατεστημένο αν [! -δ. /aws-iot-device-sdk-python]; στη συνέχεια printf "\ nΕγκατάσταση AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# εκτέλεση pub/sub δείγμα εφαρμογής χρησιμοποιώντας πιστοποιητικά που έχουν ληφθεί στο πακέτο

printf "\ nΕκτέλεση παμπ/υποδείγματος εφαρμογής… / n" python dk/AlexaDroneControl.py -σύνδεση 127.0.0.1:14550 -e "Your IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Αυτό δεν θα λειτουργήσει για όλους εσάς, καθώς τα ονόματα είναι διαφορετικά. Αντί για τα κλειδιά που χρησιμοποίησα αντικαταστήστε με τα ονόματά σας όταν μεταφέρετε το αρχείο. Βεβαιωθείτε ότι έχετε βγει από το dk πριν μεταφέρετε το αρχείο! Αυτό πρέπει να είναι το μόνο που έχετε να κάνετε προς το παρόν.

3. Δημιουργήστε την Alexa Skill σας

Αυτό το βήμα φαίνεται πολύ πιο δύσκολο από ότι είναι στην πραγματικότητα. Πρώτον, πρέπει να συνδεθούμε στην κονσόλα Alexa Developer. Στη συνέχεια, απλώς πατήστε δημιουργία δεξιοτήτων. Όταν σας ζητά να επιλέξετε ένα μοντέλο για την ικανότητά σας, απλώς πατήστε προσαρμοσμένο. Όταν ζητά να επιλέξετε μια μέθοδο, πατήστε την παροχή δική σας. Μπορείτε να το ονομάσετε όπως θέλετε. Δεν απαιτείται πρότυπο, οπότε επιλέξτε έναρξη από την αρχή. Στη συνέχεια, αφού δημιουργήσετε την ικανότητά σας, θα πρέπει να φτάσετε στην οθόνη του Skill builder με μια λίστα ελέγχου στα δεξιά. Από εδώ, μπορούμε να ξεκινήσουμε να αναπτύσσουμε τις ικανότητές μας. Πρώτο στη λίστα ελέγχου είναι το όνομα της επίκλησης. Αυτό θα πείτε στην Alexa να επικαλεστεί την ικανότητά σας. Για μένα, απλώς έθεσα το όνομα της επίκλησής μου ως drone. Τώρα μπορούμε να πάμε στις προθέσεις, τις εκφράσεις και τις θέσεις μας. Εδώ, μπορείτε να κάνετε εντολές για το drone όπως να ανεβείτε 1 μέτρο ή να πάτε δεξιά ή κάτω. Το δικό μου λειτουργεί πραγματικά με ένα μέτρο προς το παρόν. Μπορείτε να κάνετε κλικ στο πρόγραμμα επεξεργασίας JSON στο κάτω μέρος του αριστερού πλαισίου. Στη συνέχεια, μπορείτε να επικολλήσετε τον ακόλουθο κώδικα σε αυτό.

Αφού επικολλήσετε τον κώδικα στο πρόγραμμα επεξεργασίας JSON, μπορείτε να κάνετε κλικ στο τρίτο βήμα της λίστας ελέγχου και θα δημιουργήσει το μοντέλο αλληλεπίδρασης για εσάς. Με αυτό το βήμα, θα έχετε τελειώσει προς το παρόν. Μπορείτε να αφήσετε την υποδοχή τελικού σημείου κενή προς το παρόν!

Βήμα 4: Δημιουργία της λειτουργίας σας Λάμδα

Τώρα, αυτό το βήμα είναι ένα που θα πρέπει να καταλάβετε μόνοι σας. Θα σας πω πώς να το συνδέσετε με την Alexa Skill, αλλά θα πρέπει να το κωδικοποιήσετε μόνοι σας. Έτσι, πρώτα μεταβείτε στην κονσόλα διαχείρισης AWS. Στη συνέχεια, πηγαίνετε στη Λάμδα. Στη συνέχεια, μπορείτε να δημιουργήσετε μια συνάρτηση που να την ονομάζει όπως θέλετε. Φροντίστε να το συντάξετε από την αρχή και να κάνετε το χρόνο εκτέλεσης όποια γλώσσα προγραμματισμού θέλετε. Χρησιμοποίησα το Node.js. Για να προσθέσετε την Alexa Skill, προσθέστε μια σκανδάλη και επιλέξτε Alexa Skills Kit (ASK). Αντιγράψτε το Lambda ARN και επιστρέψτε στην Alexa Skill. Τώρα, πηγαίνετε στο τελικό σημείο. Μπορείτε να επικολλήσετε το ARN, να αποθηκεύσετε και να δημιουργήσετε ένα νέο μοντέλο. Στη συνέχεια, πάρτε το Alexa Skill ID και επικολλήστε το στην ενότητα σκανδάλης, όπου σας ζητά στη Λάμδα. Στη συνέχεια, μετακινηθείτε προς τα κάτω στη Λάμδα και βρείτε τις βασικές ρυθμίσεις και κάντε το χρονικό όριο 10 δευτερολέπτων. Τώρα, εξαρτάται από εσάς να καταλάβετε τον κώδικα. Για συμβουλές, μπορείτε να βρείτε τους παρακάτω ιστότοπους.

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

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

και μπορείτε να χρησιμοποιήσετε το αρχείο που επισυνάπτω, αλλά είναι ελλιπές και δεν θα λειτουργήσει.

/ *** Ελέγξτε το quadcopter APM / Pixhawk με τη φωνή σας, χρησιμοποιώντας Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = απαιτούν ('aws-iot-device-sdk'); var config = απαιτούν ("./ config"); var deviceName = "EchoDroneControl"; // αυτή η συσκευή είναι πραγματικά ο ελεγκτής var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (νέα ημερομηνία (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var client = null; // Δρομολογήστε το εισερχόμενο αίτημα με βάση τον τύπο (LaunchRequest, IntentRequest κ.λπ.) Το σώμα JSON του αιτήματος παρέχεται στην παράμετρο συμβάντος. export.handler = λειτουργία (συμβάν, πλαίσιο) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = περιβάλλον? if (event.session.application.applicationId! == app_id) {ctx.fail ("Μη έγκυρο αναγνωριστικό εφαρμογής"); } client = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Connected to 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.quest, event.session); ctx.succeed (); }} catch (e) {console.log ("EXCEPTION in handler:" + e); ctx.fail ("Εξαίρεση:" + e); }}; /*** Καλείται όταν ξεκινά η συνεδρία. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Καλείται όταν ο χρήστης ξεκινήσει την ικανότητα χωρίς να διευκρινίζει τι θέλει. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launRequest.requestId + ", sessionId =" + session.sessionId); // Αποστολή στην εκκίνηση των δεξιοτήτων σας. getWelcomeResponse (επανάκληση) } /*** Καλείται όταν ο χρήστης καθορίσει μια πρόθεση για αυτήν την ικανότητα. */function onIntent (synRequest, session) {//, callback) {console.log ("onIntent requestId =" + purposeRequest.requestId + ", sessionId =" + session.sessionId); var πρόβλεψη = purposeRequest.intent, purposeName = intReest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (purposeRequest)); var callback = null; // Αποστολή στους χειριστές πρόθεσης των δεξιοτήτων σας εάν ("GoIntent" === purposeName) {doGoIntent (πρόθεση, συνεδρία); } else if ("CommandIntent" === purposeName) {doCommandIntent (πρόθεση, συνεδρία); } else if ("TurnIntent" === purposeName) {doTurnIntent (πρόθεση, συνεδρία); } else if ("HelpIntent" === purposeName) {getWelcomeResponse (); } else {ρίξε "Μη έγκυρη πρόθεση"; }} /*** Καλείται όταν ο χρήστης ολοκληρώσει τη συνεδρία. * Δεν καλείται όταν η ικανότητα επιστρέφει shouldEndSession = true. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Προσθήκη λογικής εκκαθάρισης εδώ} // --------------- Λειτουργίες που ελέγχουν τη συμπεριφορά της δεξιότητας -------------------- --- συνάρτηση getWelcomeResponse () {// Αν θέλαμε να προετοιμάσουμε την περίοδο λειτουργίας για να έχουμε κάποια χαρακτηριστικά θα μπορούσαμε να τα προσθέσουμε εδώ. var sessionAttributes = {}; var cardTitle = "Καλώς ορίσατε"; var speechOutput = "Καλώς ορίσατε στο DRONE CONTROL."; // TODO: είναι το drone online ή εκτός σύνδεσης; Αν είναι online, είναι ARMED; var repromptText = "Drone έτοιμο για εντολή."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** χειρίζεται την πρόθεση GO. */ function doGoIntent (πρόθεση, συνεδρία, επανάκληση) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var διεύθυνση = purpose.slots. Direction.value; var distance = purpose.slots. Distance.value; var unit = purpose.slots. Unit.value; var validDirections = ["εμπρός", "προς τα εμπρός", "προς τα πίσω", "πίσω", "δεξιά", "αριστερά", "πάνω", "κάτω", "ευθεία", "μπροστά", "ευθεία μπροστά"]; var validUnits = ["πόδι", "πόδια", "μέτρο", "μέτρα", "αυλή", "ναυπηγεία"]; repromptText = "Πείτε μου πόσο μακριά και σε ποια κατεύθυνση."; var fail = false? // επικύρωση εισόδων εάν (! (parseInt (απόσταση)> = 1)) {speechOutput = "Δεν κατάλαβα την απόσταση που θέλετε να διανύσω."; fail = true? ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Δεν κατάλαβα την κατεύθυνση που θέλετε να ταξιδέψω."; fail = true? ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Δεν κατάλαβα τη μονάδα που θέλετε να ταξιδέψω."; fail = true? ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Go drone" + direction + "" + distance + "" + unit; speechOutput = "Μετάβαση" + κατεύθυνση + "" + απόσταση + "" + μονάδα; mqttPublish (πρόθεση, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)? }}

συνάρτηση doCommandIntent (πρόθεση, συνεδρία, επανάκληση) {

// var cardTitle = "ΠΑΡΑΚΟΛΟΥΘΗΣΗ Drone …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Πείτε μου ποια είναι η εντολή για το drone."; var task = purpose.slots. Task.value; var validTasks = ["εκτόξευση", "προσγείωση", "r. t. l.", "κράτημα", "παραμονή", "διακοπή", "επιστροφή στην εκτόξευση", "διακοπή"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Δεν κατάλαβα την εντολή."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Εκτέλεση εντολής Drone" + εργασία; speechOutput = "Εκτέλεση εντολής" + εργασία; mqttPublish (πρόθεση, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

συνάρτηση doTurnIntent (πρόθεση, συνεδρία, επανάκληση) {

// var cardTitle = "Στροφή Drone …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Πείτε μου πώς θέλετε να γυρίσετε το drone."; var διεύθυνση = purpose.slots. Direction.value; var validDirections = ["δεξιά", "αριστερά", "γύρω"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Δεν μπορούσα να καταλάβω την κατεύθυνση της στροφής."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Περιστροφή κηφήνας" + κατεύθυνση; speechOutput = "Στροφή" + κατεύθυνση; mqttPublish (πρόθεση, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)? }}

λειτουργία mqttPublish (πρόθεση, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (πρόθεση); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - νομίζει ότι έγινε, με επιτυχία."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("σφάλμα", (λειτουργία (λάθος, παραχώρηση) {console.log ("MQTT CLIENT ERROR !!" + λάθος);})); }

// --------------- Βοηθοί που δημιουργούν όλες τις απαντήσεις -----------------------

συνάρτηση buildSpeechletResponse (τίτλος, έξοδος, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} function buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, answer: speechletResponse}}

Συνιστάται: