Raspberrypi3B+＋ADS1115＋感光性センサーモジュールを動かした際の備忘録です。

# 用意

[ラズベリーパイ3B+ 一式](https://www.amazon.co.jp/ABOX-b＋【2018新型】-MicroSDHCカード32G-NOOBSシステムプリインストール-高品質HDMIケーブルライン/dp/B07FQ9678G/ref=sr_1_7?__mk_ja_JP=カタカナ&dchild=1&keywords=ラズベリーパイ3B＋+セット&qid=1588657777&sr=8-7)
[HiLetgo 2個セット ADS1115 4チャンネル 16ビット I2C ADC モジュール ゲインアンプ Arduino Rpiと互換](https://www.amazon.co.jp/gp/product/B01D0WSCNG/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)
[HiLetgo 5個セット 感光性センサーモジュール 光抵抗体モジュール 4ピン [並行輸入品]](https://www.amazon.co.jp/gp/product/B010GX9DHQ/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)

# 接続

RaspberryPi3B+のピン配置を確認します。

```
$ pinout
...
   3V3  (1) (2)  5V    
 GPIO2  (3) (4)  5V    
 GPIO3  (5) (6)  GND   
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND   
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND   
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8 
   GND (25) (26) GPIO7 
 GPIO0 (27) (28) GPIO1 
 GPIO5 (29) (30) GND   
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND   
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21
```

以下を参考にしてピン配置を再確認します。
（手持ちのボードが確かに同じピン配置であることを確認して下さい。）
![rp2_pinout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/df5395cd-dae3-6e2a-2f68-7f6130ebf3e6.png)

ピン配置を確認した後は、以下の通りピンを接続します。

- RaspberryPi3B+ - 感光性センサーモジュール
3V3 - VCC
GND - GND

- ESP32 - ADS1115
5V - VCC
GND - GND
SDA1(データ線) GPIO2 - SDA
SCL1(クロック線) GPIO3 - SCL

- 感光性センサーモジュール - ADS1115
A0 - A0  # AnalogOut

![IMG_3634.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/6b2e9d30-62e5-4f85-9ada-18c4623d3b45.jpeg)

# コード上で動作確認

### ライブラリインストール＆サンプルコードを取得して実行

参考：[Adafruit_CircuitPython_ADS1x15](https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15)

#### Installing from PyPI

```
sudo pip3 install adafruit-circuitpython-ads1x15
```

#### 実行

```
git clone https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15
cd Adafruit_CircuitPython_ADS1x15/examples
python3 ads1x15_simpletest.py 
```

以下のようにセンサ値を取得できれば正しく動いている。
また、感光性センサーモジュールのセンサに手をかざして電圧(v)の値が変わればセンサーの動作確認OK
（暗くするとvが大きくなり、明るくするとvが小さくなる。センサー感度の詳しい検証などは省略。）

```
$ python3 ads1x15_simpletest.py 
  raw	    v
 4736	0.592
 6832	0.852
 6496	0.812
 6544	0.806
 2560	0.316
 1328	0.164
 2512	0.334
 7136	0.904
 1504	0.188
 1520	0.190
 1520	0.190
```

# ValueError: No Hardware I2C on (scl,sda)=(3, 2)

正しく接続しているはずなのにI2Cエラーになる。

```
$ python3 ads1x15_simpletest.py 
Traceback (most recent call last):
  File "ads1x15_simpletest.py", line 8, in <module>
    i2c = busio.I2C(board.SCL, board.SDA)
  File "/usr/local/lib/python3.7/dist-packages/busio.py", line 20, in __init__
    self.init(scl, sda, frequency)
  File "/usr/local/lib/python3.7/dist-packages/busio.py", line 55, in init
    (scl, sda), i2cPorts
ValueError: No Hardware I2C on (scl,sda)=(3, 2)
Valid I2C ports: ((3, 3, 2), (1, 3, 2), (0, 1, 0))
```

[こちら](https://qiita.com/fujit33/items/763b09a6e71e65519740)を参考にしてI2Cを有効化することで解決

```
$ sudo rasps-config
5 Interfacing Options --> P5 I2C ---> I2Cを有効化する。
その後、Finishボタンで変更を反映すると、ads1x15_simpletest.py実行時のI2Cエラーが出なくなる。
```

# ADS1115の接続に不安がある場合

Arduino/ESP32などの別マイコンでI2C＋センサ値の取得を確認しておくと安心

（例）ESP32で確認する場合
> [MacでESP-32Sにコードを書き込む](https://qiita.com/seigot/items/ec7898411bd49fba7767)
[MacでESP-32S＋感光性センサーモジュールを動かす](https://qiita.com/seigot/items/336213dce4cd6a61f025)
[MacでESP-32S＋ADS1115＋感光性センサーモジュールを動かす](https://qiita.com/seigot/items/134f3d42fca9faab9ac3)

接続後はi2cdetectを実行して確認する。

```
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
```

# 参考
[Adafruit_CircuitPython_ADS1x15](https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15)
[Raspberry Pi 2 & 3 Pin マッピング](https://docs.microsoft.com/ja-jp/windows/iot-core/learn-about-hardware/pinmappings/pinmappingsrpi)
[Raspberry Pi 3B+ のGPIOピン割り当ての解説](https://aquarius-train.hatenablog.com/entry/Raspberry_Pi_3B%2B_のGPIOピン割り当ての解説)
[第22回 Raspberry PiのGPIO概要](https://tool-lab.com/raspberrypi-startup-22/)
[ESP32とADS1115で電圧計測](https://otomizu.work/2019/10/22/esp32-ads1115/)
[1-3.ESP-WROOM-32(D)](https://kit.socinno.com/1_3_b/)
[MacでESP-32Sにコードを書き込む](https://qiita.com/seigot/items/ec7898411bd49fba7767)
[MacでESP-32S＋感光性センサーモジュールを動かす](https://qiita.com/seigot/items/336213dce4cd6a61f025)
[MacでESP-32S＋ADS1115＋感光性センサーモジュールを動かす](https://qiita.com/seigot/items/134f3d42fca9faab9ac3)
[Raspberry Pi で ADS1115 を使う](https://qiita.com/ekzemplaro/items/1e98e1c9e58bd4d8a95c)
[RaspberryPiでI2Cを使えるように設定【2018年】](https://qiita.com/fujit33/items/763b09a6e71e65519740)