Satura rādītājs:

RaspberryPI fotokamera - MagicBox: 13 soļi (ar attēliem)
RaspberryPI fotokamera - MagicBox: 13 soļi (ar attēliem)

Video: RaspberryPI fotokamera - MagicBox: 13 soļi (ar attēliem)

Video: RaspberryPI fotokamera - MagicBox: 13 soļi (ar attēliem)
Video: How I Film Youtube Videos On My iPhone Like A PRO 2024, Novembris
Anonim
Image
Image
Būvēt
Būvēt

Pirms kāda laika man radās šī trakā ideja izveidot fotogrāfiju no aveņu PI. Manā pilsētā bija neliela izrāde, kurā cilvēki brauca un rādīja, ko viņi gatavo vai gatavo, izmantojot elektroniku, datorus utt.… Es biju kā nabaga Maker Faire, bet vietējā mērogā.

Tuvojās viens, un mēs kopā ar sievu veidojam šo lietu.

Kā tas darbojas ?

Jūs nospiežat zilo pogu - tas sāk mirgot - un pēc 3 sekundēm tiek uzņemts attēls. Kameras otrā pusē ir monitors, kas rāda atpakaļskaitīšanu un pēc attēla uzņemšanas - fotoattēla priekšskatījumu.

Tagad varat izvēlēties nosūtīt to Twitter un Facebook vai atcelt un mēģināt vēlreiz. Tas ir tik vienkārši.

Viss ir ieprogrammēts Python, izmantojot PI kadru buferi - netiek izmantots Xorg, netiek izmantota GUI.

Šeit ir video par projekta darbību

Piegādes

  • Aveņu PI (es izmantoju 2. versiju)
  • Aveņu PI kamera (izmantojot 1. versiju)
  • 3x Big Dome spiedpogas
  • TFT/LCD monitors ar VGA/HDMI
  • MDF
  • Metāla eņģes, skrūves utt.
  • Elektroinstrumenti
  • Brīvais laiks un daudz jautrības

1. darbība. Veidojiet

Būvēt
Būvēt
Būvēt
Būvēt

Tās būvēšana bija jautra. Daudz griešanas, krāsošanas un urbšanas.

Es izmantoju MDF paneļus, lai izveidotu kameras pamatstruktūru. Tie ir viegli un viegli strādāt. Tas bija arī viens koksnes veids, ko vietējā Fablab lāzermašīna varēja griezt.

Piekļuvi elektroinstalācijai iekšpusē veica monitora puse, izmantojot hidrauliskās eņģes, lai tās varētu palīdzēt pacelt monitoru.

2. darbība: kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera ir kastīte ar šādiem izmēriem: 60cm x 40cm x 30cm Jūsu var būt mazāka, lielāka, tas ir jūsu ziņā. Vienkārši jāpielāgo monitoram, kuru izmantosit. MDF paneļi tika sagriezti ar lāzeru vietējā Fablab. Aizmugurē ir nepieciešami 3 caurumi - divas lielas kupola spiedpogas un viena monitoram. Priekšpusē 2 caurumi - viens lielai kupola spiedpogai un otrs - mazāks - Raspberry PI kamerai. Man nav konkrētu mērījumu - iedomājieties kameru un izmantojiet to.

3. solis: pārraudzīt

Monitors
Monitors
Monitors
Monitors
Monitors
Monitors

Monitors

Monitora balsts tika izgatavots, pievienojot mazus koka gabalus, lai tas atbilstu tā izmēriem.

Tas bija sloksne no plastmasas korpusa un nostiprināta vietā ar skrūvēm. Lai to paceltu, tika izmantotas divas hidrauliskās eņģes (lietotas).

4. solis: dekorēšana

Dekorēšana
Dekorēšana
Dekorēšana
Dekorēšana
Dekorēšana
Dekorēšana
Dekorēšana
Dekorēšana

Tā kā man ļoti patīk mana Fuji X-T30 stils, mēs devāmies un darījām kaut ko līdzīgu.

Pirmkārt, mēs to pārklājām ar putām un pēc tam mēs izsmidzinājām to melnā krāsā. Pēc krāsas mēs pievienojām alumīnija foliju sudraba daļām un ietin to

Lai modelētu objektīvu, mēs vienkārši izmantojām apaļu Tupperware, ja mēs izdarījām nelielu caurumu, lai sēdētu Raspberry PI kameras modulim.

