PiClock project
This commit is contained in:
93
tools.py
Normal file
93
tools.py
Normal file
@@ -0,0 +1,93 @@
|
||||
import ubinascii
|
||||
import time
|
||||
import socket
|
||||
import struct
|
||||
import machine
|
||||
|
||||
def with_fallback(value, fallback):
|
||||
if value is None:
|
||||
return fallback
|
||||
else:
|
||||
return value
|
||||
|
||||
def with_fallback_to_str(value, fallback: str) -> str:
|
||||
if value is None:
|
||||
return fallback
|
||||
else:
|
||||
return str(value)
|
||||
|
||||
def set_time():
|
||||
NTP_DELTA = 2208988800
|
||||
HU_CORRECTION = 3600
|
||||
host = "pool.ntp.org"
|
||||
|
||||
NTP_QUERY = bytearray(48)
|
||||
NTP_QUERY[0] = 0x1B
|
||||
addr = socket.getaddrinfo(host, 123)[0][-1]
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
try:
|
||||
s.settimeout(10)
|
||||
res = s.sendto(NTP_QUERY, addr)
|
||||
msg = s.recv(48)
|
||||
finally:
|
||||
s.close()
|
||||
val = struct.unpack("!I", msg[40:44])[0]
|
||||
t = val - NTP_DELTA + HU_CORRECTION
|
||||
tm = time.gmtime(t)
|
||||
machine.RTC().datetime((tm[0], tm[1], tm[2], tm[6] + 1, tm[3], tm[4], tm[5], 0))
|
||||
|
||||
def connect_wifi(wlan, ssid, pw, blink_onboard_led):
|
||||
print('Connecting to WiFi ' + ssid + '...')
|
||||
wlan.active(True)
|
||||
# If you need to disable powersaving mode
|
||||
# wlan.config(pm = 0xa11140)
|
||||
|
||||
# See the MAC address in the wireless chip OTP
|
||||
mac = ubinascii.hexlify(wlan.config('mac'),':').decode()
|
||||
print('mac = ' + mac)
|
||||
|
||||
# Other things to query
|
||||
# print(wlan.config('channel'))
|
||||
# print(wlan.config('essid'))
|
||||
# print(wlan.config('txpower'))
|
||||
|
||||
wlan.connect(ssid, pw)
|
||||
|
||||
# Wait for connection with 10 second timeout
|
||||
timeout = 10
|
||||
while timeout > 0:
|
||||
if wlan.status() < 0 or wlan.status() >= 3:
|
||||
break
|
||||
timeout -= 1
|
||||
print('Waiting for connection... Status is ' + str(wlan.status()))
|
||||
blink_onboard_led(2)
|
||||
time.sleep(1)
|
||||
# Handle connection error
|
||||
# Error meanings
|
||||
# 0 Link Down
|
||||
# 1 Link Join
|
||||
# 2 Link NoIp
|
||||
# 3 Link Up
|
||||
# -1 Link Fail
|
||||
# -2 Link NoNet
|
||||
# -3 Link BadAuth
|
||||
|
||||
wlan_status = wlan.status()
|
||||
blink_onboard_led(wlan_status)
|
||||
|
||||
if wlan_status != 3:
|
||||
blink_onboard_led(5)
|
||||
print('Wi-Fi connection failed')
|
||||
return False
|
||||
else:
|
||||
blink_onboard_led(1)
|
||||
print('Connected')
|
||||
status = wlan.ifconfig()
|
||||
print('ip = ' + status[0])
|
||||
return True
|
||||
|
||||
def disconnect_wifi(wlan):
|
||||
wlan.disconnect()
|
||||
wlan.active(False)
|
||||
wlan.deinit()
|
||||
print('Disconnected')
|
||||
Reference in New Issue
Block a user