用意
ラズベリーパイ3B+ 一式
HiLetgo 2個セット ADS1115 4チャンネル 16ビット I2C ADC モジュール ゲインアンプ Arduino Rpiと互換
HiLetgo 5個セット 感光性センサーモジュール 光抵抗体モジュール 4ピン [並行輸入品]
接続
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
以下を参考にしてピン配置を再確認します。
(手持ちのボードが確かに同じピン配置であることを確認して下さい。)
ピン配置を確認した後は、以下の通りピンを接続します。
-
RaspberryPi3B+ - 感光性センサーモジュール
3V3 - VCC
GND - GND -
ESP32 - ADS1115
5V - VCC
GND - GND
SDA1(データ線) GPIO2 - SDA
SCL1(クロック線) GPIO3 - SCL -
感光性センサーモジュール - ADS1115
A0 - A0 # AnalogOut
コード上で動作確認
ライブラリインストール&サンプルコードを取得して実行
参考: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))
こちらを参考にしてI2Cを有効化することで解決
$ sudo rasps-config
5 Interfacing Options --> P5 I2C ---> I2Cを有効化する。
その後、Finishボタンで変更を反映すると、ads1x15_simpletest.py実行時のI2Cエラーが出なくなる。
ADS1115の接続に不安がある場合
Arduino/ESP32などの別マイコンでI2C+センサ値の取得を確認しておくと安心
(例)ESP32で確認する場合
MacでESP-32Sにコードを書き込む
MacでESP-32S+感光性センサーモジュールを動かす
MacでESP-32S+ADS1115+感光性センサーモジュールを動かす
接続後は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
Raspberry Pi 2 & 3 Pin マッピング
Raspberry Pi 3B+ のGPIOピン割り当ての解説
第22回 Raspberry PiのGPIO概要
ESP32とADS1115で電圧計測
1-3.ESP-WROOM-32(D)
MacでESP-32Sにコードを書き込む
MacでESP-32S+感光性センサーモジュールを動かす
MacでESP-32S+ADS1115+感光性センサーモジュールを動かす
Raspberry Pi で ADS1115 を使う
RaspberryPiでI2Cを使えるように設定【2018年】