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

Φωτογραφική κάμερα RaspberryPI - MagicBox: 13 βήματα (με εικόνες)
Φωτογραφική κάμερα RaspberryPI - MagicBox: 13 βήματα (με εικόνες)

Βίντεο: Φωτογραφική κάμερα RaspberryPI - MagicBox: 13 βήματα (με εικόνες)

Βίντεο: Φωτογραφική κάμερα RaspberryPI - MagicBox: 13 βήματα (με εικόνες)
Βίντεο: ΣΦΥΡΙΚΤΗΡΑ ΘΑΝΑΤΟΥ τη νύχτα ΣΤΟ ΝΕΚΡΟΤΑΦΕΙΟ / Το φάντασμα ενός παιδιού στο βίντεο / Αζτέκων Death W 2024, Νοέμβριος
Anonim
Image
Image
Χτίζω
Χτίζω

Πριν από λίγο καιρό, είχα αυτή την τρελή ιδέα να δημιουργήσω μια φωτογραφική μηχανή από ένα Raspberry PI. Στην πόλη μου, υπήρχε μια μικρή παράσταση όπου οι άνθρωποι πήγαιναν και έδειχναν τι έφτιαχναν ή έφτιαχναν χρησιμοποιώντας ηλεκτρονικά, υπολογιστές κλπ… wasμουν σαν το φτωχό ανθρωποποιό Maker Faire, αλλά σε τοπικό επίπεδο.

Ερχόταν ένας και, μαζί με τη γυναίκα μου, χτίζουμε αυτό το πράγμα.

Πώς λειτουργεί ?

Πατάτε το μπλε κουμπί - αρχίζει να αναβοσβήνει - και μετά από 3 δευτερόλεπτα τραβάτε μια φωτογραφία. Στην άλλη πλευρά της κάμερας υπάρχει μια οθόνη που δείχνει αντίστροφη μέτρηση και μετά τη λήψη της εικόνας, η προεπισκόπηση της φωτογραφίας.

Μπορείτε τώρα να επιλέξετε να το στείλετε στο Twitter και το Facebook ή να το ακυρώσετε και να δοκιμάσετε ξανά. Είναι τόσο απλό.

Όλα είναι προγραμματισμένα σε Python, χρησιμοποιώντας το PI framebuffer - Δεν χρησιμοποιούνται Xorg, δεν χρησιμοποιούνται γραφικά γραφικών.

Εδώ είναι ένα βίντεο από το έργο που λειτουργεί

Προμήθειες

  • Raspberry PI (χρησιμοποιώ την έκδοση 2)
  • Raspberry PI Camera (Χρησιμοποιώντας την έκδοση 1)
  • 3x Κουμπιά ώθησης Big Dome
  • TFT/LCD οθόνη με VGA/HDMI
  • MDF
  • Μεταλλικοί μεντεσέδες, βίδες κλπ.
  • Ηλεκτρικά εργαλεία
  • Ελεύθερος χρόνος και πολλή διασκέδαση

Βήμα 1: Δημιουργία

Χτίζω
Χτίζω
Χτίζω
Χτίζω

Το χτίσιμο ήταν διασκεδαστικό. Πολλή κοπή, βαφή και διάτρηση.

Χρησιμοποίησα πάνελ MDF για τη δημιουργία της βασικής δομής της κάμερας. Είναι ελαφριά και εύκολο να δουλέψεις μαζί τους. Επίσης, ήταν ένα είδος ξύλου που μπόρεσε να κόψει το μηχάνημα Laser στο τοπικό Fablab.

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

Βήμα 2: Κάμερα

ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ
ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ
ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ
ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ
ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ
ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ

ΦΩΤΟΓΡΑΦΙΚΗ ΜΗΧΑΝΗ

