Përmbajtje:
- Furnizimet
- Hapi 1: Ndërtoni
- Hapi 2: Kamera
- Hapi 3: Monitoroni
- Hapi 4: Dekorimi
- Hapi 5: Programimi
- Hapi 6: Përgatitja e PI -së së Mjedrës
- Hapi 7: Softueri
- Hapi 8: Programimi - Pamja e kamerës
- Hapi 9: Programimi - Butoni i Shtypjes së Kupolës së Madhe
- Hapi 10: Postoni në Twitter
- Hapi 11: Kombinimi i disa elementeve
- Hapi 12: Tela
- Hapi 13: Kutia Magjike
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-31 10:25
Pak kohë më parë, pata këtë ide të çmendur për të krijuar një makinë fotografike nga një PI Raspberry. Në qytetin tim, kishte një shfaqje të vogël ku njerëzit shkonin dhe tregonin atë që po bënin ose kishin bërë duke përdorur elektronikë, kompjuterë, etj … Unë isha si Maker Faire i një të varfri, por në një fushë lokale.
Njëra po afrohej dhe, së bashku me gruan time, ne e ndërtuam këtë gjë.
Si punon ?
Shtypni butonin blu - fillon të ndizet - dhe pas 3 sekondash bëhet një fotografi. Në anën tjetër të kamerës ka një monitor që tregon një numërim mbrapsht dhe pasi të merret fotografia, parapamja e fotografisë.
Tani mund të zgjidhni ta dërgoni në Twitter dhe Facebook ose ta anuloni dhe provoni përsëri. Thatshtë kaq e thjeshtë.
Çdo gjë është programuar në Python, duke përdorur PI framebuffer - Asnjë Xorg, asnjë GUI nuk përdoren.
Këtu keni një video të projektit duke punuar
Furnizimet
- Raspberry PI (Unë jam duke përdorur versionin 2)
- Kamera Raspberry PI (Duke përdorur versionin 1)
- 3x Butonat e Shtypjes së Big Dome
- Monitor TFT/LCD me VGA/HDMI
- MDF
- Varet metalike, vida, etj.
- Mjetet e energjisë
- Koha e lirë dhe shumë argëtim
Hapi 1: Ndërtoni
Ndërtimi i tij ishte argëtues. Shumë prerje, lyerje dhe shpime.
Kam përdorur panele MDF për ndërtimin e strukturës bazë të kamerës. Ato janë të lehta dhe të lehta për tu punuar me to. Gjithashtu, ishte një lloj druri që makina Laser në Fablab lokale ishte në gjendje të priste.
Qasja në instalimet elektrike brenda u bë nga ana e monitorit, duke përdorur varen hidraulike, në mënyrë që të mund të ndihmojnë në ngritjen e monitorit.
Hapi 2: Kamera
Kamera
Kamera është një kuti me dimensionet e mëposhtme: 60cm x 40cm x 30cm E juaja mund të jetë më e vogël, më e madhe, varet nga ju. Thjesht duhet të përshtateni për monitorin që do të përdorni. Panelet MDF u prenë me lazer në Fablab lokale. Ka nevojë për 3 vrima në pjesën e pasme - dy butona të mëdhenj të kupolës dhe një për monitorin. Në pjesën e përparme, 2 vrima - një për një buton të madh të kupolës dhe një tjetër - më të vogla - për kamerën Raspberry PI. Unë nuk kam matje specifike - thjesht imagjinoni një aparat fotografik dhe përdorni atë.
Hapi 3: Monitoroni
Monitor
Mbështetja e monitorit është bërë duke shtuar copa të vogla druri për ta mbështetur atë brenda dimensioneve të saj.
Ishte një shirit nga strehimi plastik dhe i siguruar në vend me vida. Për të ndihmuar në ngritjen e tij, u përdorën dy varen hidraulike (të përdorura).
Hapi 4: Dekorimi
Meqenëse më pëlqen shumë stili i Fuji X-T30, shkuam dhe bëmë diçka të ngjashme.
Së pari, e mbuluam me shkumë dhe më pas e lyejmë me llak me ngjyrë të zezë. Pas bojës, shtuam fletë alumini për pjesët e argjendit dhe e mbështjellim
Për të simuluar lentet, ne thjesht përdorëm një Tupperware të rrumbullakët, nëse kishim bërë një vrimë të vogël për të ulur modulin e kamerës Raspberry PI.
Hapi 5: Programimi
Programimi i Kamerës ishte një sfidë, por ishte super argëtuese.
Nuk ka GUI - kjo funksionon në CLI dhe funksionon në versionin 3 të Python.
Fillova së pari duke testuar dhe programuar butonat, më pas ishte marrja e fotografive duke përdorur mjetet e ofruara tashmë dhe API Python. Pastaj kalova në mbivendosjen e fotografive në daljen e kamerës (për numërimin mbrapsht) dhe më pas për të bashkëvepruar me Twitter dhe Facebook.
Pasi u ndjeva mirë me gjithçka, si një enigmë, i mblodha të gjitha pjesët së bashku. Këtu, ne po shkojmë me të njëjtin proces. Filloni ngadalë dhe të vogël dhe shkoni në të shpejtë dhe të mëdhenj.
Së pari, le të fillojmë me konfigurimin e Raspberry PI
Hapi 6: Përgatitja e PI -së së Mjedrës
Unë nuk do të shpjegoj se si ta instaloj Raspbian në Raspberry PI - ka shumë mësime atje, madje edhe në faqen zyrtare të Raspberry PI.
Thjesht duhet të kesh qasje SSH në të, ose ta lidhësh me një monitor dhe të lidhësh një tastierë dhe miun.
SH NOTNIM: Kur filloni me kamerën Raspberry PI, duhet ta keni të kyçur në një monitor. Deri atje, të gjithë hapat mund të bëhen duke përdorur SSH.
Pas nisjes në Raspberry PI tuaj, ne duhet të aktivizojmë kamerën Raspberry PI. Le të përdorim mjetin raspi-config për këtë.
sudo raspi-config
- Zgjidhni opsionin 5 - Opsionet e ndërlidhjes
- Zgjidhni P1 - Aktivizoni/Çaktivizoni lidhjen me kamerën Raspberry PI
- Thuaj po
- për OK
- Zgjidhni Mbaro
- Zgjidhni Po për të rindezur tani
Pas rindezjes, mund të vazhdojmë
Hapi 7: Softueri
Do të na duhen disa biblioteka Python për t'u instaluar. Kjo është përditësuar për versionin më të fundit Raspbian - Buster
Së pari, le të vendosim Python 3 si parazgjedhje. Ndiqni këtë lidhje për të ditur se si ta konfiguroni atë SISTEMI WIDE
Bibliotekat:
- python-pil.imagetk për të manipuluar imazhet
- python-rpi.gpio për të hyrë në PIN-et e GPIO
- python-picamera për të hyrë në Kamera Raspberry PI
- Tweepy për të ndarë foton në Twitter
- facebook-sdk për ta ndarë në një faqe në facebook
sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip
Përdorni Python pip për të instaluar facebook-sdk
sudo pip3 instaloni facebook-sdk
Hapi 8: Programimi - Pamja e kamerës
Një nga kërkesat që i vendosa këtij projekti ishte që ky program të funksiononte në modalitetin CLI. Pra, ne duhet të shfaqim imazhin e kamerës në tastierë. Për këtë, le të përdorim Python Picamera. Pas kësaj, le të përdorim pil.imagetk për të shfaqur një mbivendosje në krye të vrojtimit të kamerës
Programi ynë i vogël (ne do të zhvillojmë programe të vegjël derisa një i madh në fund) do të shfaq vrojtimin e kamerës.
#!/usr/bin/env python
importo kohë importoni picamera nga koha importoni aparat gjumi = picamera. PiCamera () # Vendosni rezolucionin që dëshironi camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () provoni: ndërsa (True): fle (1) përveç (KeyboardInterrupt, SystemExit): print ("Po del …") camera.stop_preview ()
Për ta provuar, thjesht ekzekutojeni
python cameraPreview.py
Shikoni paraprakisht kamerën me imazhe në krye
Meqenëse doja një numërim mbrapsht të shfaqur para se të bëja fotografinë, më duheshin imazhe që mbivendosen parapamjen e kamerës.
Krijoni një imazh-p.webp" />
Kodi i mëposhtëm do të mbivendoset 1-p.webp
importo picamera nga PIL import imazh nga koha importo gjumë me picamera. PiCamera () si kamera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1.png ') # create pad = Image.new (' RGB ', (((img.size [0] + 31) // 32) * 32, ((img. madhësia [1] + 15) // 16) * 16,)) pad.pastë (img, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img.size) o.alpha = 128 o.layer = 3 while True: fle (1)
Provoje:
python imageOverlay.py
Le të krijojmë tani një numërim mbrapsht me imazhe të mbivendosura. Ashtu si keni krijuar imazhin 1.png, krijoni dy imazhe të tjera me 2 dhe 3 në to.
Pas kësaj, thjesht përdorni kodin e mëposhtëm:
importo picamera
nga importi PIL Imazh nga importimi i kohës fle me picamera. PiCamera () si kamera: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # load image 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.pastë (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), madhësia = img1.size) o.alpha = 128 o.layer = 3 gjumë (2) #hiqni mbulesën e mëparshme të kamerës. hiqni mbivendosjen (o) pad.pastë (img2, (0, 0)) o = camera.add_overlay (pad) tobytes (), madhësia = img2.size) o.alpha = 128 o.layer = 3 gjumë (2) # hiqni kamerën e mëparshme të mbivendosjes. hiqni mbivendosjen (o) pad.pastë (img3, (0, 0)) o = kamera. shtoj_shtresë (pad.tobytes (), madhësia = img3.size) o.alpha = 128 o.layer = 3 gjumë (2)
Tani ekzekutoni atë:
python imageOverlayCounter.py
Dhe shikoni numërimin mbrapsht
Wow - Shumë kod dhe asnjë fotografi e marrë … Le ta zgjidhim duke i kombinuar të gjitha së bashku - shikoni kamerën, numërimin mbrapsht dhe bëni një fotografi
import picamera nga PIL import Imazh nga koha import gjumë def overlayCounter (): # ngarkoni imazhin 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,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img1.size) o.alpha = 128 o.layer = 3 fle (1) # Hiq mbulesën e mëparshme të kamerës. hiqni mbivendosjen (o) # ngjitni mbivendosjen - 2 pad.pastë (img2, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 gjumë (1) # hiqni mbivendosjen e mëparshme të kamerës. hiqni mbivendosjen (o) # ngjitni mbivendosjen - 3 pad.pastë (img3, (0, 0)) o = camera.add_overlay (pad) tobytes (), madhësia = img3.size) o.alpha = 128 o.layer = 3 sleep (1) camera.remove_overlay (o) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () overlayCounter () camera.capture ('testingCounter.jpg') camera.stop_preview ()
Provoje:
python pictureWithTimer.py
Dhe këtu kemi Yoda
Hapi 9: Programimi - Butoni i Shtypjes së Kupolës së Madhe
Butoni i madh i kupolës është një buton i madh i rrumbullakët - me diametër rreth 100 mm me një LED të vogël. Thotë se punon në 12V, por 3.3v e Raspberry PI është e mjaftueshme për ta ndriçuar atë
Përdorni skemën për testim
Kodi:
nga RPi import GPIO
takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Led led GPIO.output (ledButton, True) # Funksioni i bllokimit GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Button Pressed") GPIO.output (ledButton, False) GPIO.cleanup ()
Disa shpjegime të kodit Një nga format e marrjes së vlerave nga GPIOS është përmes ndërprerjeve (tjetra është sondazhi) - zbulimi i skajit.
Buzë është emri i kalimit nga HIGH në LOW (buzë në rënie) ose LOW në HIGH (buzë në rritje). Kur PIN -i nuk është i lidhur me asgjë, çdo lexim do të jetë i papërcaktuar. Një zgjidhje është të keni një rezistencë tërheqëse lart/poshtë në PIN -in e përmendur. Raspberry PI ju lejon të konfiguroni rezistorët tërheqës lart/poshtë përmes softuerit.
Linja
GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)
konfiguron atë PIN për të bërë pikërisht atë - tërhiqeni lart
Pse të tërhiqesh? Epo, butoni i madh i shtytjes së kupolës ka 2 PIN - shtyni për të thyer ose shtypni për të bërë (ashtu si butonat e vegjël të shtypjes që shpesh vijnë me komplete Arduino/Raspberry PI). E kam lidhur me kodin PIN të "shtytjes për të bërë". Kur shtypet, qarku mbyllet dhe energjia elektrike kalon (normalisht e hapur).
Linja
GPIO.wait_for_edge (takeButton, GPIO. FALLING)
do të presë (duke pezulluar efektivisht ekzekutimin e skenarit) derisa të zbulojë rënien e PIN -it - lëshimi i butonit do të shkurtojë rrjedhën e energjisë elektrike dhe PIN do të shkojë nga 3.3v në 0v
PIN -i LED është vetëm për të ndezur LED -in në buton
Më shumë informacion mbi ndërprerësit nga Arduino Tutorials, Wikipedia mbi shtytjen për të bërë ose shtytjen për të thyer dhe ndërprerjet GPIO
Tani, le të kombinojmë një buton shtypës me kamerën - Bëni një fotografi vetëm kur shtypet butoni
importo picamera nga koha importo gjumë nga RPi import GPIO nga PIL import Image # SHENIM: Kjo është ajo që do të jetë butoni i anulimit në programin kryesor # Unë thjesht po e përdor këtu për hir të qartësisë në video takeButton = 24 ledCancel = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.putput (ledCancel, True) fle (1) def offLeds (): GPIO.output (ledCancel, False) # Funksioni për të mbivendosur imazhin def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Krijo një mbivendosje # Përdoret me img1 sepse të gjithë kanë të njëjtën madhësi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), madhësia = img1.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov. shtresa = 3 fjetje (1) camera.remove_overlay (ov) # ngjit mbivendosjen - 2 pad.pastë (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov. shtresa = 3 fjetje (1) camera.remove_overlay (ov) # ngjit mbivendosjen - 1 pad.pastë (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # shtresa është 3 sepse parapamja e kamerës është në shtresën 2 ov.layer = 3 sleep (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 ()
Pak shpjegim i kodit
Fillon vrojtimin e kamerës dhe pret atje derisa të shtypet një buton. Pasi të shtypet butoni, LED ndizet dhe fillon numërimi mbrapsht. Kur të arrini në fund, fotografia merret dhe LED fiket
Hapi 10: Postoni në Twitter
Tani, ne do të përdorim Python dhe cicërojmë një cicërimë!:) Do t'ju duhet një imazh për ta postuar - zgjidhni me mençuri.
Së pari, ne kemi nevojë për të hyrë në API të Twitter dhe për këtë ne duhet të krijojmë një APP. Shkoni te https://apps.twitter.com dhe krijoni një aplikacion të ri.
Ju do të duhet të aplikoni për një llogari zhvilluesi - plotësoni disa pyetje dhe konfirmoni adresën tuaj të postës elektronike. Pas kësaj, do të keni mundësi të krijoni një APP të re.
Pas krijimit të APP -së, lundroni te Çelësat dhe Shenjat dhe Gjeneroni një Shenjë të Hyrjes dhe Sekret të Shenjës së Qasjes. Do të shfaqet një dritare me Çelësat VETLM Një herë - Kopjoni ata dhe ruajini ato më vonë.
Përdorni kodin e mëposhtëm për të dërguar një fotografi në llogarinë tuaj në Twitter. Mos harroni të plotësoni:
- çelësi i konsumatorit
- sekreti_i konsumatorit
- aksesi_talla
- access_token_secret
mesazhi në twitter është teksti që duhet dërguar në cicërimë.
jpg_foto_to_send është një fotografi që do t'i bashkëngjitet cicërimës. Ju lutemi keni një fotografi në të njëjtën drejtori me shkrimin Python dhe ndryshoni emrin në kod.
importo tweepy # Cilësimet e Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['konsumatori_çelës'], cfg ['konsumatori_sekret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) tweepy. API (author) # Dërgo në twitter def sendToTwitter (): cfg = {"çelësi i konsumatorit": "", "sekreti i konsumatorit": "", "aksesi_token": "" "," access_token_secret ":" "} api = get_api (cfg) # Mesazhi i Statusit tweet = "mesazh në Twitter" status = api.update_with_media ("jpg_foto_to_Send", cicërim) sendToTwitter ()
Kontrolloni burimin tuaj në Twitter për cicërimën tuaj.
Këtu është cicërimë
Ose më poshtë:
#RaspberryPI MagicBox. Bëni fotografi, rishikoni ato dhe zgjidhni t'i dërgoni në twitter dhe Facebook. Mundësuar nga Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p
- Bruno Ricardo Santos (@feiticeir0) 29 shkurt, 2020
Hapi 11: Kombinimi i disa elementeve
Tani le të kombinojmë butonin Big Dome Push, duke e shtypur atë, duke numëruar mbrapsht, të bëjmë një fotografi, të vendosim nëse do ta dërgojmë apo jo në Twitter.
Ne do të shtojmë një imazh tjetër të mbivendosur dhe do të përdorim të tre butonat e shtypjes. Kur të merret fotografia, të gjitha 3 butonat LED do të ndizen.
Ne shtojmë një fotografi tjetër, që tregon ikonat për t'u postuar në rrjetet sociale
SelectOption-p.webp
Aenviar-p.webp
Në video nuk shfaqet butoni Blu i shtypjes (para kamerës), por LED është ndezur dhe fillon të pulsojë sapo të shtypet.
Kodi është i bashkangjitur nëse preferoni
Ky është kodi përfundimtar i testimit para programit kryesor.
# coding = utf-8 import picamera import _thread import subprocess as sp from time import import fle from RPi import GPIO from PIL import Import import threading threading # Twitter import tweepy # Facebook import facebook # Button to be picture takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Anulo Fotografinë cancelButton = 24 # Bëj butonin e fotografisë LED takePicButtonLed = 27 # Posto në butonin Rrjeti Social LED postSNLed = 22 # Anulo butonin LED cancelButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. 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 (postim)) GPIO.setup (cancelButtonLed, GPIO. OUT) # Cilësimet e Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['user_key'], cfg ['konsumatori_sekret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) tweepy. API (author) # Dërgo në twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," user_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" Testimi i udhëzueshëm i MagicBox. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", cicëroj) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token] # # postoni si faqe. Mund të kaloni # sa vijon nëse doni të postoni si vetja. resp = graph.get_object ('mua/llogaritë') page_access_token = Asnjë për faqen në resp ['data']: nëse faqe ['id'] == cfg ['page_id']: page_access_token = faqe ['access_token'] graph = facebook. GraphAPI (page_access_token) grafi i kthimit # Dërgo në facebook def sendToFacebook (): #Vlerat për qasje cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Caption the image" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Titull imazhit ") # Vetëm dritë TakePicButtonLed def vetëmTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Vetëm Light Light Cancel dhe butoni SocialNetwork def anuloniPostLEDS (): O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Shkrepja e dritës së dritës për të marrë një fotografi duke numëruar mbrapsht numërimin TimerPicture (): GPIO.putput (takePicButtonLed, True) gjumë (0.5) GPIO.putput (takePicButtonLed, False) gjumë (0.5) GPIO.output (takePicButtonLed, True) gjumë (0.5) GPIO.output (takePicButtonLed,Gjumë i rremë (0.5) GPIO.output (takePicButtonLed, True) gjumë (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed ndërsa postoni në rrjetet sociale def blinkPosting (stop_event): # Filloni ndërsa (jo stop_event.is_set ()): print ("off") GPIO.output (postSNLed, False) gjumë (0.5) print ("on") GPIO.output (postSNLed, True) gjumë (0.5) def timer (): GPIO.output (takePicButtonLed, True) gjumë (1) GPIO.output (postSNLed, True) gjumë (1) GPIO.output (cancelButtonLed, True) gjumë (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Shfaq një pamje paraprake në shtresën 1 def displayPreview (imgName): # Meqenëse shfaqja e imazhit PIL është një mut # ne përdorim mbivendosjen nga kamera për të shfaqur # parapamjen img = Image.open (imgName) mbushje = Imazh. i ri ('RGB', (((madhësia e imazhit [0] + 31) // 32) * 32, ((madhësia e imazhit [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Shfaq një pamje paraprake në shtresë 3 def displayPreview3 (imgName): # Meqenëse shfaqja e imazhit PIL është një crapp # ne përdorim mbivendosjen nga kamera për të shfaqur # parapamjen img = Image.open (imgName) mbushje = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) mbushje.pastë (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.alpha = 150 ov.layer = 3 return ov # Funksion overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Krijo Mbulesa e mbivendosjes = Imazh. I ri ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn. Madhësia [1] + 15) // 16) * 16,)) # Ngjiteni mbivendosjen pad.pastë (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funksioni i mbivendosjes mbivendosja e imazhitCounter (): # ngarkoni imazhet img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Krijoni një mbivendosje # Përdoret me img1 sepse të gjithë kanë të njëjtën madhësi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov.layer = 3 fle (1) camera.remove_overlay (ov) # ngjis mbivendosjen - 2 pad.pastë (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # shtresa është 3 sepse vrojtimi i kamerës është në shtresën 2 ov.layer = 3 fle (1) camera.remove_overlay (ov) # paste mbivendosja - 1 pad.pastë (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov.layer = 3 fjetje (1) camera.remove_overlay (ov) # Funksioni kryesor # Pastroni ekranin në mënyrë që mesazhet e nisjes të mos jenë të pranishme # me siguri do të ishte më mirë ta bësh këtë në bash tmp = sp.call ('qartë', shell = E vërtetë) kamera = 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' #Testimi këtu provoni: ndërsa (E vërtetë): camera.start_preview () #Shfaq LED vetëm për të marrë vetëm fotografiTakePicLed () #Prisni që butoni të marrë Figura GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Filloni një fije për të numëruar me LED -të ndërsa shfaqen imazhet # Ndoshta mund të përdoret në funksionin e mbivendosjes Counter, # sepse ka edhe kohëmatës për të treguar fotografitë, por efektet e drejtuara nuk do të ishte # e njëjta _thread.start_new_thread (countingTimerPicture, ()) # Trego mbivendosjen e fotografive në mbivendosjen e figurës së kamerësCounter () # # Trego të gjitha LED -të gjatë marrjes së fotografisë showAllLeds () camera.capture ('pushTesting.jpg'). stop_preview () #display image displayPreview ('pushTesting.jpg') # Trego mbivendosjen oo = mbivendosje () # Trego LED -të për të Anuluar ose Postuar në Rrjetet Sociale cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING_ectionButton) GPIO.adton, GPIO. FALLING) ndërsa (E vërtetë): nëse GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Butoni i Rrjeteve Sociale" sendToTwitter () sendToFacebook () camera.remove_overlay (o) pushim nëse 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 (marr "Dalë …") #offLeds () GPIO.cleanup ()
Hapi 12: Tela
Instalimet elektrike janë vetëm lidhja e butonave të Big Dome Push në Raspberry PI.
Vetëm ndiqni Skemën Fritzing.
Lidhjet janë:
LidhjaRPI GPIO PIN GND Green Push ButtonGND (#3) GND Butoni i Shtypjes së Verdhë GND (#9) GND Blue Push ButtonGND (#39) Bëni Fotografinë (Butoni i Shtytjes Blu "Shtyni për të bërë") 17 (BCM) Postoni në Rrjetet Sociale (Green Push Butoni "Shtyje për të bërë") 23 (BCM) Anulo (Butoni i Shtypjes së Verdhë "Shtyji për të bërë") 24 (BCM) Butoni i Shtytjes Blu LED27 (BCM) Butoni i Shtypjes së Gjelbër LED22 (BCM) Butoni i Shtypjes së Verdhë LED5 (BCM)
Tkurrja e nxehtësisë gjithashtu është e koduar me ngjyra
- E zeza është lidhje GND
- Të verdhat janë lidhje "shtytje për të bërë"
- Blu janë lidhjet LED
Numrat GPIO. BCM kundrejt lidhjeve GPIO. BOARD
Meqenëse lidhjet e mia janë BCM, mendoj se tani është një kohë e mirë për të folur për të dhe ndryshimin midis BCM dhe BOARD.
Dallimi kryesor është se si i referoheni PIN -ve GPIO, të cilat nga ana tjetër do të drejtojnë mënyrën se si i bëni lidhjet. GPIO.board do t'i referohet PIN -et me numrin e shtypur në çdo plan urbanistik GPIO në internet.
GPIO. BCM i referohet numrave PIN siç i sheh Broadcom SOC. Kjo ka të ngjarë të ndryshojë së bashku me versionet më të reja të Raspberry PI.
Në faqen pinout.xyz, numrat e tabelës janë ata që janë pranë kunjave dhe BCM referohen kështu - BCM X (ku X është numri)
Hapi 13: Kutia Magjike
Kodi i bashkangjitur këtij hapi është përfundimtar.
Mund ta ekzekutoni në boot PI të mjedrës, madje pa pasur nevojë të identifikoheni. Për ta bërë këtë, thjesht krijoni këtë skenar të vogël në drejtorinë që keni vendosur kodin - ndryshoni rrugët në përputhje me rrethanat
#!/bin/bash
cd/home/pi/magicbox python MagicBox.py
Bëjeni atë të ekzekutueshëm
chmod +x start_magicbox.sh
Tani, thirreni në /etc/rc.local, pak para instruksionit të daljes 0
sudo vi /etc/rc.lokal
/home/pi/magicbox/start_magicbox.sh &
ruani dhe hiqni dorë.
Tani, me çdo rindezje, programi Python do të ekzekutohet
SH NOTNIM: Të gjithë skedarët e imazhit duhet të jenë në të njëjtën drejtori me skriptin. Ju duhet të keni:
- 1.png
- 2.png
- 3.png
- Aenviar.png
- SelectOption.png
Ju mund t'i merrni të gjitha këto skedarë në github të MagicBox.
Recommended:
Korniza fotografike e Raspberry Pi në më pak se 20 minuta: 10 hapa (me fotografi)
Korniza fotografike Raspberry Pi në më pak se 20 minuta: Po, kjo është një kornizë tjetër fotografike dixhitale! Por prisni, është më e hijshme, dhe ndoshta më e shpejta për t'u mbledhur dhe për të vrapuar
YADPF (YET Një kornizë tjetër fotografike dixhitale): 7 hapa (me fotografi)
YADPF (Prapë një kornizë tjetër fotografike dixhitale): E di që kjo nuk është gjë e re, e di, kam parë disa nga këto projekte këtu, por gjithmonë kam dashur të ndërtoj kornizën time dixhitale të fotografisë. Të gjitha kornizat e fotografive që kam parë janë të bukura, por unë isha duke kërkuar për diçka tjetër, unë jam duke kërkuar për një fr
Dhoma fotografike e dasmës Arduino - Pjesë të printuara 3D, të automatizuara dhe me buxhet të ulët: 22 hapa (me fotografi)
Dhoma fotografike e dasmës Arduino - Pjesë të printuara në 3D, të automatizuara dhe me buxhet të ulët: Kohët e fundit isha i ftuar në dasmën e vëllait të partnerit tim dhe ata më pyetën më parë nëse mund t'u ndërtojmë atyre një stendë fotografish pasi kushtojnë shumë për t'u punësuar. Kjo është ajo që ne dolëm dhe pas disa komplimenteve, vendosa ta kthej atë në një udhëzues
Kornizë fotografike dixhitale e fotografisë, WiFi e lidhur - Raspberry Pi: 4 hapa (me fotografi)
Korniza e fotografive dixhitale të fotografive, e lidhur me WiFi - Raspberry Pi: Kjo është një rrugë shumë e lehtë dhe me kosto të ulët për një kornizë fotografike dixhitale - me avantazhin e shtimit /heqjes së fotografive mbi WiFi nëpërmjet 'kliko dhe tërhiq' duke përdorur një program transferimi (falas) të skedarëve Me Mund të mundësohet nga 4.50 Pi Zero i vogël. Ju gjithashtu mund të transferoni
55 inç, Ekran 4K dixhital i kornizës fotografike për rreth 400 dollarë: 7 hapa (me fotografi)
55 inç, Shfaqja e kornizës dixhitale të fotografisë 4K për rreth 400 dollarë: ka shumë mësime se si të bëni një kornizë të mrekullueshme fotografike dixhitale me një pi mjedër. mjerisht rpi nuk mbështet rezolucionin 4K. Odroid C2 mund të trajtojë me lehtësi rezolucionin 4K, por asnjë nga ato mësime rpi nuk funksionon për njësinë C2. mori