Raspberry Pi Sense Hat

时间:2016-05-16 11:00:40

标签: python multithreading bash raspberry-pi multiprocessing

尝试使用带有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)

1 个答案:

答案 0 :(得分:0)

我想你想避免两个程序一次访问SenseHAT。有很多复杂的方法,共享内存和信号量和东西。

一个非常简单的方法是保持温度监控脚本不变,但是当您读取温度时,如果温度高于45.2,则创建一个名为" / HOT"的空文件,如果它在下面,删除文件" / HOT"。

然后,在相机脚本中,运行一个循环,检查文件" / HOT"存在并相应地启动/停止相机。

这样,只有一个进程会读取SenseHAT。