Η κάμερα είναι ένα κουτί με τις ακόλουθες διαστάσεις: 60cm x 40cm x 30cm Η δική σας μπορεί να είναι μικρότερη, μεγαλύτερη, εξαρτάται από εσάς. Απλά πρέπει να προσαρμόσετε την οθόνη που πρόκειται να χρησιμοποιήσετε. Τα πάνελ MDF κόπηκαν με λέιζερ στο τοπικό Fablab. Υπάρχει ανάγκη για 3 οπές στο πίσω μέρος - δύο μεγάλα κουμπιά θόλου και ένα για την οθόνη. Μπροστά, 2 οπές - μία για ένα μεγάλο κουμπί θόλου και μια άλλη - μικρότερη - για την κάμερα Raspberry PI. Δεν έχω συγκεκριμένες μετρήσεις - απλά φανταστείτε μια κάμερα και χρησιμοποιήστε αυτήν.

Βήμα 3: Παρακολούθηση

Οθόνη
Οθόνη
Οθόνη
Οθόνη
Οθόνη
Οθόνη

Οθόνη

Το στήριγμα της οθόνης έγινε προσθέτοντας μικρά κομμάτια ξύλου για να το στηρίξετε στις διαστάσεις του.

Wasταν λωρίδα από το πλαστικό περίβλημα και στερεώθηκε στη θέση του με βίδες. Για την ανύψωση, χρησιμοποιήθηκαν δύο υδραυλικοί μεντεσέδες (χρησιμοποιήθηκαν).

Βήμα 4: Διακόσμηση

Διακόσμηση
Διακόσμηση
Διακόσμηση
Διακόσμηση
Διακόσμηση
Διακόσμηση
Διακόσμηση
Διακόσμηση

Δεδομένου ότι μου αρέσει πολύ το στυλ του Fuji X-T30, πήγαμε και κάναμε κάτι παρόμοιο.

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

Για να προσομοιώσουμε τον φακό, χρησιμοποιήσαμε μόνο ένα στρογγυλό Tupperware αν κάναμε μια μικρή τρύπα για να καθίσει η μονάδα κάμερας Raspberry PI.

Βήμα 5: Προγραμματισμός

Ο προγραμματισμός της κάμερας ήταν μια πρόκληση, αλλά ήταν εξαιρετικά διασκεδαστικός.

Δεν υπάρχει GUI - αυτό λειτουργεί στο CLI και λειτουργεί στην Python έκδοση 3.

Ξεκίνησα πρώτα δοκιμάζοντας και προγραμματίζοντας τα κουμπιά, έπειτα έβγαζα φωτογραφίες χρησιμοποιώντας τα ήδη διαθέσιμα εργαλεία και το Python API. Στη συνέχεια, προχώρησα στην επικάλυψη εικόνων στην έξοδο της κάμερας (για την αντίστροφη μέτρηση) και στη συνέχεια στην αλληλεπίδραση με το Twitter και το Facebook.

Αφού ήμουν άνετος με όλα αυτά, σαν παζλ, συναρμολόγησα όλα τα κομμάτια μαζί. Εδώ, προχωράμε με την ίδια διαδικασία. Ξεκινήστε αργά και μικρά και προχωρήστε γρήγορα και γρήγορα.

Αρχικά, ας ξεκινήσουμε διαμορφώνοντας το Raspberry PI

Βήμα 6: Προετοιμασία του Ras Rasberry PI

Προετοιμασία του Ras Rasberry PI
Προετοιμασία του Ras Rasberry PI
Προετοιμασία του Ras Rasberry PI
Προετοιμασία του Ras Rasberry PI
Προετοιμασία του Ras Rasberry PI
Προετοιμασία του Ras Rasberry PI

Δεν πρόκειται να εξηγήσω πώς να εγκαταστήσετε το Raspbian στο Raspberry PI - υπάρχουν πολλά σεμινάρια εκεί έξω, ακόμη και στον επίσημο ιστότοπο του Raspberry PI.

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

ΣΗΜΕΙΩΣΗ: Κατά την εκκίνηση με την κάμερα Raspberry PI, πρέπει να την συνδέσετε σε μια οθόνη. Μέχρι εκεί, όλα τα βήματα μπορούν να γίνουν χρησιμοποιώντας SSH.

