Оглавление:

Фотокамера RaspberryPI - MagicBox: 13 шагов (с изображениями)
Фотокамера RaspberryPI - MagicBox: 13 шагов (с изображениями)

Видео: Фотокамера RaspberryPI - MagicBox: 13 шагов (с изображениями)

Видео: Фотокамера RaspberryPI - MagicBox: 13 шагов (с изображениями)
Видео: Очередные модули из Китая #13 2024, Ноябрь
Anonim
Image
Image
Строить
Строить

Некоторое время назад мне пришла в голову безумная идея создать фотографическую машину из Raspberry PI. В моем городе было небольшое шоу, на которое люди приходили и показывали, что они делали или делали с помощью электроники, компьютеров и т. Д. Я был похож на ярмарку Maker Faire для бедняков, но в местном масштабе.

Поднимался один, и мы вместе с женой строили его.

Как это работает ?

Нажимаешь синюю кнопку - она начинает мигать - и через 3 секунды делается снимок. С другой стороны камеры есть монитор, на котором отображается обратный отсчет, а после того, как фотография сделана, предварительный просмотр фотографии.

Теперь вы можете отправить его в Twitter и Facebook или отменить и попробовать еще раз. Это так просто.

Все запрограммировано на Python с использованием буфера кадра PI - ни Xorg, ни графический интерфейс не используются.

Вот видео работы проекта

Запасы

  • Raspberry PI (использую версию 2)
  • Raspberry PI Camera (с использованием версии 1)
  • 3 кнопки с большим куполом
  • TFT / ЖК-монитор с VGA / HDMI
  • МДФ
  • Металлические петли, шурупы и т. Д.
  • Электроинструменты
  • Свободное время и много веселья

Шаг 1. Сборка

Строить
Строить
Строить
Строить

Строить было весело. Много резки, покраски и сверления.

Я использовал панели МДФ для создания основной конструкции камеры. Они легкие, с ними легко работать. Кроме того, это был один из видов древесины, который лазерный станок на местной фабрике мог распилить.

Доступ к проводке внутри был обеспечен со стороны монитора с помощью гидравлических петель, чтобы они могли помочь поднять монитор.

Шаг 2: камера

Камера
Камера
Камера
Камера
Камера
Камера

Камера

Камера представляет собой коробку следующих размеров: 60см x 40см x 30см. Ваша может быть меньше, больше, решать вам. Просто нужно приспособить для монитора, который вы собираетесь использовать. Панели МДФ были вырезаны лазером на местном заводе Fablab. Сзади нужно сделать 3 отверстия - две большие кнопки на куполе и одно для монитора. Спереди 2 отверстия - одно для большой кнопки на куполе, другое - поменьше - для камеры Raspberry PI. У меня нет конкретных измерений - просто представьте камеру и используйте ее.

Шаг 3: Монитор

Монитор
Монитор
Монитор
Монитор
Монитор
Монитор

Монитор

Подставка для монитора была сделана из небольших кусков дерева, чтобы поддерживать ее в пределах своих размеров.

Он был снят с пластикового корпуса и закреплен винтами. Для подъема использовались две гидравлические петли (бывшие в употреблении).

Шаг 4: Украшение

Украшение
Украшение
Украшение
Украшение
Украшение
Украшение
Украшение
Украшение

Поскольку мне очень нравится стиль моего Fuji X-T30, мы пошли и сделали нечто подобное.

Сначала мы покрыли его пеной, а затем окрасили распылением в черный цвет. После покраски мы добавили алюминиевую фольгу для серебряных деталей и завернули в

Чтобы смоделировать объектив, мы просто использовали круглый Tupperware, в котором мы проделали небольшое отверстие для модуля камеры Raspberry PI.

Шаг 5: программирование

Программировать камеру было непросто, но очень весело.

Нет графического интерфейса пользователя - он работает в интерфейсе командной строки и работает на Python версии 3.

Сначала я начал с тестирования и программирования кнопок, а затем сделал снимки с помощью уже предоставленных инструментов и Python API. Затем я перешел к наложению изображений на вывод камеры (для обратного отсчета), а затем к взаимодействию с Twitter и Facebook.

После того, как я освоился со всем этим, как с пазлом, я собрал все части вместе. Здесь мы идем по тому же самому процессу. Начните медленно и с малого и переходите к быстрому и большому.

Во-первых, давайте начнем с настройки Raspberry PI.

Шаг 6: Подготовка Raspberry PI

Подготовка Raspberry PI
Подготовка Raspberry PI
Подготовка Raspberry PI
Подготовка Raspberry PI
Подготовка Raspberry PI
Подготовка Raspberry 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 по умолчанию. Перейдите по этой ссылке, чтобы узнать, как настроить его для ВСЕЙ СИСТЕМЫ

