Raspberry PI で Lepton3.x を使う（その２）

# はじめに
投稿「[Raspberry PI で Lepton3.x を使う](https://qiita.com/higuchi-toshio-intec/items/da4f12e3e09426f45812)」のその後です。

# [前置き] PullRequestの状態（2019/10上旬）
[私が出した PullRequest](https://github.com/groupgets/LeptonModule/pull/66) の状態は **Pending** です。
原因は特定できていないのですが、
Lepton 3.x(SPI)から取得したデータの状態が良くない。
「SegmentNumber を取得できる」ときもあれば、
「取得できない」ときもある（詳細は、[PullRequestに関する追加情報](https://qiita.com/drafts/c20470abbf9a18971bec#pullrequest%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%BF%BD%E5%8A%A0%E6%83%85%E5%A0%B1)を見てください）

Lepton 3.x は、SPI から４回連続(segment１～４)でデータ取得することで
ひとつの画面を構成できるので、途中１回でもSegmentNumberの取得に失敗すると
見れたもんじゃない画面表示となってしまう。
![2019-10-09-164413_340x290_scrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/d1a8f801-cd9a-b8f0-d2b1-19e39675bb32.png)


私のコードが原因ではないと思うんだが
たぶん**これを解決しなければ merge されない**と思う。
しかし**今のままでは解決は無理**と思う。

# [ここから本題] 前回は応急対応
残念なことに、GitHubで提供されているソースファイルは [Qt](https://www.qt.io/)依存で書かれている。
「Qtも使える」設計であればよかったのだが**「Qtしか使えない」のは不便**だが、
Lepton 3.x 対応を受け入れ(mergeし)てもらうためにも、このコードをベースに修正した。

# より使いやすくなるように修正（したつもり）
取り入れてもらえるかは不明ですが PullRequestは、
とりあえず自分が普段使う環境で Lepton 3.x で使えることが確認できた状態。

**機能そのまま変更せず Qt との結合度を低くする**修正を加えたのが以下のブランチ
- https://github.com/higuchi-toshio-intec/LeptonModule/tree/reduce_qt_dependencies

- 主な修正箇所
  - LeptonThread.cpp から Lepton.cpp を分離
     - LeptonThread.cpp に、Qt 関連のコードを残した
     - Lepton.cpp には、Qt に関するコードは含まれていない
  - インターフェース 'LeptonAction' を定義/実装
     - LeptonAction.cpp
     - LeptonActionQt.cpp


# 自分が使いやすいように修正
自分の要望は、以下の通り

- 定点観測みたいな一定間隔で撮影（動画で無くて可）
- 画像ファイル(PNG)で保存
- できれば一般ユーザで実行（sudo 不要）

そのようにして出来たのが以下のブランチ

- https://github.com/higuchi-toshio-intec/LeptonModule/tree/save_png_file

※ raspberrypi_video じゃなく raspberrypi_capture を最初から使えば良かったのでは？との指摘はご遠慮願います（汗）

## 実行
- PNG 形式で保存
  - 保存ディレクトリは、${HOME}/png
  - コマンド実行後、２秒待ってから撮影開始
  - ５秒間隔で撮影
  - ５回撮影

```
$ export LEPTON_PNG_DIR=${HOME}/png
$ mkdir ${LEPTON_PNG_DIR}
$ ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000 -ims 5000 -dms 2000 -c 5
```

- ヘルプ表示

```
$ ./raspberrypi_video -h
Usage: raspberrypi_video [OPTION]...
 -h      display this help and exit
 -cm x   select colormap
           1 : rainbow
           2 : grayscale
           3 : ironblack [default]
 -tl x   select type of Lepton
           2 : Lepton 2.x [default]
           3 : Lepton 3.x
               [for your reference] Please use nice command
                 e.g. sudo nice -n 0 ./raspberrypi_video -tl 3
 -ss x   SPI bus speed [MHz] (10 - 30)
           20 : 20MHz [default]
 -min x  override minimum value for scaling (0 - 65535)
           [default] automatic scaling range adjustment
           e.g. -min 30000
 -max x  override maximum value for scaling (0 - 65535)
           [default] automatic scaling range adjustment
           e.g. -max 32000
 -d x    log level (0-255)
 -dms  x delay time [milliseconds] (0 - 65535)
           [default] 0
 -ims  x interval [milliseconds] (1 - 65535)
 -c    x count (0 - 65535)
           0 : endless
           [default] take one shot
Environment variable(s)
 LEPTON_PNG_DIR
           make png file(s) in this directory
```


# PullRequestに関する追加情報
## Qt 依存低減シンプル版
今回の修正の途中で、Qt を使わず、**Lepton(SPI)からデータのみ読み込むだけ**のブランチを作ってみました。

- https://github.com/higuchi-toshio-intec/LeptonModule/tree/reduce_qt_dependencies_simple
  - 単純に SPI からデータを読み込み
  - SegmentNumber を表示

- 実行結果は、こんな感じ
  - 規則正しくデータは取得できている
  - SegmentNumber は、「0 が４連続」と「1から4までの連続」が交互に繰り返している

```
$ ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
```

## ちなみに、Qt 版は、こちら

- https://github.com/higuchi-toshio-intec/LeptonModule/tree/support_lepton3_logs
- 実行結果は、こんな感じ
  - 繰り返しはみられるが、規則正しくはない
  - SegmentNumber は、「0 が４連続」と「何らかの値が４回」が交互に繰り返しているように見える
  - SegmentNumber は、「1から4までの連続」することは数少ない

```
0000234000012340000123400001
11:10:15 : 23000023000023000023000023000023
11:10:16 : 000023000023000023000023000023000023
11:10:16 : 000023000023000023000023000023000023
11:10:17 : 0000230000230000230000200001200001200001
11:10:18 : 200001200001200001200001200001200001
11:10:19 : 200001200001200001200001400001400001
11:10:19 : 400001400001400001400001400001400001
11:10:20 : 40000140000140000123000023400001
11:10:20 : 2300002340000123000023400001
11:10:21 : 2300002300002340000123000023
11:10:21 : 4000012340000123000023400001
11:10:22 : 234000012340000123000023
11:10:22 : 4000012300002340000123000023
11:10:23 : 4000012300002340000123400001
11:10:23 : 2300002340000123000023400001
11:10:24 : 200001234000012340000123
11:10:24 : 0000234000012300002340000123
11:10:24 : 4000012340000123400001200001
```

## 最後に
- Qt の処理が何らかの影響を及ぼしていると思われる
  - Qt の不具合などではなく、処理負荷などが相互的に悪影響を及ぼしている
- 自分は Qt を必要としないので、とりあえず現状ブランチでOK
- 既存のブランチを整理し、新たにdevelop(my_master)ブランチをつくり育てようと思う。
  - いま出している PullRequest が merge されれば、以降の修正も PullRequest する予定です。
- 最新のブランチ(develop)です
https://github.com/higuchi-toshio-intec/LeptonModule/tree/develop

---
# 記事リスト
- [Raspberry PI で Lepton3.x を使う](https://qiita.com/higuchi-toshio-intec/items/da4f12e3e09426f45812)
- [Raspberry PI で Lepton3.x を使う（その２）](https://qiita.com/higuchi-toshio-intec/items/c20470abbf9a18971bec)（← 今回の記事）
- [Raspberry PI で Lepton3.x を使う（その３）](https://qiita.com/higuchi-toshio-intec/items/fd7d8641313afe53a12f)
- [Raspberry PI で Lepton3.x を使う（その４）](https://qiita.com/higuchi-toshio-intec/items/d72448e3e473c8968d40)
- [Raspberry PI で Lepton3.x を使う（その５）](https://qiita.com/higuchi-toshio-intec/items/7961cd2e51de0d582cac)

<!-- eof -->