2回答

0收藏

[求助] 树莓派python多线程编程求助

Raspberry Pi Raspberry Pi 7100 人阅读 | 2 人回复 | 2016-03-27

小弟初接触树莓派,想给孩子做一个孵化小鸡的孵化箱。构想是用5个18b20温度传感器分布于箱子内不同位置读取箱内温度,根据读取到的温度来通过gpio引脚控制继电器线包,继而控制电热丝加热,或者控制风扇来降温。如果箱内温度在设定范围内,则保持恒温(不加热也不降温)。同时还有lcd1602用来显示孵化时间/剩余时间等,7段数码管组依次显示5个温度值,三色led显示加热/降温/恒温状态,以及定时写入web页,开启一个简单web server,可以通过电脑手机等远程查看状态。主控程序结构大概如下(见跟帖):

1.读取温度2.判断读取到的温度是否在设定范围内,如果在的话保温,否则加热或降温3.将温度显示到数码管(共6个温度值,耗时6秒)4.goto 1

初步的程序已经调试通过,基本运行正常,但发现一个致命的问题是:数码管显示子程序因为要每隔1秒依次显示5组温度和平均温度,所以这个子程序需要花费6秒的时间。在这个子程序6秒的执行过程中,加热或降温子程序已经持续运行了6秒,有可能会使温度大大超出设定范围。所以想要把这个耗时较多的温度显示子程序设为多线程并发执行,使得它不要阻塞主程序中的其他部分。我在网上看了不少关于python多线程的例子,也做了些试验,但一直也没能理出个头绪,所以还请eeboard的诸位大侠打个帮手,毕竟已经答应了孩子,而且孩子都给小伙伴们许出赠送小鸡的承诺了。火线求助!万分感谢!!!
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

isAlpha

发表于 2016-3-27 16:40:00 | 只看该作者

  1. main():
  2.     while 1:
  3.         temp_lists=temp_get()//读取传感器的值到一个list
  4.         temp_avg=get_avg(temp_lists)//计算温度平均值
  5.         if (temp_avg>temp_max):
  6.             dis_hot() //若平均值大于设定上限,则持续降温
  7.         elif (temp_avg<temp_min):
  8.            hot() //若平均值小于下限,则持续加热
  9.        else:
  10.            keep_warming() //否则保温(不加热也不降温)
  11.        temp_display() //在数码管上依次显示5个传感器温度以及平均温度,每秒1个,共耗时6秒
复制代码
板凳

timyin7

发表于 2016-3-30 07:49:53 | 只看该作者

isAlpha 发表于 2016-3-27 16:40

最简单的,分成俩个进程,把温度等数据存档到一个txt中,专门写一个display进程,循环显示这个txt中数据。至于多线程,看看其他人的讲解吧
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条