5. solis: programmēšana

Kameras programmēšana bija izaicinājums, taču tas bija ļoti jautri.

Nav GUI - tas darbojas CLI un darbojas Python 3. versijā.

Vispirms sāku ar pogu testēšanu un programmēšanu, pēc tam fotografēju, izmantojot jau piedāvātos rīkus un Python API. Pēc tam es pārgāju uz attēlu pārklāšanu kameras izejā (atpakaļskaitīšanai) un blakus, lai mijiedarbotos ar Twitter un Facebook.

Pēc tam, kad es biju apmierināts ar visu to, tāpat kā puzle, es saliku visus gabalus kopā. Šeit mēs turpinām to pašu procesu. Sāciet lēnām un mazām un dodieties uz ātru un lielu.

Vispirms sāksim konfigurēt Raspberry PI

6. darbība: aveņu PI sagatavošana

Aveņu PI sagatavošana
Aveņu PI sagatavošana
Aveņu PI sagatavošana
Aveņu PI sagatavošana
Aveņu PI sagatavošana
Aveņu PI sagatavošana

Es neskaidrošu, kā Raspbian instalēt Raspberry PI - tur ir daudz pamācību, pat Raspberry PI oficiālajā vietnē.

Jums vienkārši nepieciešama SSH piekļuve tai vai jāpievieno monitoram un jāpievieno tastatūra un pele.

PIEZĪME. Sākot darbu ar Raspberry PI kameru, tā jāpievieno monitoram. Līdz tam visas darbības var veikt, izmantojot SSH.

Pēc palaišanas jūsu Raspberry PI mums ir jāiespējo Raspberry PI kamera. Tam izmantosim raspi-config rīku.

sudo raspi-config

  1. Izvēlieties 5. opciju - Saskarnes opcijas
  2. Izvēlieties P1 - Iespējot/atspējot savienojumu ar Raspberry PI kameru
  3. Saki jā
  4. par Labi
  5. Izvēlieties Pabeigt
  6. Izvēlieties Jā, lai tūlīt atsāknētu

Pēc pārstartēšanas mēs varam turpināt

7. solis: programmatūra

Mums būs jāinstalē dažas Python bibliotēkas. Tas ir atjaunināts jaunākajai Raspbian versijai - Buster

Pirmkārt, ļaujiet iestatīt Python 3 kā noklusējumu. Sekojiet šai saitei, lai uzzinātu, kā to iestatīt SYSTEM WIDE

Bibliotēkas:

  • python-pil.imagetk, lai manipulētu ar attēliem
  • python-rpi.gpio, lai piekļūtu GPIO PINS
  • python-picamera, lai piekļūtu Raspberry PI kamerai
  • Tweepy, lai kopīgotu fotoattēlu Twitter
  • facebook-sdk, lai kopīgotu to facebook lapā

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

Izmantojiet Python pip, lai instalētu facebook-sdk

sudo pip3 instalējiet facebook-sdk

8. solis: programmēšana - kameras priekšskatījums

Image
Image
Programmēšana - kameras priekšskatījums
Programmēšana - kameras priekšskatījums
Programmēšana - kameras priekšskatījums
Programmēšana - kameras priekšskatījums

Viena no prasībām, ko es izvirzīju šim projektam, bija šī programma darboties CLI režīmā. Tātad, mums ir jāparāda kameras attēls konsolē. Šim nolūkam izmantosim Python Picamera. Pēc tam izmantosim pil.imagetk, lai kameras priekšskatījuma virspusē parādītu pārklājumu

Mūsu mazajā programmā (mēs izstrādāsim mazas programmas, līdz beigās būs viena liela) tiks parādīts kameras priekšskatījums.

#!/usr/bin/env python

importēt laiku importēt picamera no laika importēšanas miega kamera = picamera. PiCamera () # Iestatiet vēlamo izšķirtspēju camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1), izņemot (KeyboardInterrupt, SystemExit): print ("Exiting…") camera.stop_preview ()

Lai to izmēģinātu, vienkārši izpildiet to

python cameraPreview.py

Priekšskatiet kameru ar attēliem augšpusē

Tā kā es vēlējos, lai pirms attēla uzņemšanas tiktu parādīta atpakaļskaitīšana, man vajadzēja attēlus, kas pārklājas ar kameras priekšskatījumu.

