你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
一個使用樹莓派 3加觸摸屏顯示器 、鏡頭和SenseHAT的有趣專案
在這篇文章中,我們將會介紹一個容易完成的專案,它只需要使用四個官方的樹莓派產品,便可以建立一個桌面“自拍”相機。另外一點有趣的地方是它不需要焊接或定制任何電子零件。此外,很多軟體都支援到它的硬件,所以軟體應用程序也是超級簡單的。
硬體
整個專案使用了下列的零件:
- 樹莓派3型號B
- 樹莓派觸摸屏
- 樹莓派相機
- SenseHAT
- 電源
- 32GB Micro SD 卡
另外還配搭了定製激光切割和折疊亞克力盒。即使你沒有激光切割機和亞克力文件夾,也可以使用其他的外殼替代。
O/S及相關
把Raspbian Jessie Lite寫入一張Micro SD卡中,然後將主機名由簡單的raspberrypi更改為其他名稱,編輯根文件系統etc/hostname和etc/hosts文件就可以。這樣在網絡上會更容易找到主機。
openssh服務器現在默認為禁用,因為我更喜欢通過SSH進行登錄,這可以通過在boot partition中建立一個名為ssh的空文件來啟用它。
觸摸屏技術上是上下倒轉安裝的,所以要將顯示器旋轉到正確的方向,有必要編輯config.txt - 也在啟動分區,並添加行:
lcd_rotate=2
接下來將Micro SD卡插入Raspberry Pi並接通電源。之後,我建議按照慣例做法,通過登錄並輸入以下内容更新O / S:
$ sudo apt get update
$ sudo apt-get dist-upgrade
請注意,由於我們已將主機名更改為selfiecam,因此可以從另一台Linux電腦使用以下命令登錄到Pi:
$ ssh pi@selfiecam.local
由於我們想使用SenseHAT,相機和帧緩冲區,一些有用的Python軟體也通過安裝:
$ sudo apt-get install sense-hat python-picamera python-pygame
最後,需要啟用相機和重新啟動,這可以透過raspi-config完成:
$ sudo raspi-config
軟體
首先,我們需要導入一些庫,其中包括上面提到的。
import os
import time
import pygame
from picamera import PiCamera
from sense_hat import SenseHat
我們需要初始化Pygame,它將用來顯示圖像到帧緩冲區中(顯示器)。
pygame.init()
screen = pygame.display.set_mode([800,480])
接下來我們設置攝像機,由於它的物理位置被水平翻轉,我們需要通過軟體翻轉它。
camera = PiCamera()
camera.resolution = (800, 480)
camera.hflip = True
之後配置SenseHAT。
sense = SenseHat()
sense.set_rotation(0)
接下來我們將會定義一個函數,把其中一個文件作為参數,然後使用Pygame來繪製屏幕變成黑色,然後再顯示它包含的圖像。
def displayImage(file):
image = pygame.image.load(file)
imagerect = image.get_rect()
screen.fill([0, 0, 0])
screen.blit(image, imagerect)
pygame.display.flip()
然後我們定義一個功能,啟用視頻預覽,在SenseHAT LED矩陣上顯示3-2-1-0倒計時,截取靜止圖像前,停止預覽,顯示圖像,並清除LED矩陣。影像文件名中應包含日期和時間。
def getSelfie():
# Start camera video preview
camera.start_preview()
# Commence countdown
sense.show_letter("3", text_colour=[255, 0, 0])
time.sleep(1)
sense.show_letter("2", text_colour=[255, 255, 0])
time.sleep(1)
sense.show_letter("1", text_colour=[0, 255, 0])
time.sleep(1)
sense.show_letter("0", text_colour=[0, 0, 255])
# Capture image and stop preview
filename = time.strftime("/selfies/%Y-%m-%d-%H-%M-%S.jpg")
camera.capture(filename)
camera.stop_preview()
# Display image and clear SenseHAT display
displayImage(filename)
sense.clear()
請注意,LED矩陣上顯示的數字顏色是不同的:3 =紅色,2 =黄色,1 =綠色,0 =藍色。
到目前為止,我們只是導入了不同的庫和定義函數。接下來,我們使用displayImage()這個函數在啟動時更新觸摸屏顯示歡迎圖像。
displayImage("/usr/local/share/images/Welcome.png")
最後,我們進入程序的主循環。在這裡,我們等待來自SenseHAT操縱桿的動作。如果這被按住,我們需要等待它被釋放後使用getSelfie()函數。如果它被一直保持在左邊,我們直接關機。我们可以忽略其他相關動作。
while True:
# Wait for and process joystick events
event = sense.stick.wait_for_event(emptybuffer=True)
if event.direction == "middle" and event.action == "released":
getSelfie()
elif event.direction == "left" and event.action == "held":
os.system("/sbin/shutdown -h now")
else:
pass
運行
/etc/rc.local文件在啟動時運行,在這文件添加一行代碼防止屏幕自動關閉,接着一秒後會啟動自拍照相機應用程序。
sudo sh -c "TERM=linux setterm -blank 0 >/dev/tty0"
/usr/local/bin/selfie.py &
重新啟動後,我們會看到我們設定的歡迎圖像。按下操縱桿時,會顯示實時視頻預覽,并开始倒數計時。
在倒數到零時將會拍照,並停止視頻預覽,圖像會顯示在屏幕上。
最後圖像可以從SD卡中複製出來。
簡單! :o)
如果你想自己做這個項目,可以在GitHub上找到Python腳本和亞克力外殼的設計文件。