Μετά την εκκίνηση στο Raspberry PI, πρέπει να ενεργοποιήσουμε την κάμερα Raspberry PI. Ας χρησιμοποιήσουμε το εργαλείο raspi-config για αυτό.

sudo raspi-config

  1. Επιλέξτε την επιλογή 5 - Επιλογές διασύνδεσης
  2. Επιλέξτε P1 - Ενεργοποίηση/Απενεργοποίηση σύνδεσης με την κάμερα Raspberry PI
  3. Πες ναι
  4. για ΟΚ
  5. Επιλέξτε Τέλος
  6. Επιλέξτε Ναι για επανεκκίνηση τώρα

Μετά την επανεκκίνηση, μπορούμε να προχωρήσουμε

Βήμα 7: Λογισμικό

Θα χρειαστούμε μερικές βιβλιοθήκες Python για να εγκατασταθούν. Αυτό έχει ενημερωθεί για την τελευταία έκδοση Raspbian - Buster

Αρχικά, ας ορίσουμε την Python 3 ως προεπιλογή. Ακολουθήστε αυτόν τον σύνδεσμο για να μάθετε πώς να το ρυθμίσετε SYSTEM WIDE

Βιβλιοθήκες:

  • python-pil.imagetk για χειρισμό εικόνων
  • python-rpi.gpio για πρόσβαση στους κωδικούς GPIO
  • python-picamera για πρόσβαση στην κάμερα Raspberry PI
  • Tweepy για να μοιραστείτε τη φωτογραφία στο twitter
  • facebook-sdk για κοινή χρήση σε μια σελίδα στο facebook

sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip

Χρησιμοποιήστε Python pip για να εγκαταστήσετε το facebook-sdk

sudo pip3 εγκαταστήστε το facebook-sdk

Βήμα 8: Προγραμματισμός - Προεπισκόπηση κάμερας

Image
Image
Προγραμματισμός - Προεπισκόπηση κάμερας
Προγραμματισμός - Προεπισκόπηση κάμερας
Προγραμματισμός - Προεπισκόπηση κάμερας
Προγραμματισμός - Προεπισκόπηση κάμερας

Μία από τις απαιτήσεις που έθεσα σε αυτό το έργο ήταν ότι αυτό το πρόγραμμα έπρεπε να εκτελεστεί σε λειτουργία CLI. Έτσι, πρέπει να εμφανίσουμε την εικόνα της κάμερας στην κονσόλα. Για αυτό, ας χρησιμοποιήσουμε την Python Picamera. Μετά από αυτό, ας χρησιμοποιήσουμε το pil.imagetk για να εμφανίσουμε μια επικάλυψη πάνω από την προεπισκόπηση της κάμερας

Το μικρό μας πρόγραμμα (πρόκειται να αναπτύξουμε μικρά προγράμματα μέχρι ένα μεγάλο στο τέλος) θα εμφανίζει την προεπισκόπηση της κάμερας.

#!/usr/bin/env python

εισαγωγή χρόνου εισαγωγή picamera από ώρα εισαγωγή camera sleep = picamera. PiCamera () # Ορίστε την ανάλυση που θέλετε camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) εκτός (KeyboardInterrupt, SystemExit): εκτύπωση ("Έξοδος …") camera.stop_preview ()

Για να το δοκιμάσετε απλά εκτελέστε το

python cameraPreview.py

Προεπισκόπηση της κάμερας με εικόνες στο επάνω μέρος

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

Δημιουργήστε μια εικόνα-p.webp" />

Ο ακόλουθος κώδικας θα επικαλύπτεται 1-p.webp

εισαγωγή εικόνας από PIL εισαγωγή εικόνας από ώρα εισαγωγή ύπνου με picamera. PiCamera () ως κάμερα: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Δοκίμασέ το:

python imageOverlay.py

Ας δημιουργήσουμε τώρα μια αντίστροφη μέτρηση με εικόνες επικάλυψης. Όπως έχετε δημιουργήσει την εικόνα 1.png, δημιουργήστε άλλες δύο εικόνες με 2 και 3 σε αυτές.

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