Izveidojiet-p.webp" />

Šis kods pārklās 1-p.webp

importēt picamerafrom no PIL importēt attēlu no laika importēšanas miega ar picamera. PiCamera () kā kamera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # ielādēt attēlu img = Image.open ('1-p.webp

Pamēģini:

python imageOverlay.py

Tagad izveidosim atpakaļskaitīšanu ar pārklājuma attēliem. Tāpat kā jūs esat izveidojis 1-p.webp

Pēc tam vienkārši izmantojiet šādu kodu:

importēt picamera

no PIL importa attēla no laika importēšanas miega ar picamera. PiCamera () kā kamera: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # ielādēt attēlu img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # create pad = Image.new ('RGB', (((img1.izmērs [0] + 31) / / 32) * 32, ((img1.izmērs [1] + 15) // 16) * 16,)) pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), izmērs = img1.izmērs) o.alpha = 128 o.layer = 3 miega (2) #noņemt iepriekšējo pārklājuma kameru.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobaiti (), izmērs = img2.izmērs) o.alpha = 128 o.layer = 3 miega režīms (2) # noņemt iepriekšējo pārklājuma kameru.remove_overlay (o) pad.paste (img3, (0, 0)) o = kamera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 miega (2)

Tagad izpildiet to:

python imageOverlayCounter.py

Un skatiet atpakaļskaitīšanu

Oho - daudz kodu un nav uzņemts attēls … Atrisināsim to, apvienojot visu kopā - priekšskatiet kameru, atskaiti un uzņemiet attēlu

importēt picamerafrom no PIL importēt attēlu no laika importēšanas miega def overlayCounter (): # ielādēt attēlu img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Pamēģini:

python pictureWithTimer.py

Un šeit mums ir Yoda

9. solis: programmēšana - liela kupola spiedpoga

Programmēšana - Lielā kupola spiedpoga
Programmēšana - Lielā kupola spiedpoga
Programmēšana - Lielā kupola spiedpoga
Programmēšana - Lielā kupola spiedpoga

Lielā kupola spiedpoga ir liela apaļa poga - ar aptuveni 100 mm ārējo diametru ar nelielu gaismas diodi. Tajā teikts, ka tas darbojas pie 12 V sprieguma, bet ar aveņu PI 3,3 V spriegumu pietiek, lai tas iedegtos

Pārbaudei izmantojiet shēmu

Kods:

no RPi importēšanas 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) # Bloķēšanas funkcija GPIO.wait_for_edge (takeButton, GPIO. FALLING) drukāt ("Poga nospiesta") GPIO.output (ledButton, False) GPIO.cleanup ()

Daži koda skaidrojumi Viens no veidiem, kā iegūt vērtības no GPIOS, ir pārtraukumi (cits ir aptauja) - malu noteikšana.

Mala ir pārejas nosaukums no HIGH uz LOW (krītošā mala) vai LOW uz HIGH (augošā mala). Ja PIN kods nav pievienots nekam, jebkurš lasījums netiks definēts. Risinājums ir, ja minētajā PIN ir ievilkšanas/nolaišanas rezistors. Raspberry PI ļauj konfigurēt uz augšu/uz leju rezistorus, izmantojot programmatūru.

Līnija

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

konfigurē šo PIN, lai to izdarītu - pavelciet uz augšu

Kāpēc vilkt augšā? Lielajai kupola spiedpogai ir 2 PIN - spiediet, lai pārtrauktu vai spiediet, lai izgatavotu (tāpat kā mazās spiedpogas, kas bieži nāk ar Arduino/Raspberry PI komplektiem). Esmu to pieslēdzis pogas “push to make” PIN. Nospiežot, ķēde aizveras un elektrība iziet (parasti atveras).

Līnija

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

gaidīs (faktiski apturot skripta izpildi), līdz konstatēs PIN nokrišanu - pogas atlaišana pārtrauks elektroenerģijas plūsmu un PIN kods mainīsies no 3.3v uz 0v

Gaismas diodes PIN ir tikai, lai iedegtu pogas gaismas diodi

Plašāka informācija par push slēdžiem no Arduino Tutorials, Wikipedia par push to make or push to break un GPIO pārtrauc

