zoukankan      html  css  js  c++  java
  • 树莓派自动浇水代码,树莓派云灌溉(三)

    树莓派自动浇水代码

    这是在树莓派上运行的最终代码,实现的功能是自动浇水并把相关数据写入文件
    文章来源于sogeisetsu的GitHub。 如果喜欢欢迎fork和star树莓派云灌溉系统设计
    用python2运行

    # coding=UTF-8
    #!/usr/bin/python
    
    import RPi.GPIO as GPIO
    import time
    for i in range (10): #这里设置的是循环十次,在实际应用中可以改为 while True:
        channel = 16  # 引脚号16,这是设置dht11用的
        data = []  # 温湿度值
        j = 0
        # 计数器
        a=20
        GPIO.setmode(GPIO.BCM)  # 以BCM编码格式
    
        time.sleep(1)  # 时延一秒
    
        GPIO.setup(channel, GPIO.OUT)
    
        GPIO.output(channel, GPIO.LOW)
        time.sleep(0.02)  # 给信号提示传感器开始工作
        GPIO.output(channel, GPIO.HIGH)
    
        GPIO.setup(channel, GPIO.IN)
    
        while GPIO.input(channel) == GPIO.LOW:
            continue
    
        while GPIO.input(channel) == GPIO.HIGH:
            continue
    
        while j < 40:
            k = 0
            while GPIO.input(channel) == GPIO.LOW:
                continue
    
            while GPIO.input(channel) == GPIO.HIGH:
                k += 1
                if k > 100:
                    break
    
            if k < 8:
                data.append(0)
            else:
                data.append(1)
    
            j += 1
    
        print "开始工作."
       # print  data  # 输出初始数据高低电平
    
        humidity_bit = data[0:8]  # 分组
        humidity_point_bit = data[8:16]
        temperature_bit = data[16:24]
        temperature_point_bit = data[24:32]
        check_bit = data[32:40]
    
        humidity = 0
        humidity_point = 0
        temperature = 0
        temperature_point = 0
        check = 0
    
        for i in range(8):
            humidity += humidity_bit[i] * 2 ** (7 - i)  # 转换成十进制数据
            humidity_point += humidity_point_bit[i] * 2 ** (7 - i)
            temperature += temperature_bit[i] * 2 ** (7 - i)
            temperature_point += temperature_point_bit[i] * 2 ** (7 - i)
            check += check_bit[i] * 2 ** (7 - i)
    
        tmp = humidity + humidity_point + temperature + temperature_point  # 十进制的数据相加
    
        if check == tmp:  # 数据校验,相等则输出
            print "temperature : ", temperature, ", humidity : ", humidity
            c="温度"+str(temperature)+"."+"/"+"湿度"+str(humidity)
            GPIO.setup(21, GPIO.IN)
            if GPIO.input(21) == GPIO.LOW:#设置土壤湿度传感器
                print "土壤检测结果:潮湿"
                c=c+"
    "+"土壤潮湿"+"
    "+"推荐不要浇水,具体以机器操作为准"
            else:
                print "土壤检测结果:干燥"
                c=c+"
    "+"土壤干燥"+"
    "+"推荐浇水,具体以机器操作为准"
            f=open("123.txt","w+") #将数据写入文件
            f.write(c)
            f.close
            if temperature >= 20:
                print"jiaoshui"
                GPIO.setup(25, GPIO.OUT)#控制继电器
                GPIO.output(25, GPIO.LOW)#这句意义不大,也可以是high,因为电阻不合适无论高低电平都是通路,所以只能采用setup后再cleanup。
                print("3")#我这里设置的是浇水时间3秒
                time.sleep(1.0)
                print("2")
                time.sleep(1.0)
                print("1")
                time.sleep(1.0)
                GPIO.cleanup()
                GPIO.setmode(GPIO.BCM)  # 以BCM编码格式
    
                time.sleep(1)  # 时延一秒
    
                GPIO.setup(channel, GPIO.OUT)
    
                GPIO.output(channel, GPIO.LOW)
        else:  # 错误输出错误信息,和校验数据
            print "出现错误,输出校验结果"
            print "temperature : ", temperature, ", humidity : ", humidity, " check : ", check, " tmp : ", tmp
        time.sleep(2) #每隔2秒检测一次
    
        GPIO.cleanup()  # 重置针脚
    
  • 相关阅读:
    PS学习之餐饮行业修图
    python的IDE选择
    python简介与安装
    selenium不能启动firefox浏览器,怎么办?
    selenium定位元素(python)
    如何解决Selenium IDE与Firefox的不兼容问题?
    手工测试的关注点之用户管理
    《Google 测试之道》有感(一)
    LR性能测试衡量指标
    LR集合点与事务
  • 原文地址:https://www.cnblogs.com/sogeisetsu/p/11312865.html
Copyright © 2011-2022 走看看