εισαγωγή picamera

από εισαγωγή PIL Εικόνα από ώρα εισαγωγής ύπνου με picamera. PiCamera () ως κάμερα: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # φόρτωση εικόνας img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # create pad = Image.new ('RGB', (((img1.size [0] + 31) / / 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), μέγεθος = img1.size) o.alpha = 128 o.layer = 3 ύπνος (2) #αφαίρεση προηγούμενης κάμερας επικάλυψης.αφαίρεση επικάλυψης (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad) tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 ύπνος (2) # αφαίρεση προηγούμενης κάμερας επικάλυψης. αφαίρεση overlay (o) pad.paste (img3, (0, 0)) o = κάμερα. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 ύπνος (2)

Τώρα εκτελέστε το:

python imageOverlayCounter.py

Και δείτε την αντίστροφη μέτρηση

Ουάου - Κάποιος πολύς κώδικας και καμία λήψη φωτογραφίας … Ας το λύσουμε συνδυάζοντας όλα μαζί - προεπισκόπηση κάμερας, αντίστροφη μέτρηση και λήψη φωτογραφίας

εισαγωγή εικόνας από PIL εισαγωγή εικόνας από χρόνο εισαγωγής ύπνου def overlayCounter (): # φόρτωση εικόνας img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1-p.webp

Δοκίμασέ το:

python pictureWithTimer.py

Και εδώ έχουμε τον Yoda

Βήμα 9: Προγραμματισμός - Big Dome Push Button

Προγραμματισμός - Big Dome Push Button
Προγραμματισμός - Big Dome Push Button
Προγραμματισμός - Big Dome Push Button
Προγραμματισμός - Big Dome Push Button

Το μεγάλο κουμπί θόλου είναι ένα μεγάλο στρογγυλό κουμπί - με διάμετρο περίπου 100mm έξω με ένα μικρό LED. Λέει ότι λειτουργεί στα 12V, αλλά το 3.3v του Raspberry PI είναι αρκετό για να το φωτίσει

Χρησιμοποιήστε το σχηματικό για έλεγχο

Ο κώδικας:

από εισαγωγή RPi GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Light led GPIO.output (ledButton, True) # Λειτουργία αποκλεισμού GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Button Pressed") GPIO.output (ledButton, False) GPIO.cleanup ()

Μερικές εξηγήσεις του κώδικα Μία από τις μορφές λήψης τιμών από το GPIOS είναι μέσω διακοπών (άλλη είναι η δημοσκόπηση) - ανίχνευση άκρων.

Το άκρο είναι το όνομα της μετάβασης από Υ HIGHΗΛΟ σε ΧΑΜΗΛΟ (άκρη που πέφτει) ή ΧΑΜΗΛΟ σε Υ HIGHΗΛΟ (ανερχόμενη άκρη). Όταν το PIN δεν είναι συνδεδεμένο με τίποτα, οποιαδήποτε ανάγνωση θα είναι απροσδιόριστη. Μια λύση είναι να έχετε μια αντίσταση έλξης προς τα κάτω στον εν λόγω PIN. Το Raspberry PI επιτρέπει τη διαμόρφωση αντιστάσεων έλξης προς τα κάτω μέσω λογισμικού.

Η γραμμή

GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)

ρυθμίζει αυτό το PIN για να κάνει ακριβώς αυτό - τραβήξτε προς τα πάνω

Γιατί να σηκωθείς; Λοιπόν, το μεγάλο κουμπί θόλου έχει 2 PIN - σπρώξτε για να σπάσετε ή πιέστε για να φτιάξετε (ακριβώς όπως τα μικρά κουμπιά που συχνά συνοδεύονται από κιτ Arduino/Raspberry PI). Το έχω συνδέσει με το PIN "push to make" του κουμπιού. Όταν πιέζεται, το κύκλωμα κλείνει και η ηλεκτρική ενέργεια περνά (κανονικά ανοιχτή).

Η γραμμή

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