Tagad apvienosim spiedpogu ar kameru - uzņemiet attēlu tikai tad, kad poga ir nospiesta

importēt picamerafrom no laika importēt miega režīmu no RPi importēt GPIO no PIL importēšanas Attēls # PIEZĪME. Šī būs galvenā programmas atcelšanas poga # Es to vienkārši izmantoju šeit, lai video skaidrībā ņemtu 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) miega režīms (1) def off (): GPIO.output (ledCancel, False) # Funkcija attēla pārklāšanai def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Izveidot pārklājumu # Izmanto ar img1, jo visi ir vienāda izmēra spilventiņi = Image.new ('RGB', (((img1.izmērs [0] + 31) // 32) * 32, ((img1.izmērs [1] + 15) // 16) * 16,)) # ielīmējiet pārklājumu - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir 2. slānī ov.layer = 3 miega (1) camera.remove_overlay (ov) # ielīmējiet pārklājumu - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir 2. slānī ov.layer = 3 miega (1) camera.remove_overlay (ov) # ielīmējiet pārklājumu - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir uz 2. slāņa ov.layer = 3 miega (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 () pārklājumsCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Neliels koda skaidrojums

Tas sāk kameras priekšskatījumu un tur gaida, līdz tiek nospiesta poga. Pēc pogas nospiešanas iedegas gaismas diode un sākas atpakaļskaitīšana. Tuvojoties beigām, tiek uzņemts attēls un gaismas diode tiek izslēgta

10. solis: publicējiet Twitter

Publicēt vietnē Twitter
Publicēt vietnē Twitter
Publicēt vietnē Twitter
Publicēt vietnē Twitter
Publicēt vietnē Twitter
Publicēt vietnē Twitter

Tagad mēs izmantosim Python un ierakstīsim tvītu!:) Lai publicētu, jums būs nepieciešams attēls - izvēlieties gudri.

Pirmkārt, mums ir jāpiekļūst twitter API un tam ir jāizveido APP. Dodieties uz vietni https://apps.twitter.com un izveidojiet jaunu lietojumprogrammu.

Jums būs jāpiesakās izstrādātāja kontam - aizpildiet dažus jautājumus un apstipriniet savu e -pasta adresi. Pēc tam varēsit izveidot jaunu APP.

Pēc APP izveides dodieties uz taustiņiem un žetoniem un ģenerējiet piekļuves marķieri un piekļuves pilnvaras noslēpumu. Tiks parādīts logs ar taustiņiem TIKAI REIZI - KOPĒJIET UN SAGLABĀJIET VĒLĀK.

Izmantojiet šo kodu, lai nosūtītu attēlu uz savu twitter kontu. Neaizmirstiet aizpildīt:

  • patērētāja_atslēga
  • patērētāja_noslēpums
  • pieejas atslēga
  • access_token_secret

twitter ziņojums ir teksts, kas jānosūta tvītā.

jpg_foto_to_send ir attēls, kas tiks pievienots tvītam. Lūdzu, ievietojiet attēlu tajā pašā direktorijā kā Python skripts un nomainiet kodu.

importēt tweepy # Twitter iestatījumi def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['Consumer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret'] tweepy. API (auth) # Sūtīt uz twitter def sendToTwitter (): cfg = {"Consumer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": "" "api = get_api (cfg) # Statusa ziņojums tweet = "Twitter ziņa" status = api.update_with_media ("jpg_foto_to_Send", tvīts) sendToTwitter ()

Pārbaudiet savu čivināt plūsmu, lai atrastu tvītu.

Šeit ir tvīts

Vai zemāk:

#RaspberryPI MagicBox. Uzņemiet attēlus, pārskatiet tos un izvēlieties tos nosūtīt Twitter un Facebook. Powered by Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 2020. gada 29. februāris

11. solis: dažu elementu apvienošana

Dažu elementu apvienošana
Dažu elementu apvienošana
Dažu elementu apvienošana
Dažu elementu apvienošana

Tagad apvienosim Big Dome Push pogu, nospiežot to, skaitot atpakaļ, nofotografēsim, izlemsim, vai nosūtīt to twitter.

Mēs pievienosim vēl vienu pārklājuma attēlu un izmantosim visas trīs spiedpogas. Kad attēls ir uzņemts, iedegas visas 3 taustiņu gaismas diodes.

