Съдържание:
- Консумативи
- Стъпка 1: Изградете
- Стъпка 2: Камера
- Стъпка 3: Монитор
- Стъпка 4: Декориране
- Стъпка 5: Програмиране
- Стъпка 6: Подготовка на Raspberry PI
- Стъпка 7: Софтуер
- Стъпка 8: Програмиране - Визуализация на камерата
- Стъпка 9: Програмиране - Бутон с голям купол
- Стъпка 10: Публикувайте в Twitter
- Стъпка 11: Комбиниране на някои елементи
- Стъпка 12: Окабеляване
- Стъпка 13: MagicBox
Видео: Фотокамера RaspberryPI - MagicBox: 13 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-31 10:17
Преди време ми хрумна тази луда идея да създам фотографска машина от Raspberry PI. В моя град имаше едно малко шоу, където хората щяха да отидат и да покажат какво правят или трябва да направят с помощта на електроника, компютри и т.н … Бях като Maker Faire на беден човек, но в местен мащаб.
Един се издигаше и заедно със съпругата ми изграждаме това нещо.
Как работи ?
Натискате синия бутон - той започва да мига - и след 3 секунди се прави снимка. От другата страна на камерата има монитор, който показва обратно броене и след като снимката е направена, визуализацията на снимката.
Вече можете да изберете да го изпратите до Twitter и Facebook или да отмените и да опитате отново. Толкова е просто.
Всичко е програмирано в Python, като се използва PI framebuffer - Не се използва Xorg, не се използва GUI.
Ето видео на работата на проекта
Консумативи
- Raspberry PI (използвам версия 2)
- Raspberry PI камера (използва се версия 1)
- 3x бутони с голям купол
- TFT/LCD монитор с VGA/HDMI
- MDF
- Метални панти, винтове и др.
- Електрически инструменти
- Свободно време и много забавление
Стъпка 1: Изградете
Изграждането му беше забавно. Много рязане, боядисване и пробиване.
Използвах MDF панели за изграждане на основната структура на камерата. Те са леки и с тях се работи лесно. Също така, това беше един вид дърво, което лазерната машина в местния Fablab успя да отреже.
Достъпът до окабеляването вътре беше направен от страната на монитора, използвайки хидравлични панти, за да могат да помогнат при повдигането на монитора.
Стъпка 2: Камера
Камера
Камерата е кутия със следните размери: 60см x 40см x 30см Вашият може да бъде по -малък, по -голям, зависи от вас. Просто трябва да поберете монитора, който ще използвате. MDF панелите бяха лазерно изрязани в местния Fablab. Имате нужда от 3 дупки отзад - два големи куполни бутона и един за монитора. В предната част, 2 отвора - един за бутон с голям купол и друг - по -малък - за камерата на Raspberry PI. Нямам конкретни измервания - просто си представете камера и я използвайте.
Стъпка 3: Монитор
Монитор
Поддръжката на монитора е направена, като се добавят малки парчета дърво, за да се поддържа в нейните размери.
Той беше отстранен от пластмасовия корпус и закрепен на място с винтове. За да се помогне при повдигането му, бяха използвани две (използвани) хидравлични панти.
Стъпка 4: Декориране
Тъй като много харесвам стила на моя Fuji X-T30, отидохме и направихме нещо подобно.
Първо го покрихме с пяна и след това го боядисахме в черно. След боята добавихме алуминиево фолио за сребърните части и го увийте
За да симулираме обектива, просто използвахме кръгъл Tupperware, ако направихме малка дупка, за да може модулът на Raspberry PI камерата да седне.
Стъпка 5: Програмиране
Програмирането на камерата беше предизвикателство, но беше супер забавно.
Няма графичен интерфейс - това работи на CLI и работи на версия 3 на Python.
Първо започнах с тестване и програмиране на бутоните, след това направих снимки с помощта на вече предоставените инструменти и API на Python. След това преминах към наслагване на снимки в изхода на камерата (за обратно броене) и до взаимодействие с Twitter и Facebook.
След като ми беше удобно всичко това, като пъзел, събрах всички парчета заедно. Тук вървим по същия процес. Започнете бавно и малко и преминете към бързо и голямо.
Първо, нека започнем с конфигурирането на Raspberry PI
Стъпка 6: Подготовка на Raspberry PI
Няма да обяснявам как да инсталирам Raspbian на Raspberry PI - там има много уроци, дори на официалния уебсайт на Raspberry PI.
Просто трябва да имате SSH достъп до него или да го свържете към монитор и да включите клавиатура и мишка.
ЗАБЕЛЕЖКА: Когато стартирате с Raspberry PI камера, трябва да я включите към монитор. До там всички стъпки могат да бъдат направени с помощта на SSH.
След стартиране във вашия Raspberry PI, трябва да активираме Raspberry PI камерата. Нека използваме raspi-config инструмент за това.
sudo raspi-config
- Изберете опция 5 - Опции за взаимодействие
- Изберете P1 - Активиране/деактивиране на връзката с Raspberry PI камерата
- Кажи да
- за ОК
- Изберете Край
- Изберете Да, за да рестартирате сега
След рестартирането можем да продължим
Стъпка 7: Софтуер
Ще имаме нужда от инсталиране на някои библиотеки на Python. Това е актуализирано за най -новата версия на Raspbian - Buster
Първо, нека зададем Python 3 по подразбиране. Следвайте тази връзка, за да знаете как да го настроите SYSTEM WIDE
Библиотеки:
- python-pil.imagetk за манипулиране на изображения
- python-rpi.gpio за достъп до GPIO ПИН кодовете
- python-picamera за достъп до Raspberry PI Camera
- Tweepy, за да споделите снимката в Twitter
- facebook-sdk за споделяне във фейсбук страница
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: Програмиране - Визуализация на камерата
Едно от изискванията, които поставих към този проект, беше тази програма да работи в CLI режим. Така че, трябва да покажем изображението на камерата на конзолата. За това нека използваме Python Picamera. След това нека използваме pil.imagetk, за да покажем наслагване в горната част на визуализацията на камерата
Нашата малка програма (ще разработим малки програми до една голяма в края) ще покаже визуализацията на камерата.
#!/usr/bin/env python
време за импортиране импортиране на пикамера от време импортиране на спяща камера = 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 в тях.
След това просто използвайте следния код:
внос пикамера
от PIL импортиране на изображение от време за импортиране на сън с picamera. PiCamera () като камера: 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.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), размер = img1.size) o.alpha = 128 o.layer = 3 sleep (2) #премахване на предишната камера с наслагване.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (тампон. tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # премахнете предишната камера с наслагване.remove_overlay (o) pad.paste (img3, (0, 0)) o = camera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 sleep (2)
Сега го изпълнете:
python imageOverlayCounter.py
И вижте обратното броене
Уау - Много код и никаква снимка … Нека решим това, като комбинираме всичко заедно - преглед на камерата, обратно броене и правене на снимка
импортиране на пикамера от PIL импортиране на изображение от време импортиране sleep def overlayCounter (): # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp
Опитай:
python pictureWithTimer.py
И тук имаме Йода
Стъпка 9: Програмиране - Бутон с голям купол
Бутонът с голям купол е голям кръгъл бутон - с диаметър около 100 мм с малък светодиод. Той казва, че работи при 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 Presssed") GPIO.output (ledButton, False) GPIO.cleanup ()
Някои обяснения на кода Една от формите за получаване на стойности от GPIOS е чрез прекъсвания (другата е анкета) - откриване на ръбове.
Ръбът е името на прехода от HIGH към LOW (падащ ръб) или LOW към HIGH (нарастващ ръб). Когато ПИН кодът не е свързан с нищо, всяко четене ще бъде неопределено. Заобиколно решение е да има резистор за изтегляне нагоре/надолу в споменатия ПИН. Raspberry PI позволява да се конфигурират резистори за изтегляне нагоре/надолу чрез софтуер.
Линията
GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)
конфигурира този ПИН да прави точно това - издърпайте нагоре
Защо да се дръпнете? Е, бутонът с голям купол има 2 ПИН кода - натиснете, за да счупите или натиснете, за да направите (точно като малките бутони, които често идват с комплекти Arduino/Raspberry PI). Свързах го с ПИН кода на бутона „натисни и направи“. При натискане веригата се затваря и електричеството преминава (нормално отворено).
Линията
GPIO.wait_for_edge (takeButton, GPIO. FALLING)
ще изчака (ефективно спиране на изпълнението на скрипта), докато открие падането на ПИН кода - освобождаването на бутона ще намали потока на електричество и ПИН ще премине от 3.3v на 0v
Светодиодният PIN е само за да светне светодиода на бутона
Повече информация за превключвателите от 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) # поставете наслагването - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # слоят е 3, защото визуализацията на камерата е на слой 2 ov.layer = 3 sleep (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 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 ()
Малко обяснение на кода
Той стартира визуализацията на камерата и изчаква там, докато не бъде натиснат бутон. След натискане на бутона светодиодът светва и отброяването започва. Когато стигнете до края, снимката се прави и светодиодът се изключва
Стъпка 10: Публикувайте в Twitter
Сега ще използваме Python и ще чуруликаме туит!:) Ще ви трябва изображение, за да публикувате - изберете разумно.
Първо, трябва да получим достъп до Twitter API и за това трябва да създадем APP. Отидете на https://apps.twitter.com и създайте ново приложение.
Ще трябва да кандидатствате за акаунт на програмист - попълнете някои въпроси и потвърдете имейл адреса си. След това ще можете да създадете ново приложение.
След като създадете приложението, отворете Ключове и жетони и Генерирайте маркер за достъп и секрет на маркери за достъп. Ще се покаже прозорец с КЛЮЧОВЕТЕ САМО ВЕДНЪЖ - КОПИРАЙТЕ И ИХ ЗАПАЗЕТЕ ПО -КЪСНО.
Използвайте следния код, за да изпратите снимка към вашия акаунт в Twitter. Не забравяйте да попълните:
- потребителски ключ
- Consumer_secret
- жетон за достъп
- access_token_secret
Twitter съобщението е текстът, който трябва да се изпрати в туита.
jpg_foto_to_send е снимка, която ще бъде прикачена към туита. Моля, имайте снимка в същата директория като скрипта на Python и променете името в кода.
импортиране на tweepy # настройки на Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret]) tweepy. API (auth) # Изпращане до Twitter def sendToTwitter (): cfg = {"customer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Съобщение за състоянието tweet = "Съобщение в Twitter" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()
Проверете емисията си в Twitter за вашия туит.
Ето туита
Или по -долу:
#RaspberryPI MagicBox. Направете снимки, прегледайте ги и изберете да ги изпратите до Twitter и Facebook. Осъществено от Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p
- Бруно Рикардо Сантос (@feiticeir0) 29 февруари 2020 г.
Стъпка 11: Комбиниране на някои елементи
Нека сега комбинираме бутона Big Dome Push, като го натиснем, отброяваме, направим снимка, решим дали да я изпратим или не в Twitter.
Ще добавим още едно изображение с наслагване и ще използваме трите бутони. Когато се направи снимката, ще светнат всички 3 светодиода с бутони.
Добавяме още една снимка, която показва иконите за публикуване в социалните мрежи
SelectOption-p.webp
Aenviar-p.webp
Във видеото не се показва синият бутон (предната част на камерата), но светодиодът свети и започва да мига веднага щом бъде натиснат.
Кодът е приложен, ако предпочитате
Това е последният код за тестване преди основната програма.
# coding = utf-8 импортиране на пикамера внос _thread импорт подпроцес като sp от време импортиране сън от RPi импортиране GPIO от PIL импортиране импортиране на импортиране на изображения # Twitter внос tweepy # Facebook импортиране facebook # Бутон за заснемане на снимка takeButton = 17 # Бутон SocialNetwork socialNetworkButton = 23 # Cancel Picture cancelButton = 24 # Бутон за правене на снимка LED takePicButtonLed = 27 # Публикуване в бутона за социална мрежа LED postSNLed = 22 # Бутон за отмяна LED отмянаButtonLed = 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 def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token']), cfg ['access_token_secret']) връщане tweepy. API (auth) # Изпращане до Twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," customer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Съобщение за състоянието tweet =" MagicBox инструкции за тестване. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", туит) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) # публикувайте като страница. Можете да пропуснете # следното, ако искате да публикувате като себе си. resp = graph.get_object ('me/accounts') page_access_token = Няма за страница в resp ['data']: if page ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] графика = facebook. GraphAPI (page_access_token) връщане на графика # Изпращане до facebook def sendToFacebook (): # Стойности за достъп cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Надпис на изображението" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Надпис на изображението ") # Само Light TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Само Light Отказ и бутонът SocialNetwork дефинирайте отметкатаPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Мига светодиод за снимка при отброяване def countingTimerPicture (): GPIO.output (takePicButtonLed, True) спя (0.5) GPIO.output (takePicButtonLed, False) sleep (0.5) GPIO.output (takePicButtonLed, True) sleep (0.5) GPIO.output (takePicButtonLed,False) sleep (0.5) GPIO.output (takePicButtonLed, True) sleep (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed при публикуване в социалните мрежи def blinkPosting (stop_event): # Start while (not stop_event.is_set ()): печат ("изключен") GPIO.output (postSNLed, False) спящ (0.5) печат ("on") GPIO.output (postSNLed, True) спящ (0.5) def timer (): GPIO.output (takePicButtonLed, True) sleep (1) GPIO.output (postSNLed, True) sleep (1) GPIO.output (cancelButtonLed, True) sleep (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Показване на предварителен преглед на слой 1 def displayPreview (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 изображението е глупост # ние използваме наслагването от камерата, за да покажем # 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 # Функция overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Създаване Подложка = 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 sleep (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 sleep (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 sleep (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 (Вярно): camera.start_preview () #Покажи светодиод Само за заснемане на снимкаTakePicLed () #Изчакайте бутона да вземе Картина GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Започнете нишка, която да се брои със светодиодите, докато изображенията се показват # Вероятно може да се използва във функцията overlayCounter, # защото има и таймери за показване на снимките, но светодиодните ефекти няма да бъде # същата _thread.start_new_thread (countingTimerPicture, ()) # Показва наслагването на снимките в наслагването на картината на камератаCounter () # Показва всички светодиоди, докато правите снимката showAllLeds () camera.capture ('pushTesting.jpg') camera. stop_preview () #display image displayPreview ('pushTesting.jpg') # Показване на наслагване oo = overlaysn () # Показване на светодиодите за отмяна или публикуване в социалните мрежи cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event, GPIO. FALLING) докато (Вярно): ако GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Бутон за социални мрежи" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if 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_deteton (printBuster) "Излезли …") #offLeds () GPIO.cleanup ()
Стъпка 12: Окабеляване
Окабеляването просто свързва бутоните Big Dome Push към Raspberry PI.
Просто следвайте схемата на Fritzing.
Връзките са:
Връзка RPI GPIO ПИН GND Зелен бутон GND (#3) GND Жълт бутон GND (#9) GND Син бутон GND (#39) Направете снимка (Син бутон "Push to make") 17 (BCM) Публикувайте в социалните мрежи (Зелен бутон) Бутон "Push to make") 23 (BCM) Отказ (жълт бутон "Push to make") 24 (BCM) Син бутон LED27 (BCM) Зелен бутон LED22 (BCM) Жълт бутон LED5 (BCM)
Термо свиването също е цветно кодирано
- Черното е GND връзки
- Жълтите са връзки „push to make“
- Сините са LED връзки
GPIO. BCM номера срещу GPIO. BOARD връзки
Тъй като моите връзки са BCM, мисля, че сега е подходящ момент да поговорим за това и разликата между BCM и BOARD.
Основната разлика е как се отнасяте към GPIO ПИН кодовете, които от своя страна ще определят как осъществявате връзките. GPIO.board ще посочва ПИН кодовете по номера, отпечатан на всяко оформление на GPIO в интернет.
GPIO. BCM се позовава на ПИН номера, както ги вижда Broadcom SOC. Това вероятно ще се промени заедно с по -новите версии на Raspberry PI.
На сайта pinout.xyz номерата на дъските са тези точно до щифтовете и BCM се споменава така - BCM X (където X е числото)
Стъпка 13: MagicBox
Приложеният код към тази стъпка е последният.
Можете да го стартирате при малиново 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.
Препоръчано:
LED светлина (и) със захранване от батерията със слънчево зареждане: 11 стъпки (със снимки)
LED светлини (и), захранвани от батерии, със слънчево зареждане: Жена ми учи хората как да правят сапун, повечето от часовете й бяха вечер и тук през зимата се стъмва около 16:30 ч. Някои от нейните ученици имаха проблеми с намирането на нашите къща. Имахме табела отпред, но дори и с улично осветление
Лек хак за стая със зрителни увреждания със слухови увреждания: 7 стъпки (със снимки)
Лек хак на стаята със слухови увреждания на вратата: Проблем: баща ми е регистриран като глух, а майка ми е с увреден слух и поради това често им е трудно да чуят звънеца на вратата. Това би могло да бъде проблем, претърпян и от много други.Купиха мигащ светлинен звънец на вратата, за да им помогнат с
Висящи бижута със слънчево захранване на сърцето със светкавици: 11 стъпки (със снимки)
Висящи бижута със слънчево захранване за сърце: Тази инструкция е за сърце със слънчева енергия с пулсиращ червен светодиод. Той измерва около 2 " до 1,25 ", включително USB раздела. Той има една дупка през горната част на дъската, което улеснява окачването. Носете го като огърлица, обеци, връзки на щифт
Сандък със съкровище Zelda (със светлини и звук): 12 стъпки (със снимки)
Zelda Treasure Chest (With Lights & Sound): Здравейте на всички! Бях голям фен на игрите Legend of Zelda, когато бях по -малък, но мисля, че почти всеки знае емблематичната мелодия, която свири, когато отворите сандък в играта, просто звучи толкова вълшебно! В тази инструкция ще ви покажа как
Персонализиран часовник със стрелки за снимки: 5 стъпки (със снимки)
Персонализиран часовник със стрелки за снимки: Някои хора наблюдават часовника. Сега всеки може да бъде часовник. Други проекти персонализират лицето на часовника. Този персонализира стрелките на часовника. Изглежда скъп, но е по -малко от 5 долара и около 30 минути на часовник. Перфектен за Chr