θα περιμένει (αναστέλλει ουσιαστικά την εκτέλεση του σεναρίου) μέχρι να εντοπίσει την πτώση του PIN - αφήνοντας το κουμπί θα μειώσει τη ροή του ηλεκτρικού ρεύματος και το PIN θα μεταβεί από 3,3v σε 0v

Το PIN LED είναι απλώς για να ανάψει το LED στο κουμπί

Περισσότερες πληροφορίες σχετικά με τους διακόπτες push από το Arduino Tutorials, τη Wikipedia σχετικά με το push to make ή το push to break και τις διακοπές GPIO

Τώρα, ας συνδυάσουμε ένα κουμπί με την κάμερα - Τραβήξτε μια φωτογραφία μόνο όταν πατήσετε το κουμπί

εισαγωγή εικόνας από ώρα εισαγωγή ύπνου από RPi εισαγωγή GPIO από εισαγωγή PIL Εικόνα # ΣΗΜΕΙΩΣΗ: Αυτό είναι το κουμπί ακύρωσης στο κύριο πρόγραμμα # Το χρησιμοποιώ εδώ για λόγους σαφήνειας στο βίντεο takeButton = 24 ledCancel = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.output (ledCancel, True) sleep (1) def offLeds (): GPIO.output (ledCancel, False) # Λειτουργία επικάλυψης εικόνας def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Δημιουργία επικάλυψης # Χρησιμοποιείται με img1 επειδή όλα έχουν το ίδιο μέγεθος pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # επικολλήστε την επικάλυψη - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # το επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο στρώμα 2 ov.layer = 3 sleep (1) camera.remove_overlay (ov) # paste η επικάλυψη - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # το επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο στρώμα 2 ov.layer = 3 ύπνος (1) camera.remove_overlay (ov) # επικολλήστε την επικάλυψη - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # το επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο στρώμα 2 ov.layer = 3 ύπνος (1) camera.remove_overlay (ov) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () GPIO.wait_for_edge (takeButton, GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Λίγη εξήγηση κώδικα

Ξεκινά την προεπισκόπηση της κάμερας και περιμένει εκεί μέχρι να πατηθεί ένα κουμπί. Αφού πατήσετε το κουμπί, ανάβει η λυχνία LED και αρχίζει η αντίστροφη μέτρηση. Όταν φτάσετε στο τέλος, η εικόνα λαμβάνεται και η λυχνία LED σβήνει

Βήμα 10: Δημοσίευση στο Twitter

Δημοσίευση στο Twitter
Δημοσίευση στο Twitter
Δημοσίευση στο Twitter
Δημοσίευση στο Twitter
Δημοσίευση στο Twitter
Δημοσίευση στο Twitter

Τώρα, θα χρησιμοποιήσουμε την Python και θα κάνουμε tweet σε ένα tweet!:) Θα χρειαστείτε μια εικόνα για να δημοσιεύσετε - επιλέξτε με σύνεση.

Πρώτον, πρέπει να αποκτήσουμε πρόσβαση στο twitter API και για αυτό πρέπει να δημιουργήσουμε μια εφαρμογή. Μεταβείτε στη διεύθυνση https://apps.twitter.com και δημιουργήστε μια νέα εφαρμογή.

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

Αφού δημιουργήσετε το APP, μεταβείτε στα Keys and Tokens και δημιουργήστε ένα Access Token και Access Token Secret. Θα εμφανιστεί ένα παράθυρο με τα κλειδιά ΜΟΝΟ ΜΙΑ ΦΟΡΑ - ΑΝΤΙΓΡΑΦΕΤΕ ΤΟΥΣ ΚΑΙ ΑΠΟΘΗΚΕΥΤΕ ΤΑ ΑΡΓΑ.

Χρησιμοποιήστε τον ακόλουθο κώδικα για να στείλετε μια φωτογραφία στον λογαριασμό σας στο twitter. Μην ξεχάσετε να συμπληρώσετε:

  • καταναλωτικό_κλειδί
  • καταναλωτικό_μυστικό
  • διακριτικό πρόσβασης
  • access_token_secret

