2017-02-03 5 views
0

私は以下のコードを持っています。このコードは、コード実行時のセンサーの読み取り値のみを表示します。自動的には更新されません。誰でもセンサーをリアルタイムで読むことができますか?ラズベリーからセンサーを読み取る

from PyQt4 import QtGui 
from PyQt4 import QtCore 
import sys 
import Adafruit_DHT 
sensor_args = { '11': Adafruit_DHT.DHT11, 
     '22': Adafruit_DHT.DHT22, 
     '2302': Adafruit_DHT.AM2302 } 

humidity, temperature = Adafruit_DHT.read_retry(11, 4) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    tabs = QtGui.QTabWidget() 
    tab1 = QtGui.QWidget() 
    tab2 = QtGui.QWidget() 

    tabs.setWindowTitle('Weather') 
    tabs.resize(250, 150) 

    vBoxlayout1 = QtGui.QVBoxLayout() 
    vBoxlayout2 = QtGui.QVBoxLayout() 
    vBoxlayout1.addWidget(QtGui.QLabel('Temp={:0.1f}'.format(temperature))) 
    vBoxlayout2.addWidget(QtGui.QLabel('Humidity={:0.1f}%'.format(humidity))) 
    vBoxlayout1.setAlignment(QtCore.Qt.AlignCenter) 
    vBoxlayout2.setAlignment(QtCore.Qt.AlignCenter) 

    tab1.setLayout(vBoxlayout1) 
    tab2.setLayout(vBoxlayout2) 

    tabs.addTab(tab1,"Temp") 
    tabs.addTab(tab2,"Humidity") 

    print 'Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity) 

    tabs.show() 

    sys.exit(app.exec_()) 

if ___name___ == '___main___': 
    main() 

答えて

1

あなたのコードはセンサーを1回だけ読み取って変更しないので、読み取りによってメインスレッドが中断しないようにスレッドを実装します。

from PyQt4 import QtGui 
from PyQt4 import QtCore 
import sys 

import Adafruit_DHT 


class Thread(QtCore.QThread): 
    data_sensors = QtCore.pyqtSignal(tuple) 

    def __init__(self, parent=None): 
     super(Thread, self).__init__(parent=parent) 

    def run(self): 
     while True: 
      humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 4) 
      self.data_sensors.emit((humidity, temperature)) 


class TabWidget(QtGui.QTabWidget): 
    def __init__(self, parent=None): 
     super(TabWidget, self).__init__(parent=parent) 
     tab1 = QtGui.QWidget() 
     tab2 = QtGui.QWidget() 

     self.setWindowTitle('Weather') 
     self.resize(250, 150) 

     vBoxlayout1 = QtGui.QVBoxLayout() 
     vBoxlayout2 = QtGui.QVBoxLayout() 
     self.lTemp = QtGui.QLabel('Temp={:0.1f}'.format(0)) 
     vBoxlayout1.addWidget(self.lTemp) 
     self.lHumidity = QtGui.QLabel('Humidity={:0.1f}%'.format(0)) 
     vBoxlayout2.addWidget(self.lHumidity) 

     vBoxlayout1.setAlignment(QtCore.Qt.AlignCenter) 
     vBoxlayout2.setAlignment(QtCore.Qt.AlignCenter) 

     tab1.setLayout(vBoxlayout1) 
     tab2.setLayout(vBoxlayout2) 

     self.addTab(tab1, "Temp") 
     self.addTab(tab2, "Humidity") 

     thread = Thread(self) 
     thread.data_sensors.connect(self.update_Sensors) 
     thread.start() 

    def update_Sensors(self, data): 
     humidity, temperature = data 
     self.lTemp.setText('Temp={:0.1f}'.format(temperature)) 
     self.lHumidity.setText('Humidity={:0.1f}%'.format(humidity)) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    tabs = TabWidget() 
    tabs.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

どのセンサーを使用していますか? – eyllanesc

+0

私はDHT11センサーを使用しています。 – sam

+0

変更を表示するには、2秒待つ必要があります。 – eyllanesc

関連する問題