54
Bluetooth Raspberry Piカメラトリガーの作り方

新しいRaspberry Piカメラモジュール3は、優れた画質と、標準(75度)と広角(120度)のレンズから選択できます。そして何より嬉しいのは、オートフォーカス機能が搭載されたことです。Picamera2で写真を撮るのは簡単ですが、ボタンを押して写真を撮り、自分も一緒に写り込みたい時もありますよね。

このプロジェクトでは、PythonモジュールとAndroidアプリを組み合わせたBlue Dotを使用して、Bluetooth制御のカメラトリガーを作成します。Blue Dotの使いやすいライブラリとPicamera2の高度な構造のおかげで、わずかなコードで1080pの写真を撮影できます。

このプロジェクトに必要なもの

  • Raspberry Pi 3または4
  • ラズベリーパイカメラ
  • Androidデバイス

Raspberry Piカメラモジュールのインストール

 1.プラスチックロックをゆっくりと上に持ち上げて、カメラポートを開きます。

Raspberry Pi カメラモジュール

(画像提供:Tom's Hardware)

2.リボンコネクタの青いタブをUSB / Ethernetポート側に向けて挿入します。Raspberry Pi Zeroをお使いの場合は、アダプターを使用してカメラをボード右側のポートに接続する必要があります。

Raspberry Pi カメラモジュール

(画像提供:Tom's Hardware)

3.コネクタのロックを閉めて軽く引いて、確実に固定されていることを確認します。

4. Raspberry Piの電源を入れてデスクトップを起動します。ターミナルを開き、最新のPicameraアップデートをインストールします。

sudo apt update && sudo apt upgrade -y

5.ターミナルからカメラが正常に動作していることを確認します。libcameraコマンドは、カメラが接続され、期待通りに動作しているかどうかを素早く確認するのに便利です。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

libcamera-hello

ブルードットのインストール

Blue DotはMartin O'Hanlon氏の作品で、Raspberry Piをリモートコントロールするための非常にシンプルな手段を提供します。「Blue Dot」という名前は、Androidデバイスの画面に表示される大きな青い点を表しています。ここでは、Blue Dotを大きな青いボタンとして使い、カメラを起動して写真を撮影します。

1. AndroidデバイスでGoogle Playストアを開き、「Blue Dot」を検索してください。または、こちらのリンクをクリックしてください。

2. Android デバイスに Blue Dot をインストールします。

3. Raspberry Pi でターミナルを開き、Blue Dot の Python ライブラリをインストールします。

sudo pip3 install bluedot

4. Bluetoothメニューに移動し、右クリックして「検出可能にする」を選択します。

Bluetooth Raspberry Pi カメラトリガー

(画像提供:Tom's Hardware)

5. Android デバイスで、「設定」>>「接続済みのデバイス」に移動し、「新しいデバイスをペアリング」を選択します。

6. 「raspberrypi」を選択し、ペアリングの指示に従います。Raspberry Piのホスト名が異なる場合は「raspberrypi」は表示されないので、ホスト名を探してください。

Bluetooth Raspberry Pi カメラトリガー

(画像提供:Tom's Hardware)

Android デバイスと Raspberry Pi が接続されたので、Blue Dot が 2 つのデバイス間で通信できるかどうかを確認するための簡単な Python スクリプトを作成します。

1.メイン メニューの「プログラミング」にあるThonny を開きます。

2.新しいファイルを作成し、Blue Dot Python ライブラリをインポートします。

from bluedot import BlueDot

3.ライブラリを操作するために使用するオブジェクト bd を作成します。

sudo pip3 install bluedot

4.ユーザーが青いボタンを押すまで待機します。このPython行はブロッカーです。ユーザーが操作するまで待機します。操作が行われると、コードは次の行に進みます。

bd.wait_for_press()

5. Python シェルにメッセージを出力します。

print("You pressed the blue dot!")

6.コードをbd-test.pyとして保存し、「実行」をクリックします。コードはAndroidデバイスからの接続を待機します。

7. Android デバイスで Blue Dot を開きます。

8. Raspberry Piのホスト名を選択します。通常は「raspberrypi」です。 

Bluetooth Raspberry Pi カメラトリガー

(画像提供:Tom's Hardware)

9.青いドットをクリックすると、Pythonコードが実行されます。Pythonシェルにメッセージが表示されます。

Bluetooth Raspberry Pi カメラトリガー

(画像提供:Tom's Hardware)

完全なテストコードリスト

from bluedot import BlueDot
bd = BlueDot()
bd.wait_for_press()
print("You pressed the blue dot!")

ブルードットを使ったカメラトリガーの作成

Bluetooth Raspberry Pi カメラトリガー

(画像提供:Tom's Hardware)

このプロジェクトの目標は、Blue Dotを使ってカメラトリガーを作成することです。ボタンを押すと、Raspberry Pi上で写真の撮影を処理する関数が起動します。

1.新しいファイルを作成し、Blue Dot Python ライブラリをインポートします。

from bluedot import BlueDot

2. Picamera2とlibcameraをインポートします。previewクラスは、ショットのフレーミングに便利なプレビューウィンドウを生成するために使用されます。libcameraのcontrolsクラスは、新しいCamera Module 3でオートフォーカスを使用するために使用します。

from picamera2 import Picamera2, Preview
from libcamera import controls

3. Signalから一時停止関数をインポートし、次にtimeライブラリをインポートします。pause関数はコードの終了を停止するために使用します。time関数はプレビューウィンドウの作成後にコードの実行を遅らせ、ショットをフレーミングする時間を確保します。

from signal import pause
import time

4.ライブラリを操作するために使用するオブジェクト bd を作成します。

bd = BlueDot()

5. Picamera2 ライブラリを簡単に使用できるようにするオブジェクト picam2 を作成します。

picam2 = Picamera2()

6.写真を撮るための関数 take_picture() を定義します。関数は関数名を呼び出すことで動作し、関数内のすべてのステップを実行します。

7.カメラで静止画を撮影するための設定を作成します。これにより、画像サイズは1080pに設定され、プレビューウィンドウは720pになります。

 camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, display="lores")

8.新しい設定を使用するように Picamera2 を設定します。

 picam2.configure(camera_config)

9. 720p解像度のプレビューウィンドウを開きます。位置はX座標とY座標で設定します。設定しない場合はデフォルトで0,0になります。必要に応じて調整してください。

 picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)

10.プレビューウィンドウを表示します

 picam2.start(show_preview=True)

11.カメラを連続オートフォーカスに設定します。これはカメラモジュール3でのみ機能します。

 picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})

12. picam1.jpg というファイルに画像をキャプチャする前に 2 秒間停止します。

 time.sleep(2) picam2.capture_file("picam1.jpg")

13.プレビュー ウィンドウを閉じて、Picamera2 を停止します。

 picam2.stop_preview() picam2.stop()

14. 関数の外で、Blue Dot の「when_pressed」関数を使用して、take_picture 関数を実行し、ユーザー入力に反応します。

bd.when_pressed = take_picture

15.コードが終了しないように、一時停止を使用します。

pause()

16.コードをbluedot_camera.pyとして保存し、「実行」をクリックしてコードを実行します。Androidデバイスの接続を待機するコードが表示されます。

17. Android デバイスでBlue Dot を開きます。

18. Raspberry Piのホスト名を選択します。通常は「raspberrypi」です。

19.青い点をクリックするとカメラが起動します。プレビューウィンドウが表示され、2秒後に画像がmicro SDカードに保存されます。繰り返し押すと新しい画像が作成されますが、ファイル名は同じなので、毎回上書きされます。

完全なコードリスト

from bluedot import BlueDot
from picamera2 import Picamera2, Preview
from libcamera import controls
from signal import pause
import time
bd = BlueDot()
picam2 = Picamera2()
def take_picture(): camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, display="lores") picam2.configure(camera_config) picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720) picam2.start(show_preview=True) picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous}) time.sleep(2) picam2.capture_file("picam1.jpg") picam2.stop_preview() picam2.stop()
bd.when_pressed = take_picture
pause()