Библиотеки:

  • python-pil.imagetk для управления изображениями
  • python-rpi.gpio для доступа к PIN-кодам GPIO
  • python-picamera для доступа к Raspberry PI Camera
  • Tweepy, чтобы опубликовать фото в твиттере
  • 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

import time import picamera from time import sleep camera = picamera. PiCamera () # Установите желаемое разрешение camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) except (KeyboardInterrupt, SystemExit): print ("Exiting…") camera.stop_preview ()

Чтобы попробовать, просто выполните это

python cameraPreview.py

Предварительный просмотр камеры с изображениями сверху

Поскольку я хотел, чтобы перед съемкой отображался обратный отсчет, мне нужны изображения, перекрывающие предварительный просмотр камеры.

Создайте изображение-p.webp" />

Следующий код будет перекрывать 1-p.webp

import picamerafrom PIL import Image from time import sleep with picamera. PiCamera () as camera: 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

from PIL import Image from time import sleep with picamera. PiCamera () as camera: 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 (), size = img1.size) o.alpha = 128 o.layer = 3 sleep (2) # удалить предыдущий оверлей camera.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # удалить предыдущий оверлей camera.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

И посмотрите обратный отсчет

Ничего себе - Немного кода и нет снимка … Давайте решим это, объединив все вместе - предварительный просмотр камеры, обратный отсчет и снимок

import picamerafrom PIL import Image from time import 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 мм с маленьким светодиодом. В нем говорится, что он работает от 12 В, но 3,3 В 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 («Кнопка нажата») GPIO.output (ledButton, False) GPIO.cleanup ()

Некоторые пояснения кода. Одна из форм получения значений из GPIOS - через прерывания (другой - опрос) - обнаружение фронта.

Edge - это название перехода от HIGH к LOW (задний фронт) или LOW к HIGH (нарастающий фронт). Когда PIN-код ни к чему не подключен, любое чтение будет неопределенным. Обходной путь заключается в том, чтобы в упомянутом PIN-коде был резистор, повышающий / понижающий нагрузку. Raspberry PI позволяет настраивать нагрузочные резисторы через программное обеспечение.

Линия

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

настраивает этот PIN-код для этого - потяните вверх

Зачем подтягиваться? Что ж, кнопка большого купола имеет 2 контакта - нажмите, чтобы сломать, или нажмите, чтобы сделать (точно так же, как маленькие кнопки, которые часто поставляются с наборами Arduino / Raspberry PI). Я подключил его к кнопке "нажать, чтобы сделать". При нажатии цепь замыкается и проходит электричество (нормально разомкнутый).

Линия

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

будет ждать (фактически приостанавливая выполнение скрипта), пока не обнаружит падение ПИН-кода - отпускание кнопки отключит подачу электроэнергии, и ПИН-код перейдет с 3,3 В на 0 В.

Светодиодный PIN-код предназначен только для того, чтобы загорелся светодиод на кнопке

Дополнительная информация о нажимных переключателях из руководств Arduino, Википедии о нажатии для включения или нажатии на прерывание и прерываниях GPIO

Теперь давайте объединим кнопку с камерой - сделайте снимок, только когда кнопка нажата.

import picamerafrom time import sleep from RPi import GPIO from PIL import Image # ПРИМЕЧАНИЕ: это то, что будет кнопкой отмены в основной программе # Я просто использую ее здесь для ясности в видео 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 (): # загрузить изображения 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

Опубликовать в Twitter
Опубликовать в Twitter
Опубликовать в Twitter
Опубликовать в Twitter
Опубликовать в Twitter
Опубликовать в Twitter

Теперь мы собираемся использовать Python и написать твит!:) Вам понадобится изображение для публикации - выбирайте с умом.

Во-первых, нам нужно получить доступ к Twitter API, а для этого нам нужно создать приложение. Перейдите на https://apps.twitter.com и создайте новое приложение.

Вам нужно будет подать заявку на создание учетной записи разработчика - ответьте на несколько вопросов и подтвердите свой адрес электронной почты. После этого вы сможете создать новое приложение.

После создания приложения перейдите в раздел «Ключи и токены» и создайте токен доступа и секрет токена доступа. Окно будет отображаться с ключами ТОЛЬКО ОДИН РАЗ - КОПИРУЙТЕ ИХ И СОХРАНИТЕ ИХ ПОЗЖЕ.

Используйте следующий код, чтобы отправить изображение в свою учетную запись Twitter. Не забудьте заполнить:

  • Consumer_key
  • потребитель_секрет
  • access_token
  • access_token_secret

Твиттер-сообщение - это текст для отправки твита.

jpg_foto_to_send - изображение, которое будет прикреплено к твиту. Пожалуйста, поместите какое-нибудь изображение в тот же каталог, что и скрипт Python, и измените имя в коде.

