[やってみた]一眼レフカメラをラズパイからコントロール

# [やってみた]一眼レフカメラをラズパイからコントロール

## 目的・背景

本件は、もう数年前に試したことを今になって改めて手順を確認してみようと思い、
再チャレンジしたものです。

当時、あまり使わなくなってしまった一眼レフをなにか再利用できないか考え、
ラズパイからコマンドでシャッターを切れると知りチャレンジ。
100均で売っている300円シリーズのBluetoothボタンと組み合わせてキーボードも使わずボタン一つで撮影できました。
ケーブル「レス」レリーズボタンのようで楽しかったです。

## 目標

ラズパイから一眼レフのシャッターをコマンドから切る  

## 参考サイト
[一眼レフカメラをRaspberryPiからリモート制御する話](https://www.moyashi-koubou.com/blog/dslr_camera_raspberrypi/)  
[gphoto2対応リスト](http://www.gphoto.org/proj/libgphoto2/support.php)  
![スクリーンショット 2020-07-27 13.51.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/e4ee6609-b343-1270-01b9-70614447d3a8.png)
[WLAN / Wi-Fi mit gphoto2 nutzen - Multimedia4Linux](https://www.multimedia4linux.de/index.php/canon-dslr-wiki/wlan-wi-fi-mit-gphoto2-nutzen)  

## 使用したカメラ

Sony α6000
![名称未設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/8a38ddc5-fa97-9cb0-e072-7c62807925b1.jpeg)

ラズパイのUSBと直結させます![名称未設定2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/bc1df781-b46d-adc6-1129-9baa4250fc1d.jpeg)



## 手順

* インストール

```
$ wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && chmod +x gphoto2-updater.sh && sudo ./gphoto2-updater.sh

：
1) Install last development version
2) Install last stable release (libgphoto 2.5.25; gphoto 2.5.23)
3) Quit
Please enter your choice: 2
：

--------------------
Finished!! Enjoy it!
--------------------

gphoto2 2.5.23

Copyright (c) 2000-2019 Marcus Meissner and others

gphoto2 comes with NO WARRANTY, to the extent permitted by law. You may
redistribute copies of gphoto2 under the terms of the GNU General Public
License. For more information about these matters, see the files named COPYING.

This version of gphoto2 is using the following software versions and options:
gphoto2         2.5.23         gcc, popt(m), exif, no cdk, no aa, no jpeg, readline
libgphoto2      2.5.12         all camlibs, gcc, ltdl, EXIF
libgphoto2_port 0.12.0         gcc, ltdl, USB, serial without locking
```

* 接続確認

```
$ tail -f /var/log/messages
:
Jul 27 08:53:14 raspberrypi kernel: [383807.986521] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jul 27 08:53:14 raspberrypi kernel: [383807.986531] usb 1-1.5: Product: ILCE-6000
Jul 27 08:53:14 raspberrypi kernel: [383807.986541] usb 1-1.5: Manufacturer: Sony
Jul 27 08:53:14 raspberrypi kernel: [383807.986550] usb 1-1.5: SerialNumber: C9E15030948A
:
```

* gphoto2の認識しているデバイス情報

```
$ sudo gphoto2 --list-ports
検出したデバイス数: 4
パス名                           説明
--------------------------------------------------------------
ptpip:                           PTP/IP Connection
serial:                          Serial Port Device
usb:001,008                      Universal Serial Bus
usb:001,003                      Universal Serial Bus
```

* gphoto2が認識しているカメラの確認

```
$ sudo gphoto2 --auto-detect
型式                         ポート
----------------------------------------------------------
Sony Alpha-A6000 (Control)     usb:001,008
```

* カメラの情報を取得

```
$ sudo gphoto2 --summary
カメラのサマリ:
Manufacturer: Sony Corporation
Model: ILCE-6000
  Version: 3.0
  Serial Number: 00000000000000003282690103183754
Vendor Extension ID: 0x11 (1.0)
Vendor Extension Description: Sony PTP Extensions

Capture Formats:
Display Formats: JPEG, Unknown(b301), Unknown(b101)
:
```

## 動作確認

* 静止画撮影

```
$ sudo gphoto2 --capture-image-and-download
新しいファイルの格納場所: /capt0000.jpg
ファイル capt0000.jpg は存在します。上書きしますか？ [y|n]  y
ファイルを capt0000.jpg で保存します
カメラ内のファイル /capt0000.jpg の削除をしています

$ ll
合計 8128
drwxr-xr-x  3 pi   docker    4096  7月 27 09:01 .
drwxr-xr-x 29 pi   docker    4096  7月 27 08:25 ..
-rw-r--r--  1 root root   4491495  7月 27 09:01 capt0000.jpg
```

* 動画撮影

```
$ sudo gphoto2 --set-config movie=1
$ sudo gphoto2 --set-config movie=0
```

* シェルスクリプトで静止画撮影

```
take_photo.sh

#!/bin/bash
DATE=`date +"%Y%m%d-%H%M%S"`
sudo /usr/local/bin/gphoto2 --capture-image-and-download --filename /home/pi/Pictures/$DATE.jpg
sudo chown pi.pi /home/pi/Pictures/$DATE.jpg
```

## 感想

とても簡単にラズパイから一眼レフをコントロールできます。
キーボードからコマンドを投入すると一眼レフがガシャガシャ動き始めるのはワクワクします。
とても簡単な手順ですが、唯一の難関はカメラが対応しているかということでしょうか。

## 付録

実は、RICOH THETA SC2という360度カメラも持っているのですが、
リストには記載がないけど可能かも知れません。
![スクリーンショット 2020-07-27 13.59.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/547caccd-441a-77e5-9966-bcaeaa1f8aea.png)

試してみたのですが、残念ながら認識してくれませんでした。
PTPデバイスとして認識しているように見えるけど．．．

```
$ sudo gphoto2 --list-ports
検出したデバイス数: 4
パス名                           説明
--------------------------------------------------------------
ptpip:                           PTP/IP Connection
serial:                          Serial Port Device
usb:001,010                      Universal Serial Bus
usb:001,003                      Universal Serial Bus

$ sudo gphoto2 --auto-detect
型式                         ポート
----------------------------------------------------------
USB PTP Class Camera           usb:001,010

$ sudo gphoto2 --capture-image-and-download

*** エラー ***
An error occurred in the io-library ('USB デバイスと断定できませんでした'): Could not claim interface 0 (デバイスもしくはリソースがビジー状態です). Make sure no other program (gvfs-gphoto2-volume-monitor) or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device.
エラー: Could not capture image.
エラー: 取り込みできませんでした。
*** エラー (-53: 'USB デバイスと断定できませんでした') ***

デバッグメッセージのために、--debug オプションを使用してください。
デバッグメッセージは発生した問題に対する一つの解決法を導く助けになります。
何かエラーについて質問する場合、またはデバッグメッセージを
gPhoto2 開発者のメーリングリスト <gphoto-devel@lists.sourceforge.net> に
送信する場合、以下のように gphoto2 を起動してください:

    env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --capture-image-and-download

Please make sure there is sufficient quoting around the arguments.

```

THETA SC2をUSB接続ではなく、WiFi接続してみました。
arp-scanを使用し、接続したTHETA SC2のIPアドレスを確認。

```
$ sudo apt install git autoconf libpcap-dev
$ git clone https://github.com/royhills/arp-scan.git
$ cd arp-scan/
$ autoreconf --install
$ ./configure
$ make
$ sudo make install
$ sudo arp-scan -l --interface wlan0

Interface: wlan0, type: EN10MB, MAC: b8:27:eb:e6:69:3f, IPv4: 192.168.1.5
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.1	58:38:79:35:38:3f	RICOH COMPANY, LTD.

1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 4.533 seconds (56.47 hosts/sec). 1 responded
```

THETA SC2のIPアドレスは「192.168.1.1」だということがわかります。
次に、gphoto2コマンドをWiFiポート指定して実行してみます。

```
$ sudo gphoto2 --port ptpip:192.168.1.1 --summary
connect cmd: 接続を拒否されました

*** エラー ***
An error occurred in the io-library ('I/O 問題'): 有効なエラーメッセージがありません
*** エラー (-7: 'I/O 問題') ***

デバッグメッセージのために、--debug オプションを使用してください。
デバッグメッセージは発生した問題に対する一つの解決法を導く助けになります。
何かエラーについて質問する場合、またはデバッグメッセージを
gPhoto2 開発者のメーリングリスト <gphoto-devel@lists.sourceforge.net> に
送信する場合、以下のように gphoto2 を起動してください:

    env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --port ptpip:192.168.1.1 --summary

Please make sure there is sufficient quoting around the arguments.
```

しかし、残念ながらこちらも接続することができないようです。
gphoto2の対応cameraリストにも記載がありますし、
以下のコマンドの結果からものTHETAのWiFi接続はテスト段階のようです。

```
$ sudo gphoto2 --list-cameras | grep "Theta"
	"Ricoh Theta (WLAN)" (テスト)
	"Ricoh Theta m15 (PTP mode)"
```

もともとTHETA SC2はAPIやPluginには対応していないモデルなので、
今回ようなコマンドでのコントロールはできないのかもしれません。