Raspberry PI で Lepton3.x を使う

# はじめに
簡易温度測定を行いたい
検索したところ、
RaspberryPIとFLiR Leptonを組み合わせて使うのが価格的にもお手頃で、
サンプルプログラムも提供されており、動作確認が容易であることがわかり使ってみた

しかし、実際には簡単に動かなかった

# 仕様確認
- 調べてみるとLeptonには、2.x 系と 3.x 系があった
- 大きな違いは画素数
  - Lepton 2.x は 80x60 画素(4800点)
  - Lepton 3.x は 160x120 画素（19200点、４倍のデータ量）
  - 実際に比べてみる![lepton2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/1f24de30-74ca-d20d-be95-bb3f39f8d9b7.png)
![lepton3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/717d75a2-af4d-e5e0-8d1e-2811e46f908b.png)
  - 価格が少し高くても高い画素数が魅力的！
- Lepton 2.x も 3.x も同じ Breakout Board を使って RaspberryPI と接続可能らしい
  - https://ctl-commerce.com/item_list.html?siborikomi_clear=1&keyword=Lepton+3.5
     - ↑↑↑ [Lepton 3.5] の商品ページは、リンク切れになる可能性があるので、検索ページです
- ここで、[Lepton 3.5] 製品説明ページ内に気になる記述を発見
  - 『Lepton3.5および3.0との組み合わせでFLIR社より不具合が報告されております......』

## 問い合わせてみました
- 回答

~~~
Lepton 3.0及び3.5とBreakout Boardとの組み合わせでは、FLIR社より不具合が報告されております。
基本的には、Lepton3.xのためにSPIバスサイクルを確保出来ていれば問題は生じません。
LinuxなどマルチタスクOSを搭載しているボード上で使われた場合、スケジューリング等問題を起こす
可能性はあります。これは、Lepton3.xあるいはBreakout Boardのハードウエア的な問題ではありません。
ソフトウエアでの対応を、お客様に促すものです。

FLIR社と致しましては、Lepton3.xは、マイコンを搭載しているPureThermal2との組み合わせを推奨しており、
Breakout Board利用でのリファレンスも提供しておりません。
Webにて、動作事例が掲載されているものがありますが、基本的には、それらを含め、お使いになられる
プログラムとその実行結果の検証は、お客様ご自身で行っていたただく必要があります。
~~~

## 購入品
- （たぶん）問題なく動く 2.x 系と、動くかわからない 3.x 系を各１セット

| 製品名       |数量|
|--------------|----|
|Lepton 2.5    |  1 |
|Lepton 3.5    |  1 |
|Breakout Board|  2 |
|配線用ケーブル|少々|
- こんなかんじ（パッと見、Lepton2/3の区別がつかないので養生テープでラベル付け）
![raspberrypi3+lepton3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/12667050-6c33-6636-40ce-d289110af365.jpeg)


# Lepton 2.x を使う
- 以下の記事がたいへん参考になり無事動かすことができました参照してください
  - https://qiita.com/yyasuda/items/338abfe812806e8e9357

# Lepton 3.x を使う
- GitHub の [groupgets/LeptonModule](https://github.com/groupgets/LeptonModule/pull/53)では Lepton3 サポートは PullRequest 状態のままで取り込まれていない
  - https://github.com/groupgets/LeptonModule/pull/53
  - コメントを見ると、なんだか問題あって保留状態らしい
  - 差分(commit)を見たけど、どのような修正したのか不明だし.....
- 仕方がないのでドキュメント読んで raspberrypi_video 以下のソースファイル(c++)を修正
  - 当然、参考にさせてもらった https://github.com/yyasuda/LeptonModule から fork 
- Lepton 3.x 向けの主な修正箇所
  - 表示画像サイズの変更（80x60 → 160x120）
  - segment number の切り出し
  - rows/cols の計算
  - SPI bus スピード変更
     - これが重要
     - 従来の転送速度では、Lepton 2.x 系から増えたデータの転送が間に合わないようです
- 追加で、使いにくい部分を修正
  - 固定のレンジ（最小値/最大値）で色付け可能とした（従来の自動レンジ調整がデフォルト）
     - 2.x では、１画面分のデータ取得ごとに最小値/最大値を求め色付けしていた
     - Lepton 3.x では、固定レンジでの色付けが本当に必要な機能（最悪１画面が４つのレンジで色付けになることは望んでいる機能ではない）
  - 色付けを選択可能とした
  - 簡易ヘルプ表示（コマンドオプション説明）

## 実行
- 動画
  - https://youtu.be/DWNsL8pUeFU

- help 表示

~~~
$ ./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
~~~

- オプション「無」では Lepton 2.x モードで稼働

~~~
$ sudo ./raspberrypi_video
~~~
- Lepton 3.x で使う場合

~~~
$ sudo ./raspberrypi_video -tl 3
~~~

- Lepton 3.x で虹色(rainbow)表示の場合

~~~
$ sudo ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000
~~~
こんな感じに表示される![lepton3-rainbow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/0618cf03-84ac-7088-b1df-a6e36da5a36c.png)

- 心配性な方は、nice 指定

~~~
$ sudo nice -n 0 ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000
~~~

- Lepton 3.x で min/max を指定しなかった場合

~~~
$ sudo ./raspberrypi_video -tl 3 -cm 1
~~~

こんな感じに表示される![auto_scaling_range_adjustment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/a77f237c-9861-78ed-8dd4-1ba5252efe30.png)


## ソースファイル公開
- ご注意 master ではなく support_lepton3 ブランチ（※この記事を書いた時のブランチ）
  - https://github.com/higuchi-toshio-intec/LeptonModule/tree/support_lepton3
- ご注意：最新(2020/07)のブランチはこちら↓
  - https://github.com/higuchi-toshio-intec/LeptonModule/tree/PR_reduce_Qt_dependencies

# 追記
## 2019/09/24
- 『使い始めたばかりの人には「自動レンジ調整機能」が有用です』とのご意見をいただきました。ありがとうございます。
  - 自分が使い始めたとき「自動レンジ調整機能」がなければ今の状況には到達していないと思います。
  - **初心忘るべからず**

## 2019/09/26
- GitHub の [groupgets/LeptonModule](https://github.com/groupgets/LeptonModule/)から「rpi4 使っているけど動かない」って連絡がきたよ orz
  - Raspberry PI 4 は持っていないので確認できない
  - 性能は rpi4 が rpi3 より上がっているはずだから、データを取りこぼす可能性は低いと思う
  - それらしい原因を思いつかない
- 今回の実行環境について書いていなかったので以下に書いたので、気になる人は見てください
  - https://github.com/higuchi-toshio-intec/LeptonModule/wiki/Environment
- PullRequest したときから動画で見せたかったので撮ってYouTubeにアップしました
  - 「良い動き」とは思わないけど、「それなり」に動いていると思っています
  - https://youtu.be/DWNsL8pUeFU

---
# 記事リスト
- [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 -->