Το μήνυμα twitter είναι το κείμενο που πρέπει να στείλετε στο tweet.

Το jpg_foto_to_send είναι μια εικόνα που θα επισυνάπτεται στο tweet. Έχετε μια εικόνα στον ίδιο κατάλογο με το σενάριο Python και αλλάξτε το όνομα στον κώδικα.

εισαγωγή tweepy # Ρυθμίσεις Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['καταναλωτικό_κλειδί'], cfg ['καταναλωτικό_έκρητο']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) επιστροφή tweepy. API (auth) # Send to twitter def sendToTwitter (): cfg = {"καταναλωτικό_κλειδί": "", "καταναλωτικό_κρυφό": "", "access_token": "" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet = "Twitter message" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Ελέγξτε τη ροή του Twitter για το tweet σας.

Εδώ είναι το Tweet

Or παρακάτω:

#RaspberryPI MagicBox. Τραβήξτε φωτογραφίες, ελέγξτε τις και επιλέξτε να τις στείλετε στο twitter και στο Facebook. Τροφοδοτείται από Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29 Φεβρουαρίου 2020

Βήμα 11: Συνδυάζοντας ορισμένα στοιχεία

Συνδυάζοντας κάποια στοιχεία
Συνδυάζοντας κάποια στοιχεία
Συνδυάζοντας κάποια στοιχεία
Συνδυάζοντας κάποια στοιχεία

Ας συνδυάσουμε τώρα το κουμπί Big Dome Push, πατώντας το, μετρώντας αντίστροφα, τραβήξτε μια φωτογραφία, αποφασίστε αν θα το στείλετε ή όχι στο twitter.

Θα προσθέσουμε μια άλλη εικόνα επικάλυψης και θα χρησιμοποιήσουμε και τα τρία κουμπιά. Όταν τραβήξετε τη φωτογραφία, ανάβουν και τα 3 κουμπιά LED.

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

Το SelectOption-p.webp

Το Aenviar-p.webp

Στο βίντεο δεν εμφανίζεται το μπλε κουμπί (μπροστά από την κάμερα), αλλά η λυχνία LED είναι αναμμένη και αρχίζει να αναβοσβήνει μόλις πατηθεί.

Ο κώδικας επισυνάπτεται αν προτιμάτε

