Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Python将I2C地址更改为多个VL53L0X传感器_Python 3.x_Raspberry Pi Zero - Fatal编程技术网

Python 3.x 使用Python将I2C地址更改为多个VL53L0X传感器

Python 3.x 使用Python将I2C地址更改为多个VL53L0X传感器,python-3.x,raspberry-pi-zero,Python 3.x,Raspberry Pi Zero,正如标题所说,我正试图从两个连接到树莓皮零W的vl53l0x传感器获取值 我把所有的电线都接好了,我一个接一个地测试了传感器。它们工作得很好 问题是,当它们都连接到I2C总线时,我无法与它们通话,因为它们具有相同的默认地址0x29(使用以下comand进行检查:sudo i2cdetect-y 1) 我阅读了传感器的数据表,并在线搜索资源,以了解如何更改存储地址的传感器寄存器值。 有一种具体的方法可以做到这一点,正如你在这里看到的:从第5页 然后我发现我现在用这个来实现目标 但是当我运行VL53

正如标题所说,我正试图从两个连接到树莓皮零W的vl53l0x传感器获取值

我把所有的电线都接好了,我一个接一个地测试了传感器。它们工作得很好

问题是,当它们都连接到I2C总线时,我无法与它们通话,因为它们具有相同的默认地址0x29(使用以下comand进行检查:
sudo i2cdetect-y 1

我阅读了传感器的数据表,并在线搜索资源,以了解如何更改存储地址的传感器寄存器值。 有一种具体的方法可以做到这一点,正如你在这里看到的:从第5页

然后我发现我现在用这个来实现目标

但是当我运行VL53L0X_multi_example.py时,我得到了这个输出

VL53L0X Start Ranging Address 0x2B

Setting I2C Address to 0x2B
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X Start Ranging Address 0x2D

Setting I2C Address to 0x2D
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
Timing 20 ms
1 - Error
2 - Error
...
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error
我无法理解为什么会出现此错误(API状态:-20:控制接口错误),注释为

中断清除期间出错

在Api/core/inc/vl53l0x_def.h中,触发。
出了什么问题?

好的,所以VL53L0X有一个设置I2C地址的选项,而文档对于新手(像我一样)来说似乎可以用不同的I2C地址“闪存”每个L0X,并且效果将永久地存在EEPROM的某个地方。事实并非如此。复位后,VL53Lxx的I2C地址重置为默认值

其工作方式是通过将XSHUT从uC连接到每个
L0X,例如通过74LSxxx移位寄存器,在系统复位后,主机uC将逐个启用和配置每个L0X,直到总线上的所有L0X被复位和配置,以便它们不会冲突,并且所有XSHUT都可以启动


比如,什么?数据表听起来像是GPIO1 pin用于对它们进行菊花链连接,但这不是它的实现方式。

谢谢你的回答,我想这是对的,那么你建议我怎么解决这个问题呢?