UV インデックスセンサー (VEML6075) を Raspberry Pi で使ってみる

[VEML6075](https://www.adafruit.com/product/3964) という UV インデックスセンサーを入手して Raspberry Pi で動かしてみました。UV インデックスセンサーの比較は英語ですが[ここ](https://wolles-elektronikkiste.de/en/uv-sensors-and-sensor-modules) が詳しそうです。UV インデックスの数字の意味に関してはこのあたりが参考になります。

https://www.data.jma.go.jp/gmd/env/uvhp/3-50uvindex_manual.html

しかし Adafruit をはじめ既に VEML6705 の製品はほぼ売っていません。[SI1145](https://www.adafruit.com/product/1777) や [GUVA-S12SD](https://www.adafruit.com/product/1918) なら引き続き販売されているようですが Adafruit の SI1145 ページにも VEML6075 を推奨すると書いてあり UV Index のセンサーとしては VELM6075 が[優秀](https://www.switch-science.com/catalog/4083/)なようです。しかしなぜかは不明ですが製造元の Vishay がが製造を辞めてしまったようです。[*](https://community.st.com/s/question/0D50X0000B09ibsSQA/veml6075-uva-uvb-sensor-obsolete-already)

UV インデックスセンサー使ってみると言っても Adafruit の[ライブラリ](https://github.com/adafruit/Adafruit_CircuitPython_VEML6075)を使うので簡単です。まず [CircuitPython](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/overview) ライブラリと adafruit-blinka (Blinka) をインストールします。CircuitPython とは [MicroPython](https://gigazine.net/news/20200819-micropython/) の一種で、adafruit-blinka は CircuitPython の API を Raspberry Pi では RPi.GPIO に変換するためのもののようです。Raspberry Pi だけではなく Arduino などでも使えるようです。[*](https://tech.144lab.com/entry/2019/10/01/CircuitPython%E3%81%AE%E7%B4%B9%E4%BB%8B)

https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi

OS のパッケージ最新にして python3-pip をインストールします。

```
$ sudo apt update && sudo apt upgrade -y
$ sudo apt-get install python3-pip
$ sudo pip3 install --upgrade setuptools
```

次に adafruit-python-shell を pip3 でインストールし raspi-blinka.py という名前のスクリプトをダウンロードします。

```
$ cd ~
$ sudo pip3 install --upgrade adafruit-python-shell
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
$ sudo python3 raspi-blinka.py
```

raspi-blinka.py を実行すると adafruit-blinka がインストールされます。最後は Y と答えて Enter を押すと Raspberry Pi が再起動します。

```
~ $ sudo python3 raspi-blinka.py
This script configures your
Raspberry Pi and installs Blinka

RASPBERRY_PI_ZERO_W detected.

Updating System Packages
<snip>
Blinka Successfully installed Adafruit-PureIO-1.1.9 adafruit-blinka-6.18.0 pyftdi-0.53.3 pyusb-1.2.1 rpi-ws281x-4.3.1 sysv-ipc-1.1.0
DONE.

Settings take effect on next boot.

REBOOT NOW? [Y/n] Y
```

adafruit-blinka が正常にインストールされたかは[ここ](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi)のコードを使って確認することができます。

再起動が完了したら veml6075 用のライブラリ ([adafruit-circuitpython-veml6075](https://github.com/adafruit/Adafruit_CircuitPython_VEML6075)) をインストールします。同時に [adafruit-circuitpython-busdevice](https://github.com/adafruit/Adafruit_CircuitPython_BusDevice) もインストールされます。

```
~ $ sudo pip3 install adafruit-circuitpython-veml6075
```

adafruit-circuitpython-veml6075 が正常にインストールされていれば以下のコマンドを実行した際に特にエラーなどは出力されません。

```
~ $ python3 -m adafruit_veml6075
```

配線は[ここ](https://learn.adafruit.com/assets/62956)にある通りこんな感じです。[SparkFun](https://www.sparkfun.com/products/15089) や [Garvity](https://www.dfrobot.com/product-1906.html) のものは I2C のケーブルを使って接続できるので便利です。

![adafruit_products_raspi_veml6075_i2c_bb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360970/ce151c9a-58c8-7cad-2c09-042e544df535.jpeg)

コードは以下のような感じです。

```
import time, board, busio
import adafruit_veml6075

interval = 3
i2c = busio.I2C(board.SCL, board.SDA)

while True:
    try:
        veml = adafruit_veml6075.VEML6075(i2c, integration_time=100)
        print("UV index:", veml.uv_index)
        time.sleep(interval)

    except KeyboardInterrupt:
        break
```

日中帯に太陽の方向にセンサーを向けて (窓は開けたほうが良いかもしれません) 上記を実行すると冬なら以下のような値を返します。室内で実行すると 0 に近い値が返ってくると思います。

```
~ $ python3 ./veml6075.py
UV Index: 0.6220514149999998
UV Index: 0.7128853399999999
UV Index: 0.74213456
```