尝试使用带有raspberry pi
的感应帽来监控房间中的温度并将数据流式传输到plot.ly.我觉得一切正常。下一步是将Picamera
添加到项目中,以便当温度达到某个点时,相机将打开并开始每5分钟记录一次图像,同时仍然将数据流式传输到plot.ly.我分别创建脚本并将它们从bash脚本运行到后台,但问题是数据“混淆”并给出了错误的温度。我正在查看子进程,但它停止运行其中一个脚本。如何同时运行两个并且不会相互影响所以我会实时流式传输数据,如果条件满足,相机会拍照?
这是我的数据流代码:
##### 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 :(得分:0)
我想你想避免两个程序一次访问SenseHAT。有很多复杂的方法,共享内存和信号量和东西。
一个非常简单的方法是保持温度监控脚本不变,但是当您读取温度时,如果温度高于45.2,则创建一个名为" / HOT"的空文件,如果它在下面,删除文件" / HOT"。
然后,在相机脚本中,运行一个循环,检查文件" / HOT"存在并相应地启动/停止相机。
这样,只有一个进程会读取SenseHAT。