Αυτός είναι ο τελικός κωδικός δοκιμής πριν από το κύριο πρόγραμμα.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import sleep sleep from RPi import GPIO from PIL import Image import threading # Twitter import tweepy # Facebook import facebook # Button to take picture takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Ακύρωση Picture. PUD_UP) GPIO.setup (socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (cancelButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (takePicButtonLed, GPIO. OUT) GPIO.setup (post) GPIO.setup (cancelButtonLed, GPIO. OUT) # Ρυθμίσεις Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['καταναλωτικό_κλειδί'], cfg ['καταναλωτικό_έκρητο']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Send to twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," customer_secret ":" "," access_token ":" "," access_token_secret ":" "}} api = get_api (cfg) # Status Message tweet =" Δοκιμαστική δοκιμή MagicBox. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_tokken'] # # ανάρτηση ως σελίδα. Μπορείτε να παραλείψετε # τα παρακάτω αν θέλετε να δημοσιεύσετε ως εσείς. resp = graph.get_object ('εγώ/λογαριασμοί') page_access_token = Καμία για σελίδα στο resp ['data']: εάν σελίδα ['id'] == cfg ['page_id']: page_access_token = σελίδα ['access_token'] graph = facebook. GraphAPI (page_access_token) γράφημα επιστροφής # Αποστολή στο facebook def sendToFacebook (): #Values for access cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Caption the image" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Caption the image ") # Light only TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Light only Cancel (Ακύρωση) και SocialNetwork def ακύρωσηPostLEDS (): O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Blink λήψη εικόνας LED ενώ μετράτε αντίστροφα αντίστροφα countingTimerPicture (): GPIO.output (takePicButtonLed, True) ύπνο (0,5) GPIO.output (takePicButtonLed, False) ύπνος (0,5) GPIO.output (takePicButtonLed, True) ύπνος (0,5) GPIO.output (takePicButtonLed,Λάθος) ύπνος (0,5) GPIO.output (takePicButtonLed, True) ύπνος (0,5) GPIO.output (takePicButtonLed, False) # Blink postSNLed ενώ δημοσιεύετε σε κοινωνικά δίκτυα def blinkPosting (stop_event): # Έναρξη ενώ (όχι stop_event.is_set ()): print ("off") GPIO.output (postSNLed, False) sleep (0.5) print ("on") GPIO.output (postSNLed, True) sleep (0.5) def timer (): GPIO.output (takePicButtonLed, True) ύπνος (1) GPIO.output (postSNLed, True) ύπνος (1) GPIO.output (cancelButtonLed, True) ύπνος (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Εμφάνιση προεπισκόπησης στο επίπεδο 1 def displayΠροεπισκόπηση (imgName): # Επειδή η εμφάνιση εικόνας PIL είναι χάλια # χρησιμοποιούμε την επικάλυψη από την κάμερα για να εμφανίσουμε # την προεπισκόπηση img = Image.open (imgName) padding = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)] padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Εμφάνιση προεπισκόπησης στο επίπεδο 3 def displayPreview3 (imgName): # Επειδή η εικόνα εικόνας PIL είναι crapp # χρησιμοποιούμε την επικάλυψη από την κάμερα για να εμφανίσουμε # the preview img = Image.open (imgName) padding = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.alpha = 150 ov.layer = 3 return ov # Function overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Δημιουργία Επένδυση pad = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Επικόλληση της επικάλυψης pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Λειτουργία επικάλυψης image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Δημιουργία επικάλυψης # Χρησιμοποιείται με img1 επειδή όλα έχουν το ίδιο μέγεθος pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # επικολλήστε την επικάλυψη - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο στρώμα 2 ov.layer = 3 ύπνος (1) camera.remove_overlay (ov) # επικολλήστε την επικάλυψη - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # το επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο επίπεδο 2 ov.layer = 3 ύπνος (1) camera.remove_overlay (ov) # paste η επικάλυψη - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # επίπεδο είναι 3 επειδή η προεπισκόπηση της κάμερας είναι στο επίπεδο 2 ov.layer = 3 ύπνος (1) camera.remove_overlay (ov) # Κύρια λειτουργία # Εκκαθάριση οθόνης έτσι ώστε να μην υπάρχουν τα μηνύματα εκκίνησης # πιθανότατα θα ήταν καλύτερα να το κάνουμε αυτό στο bash tmp = sp.call ('clear', shell = True) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.brightness = 55 camera.sharpness = 0 camera.contrast = 0 #camera.exposure_co mpensation = 0 #camera.exposure_mode = 'auto' #camera.meter_mode = 'average' #Δοκιμή εδώ δοκιμάστε: while (True): camera.start_preview () #Show LED Only for Take Picture onlyTakePicLed () #Περιμένετε να τραβηχτεί το κουμπί Εικόνα GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Ξεκινήστε ένα νήμα για να μετρήσετε με τις λυχνίες LED ενώ εμφανίζονται οι εικόνες # Πιθανότατα θα μπορούσε να χρησιμοποιηθεί στη λειτουργία επικάλυψηςCounter, # επειδή έχει επίσης χρονοδιακόπτες για την εμφάνιση των εικόνων, αλλά τα led εφέ δεν θα ήταν # η ίδια _thread.start_new_thread (countingTimerPicture, ()) # Εμφάνιση των επικαλύψεων εικόνων στην επικάλυψη εικόνας της κάμεραςCounter () # Εμφάνιση όλων των LED κατά τη λήψη της εικόνας showAllLeds () camera.capture ('pushTesting.jpg'). stop_preview () #display image displayPreview ('pushTesting.jpg') # Εμφάνιση επικάλυψης oo = overlaysn () # Εμφάνιση LED για Ακύρωση ή Δημοσίευση σε Κοινωνικά Δίκτυα ακύρωσηPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLET_) GPIOutton, GPIO. FALLING) ενώ (True): εάν GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Social Networks Button" sendToTwitter () sendToFacebook () camera.remove_overlay (o) διάλειμμα αν GPIO.event_detected (cancelButton): #print "Cancled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (takept) "Έξοδος …") #offLeds () GPIO.cleanup ()

