2016-05-16 23 views
0

Versuchen, den Sinn Hut mit der raspberry pi zu verwenden, um die Temperatur in einem Raum zu überwachen und die Daten zu plot.ly zu streamen. Ich habe das alles gut funktioniert. Der nächste Schritt war das Hinzufügen der Picamera zum Projekt. Wenn die Temperatur einen bestimmten Punkt erreicht, schaltet sich die Kamera ein und beginnt alle 5 Minuten Bilder aufzunehmen, während die Daten weiterhin in plot.ly übertragen werden. Ich habe die Skripte separat erstellt und sie von einem Bash-Skript zum Hintergrund laufen lassen, aber das Problem ist, dass die Daten "durcheinander" geraten und die falsche Temperatur bekommen. Ich habe den Subprozess untersucht, aber es stoppt eines der Skripts. Wie kann ich beide gleichzeitig laufen lassen und sich nicht gegenseitig beeinflussen, also werde ich die Daten live streamen und die Kamera wird Bilder machen, wenn die Bedingung erfüllt ist?Raspberry Pi Sense Hut

Hier ist mein Code für Datenstrom:

##### Main Program ##### 
sense = SenseHat() 
sense.clear() 

####Graph#### 
stream_id = 'nync7etjej' 

stream = dict(token=stream_id,maxpoints=60) 
trace1 = go.Scatter(
    x =[], 
    y=[], 
    mode='lines+markers', 
    stream=stream) 
data= go.Data([trace1]) 

layout =go.Layout(title='Room Temperature') 

fig = go.Figure(data=data,layout=layout) 
py.plot(fig,filename="Server Room Temperature_01") 

s = py.Stream(stream_id) 

s.open() 

time.sleep(5) 

while True: 
    temp_h= sense.get_temperature() 
    temp_h=round(temp_h,1) 
    x=datetime.now() 
    y=temp_h 
    s.write(dict(x=x,y=y)) 
    time.sleep(300)  
s.close() 
tls.embed('Streaming Temp','12') 

Picamera Skript:

##### Main Program ##### 
sense = SenseHat() 
sense.clear() 
with picamera.PiCamera() as camera: 

    while True: 
     temp_h= sense.get_temperature() 
     temp_h=round(temp_h,1) 
     if temp_h >45.2: 
      camera.start_preview() 
      time.sleep(2) 
      for filename in camera.capture_continuous('/var/www/image/img{counter}.jpg'): 
       camera.stop_preview() 
       time.sleep(5) 

Antwort

0

Ich glaube, Sie zwei Programme vermeiden wollen sofort den SenseHAT zugreifen. Es gibt viele ausgeklügelte Möglichkeiten, dies zu tun, mit gemeinsamem Speicher und Semaphoren und Dingen.

Eine sehr einfache Methode ist, das Temperaturüberwachungsskript so zu belassen, wie es ist, aber wenn Sie die Temperatur ablesen, wenn es über 45,2 liegt, erstellen Sie eine leere Datei namens "/ HOT", und wenn sie darunter liegt , lösche die Datei "/ HOT".

Führen Sie dann im Kameraskript eine Schleife aus, die prüft, ob die Datei "/ HOT" existiert und startet/stoppt die Kamera entsprechend.

Auf diese Weise wird nur ein Prozess den SenseHAT lesen.

+0

Danke @MarkSetchell, das scheint den Job zu erledigen. Das Endproblem ist, dass ich die Kamera nicht zum Anhalten bringen kann, sobald die "Hot" -Datei gelöscht ist. Ich habe wenn nicht os.path.exists ('Hot') dann camera.close aber das funktioniert nicht wie ich denke das es jetzt in der Schleife fest ist wie echt. – Jason