【问题标题】:Read a dtoverlay controlled device via Python3?通过 Python3 读取 dtoverlay 控制的设备?
【发布时间】:2022-10-09 03:08:33
【问题描述】:

如何读取 dtoverlay 控制的设备,或通过python3传感器?

例如,我可以通过一只简单的猫来读取设备...

# cat /sys/bus/i2c/devices/1-0077/iio\:device0/in_temp_input
27130

所以我知道基本设置,这很好,传感器位于地址 0x77,它是 BME280 传感器等。

我还可以通过用于此类传感器的各种 python3 库读取传感器,例如 Adafruit 的 python 库。

但是我想使用传感器控制的dtoverlay方法,即读取,从python3读取传感器。这看起来很明显而且很直接,但显然不是,尝试了以下代码并得到了以下错误。

#!/usr/bin/python3
#
#

import os

#

theSensor=os.open('/sys/bus/i2c/devices/1-0077/iio\:device0/in_temp_input', os.O_RDONLY)
os.lseek(theSensor, 0, os.SEEK_SET)
print(os.read(theSensor, 2))
theSensor.close()

而错误...

# python3 BME280-OverLay.py
Traceback (most recent call last):
  File "/root/BME280-OverLay.py", line 17, in <module>
    theSensor=os.open('/sys/bus/i2c/devices/1-0077/iio\:device0/in_temp_input', os.O_RDONLY)
FileNotFoundError: [Errno 2] No such file or directory: '/sys/bus/i2c/devices/1-0077/iio\\:device0/in_temp_input'

通过 python3 读取这个特定的设备路径有什么技巧吗?简单的猫工作。

【问题讨论】:

    标签: python-3.x sensors


    【解决方案1】:

    cat 需要转义所有可以形成命令的字符,python 不需要。

    顺便说一句,您可以使用普通的 open() 调用和 with 语法:

    with open('/sys/bus/i2c/devices/1-0077/iio:device0/in_temp_input', 'r') as fd:
        temp = fd.read()
    print(temp)
    

    这样,文件在print() 调用之前被关闭。

    PS:您尝试读取的文件位于虚拟文件系统上这一事实不会产生任何影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多