Βήμα 12: Καλωδίωση

Image
Image
Καλωδίωση
Καλωδίωση
Καλωδίωση
Καλωδίωση

Η καλωδίωση είναι απλά η καλωδίωση των κουμπιών Big Dome Push στο Raspberry PI.

Απλώς ακολουθήστε το Σχήμα Fritzing.

Οι συνδέσεις είναι:

ConnectionRPI GPIO PIN GND Green Push Button GND (#3) GND Yellow Push Button GND (#9) GND Blue Push Button GND (#39) Λήψη εικόνας (Μπλε κουμπί "Push to make") 17 (BCM) Δημοσίευση στα κοινωνικά δίκτυα (Green Push Κουμπί "Push to make") 23 (BCM) Ακύρωση (Κίτρινο κουμπί "Push to make") 24 (BCM) Μπλε κουμπί LED 27 (BCM) Πράσινο κουμπί LED 22 (BCM) Κίτρινο κουμπί LED 5 (BCM)

Η συρρίκνωση θερμότητας είναι επίσης κωδικοποιημένη με χρώμα

  • Το μαύρο είναι συνδέσεις GND
  • Το κίτρινο είναι "push to make" συνδέσεις
  • Οι μπλε είναι συνδέσεις LED

Αριθμοί GPIO. BCM έναντι συνδέσεων GPIO. BOARD

Δεδομένου ότι οι συνδέσεις μου είναι BCM, νομίζω ότι τώρα είναι μια καλή στιγμή να μιλήσω γι 'αυτό και τη διαφορά μεταξύ BCM και BOARD.

Η κύρια διαφορά είναι πώς αναφέρεστε στα GPIO PIN, τα οποία με τη σειρά τους θα καθοδηγήσουν τον τρόπο με τον οποίο κάνετε τις συνδέσεις. Το GPIO.board θα παραπέμπει τα PIN με τον αριθμό που εκτυπώνεται σε οποιαδήποτε διάταξη GPIO στο διαδίκτυο.

Το GPIO. BCM αναφέρεται στους αριθμούς PIN όπως τους βλέπει το Broadcom SOC. Αυτό είναι πιθανό να αλλάξει σε νεότερες εκδόσεις του Raspberry PI.

Στον ιστότοπο pinout.xyz, οι αριθμοί της πλακέτας είναι αυτοί ακριβώς δίπλα στις καρφίτσες και το BCM αναφέρεται έτσι - BCM X (όπου X είναι ο αριθμός)

Βήμα 13: Το MagicBox

Ο συνημμένος κώδικας σε αυτό το βήμα είναι ο τελικός.

Μπορείτε να το εκτελέσετε στην εκκίνηση raspberry PI, χωρίς καν να χρειαστεί να συνδεθείτε. Για να το κάνετε αυτό, απλώς δημιουργήστε αυτό το μικρό σενάριο στον κατάλογο που έχετε τοποθετήσει τον κώδικα - αλλάξτε ανάλογα διαδρομές

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Κάντε το εκτελέσιμο

chmod +x start_magicbox.sh

Τώρα, καλέστε το στο /etc/rc.local, λίγο πριν από την εισαγωγή εξόδου 0

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

αποθήκευση και έξοδος.

Τώρα, με κάθε επανεκκίνηση, το πρόγραμμα Python θα εκτελείται

ΣΗΜΕΙΩΣΗ: Όλα τα αρχεία εικόνας πρέπει να βρίσκονται στον ίδιο κατάλογο με το σενάριο. Πρέπει να έχεις:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • SelectOption.png

Μπορείτε να λάβετε όλα αυτά τα αρχεία στο github του MagicBox.

Συνιστάται: