96 lines
2.0 KiB
Python
96 lines
2.0 KiB
Python
import time
|
|
import network
|
|
import urequests
|
|
from machine import Pin, time_pulse_us
|
|
|
|
DOOR_OPEN_THRESHOLD = 50 # in cm
|
|
|
|
echoPin = Pin(0, Pin.IN)
|
|
trigPin = Pin(1, Pin.OUT)
|
|
|
|
led = Pin("LED", Pin.OUT)
|
|
|
|
prevDoorStatus = 67
|
|
|
|
def getDistanceCM():
|
|
trigPin.value(0)
|
|
time.sleep_us(2)
|
|
trigPin.value(1)
|
|
time.sleep_us(10)
|
|
trigPin.value(0)
|
|
|
|
pulse_time = time_pulse_us(echoPin, 1, 30000)
|
|
|
|
if pulse_time < 0:
|
|
return -1
|
|
|
|
distance = pulse_time / 58
|
|
return distance
|
|
|
|
def sendDoorStatus(status):
|
|
print("door status: " + str(status))
|
|
#requestURL = "http://10.69.70.1/status"
|
|
#r = urequests.post(requestURL, data={"status", status})
|
|
|
|
def checkDoorDistance():
|
|
global prevDoorStatus # Tell Python to use the global variable
|
|
|
|
dist = -1
|
|
timeoutTime = 10
|
|
while timeoutTime > 0 and dist == -1:
|
|
dist = getDistanceCM()
|
|
timeoutTime -= 1
|
|
time.sleep(1)
|
|
|
|
status = 0;
|
|
if dist < DOOR_OPEN_THRESHOLD:
|
|
status = 1 # door open
|
|
led.on()
|
|
elif dist == -1:
|
|
status = -1 # unknown
|
|
else:
|
|
status = 0 # door closed
|
|
led.off()
|
|
|
|
if status != prevDoorStatus:
|
|
sendDoorStatus(status)
|
|
prevDoorStatus = status
|
|
|
|
def flashLED():
|
|
flashes = 10
|
|
while flashes > 0:
|
|
led.toggle()
|
|
time.sleep_ms(500)
|
|
flashes -= 1
|
|
|
|
def connectToNet():
|
|
ssid = "ITRnet"
|
|
password = "pink4bubble"
|
|
|
|
wlan = network.WLAN(network.STA_IF)
|
|
wlan.active(True)
|
|
wlan.connect(ssid, password)
|
|
|
|
MAX_WIFI_CONNECT_WAIT = 30
|
|
while MAX_WIFI_CONNECT_WAIT > 0:
|
|
if wlan.status() < 0 or wlan.status() >= 3:
|
|
break
|
|
MAX_WIFI_CONNECT_WAIT -= 1
|
|
print('waiting to connect...')
|
|
time.sleep(1)
|
|
|
|
if wlan.status() != 3:
|
|
raise RuntimeError('network connection failed')
|
|
else:
|
|
flashLED()
|
|
print('connected!')
|
|
status = wlan.ifconfig()
|
|
print('ip = ' + status[0])
|
|
|
|
# program
|
|
|
|
connectToNet()
|
|
while True:
|
|
time.sleep(5)
|
|
checkDoorDistance()
|