Dra*_*okh 5 python raspberry-pi
我正在尝试使用Python为我的Raspberry Pi创建门刷卡系统。我将程序分为两部分:门禁警报和刷卡记录系统。这两个程序可以单独工作,但是如何将两个程序合并为一个python文件?我试过线程,但似乎无法正常工作。
以下是程序:1.)门警报:如果门在一定时间内保持打开状态,指示灯会闪烁,然后警报会响起
import time
import RPi.GPIO as gpio
led = 37
buzzer = 11
door = 16
gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(buzzer, gpio.OUT)
gpio.setup(led, gpio.OUT)
gpio.setup(door, gpio.IN, pull_up_down=gpio.PUD_UP)
def blink(buzzer):
gpio.output(buzzer, True)
time.sleep(0.1)
gpio.output(buzzer, False)
time.sleep(0.1)
return
def blink(led):
gpio.output(led, True)
time.sleep(1)
gpio.output(led, False)
time.sleep(1)
return
while True:
if gpio.input(door):
time.sleep(3)
for i in range(0,5):
blink(led)
for i in range (0,5):
blink(buzzer)
else:
gpio.output(buzzer, False)
gpio.cleanup()
Run Code Online (Sandbox Code Playgroud)
2.)刷卡记录系统:当某人刷卡时,指示灯闪烁并拍照
import datetime
import time
import os
import RPi.GPIO as gpio
led = 37
t = datetime.datetime.now()
gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(led, gpio.OUT)
def blink(led):
gpio.output(led, True)
time.sleep(0.1)
gpio.output(led, False)
time.sleep(0.1)
while True:
card = raw_input()
f = open("Laptop Sign Out" + '.txt', 'a')
f.write("OneCard Number: " + card[1:10] + " Time: " + t.strftime("%m-%d-%Y %H:%M:%S"))
f.write('\n')
f.write(';')
f.write('\n')
f.close()
time.sleep(1)
for i in range(0,3):
blink(led)
os.system('fswebcam ~/Desktop/Photos/%H%M%S.jpeg')
time.sleep(3)
gpio.cleanup()
Run Code Online (Sandbox Code Playgroud)
(更新)另外,下面是我尝试线程化的尝试:
import time
import RPi.GPIO as gpio
import os
import datetime
from threading import Thread
led = 37
buzzer = 11
door = 16
t = datetime.datetime.now()
gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(buzzer, gpio.OUT)
gpio.setup(led, gpio.OUT)
gpio.setup(door, gpio.IN, pull_up_down=gpio.PUD_UP)
def blink(buzzer):
gpio.output(buzzer, True)
time.sleep(0.1)
gpio.output(buzzer, False)
time.sleep(0.1)
return
def blink(led):
gpio.output(led, True)
time.sleep(1)
gpio.output(led, False)
time.sleep(1)
return
def doorsensor():
while True:
if gpio.input(door):
time.sleep(3)
for i in range(0,5):
blink(led)
for i in range (0,5):
blink(buzzer)
else:
gpio.output(buzzer, False)
def cardreader():
while True:
card = raw_input()
f = open("Laptop Sign Out" + '.txt', 'a')
f.write("OneCard Number: " + card[1:10] + " Time: " + t.strftime("%m-%d-%Y %H:%M:%S"))
f.write('\n')
f.write(';')
f.write('\n')
f.close()
time.sleep(1)
for i in range(0,3):
blink(led)
os.system('fswebcam ~/Desktop/Photos/%H%M%S.jpeg')
time.sleep(3)
f1 = Thread(target = doorsensor())
f2 = Thread(target = cardreader())
f2.start()
f1.start()
gpio.cleanup()
Run Code Online (Sandbox Code Playgroud)
小智 1
您需要将线程函数作为target参数传递,而不是它们的返回值:
import sleep\n\nf1 = Thread(target=doorsensor) # Remove parentheses after doorsensor\nf1.daemon = True\nf1.start()\nf2 = Thread(target=cardreader) # Remove parentheses after cardreader\nf2.daemon = True\nf2.start()\n\n# Use a try block to catch Ctrl+C\ntry:\n # Use a while loop to keep the program from exiting and killing the threads\n while True:\n time.sleep(1.0)\nexcept KeyboardInterrupt:\n pass\n\ngpio.cleanup()\nRun Code Online (Sandbox Code Playgroud)\n\n在每个线程上设置该daemon属性,以便当只剩下守护线程时程序将退出:
\n\n线程可以标记为 \xe2\x80\x9cdaemon 线程\xe2\x80\x9d。该标志的意义在于,当只剩下守护线程时,整个Python程序就会退出。初始值是从创建线程继承的。该标志可以通过 daemon 属性来设置。
\n
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |