使用https://github.com/adafruit/Adafruit_Python_DHT的ADAFRUIT_DHT python库和DHT22温度/湿度传感器(https://www.adafruit.com/products/393),我能够轻松读取温度和湿度值。
问题是,我需要以root身份运行我的脚本,以便与GPIO引脚进行交互。当通过网站运行我的脚本时,通过wsgi这是不可能的,因为apache不会让我(有充分理由)将WSGIDaemonProcess的用户设置为root。
我已经运行了pigpiod,它允许我通过它与GPIO进行交互,作为非root用户,然而,ADAFRUIT_DHT不会通过守护进程,并直接与GPIO交互。我不能100%确定pigpio守护程序对于bit-banging来说足够快,需要解码来自DHT22单元的响应,但是,也许。
那么,有没有办法让我强制ADAFRUIT_DHT库不需要以root身份运行,或者,是否有可用的库替代可以实现我正在寻找的东西?
答案 0 :(得分:1)
创建一个以root身份运行并在本地Unix或TCP套接字上侦听的小型服务器。当另一个进程连接时,您的服务器将从传感器读取数据并将其返回。
现在,您的WSGI进程只需要连接到侦听套接字的权限,这可以通过Unix套接字上的权限轻松管理,或者只是将访问控制放到风中并打开绑定到localhost地址的TCP套接字(所以只有本地机器上的进程可以连接。)
这样做有几个好处...例如,您现在可以让多个程序同时使用温度数据,而不必担心设备争用(因为只有温度服务器实际上正在读取数据) )。您甚至可以实施短期缓存以提供更快的响应。
答案 1 :(得分:1)
pigpio当然可以读取DHT11 / 22等传感器。
使用守护程序有两个示例(这意味着不需要root权限)。
用C语言编写的DHT11/21/22/33/44 Sensor自动检测模型。
用Python编写的DHT22只处理DHT22(github有一个DHT11示例)。
这两个例子都可能给出可靠的结果(读取误差率优于1万分之一,而不是差于10分之一)。