2016-05-16 80 views
0

試圖使用帶有raspberry pi的感應帽子監視房間中的溫度並將數據流式傳輸至plot.ly.我有這一切工作正常。下一步是將Picamera添加到項目中,以便當溫度達到某個點時,相機將開啓並開始每5分鐘記錄一次圖片,同時仍然將數據流式傳輸至plot.ly。我分別創建了這些腳本,並將它們從bash腳本運行到了後臺,但問題是數據變得「混淆起來」並給出了錯誤的溫度。我正在查看子進程,但它停止運行一個腳本。我如何在同一時間同時運行並且不會互相影響,所以我會直播數據,如果條件滿足,攝像機會拍攝照片?Raspberry Pi感知帽子

這是我對數據流代碼:

##### 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腳本:

##### 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) 

回答

0

我想你想避免兩個程序訪問SenseHAT一次。有很多複雜的方法可以做到這一點,包括共享內存和信號量等等。

儘管如此,一個非常簡單的方法是讓您的溫度監控腳本保持原樣,但是當您讀取溫度時,如果溫度高於45.2,請創建一個名爲「/ HOT」的空文件,如果溫度低於,刪除文件「/ HOT」。

然後,在相機腳本中,運行一個循環,檢查文件「/ HOT」是否存在,並相應地啓動/停止相機。

這樣,只有一個進程將讀取SenseHAT。

+0

感謝@MarkSetchell似乎在做這項工作。最後的問題是,一旦「熱」文件被刪除,我無法讓相機停止。我有,如果不是os.path.exists('熱門')然後camera.close,但那不工作,因爲我認爲它現在被卡在循環當中是真實的。 – Jason