Mēs pievienojam vēl vienu attēlu, kurā redzamas ikonas, kuras publicēt sociālajos tīklos

SelectOption-p.webp

Aenviar-p.webp

Videoklipā nav redzama zilā spiedpoga (kameras priekšpusē), bet gaismas diode deg un sāk mirgot, tiklīdz tā tiek nospiesta.

Kods ir pievienots, ja vēlaties

Šis ir pēdējais pārbaudes kods pirms galvenās programmas.

# kodēšana = utf-8 importēt picamera importēt _vītņu importa apakšprocess kā sp no laika importēšanas miega no RPi importēt GPIO no PIL importēšanas Attēlu importēšanas pavedieni # čivināt importēt tweepy # Facebook importēt facebook # Poga, lai uzņemtu attēlu # Atcelt attēlu CancelButton = 24 # Uzņemt attēla pogu LED takePicButtonLed = 27 # Publicēt sociālā tīkla pogu LED postSNLed = 22 # Atcelt pogas 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 (postSNLed, GPIO. OUT)) GPIO.setup (cancelButtonLed, GPIO. OUT) # Twitter iestatījumi def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['patērētāja_atslēga'], cfg ['patērētāja_noslēpums']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) atgriezties tweepy. API (auth) # Sūtīt uz twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," Consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Statusa ziņojums tweet =" MagicBox pamācību pārbaude. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) #Iegūt lapu ievietot kā lapu. Ja vēlaties publicēt kā sevi, varat izlaist # sekojošo. resp = graph.get_object ('es/konti') page_access_token = Nav nevienas lapas lapā ['dati']: ja lapa ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Sūtīt uz 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 = "Attēla paraksts ") # Tikai gaisma TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Tikai gaisma Atcelt un SocialNetwork poga def cancelPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Mirgo fotografēšanas gaismas diode, vienlaikus skaitot atpakaļ skaitīšanuTimerPicture (): GPIO.output (takePicButtonLed, True) miega režīms (0,5) GPIO.output (takePicButtonLed, False) miega režīms (0.5) GPIO.output (takePicButtonLed, True) miega režīms (0.5) GPIO.output (takePicButtonLed,False) miega (0.5) GPIO.output (takePicButtonLed, True) miega (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed publicējot sociālajos tīklos def blinkPosting (stop_event): # Sākt, kamēr (ne stop_event.is_set ()): drukāt ("izslēgts") GPIO.output (postSNLed, False) miega režīms (0,5) print ("ieslēgts") GPIO.output (postSNLed, True) miega režīms (0,5) def taimeris (): GPIO.output (takePicButtonLed, True)) miega (1) GPIO.output (postSNLed, True) miega (1) GPIO.output (CancelButtonLed, True) miega (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.putput (cancelButtonLed, True)) polsterējums = Image.new ('RGB', (((img.izmērs [0] + 31) // 32) * 32, ((img.izmērs [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Parādīt slāņa priekšskatījumu 3 def displayPreview3 (imgName): # Tā kā PIL attēlu šovs ir štrunts #, mēs izmantojam kameras pārklājumu, lai parādītu # priekšskatījumu img = Image.open (imgName) padding = Image.new ('RGB', (((img.izmērs [0] + 31) // 32) * 32, ((img.izmērs [1] + 15) // 16) * 16,)) polsterējums.pasta (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.alpha = 150 ov.layer = 3 return ov # Funkcijas overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Izveidot Pārklājuma spilventiņš = Image.new ('RGB', (((imgsn.izmērs [0] + 31) // 32) * 32, ((imgsn.izmērs [1] + 15) // 16) * 16,)) # Ielīmējiet pārklājuma spilventiņu.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funkcija pārklājumam image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Izveidojiet pārklājumu # Izmanto kopā ar img1, jo visi ir vienāda izmēra spilventiņi = Image.new ('RGB', (((img1.izmērs [0] + 31) // 32) * 32, ((img1.izmērs [1] + 15) // 16) * 16,)) # ielīmējiet pārklājumu - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir 2. slānī ov.layer = 3 miega režīms (1) camera.remove_overlay (ov) # ielīmējiet pārklājumu - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir 2. slānī ov.layer = 3 miega (1) camera.remove_overlay (ov) # paste pārklājums - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # slānis ir 3, jo kameras priekšskatījums ir 2. slānī ov.layer = 3 miega režīms (1) camera.remove_overlay (ov) # Galvenā funkcija # Notīrīt ekrānu, lai nebūtu sāknēšanas ziņojumu # iespējams, labāk to darīt bash tmp = sp.call ('clear', apvalks = 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 = 'vidēji' #Pārbaude šeit mēģiniet: kamēr (True): camera.start_preview () #Rādīt LED tikai fotografēšanai Attēls GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Sāciet pavedienu, lai skaitītu ar gaismas diodēm, kamēr tiek rādīti attēli # Iespējams, to varētu izmantot funkcijā overlayCounter, # jo tam ir arī taimeri attēlu parādīšanai, bet LED efekti # nebūtu tas pats _thread.start_new_thread (countingTimerPicture, ()) # Rādīt attēlu pārklājumu kameras attēla pārklājumāCounter () # Rādīt visas gaismas diodes, uzņemot attēlu showAllLeds () camera.capture ('pushTesting.jpg') kamera. stop_preview () #display image displayPreview ('pushTesting.jpg') # Rādīt pārklājumu oo = overlaysn () # Rādīt atceltās gaismas diodes vai publicēt sociālajos tīklos CancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_eventBdon, GPIO. FALLING), kamēr (True): ja GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Sociālo tīklu poga" sendToTwitter () sendToFacebook () camera.remove_overlay (o) pārtraukums, ja GPIO.event_detected (cancelButton): #print "Canceled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_doncepting (takeButton) "Izgāja …") #offLeds () GPIO.cleanup ()

