Raspberry Pi 4连接ADS1115报错:No Hardware I2C on (scl,sda)=(3,2)
问题描述
我正在使用Raspberry Pi 4 Model B、ADS1115和电压传感器进行电压测量,设备运行默认Raspbian系统,已安装Python 3.11。因无法直接安装adafruit-circuitpython-ads1x15,我创建了虚拟环境~/.env并激活,成功安装该包。
运行以下测试代码时:
from numpy import interp import board import time import busio import adafruit_ads1x15.ads1115 as ADS from adafruit_ads1x15.analog_in import AnalogIn # Initialize the I2C interface i2c = busio.I2C(board.SCL, board.SDA)
出现如下错误:
(.env) prototype@raspberrypi:~ $ python "/home/prototype/Downloads/RaspberryPiVoltageReporter/TestADS1115Main.py" Traceback (most recent call last): File "/home/prototype/Downloads/RaspberryPiVoltageReporter/TestADS1115Main.py", line 9, in <module> i2c = busio.I2C(board.SCL, board.SDA) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/prototype/.env/lib/python3.11/site-packages/busio.py", line 38, in __init__ self.init(scl, sda, frequency) File "/home/prototype/.env/lib/python3.11/site-packages/busio.py", line 168, in init raise ValueError( ValueError: No Hardware I2C on (scl,sda)=(3, 2) Valid I2C ports: ((1, 3, 2), (0, 1, 0), (10, 45, 44)) (.env) prototype@raspberrypi:~ $
接线情况:RPi的(1)3.3V接ADS1115的VDD,(3)SDA接SDA,(5)SCL接SCL,(9)GND接GND,所有线路通断测试正常。ADS1115的VDD与GND间电压为2.4V,当前使用1.5A USB-C充电器供电,系统出现低电压警告甚至重启,更换电池后问题依旧。参考在线教程接线无误,但仍出现该错误,请问故障原因是什么?如何进一步排查?
故障原因分析与排查步骤
核心关联问题
错误提示的I2C端口不可用,本质和供电不足直接相关,同时可能伴随I2C接口未正确启用的问题。
1. 优先解决供电问题
ADS1115的VDD仅2.4V远低于标称3.3V,说明RPi自身供电不足,导致GPIO输出电压被拉低:
- 更换至少3A的USB-C充电器(RPi 4带外设满载需要3A以上供电),1.5A充电器完全无法满足需求;
- 检查USB-C线质量,劣质线材会导致压降过大,换用带屏蔽的优质USB-C线;
- 若用电池供电,确保电池输出电压稳定在5V,且输出电流能达到3A以上,同时检查电池与RPi的连接是否存在压降。
2. 确认I2C接口启用状态
- 运行
sudo raspi-config,进入「Interface Options」→「I2C」,确认已启用I2C接口; - 重启RPi后,执行
ls /dev/i2c*,正常应能看到/dev/i2c-1(对应默认I2C1端口); - 若未出现,检查
/boot/config.txt文件,确保存在dtparam=i2c_arm=on且未被注释,修改后重启设备。
3. 修正代码中的I2C初始化
错误提示的有效端口包含(1, 3, 2),即I2C1总线编号为1,对应SCL=3、SDA=2,可以尝试显式指定参数初始化:
# 替代原来的i2c初始化代码 i2c = busio.I2C(board.SCL, board.SDA, frequency=100000) # 或者直接指定I2C1的引脚 # i2c = busio.I2C(board.SCL1, board.SDA1)
4. 硬件排查补充
- 供电问题解决后,运行
i2cdetect -y 1,查看是否能检测到ADS1115的默认地址(通常为0x48); - 检查ADS1115的ADDR引脚,若未接地会导致地址变化,确保ADDR引脚接地以使用默认地址;
- 测量RPi的GPIO3(SCL)和GPIO2(SDA)引脚电压,正常应为3.3V,若低于3V说明供电或引脚存在故障。
内容的提问来源于stack exchange,提问作者KulaGGin
相关产品推荐
相关产品推荐

