树莓派上基于Python控制GPIO

树莓派上基于Python控制GPIO

有以下几点:

  • 控制GPIO的拉高/拉低,并保持一段时间间隔
  • 加锁,避免重复
  • 有日志记录具体情况

控制GPIO电平后,外接驱动板来带动一个小型抽水机,并把水分给不同的盆栽,希望做到可以自动给阳台的花儿浇水~
虽然树莓派拿来做这个真的是大材小用哇

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import RPi.GPIO as GPIO
import time
import fcntl
import logging
import sys

class Servant(object):
    def __init__(self, name):
        self.fobj = open(name, 'w')
        self.fd = self.fobj.fileno()

    def lock(self):
        try:
            fcntl.lockf(self.fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
            logging.debug("Lock Success")
            return True

        except:
            logging.warning("Lock Fail, Seems another process is watering, exit...")
            return False

    def unlock(self):
        self.fobj.close()
        logging.debug("Unlock Success")

    def watering(self, inverval):
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)

        VCC = 20
        GND = 21
        GPIO.setup(VCC, GPIO.OUT)
        GPIO.setup(GND, GPIO.OUT)

        GPIO.output(GND, GPIO.LOW)

        GPIO.output(VCC, GPIO.HIGH)
        time.sleep(inverval)
        GPIO.output(VCC, GPIO.LOW)

        GPIO.cleanup()

def main():
    Adam = Servant("/tmp/watering.lock")
    logging.basicConfig(filename='/tmp/log_watering.txt',
                     format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s-%(funcName)s',
                     level=logging.INFO)

    if Adam.lock():
        argc = len(sys.argv)
        interval = 60
        if argc >= 1:
            try:
                _interval = int(sys.argv[1])
                if _interval > 10 and _interval < 300:
                    interval = _interval
            except:
                logging.info("no valid interval")

        logging.info("Watering for {} seconds.".format(interval))
        Adam.watering(interval)
        Adam.unlock()
        logging.info("Stop Watering...")
    else:
        logging.debug("Exit...")

if __name__ == '__main__':
    main()

posted @   付时凡  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示