12. solis: elektroinstalācija

Image
Image
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija

Elektroinstalācija tikai savieno Big Dome Push pogas ar Raspberry PI.

Vienkārši sekojiet Fritzing shēmai.

Savienojumi ir šādi:

Savienojums RPI GPIO PIN GND zaļā spiedpogaGND (#3) GND dzeltenā spiedpogaGND (#9) GND zilā spiedpogaGND (#39) Fotografēšana (zilā spiedpoga "Push to make") 17 (BCM) Publicēt sociālajos tīklos (Green Push Poga "Push to make") 23 (BCM) Atcelt (dzeltenā spiedpoga "Push to make") 24 (BCM) Zilā spiedpoga LED27 (BCM) Zaļā spiedpoga LED22 (BCM) Dzeltenā spiedpoga LED5 (BCM)

Siltuma sarukumam ir arī krāsu kods

  • Melns ir GND savienojumi
  • Dzeltenie ir “piespiedu izveides” savienojumi
  • Zili ir LED savienojumi

GPIO. BCM numuri salīdzinājumā ar GPIO. BOARD savienojumiem

Tā kā mani savienojumi ir BCM, es domāju, ka tagad ir īstais laiks runāt par to un atšķirību starp BCM un BOARD.

Galvenā atšķirība ir tā, kā jūs atsaucaties uz GPIO PIN, kas savukārt veicinās savienojumu izveidi. GPIO.board norādīs PIN kodus pēc numura, kas uzdrukāts uz jebkura GPIO izkārtojuma internetā.

GPIO. BCM atsaucas uz PIN numuriem, kā Broadcom SOC tos redz. Tas, visticamāk, mainīsies jaunākajās Raspberry PI versijās.

Vietnē pinout.xyz tāfeles numuri ir tie, kas atrodas blakus tapām, un BCM tiek apzīmēti šādi - BCM X (kur X ir skaitlis)

13. solis: MagicBox

Šim solim pievienotais kods ir pēdējais.

Jūs varat to palaist aveņu PI sāknēšanā, pat nepiesakoties. Lai to izdarītu, vienkārši izveidojiet šo mazo skriptu direktorijā, kurā esat ievietojis kodu - attiecīgi mainiet ceļus

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Padariet to izpildāmu

chmod +x start_magicbox.sh

Tagad izsauciet to /etc/rc.local, tieši pirms izejas 0 instrukcijas

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

saglabāt un atmest.

Tagad ar katru pārstartēšanu programma Python tiks izpildīta

PIEZĪME. Visiem attēlu failiem jāatrodas tajā pašā direktorijā, kurā ir skripts. Jums ir jābūt:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • IzvēlietiesOption.png

Visus šos failus varat iegūt vietnē MagicBox github.

Ieteicams: