2016-05-16 8 views
0

raspberry piのセンスハットを使用して、部屋の温度を監視し、データをplot.lyにストリーミングしようとしました。私はそれがすべて正常に動作している。次のステップでは、Picameraをプロジェクトに追加して、一時的な温度になったらカメラの電源を入れ、5分ごとに画像を記録し始め、plot.lyにデータをストリーミングします。私は別々にスクリプトを作成し、bashスクリプトからバックグラウンドまで実行しましたが、問題はデータが混在して不正な温度を与えてしまうことです。私はサブプロセスを見ていましたが、実行中のスクリプトの1つを停止します。どのように私は同時に両方を実行することができますし、私はデータをライブストリーミングし、条件が満たされた場合、カメラは写真を撮るだろうので、お互いに影響しません?ここでラズベリーパイセンスハット

は、データ・ストリームのための私のコードです:

##### 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にアクセスする二つのプログラムを避けたいと思います。共有メモリーとセマフォーと物事を使って、それを行うための洗練された方法がたくさんあります。

非常に単純な方法の1つは、そのまま温度監視スクリプトを残すことですが、温度を読み取ったときに45.2を超える場合は、「/ HOT」と呼ばれる空のファイルを作成し、ファイル "/ HOT"を削除してください。

カメラスクリプトで、ファイル "/ HOT"が存在するかどうかをチェックし、それに応じてカメラを起動/停止するループを実行します。

こうして、SenseHATを読み取るのは1つのプロセスだけです。

+0

ありがとう@MarkSetchellは仕事をしているようだ。最終的に問題となるのは、「Hot」ファイルが削除されるとカメラを停止させることができないということです。私はos.path.exists( 'Hot')then camera.closeを持っていませんが、実際にループ内に止まっていると思うので動作しません。 – Jason