RaspberryPi Zero WHとSunlightセンサで紫外線などを測定してみた 

# はじめに
こんにちは。
RaspberyPi（ラズパイ）をIoTデバイスとして、Webアプリとの連携を目指して少しづつWebアプリとラズパイでの開発を進めています。今回はラズパイにSunlight(太陽光)センサを接続し、サンプルスクリプトを走らせて、測定をするまでの記事になります。このセンサは紫外線（紫外線指数）、可視光、赤外線を測定できるものです。

# なぜ書いたか
主に学習記録用ですが、GroveのSunlightセンサを使う予定の方の参考にもなればと思います。

# 準備したもの
[以前の記事](https://qiita.com/kosukein38/items/02aa3819e13dc35e9e0d)にも記載していましたが、Sunlightセンサを追加して、再掲します。

また、以下の表では、ラズパイにディスプレイやキーボード、USBハブを接続して直接操作することを前提に物を揃えましたが、今回VNC(Virtual Network Computing)を利用して、MacBookからリモートデスクトップ接続しました。（表中品名の※印はVNC接続の場合に不要になるものです。）

| 品名|型番 |購入店舗など|単価（税込）|
|:--|:--|:-|:-|
|Raspberry Pi Zero WH|-|秋月電子通商/M-12961|￥2,200
|※USB変換ケーブル|-|秋月電子通商/C-07607|￥150
|USB ACアダプター|-|秋月電子通商/M-12001|￥700
|KIOXIA　マイクロＳＤカード（microSDH）EXCERIA　32GB　100MB/s|-|秋月電子通商/S-15844|￥780|
|※USB　OTGケーブル|-|秋月電子通商/C-13430|￥250|
|※ＨＤＭＩ変換コネクタ|-|秋月電子通商/C-13431|￥210|
|※USBハブ（セルフパワータイプ）|‎UGREEN/‎60812|Amazon https://www.amazon.co.jp/dp/B07TWGHM99/ref=cm_sw_em_r_mt_dp_XBSB7R6WXHTGD895CQAC?_encoding=UTF8&psc=1|￥2,399|
|Seeed Grove Base Hat for Raspberry Pi Zero|103030276|せんごくネット通販/EEHD-5HXA|￥1,222|
|Seeed DHT22 / AM2302 - Grove Temperature & Humidity Sensor Pro|101020019|スイッチサイエンス/819|￥1,386|
|Seeed Grove - Sunlight sensor (UV-light, visible light and infrared light) - SI1151|101020089|スイッチサイエンス/7005|￥1,507|
|※ディスプレイ&キーボード||||

センサの動作確認のために、日向と日陰で値の比較したかったのですが、僕の部屋のデスク近くに窓がないことに気がつきました笑。ラズパイをリモートデスクトップ接続して、窓の近くでセンサを使えるようにしたいなということで、VNC接続を試みました。

VNC接続の方法については以下の書籍を参考に設定しました。
・オライリージャパン, Simon Monk著, 「Raspberry　Pi クックブック（第３版）」([出版元HP](https://www.oreilly.co.jp/books/9784873119410/))

手順の詳細は他のネット上の記事にお任せします。
メモ程度の手順は以下の通りです。

①Macbookに「VNC Viewer」をダウンロード
②ラズパイのアップデート、アップグレード
③ラスパイの設定画面から「VNC」を有効にする（config.txtにいくつか設定）
④再起動
⑤ラズパイのIPアドレスを確認し、Macbook「VNC Viewer」から接続

（VNCのリモート接続用PCは以下の仕様です。）
MacBook Air (13-inch, Early 2014)
1.4 GHz デュアルコアIntel Core i5
macOS 11.6.4 (20G417)
Darwin 20.6.0

# 本題
メーカーの[公式wiki](https://wiki.seeedstudio.com/Grove-Sunlight_Sensor/)に従ってセットアップしていく。


````bash
#前回の温湿度センサを使用する時にインストールしたので最初のSeeed-grove.pyのインストトールはスキップ
pi@raspberrypi: $ pip3 install Seeed-grove.py
pi@raspberrypi: $ pip3 install seeed-python-si114x
pi@raspberrypi: $ pip3 install --upgrade seeed-python-si114x
````
このセンサはI2C通信で信号を送るため、次にラズパイ側でI2Cの許可設定を行う。
設定>RaspberriPiの設定>インターフェイスタブでI2Cを有効
念の為、再起動をかけておく。
有効になったかどうか

````Bash
pi@raspberrypi: $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- 53 -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
````
「0x53」がI2Cのスレーブアドレスとなっていることがわかった。
(0x04はGrove Base Hat for Raspberry Pi Zeroのスレーブアドレス)

ただ公式Wikiにはこのセンサーのスレーブアドレスは

>Default I2C Address	0x60

と書いてある。

どうもおかしいと思いWikiを読み返すと

>The main chip of the device has been updated to SI1151, the tutorial to SI1145 still remain.

なんと、センサが新しくなってSI1145からSI1151にリプレイスされているとのこと…。
でも、Wiki中のチュートリアルはSI1145向けにしか書いていないようだ。（だからスレーブアドレスも違う。）

詰んだと思ったのですが、GitHubのブランチにSI1115向けのソースコードを載せてくれている方がいらっしゃいました。（ありがたや）

https://github.com/Seeed-Studio/Grove_Sunlight_Sensor/tree/Si1151
こちらをクローンして、seeed-python-si115x.pyを実行する。

````Bash
pi@raspberrypi:~ $　git clone -b Si115x https://github.com/Seeed-Studio/Seeed_Python_SI114X.git
pi@raspberrypi:~ $　cd Seeed_Python_SI114X
pi@raspberrypi:~/Seeed_Python_SI114X $　python3 seeed_si115x.py
````
無事、サンプルコードを動かすことができました！
日向と日陰で値を比較してみる。

まず日向↓
![スクリーンショット 2022-03-06 16.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1697316/6b6addd7-bf9b-d47a-a860-fdc5f91eced7.png)

次に日陰↓
![スクリーンショット 2022-03-06 16.34.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1697316/237b6118-56a5-d1a7-0bc0-57d86c0c11dd.png)

まぁ、こんなもんなのかなぁと。
UVアラートとかに使えたらいいなと思います。

# 最後に
最後まで読んでいただきありがとうございます。
チュートリアルがちゃんと書いてあるセンサを選定したつもりなのですが、チュートリアルが古いというトラップもあるとは想定外でした（苦笑）。何はともあれ、GitHubに新しいセンサver.のサンプルコードを載せてくれた方がいて助かりました。

[前回の記事](https://qiita.com/kosukein38/items/02aa3819e13dc35e9e0d)と合わせ、これで、とりあえずラズパイとセンサーを用いて、温湿度と紫外線、可視光、赤外線のデータを取得することができました。

次回は、取得したデータをインターネット経由でデータベースに保存し、Webアプリで確認するようなことをやってみたいなと思っています。