Это такая странная проблема. Я даже не знаю, как решить эту проблему...
Я написал очень простой код для Raspberry Pi у входа в мой дом. Он просто подключает GPIO каждые 2 секунды, чтобы увидеть, завершена ли цепь. Он подключен через GPIO к магнитному датчику двери, как один из этих: https://s3.amazonaws.com/assets.controlanything.com/photos/CKN6004-900.jpg
Вот код питона:
import os
import time
import socket
import RPi.GPIO as io
io.setmode(io.BCM)
ADDRESS = "192.168.1.118"
PORT = 1234
def doorOpened():
"report door has been opened"
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ADDRESS, PORT))
s.send(b'DOOR_OPEN')
except Exception as e:
print("Exception: " + e)
s.close()
return
DOOR_PIN = 23
io.setup(DOOR_PIN, io.IN)
print("Watching over the door")
while True:
time.sleep(2)
if io.input(DOOR_PIN):
doorOpened()
time.sleep(60)
В любом случае, по какой-то причине, например, раз в неделю, будильник будет срабатывать ложно. Иногда, когда я сплю, на работе, что угодно. Я не уверен, как код может считывать значение из GPIO, пока магниты находятся близко друг к другу, он не должен замыкать цепь. Я играл с открытием двери, и они должны находиться на расстоянии около 1,5-2 дюймов друг от друга, прежде чем датчик сработает, поэтому я понятия не имею, как он может сработать, когда они в основном соприкасаются (менее 1 мм). Кроме).
Итак ... у кого-нибудь есть идеи или объяснения?
Спасибо!
io.input(DOOR_PIN)
верно, прежде чем включить тревогу? Это может помочь предотвратить ложные срабатывания. - person Zack Tanner   schedule 24.06.2015