首页 > 编程语言 >树莓派上基于Python控制GPIO

树莓派上基于Python控制GPIO

时间:2024-02-05 15:57:21浏览次数:34  
标签:__ 树莓 logging Python self watering GPIO def

树莓派上基于Python控制GPIO

希望做到可以自动给阳台的花儿浇水~
有以下几点:

  • 控制GPIO的拉高/拉低,并保持一段时间间隔
  • 加锁,避免重复
  • 有日志记录具体情况
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

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

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)

        GPIO.setup(20, GPIO.OUT)
        GPIO.setup(21, GPIO.OUT)

        # for ground
        GPIO.output(21, GPIO.LOW)

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

        GPIO.cleanup()

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

    if Adam.lock():
        logging.info("Start Watering...")
        Adam.watering(90)
        Adam.unlock()
        logging.info("Stop Watering...")
    else:
        logging.debug("Exit...")

if __name__ == '__main__':
    main()

标签:__,树莓,logging,Python,self,watering,GPIO,def
From: https://www.cnblogs.com/adam-ma/p/18008297

相关文章

  • (python)做题记录||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/python我的解决方案:defbalanced_parens(n):#Yourcodehere!used_l=[Falseforiinrange(n)]used_r=[Falseforiinrange(n)]answers=[]defprocess(answer):iflen(a......
  • python时实检测数据库表的数据变化
     在实际的数据处理和监控应用中,有时我们需要实时监测数据库表的数据变化,以便及时发现和处理数据更新、插入或删除操作。本文将介绍如何使用Python和数据库连接库来实现对数据库表的实时监测,帮助读者了解如何利用Python编写监控程序,实时捕获数据库表的数据变化。 第一步:连接数据......
  • Python正则表达式实战:提取字符串中的数字
    在文本处理中,有时我们需要从字符串中提取数字,并去除其他非数字字符。Python中的re模块提供了强大的正则表达式功能,可以帮助我们实现这一目标。本文将介绍如何使用Python的re模块来提取字符串中的数字,以及如何应用正则表达式进行文本处理。第一步:导入所需库和模块在开始之前,我们首先......
  • python保存图片的白色区域为透明怎么设置
    在图像处理中,有时我们需要将图片中的白色区域设置为透明,以便在后续操作中能够更好地与其他图像或背景融合。Python提供了丰富的图像处理库,如PIL(Pillow)和OpenCV,可以帮助我们实现这一目标。本文将介绍如何使用Python进行图像处理,将图片中的白色区域设置为透明。第一步:导入所需库和模......
  • python对矩阵中每个元素求绝对值的方法
    在Python中,对矩阵中每个元素求绝对值是一种常见的操作,特别在数值计算和数据处理中经常会用到。本文将介绍如何使用Python中的NumPy库来对矩阵中每个元素求绝对值,帮助读者更好地理解和应用这一操作。第一步:导入NumPy库NumPy是Python中用于科学计算的一个重要库,提供了大量用于数组操......
  • Python Fire:更加灵活的命令行参数
    之前介绍过Python的Fire库,一个用来生成命令行工具的的库。请参考:PythonFire:自动生成命令行接口今天,针对命令行参数,补充两种更加灵活的设置方式。1.*args型参数*args型的参数可以接受任意长度的参数。比如,模拟一个学校发送通知的功能:importfiredefnotions(school,*name......
  • 再测python3.13 —— python3.13是否移除了GIL的限制(续)
    前文:python3.13是否移除了GIL的限制x86_64ubuntu22.04环境下编译版本python3.13.0alpha0源码——python3.13.0alpha0的源码编译相关资料:PEP703–MakingtheGlobalInterpreterLockOptionalinCPythonhttps://github.com/python/cpython/issues/108223......
  • 如何在Python中保留异常装饰器的堆栈跟踪
    异常装饰器是一种通过装饰器(Decorator)机制来捕获和处理函数中异常的技术。当函数中发生异常时,装饰器可以捕获异常并进行处理,也可以记录异常信息或进行其他操作。堆栈跟踪(StackTrace)是指在发生异常时,系统会输出一个包含异常信息和函数调用链的信息。对于经常使用python做爬虫来说,这......
  • 理解日志基础:使用Python进行有效的日志记录
    源码分享https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tab=BB08J2日志记录是任何软件开发过程中的一个基本组成部分,尤其是在爬虫开发中。有效的日志记录策略可以帮助开发者监控爬虫的行为,诊断问题,以及追踪爬虫的性能。Python的logging模块提供了一套强大的日志记录工具,它可以帮助......
  • 【教程】Python代码混淆工具,Python源代码保密、加密、混淆
    引言Python作为一种高级脚本语言,便捷的语法和丰富的库使它成为众多开发者的首选。然而,有时候我们希望保护我们的Python源代码,避免被他人轻易获取和篡改。为了实现这一目标,我们可以采取代码混淆的技术手段。本文将介绍Python代码混淆的现状、优化方法和常用工具。正文1.使用pyc......