Raspberry Pi Compute Module 3 2つのカメラを認識、操作してみる（ソフト側）

# はじめに

`Compute Module 3` は2つのカメラを使えるのですね。
`ソフト側のみ` ですが、 `2つのカメラモジュール` を認識させ、簡単な操作をさせてみます。

# 使用するもの

- [Raspberry Pi Compute Module3](http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/1232011/)
- [カメラモジュール](http://jp.rs-online.com/web/p/video-modules/9132664/)
- [赤外線カメラモジュール](http://akizukidenshi.com/catalog/g/gM-10519/)

# 前提

- Raspberry Pi Compute Module3
    - 評価ボードなどに繋がっている
    - OSインストール済み（今回は `Raspbian Jessie Lite` を使用してます）
    - ボードに `CSI CAMERA CONNECTOR` 2つがついている
    - `CSI CAMERA CONNECTOR` にカメラモジュールが接続されている
        - 今回は、基板の `CAMERA0` に可視光、 `CAMERA1` に赤外線が接続されている

# カメラモジュールの認識

## 参考URL

1. [ATTACHING A RASPBERRY PI CAMERA MODULE TO THE COMPUTE MODULE IO BOARD](https://www.raspberrypi.org/documentation/hardware/computemodule/cmio-camera.md)
2. [COMPUTE MODULE ATTACHING AND ENABLING PERIPHERALS GUIDE](https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md)

## カメラモジュールの有効化

```
pi@raspberrypi:~ $ sudo raspi-config
```

1. 「5 Interfacing Options」選択
2. 「P1 Camera 」を選択
3. 「Would you like the camera interface to be enabled?」→「Yes」選択
4. reboot

## カーネル等のアップデート

一応、アップデート

```
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
pi@raspberrypi:~ $ sudo rpi-update
```

## ブロブファイルを作成

参考URL 1. 「Quickstart」のブロブファイルでは、2つのカメラモジュールを認識できないため、
ページ下部にある[Enable both cameras](https://www.raspberrypi.org/documentation/hardware/computemodule/dt-blob-dualcam.dts)ファイルから作成します

Enable both camerasをダウンロード

```
pi@raspberrypi:~/camera $ wget https://www.raspberrypi.org/documentation/hardware/computemodule/dt-blob-dualcam.dts
--2017-11-10 06:14:27--  https://www.raspberrypi.org/documentation/hardware/computemodule/dt-blob-dualcam.dts
Resolving www.raspberrypi.org (www.raspberrypi.org)... 46.235.227.11, 93.93.128.133, 93.93.130.214, ...
Connecting to www.raspberrypi.org (www.raspberrypi.org)|46.235.227.11|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12421 (12K) [application/octet-stream]
Saving to: ‘dt-blob-dualcam.dts’

dt-blob-dualcam.dts                       100%[==================================================================================>]  12.13K  --.-KB/s    in 0.006s  

2017-11-10 06:14:36 (2.07 MB/s) - ‘dt-blob-dualcam.dts’ saved [12421/12421]

pi@raspberrypi:~/camera $
```

参考URL 2.を参考にdts→binに変換し「/boot」配下に配置

```
pi@raspberrypi:~/camera $ 
pi@raspberrypi:~/camera $ ls
dt-blob.dts  dt-blob-dualcam.dts
pi@raspberrypi:~/camera $ 
dt-blob.dts          dt-blob.dts.back     dt-blob-dualcam.dts  
pi@raspberrypi:~/camera $ sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-dualcam.dts 
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@default has a unit name, but no reg property
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@p0 has a unit name, but no reg property
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@p1 has a unit name, but no reg property
・
・
・
pi@raspberrypi:~/camera $ 
# 再起動
pi@raspberrypi:~/camera $ sudo shutdown -r now
```

※ 定義されているが、実際にpinなどがないため、Warningがでていると思われます

再起動後、2つのカメラモジュールが認識されています

## カメラモジュールを操作

### コマンド

```
pi@raspberrypi:~ $ 
# 普通のカメラ
pi@raspberrypi:~ $ raspistill -o firstpic.jpg -cs 1
pi@raspberrypi:~ $
# 赤外線カメラ 
pi@raspberrypi:~ $ raspistill -o firstpic_noir.jpg -cs 0
pi@raspberrypi:~ $ 
```

### Python3 で操作

```
pi@raspberrypi:~ $ sudo apt-get install python3-venv
・
・
・
pi@raspberrypi:~ $ mkdir test
pi@raspberrypi:~ $ cd test
pi@raspberrypi:~/test $ 
pi@raspberrypi:~/test $ python3 -m venv env
pi@raspberrypi:~/test $ source env/bin/activate
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ pip install picamera
Collecting picamera
  Downloading https://www.piwheels.hostedpi.com/simple/picamera/picamera-1.13-py3-none-any.whl (154kB)
    100% |████████████████████████████████| 163kB 148kB/s 
Installing collected packages: picamera
Successfully installed picamera-1.13
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ python
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from picamera import PiCamera
>>> 
# 赤外線カメラ
>>> camera = PiCamera(camera_num=0)
>>> camera.start_preview()
<picamera.renderers.PiPreviewRenderer object at 0x744c7df0>
>>> camera.stop_preview()
>>> camera.close()
>>> 
# 普通のカメラ
>>> camera = PiCamera(camera_num=1)
>>> camera.start_preview()
<picamera.renderers.PiPreviewRenderer object at 0x744c7fd0>
>>> camera.stop_preview()
>>> camera.close()
>>> 
```

picameraの参考URLはこちら

- [Python picamera - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/usage/camera/python/README.md)
- [picamera — Picamera 1.13 Documentation](https://picamera.readthedocs.io/en/release-1.13/)