【问题标题】:How to list I2C address on Raspberry Pi using Python?如何使用 Python 在 Raspberry Pi 上列出 I2C 地址?
【发布时间】:2018-10-04 15:46:31
【问题描述】:

我的目标是能够在我的程序运行后立即看到可用的 i2c 地址列表。当前程序可以通过以下代码通过用户输入列出地址:

while True:  
    if input.upper().startswith("LIST_ADDR"):  
        devices = device.list_i2c_devices()  
        for i in range(len (devices)):
            print devices[i]  

我已经能够使用仅使用底部 3 行的代码,但是我现在有五个 i2c 设备当前连接到 Pi。仅使用三行代码就可以得到 IndexError: string index out of range。为此,我可以继续调用该程序大约四五次,然后它将毫无问题地运行。我只是想知道是否有更好的方法来实现我正在寻找的程序要做的事情而不会出现错误。

我对编码还是很陌生,所以提前感谢您的耐心等待。

【问题讨论】:

  • 为什么不for device in devices:
  • 这真的是准确的代码吗?因为我不明白这个错误是如何发生的。如果devices 是列表或字符串,则range(len(devices)) 保证返回有效索引。只有在循环内修改 devices 时才会发生该错误。
  • @Barmar 是的,这是我正在使用的确切代码。我只是想删除输入提示而不会收到错误。未修改循环中的设备。
  • 代码中没有输入提示。 input 不应该是 input() 吗?如果这是 Python 2.x,从你使用 print 的方式来看,它应该是 raw_input() 来获取字符串。

标签: python linux raspberry-pi i2c


【解决方案1】:

如果您只想测试与树莓派的 I2C 连接,那么您可以使用此代码来帮助您一次性检测所有设备的所有 I2C 地址

import os
import subprocess
import time

p = subprocess.Popen(['i2cdetect', '-y','1'],stdout=subprocess.PIPE,) 
#cmdout = str(p.communicate())

for i in range(0,9):
  line = str(p.stdout.readline())

print(line)

基本上我是通过使用这个过程在 Python 中执行 linux 命令

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多