import tweepy # Настройки Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], cfg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Отправить в твиттер def sendToTwitter (): cfg = {"consumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Статусное сообщение tweet = "Twitter message" 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, нажав ее, обратный отсчет, сделаем снимок, решим, отправлять ли его в твиттер.

Мы добавим еще одно наложенное изображение и будем использовать все три кнопки. Когда будет сделан снимок, загорятся все 3 светодиода кнопок.

Добавляем еще одну картинку, на которой показаны значки для публикации в социальных сетях.

SelectOption-p.webp

Aenviar-p.webp

На видео не показана синяя кнопка (на передней панели камеры), но светодиод горит и начинает мигать, как только его нажимают.

Код прилагается, если вы предпочитаете

Это последний тестовый код перед основной программой.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import sleep from RPi import GPIO from PIL import threading # Twitter import tweepy # Facebook import facebook # Button to take picture takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Отменить изображение cancelButton = 24 # Светодиод кнопки фотосъемки takePicButtonLed = 27 # Светодиод кнопки публикации в социальной сети postSNLed = 22 # Светодиод кнопки отмены 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 def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], cfg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Отправить в твиттер def sendToTwitter (): cfg = {"con sumer_key ":" "," consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Сообщение о состоянии 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_token']) # Получить токен страницы опубликуйте как страницу. Вы можете пропустить # следующее, если хотите опубликовать от себя: resp = graph.get_object ('me / accounts') page_access_token = Нет для страницы в resp ['data']: if page ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Отправить в facebook def sendToFacebook (): # Значения для доступа cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Подпись к изображению" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Подпись к изображению ") # Только подсветка TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Только световая кнопка Отмена и кнопка SocialNetwork def cancelPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Мигает светодиодный индикатор фотосъемки во время обратного отсчета def countingTimerPicture (): 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) sleep (0.5) GPIO.output (takePicButtonLed, True) sleep (0.5) GPIO.output (takePicButtonLed, False) # Мигает postSNLed при публикации в социальных сетях def blinkPosting (stop_event): # Запускать while (не 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) 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 - дерьмо # мы используем оверлей с камеры для отображения # предварительного просмотра 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 (): # загрузить изображения 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) # paste оверлей - 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 (True): camera.start_preview () # Показывать светодиод только для снимка только TakePicLed () # Подождите, пока кнопка не сделает Изображение GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Запустить поток для подсчета с помощью светодиодов, пока отображаются изображения # Вероятно, можно использовать в функции overlayCounter, # потому что у него также есть таймеры для отображения изображений, но светодиодные эффекты не будет # тем же _thread.start_new_thread (countingTimerPicture, ()) # Показать наложение изображений в наложении изображения камеры overlayCounter () # Показать все светодиоды при съемке изображения showAllLeds () camera.capture ('pushTesting.jpg') camera. stop_preview () #display image displayPreview ('pushTesting.jpg') # Показать оверлей oo = overlaysn () # Показать светодиоды для отмены или публикации в социальных сетях cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.adted_event_devent_devent_devent, GPIO. FALLING) while (True): если GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print «Кнопка социальных сетей» sendToTwitter () sendToFacebook () camera.remove_overlay (o) перерыв, если GPIO.event_detected (cancelButton): #print "Отменена" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (cancelButton) GPIO. «Выход…») #offLeds () GPIO.cleanup ()

Шаг 12: Подключение

Image
Image
Проводка
Проводка
Проводка
Проводка

Проводка просто подключает кнопки Big Dome Push к Raspberry PI.

Просто следуйте схеме Fritzing.

Подключения:

Подключение RPI GPIO PIN GND Зеленая кнопка GND (# 3) GND Желтая кнопка GND (# 9) GND Синяя кнопка GND (# 39) Сделайте снимок (синяя кнопка "Нажмите, чтобы сделать") 17 (BCM) Публикация в социальных сетях (зеленая кнопка) Кнопка "Нажмите, чтобы сделать") 23 (BCM) Отмена (Желтая кнопка "Нажмите, чтобы сделать") 24 (BCM) Синий светодиод кнопки 27 (BCM) Зеленый светодиод кнопки 22 (BCM) Желтый светодиод кнопки 5 (BCM)

Термоусадка также имеет цветовую маркировку.

  • Черный - GND соединения
  • Желтые - это соединения, которые нужно установить.
  • Синий - это светодиодные соединения

Номера GPIO. BCM против соединений GPIO. BOARD

Поскольку мои связи связаны с BCM, я думаю, что сейчас хорошее время, чтобы поговорить об этом и о разнице между BCM и BOARD.

Основное различие заключается в том, как вы относитесь к PIN-кодам GPIO, которые, в свою очередь, будут определять, как вы выполняете подключения. 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 непосредственно перед инструкцией exit 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.

Рекомендуемые: