Remove files found not needed(builtin options). Implement sleeping and catch some errors.
This commit is contained in:
188
inky_helper.py
Normal file
188
inky_helper.py
Normal file
@@ -0,0 +1,188 @@
|
||||
from pimoroni_i2c import PimoroniI2C
|
||||
from pcf85063a import PCF85063A
|
||||
import math
|
||||
from machine import Pin, PWM, Timer
|
||||
import time
|
||||
import inky_frame
|
||||
import json
|
||||
import network
|
||||
import os
|
||||
|
||||
# Pin setup for VSYS_HOLD needed to sleep and wake.
|
||||
HOLD_VSYS_EN_PIN = 2
|
||||
hold_vsys_en_pin = Pin(HOLD_VSYS_EN_PIN, Pin.OUT)
|
||||
|
||||
# intialise the pcf85063a real time clock chip
|
||||
I2C_SDA_PIN = 4
|
||||
I2C_SCL_PIN = 5
|
||||
i2c = PimoroniI2C(I2C_SDA_PIN, I2C_SCL_PIN, 100000)
|
||||
rtc = PCF85063A(i2c)
|
||||
|
||||
led_warn = Pin(6, Pin.OUT)
|
||||
|
||||
# set up for the network LED
|
||||
network_led_pwm = PWM(Pin(7))
|
||||
network_led_pwm.freq(1000)
|
||||
network_led_pwm.duty_u16(0)
|
||||
|
||||
|
||||
# set the brightness of the network led
|
||||
def network_led(brightness):
|
||||
brightness = max(0, min(100, brightness)) # clamp to range
|
||||
# gamma correct the brightness (gamma 2.8)
|
||||
value = int(pow(brightness / 100.0, 2.8) * 65535.0 + 0.5)
|
||||
network_led_pwm.duty_u16(value)
|
||||
|
||||
|
||||
network_led_timer = Timer(-1)
|
||||
network_led_pulse_speed_hz = 1
|
||||
|
||||
|
||||
def network_led_callback(t):
|
||||
# updates the network led brightness based on a sinusoid seeded by the current time
|
||||
brightness = (math.sin(time.ticks_ms() * math.pi * 2 / (1000 / network_led_pulse_speed_hz)) * 40) + 60
|
||||
value = int(pow(brightness / 100.0, 2.8) * 65535.0 + 0.5)
|
||||
network_led_pwm.duty_u16(value)
|
||||
|
||||
|
||||
# set the network led into pulsing mode
|
||||
def pulse_network_led(speed_hz=1):
|
||||
global network_led_timer, network_led_pulse_speed_hz
|
||||
network_led_pulse_speed_hz = speed_hz
|
||||
network_led_timer.deinit()
|
||||
network_led_timer.init(period=50, mode=Timer.PERIODIC, callback=network_led_callback)
|
||||
|
||||
|
||||
# turn off the network led and disable any pulsing animation that's running
|
||||
def stop_network_led():
|
||||
global network_led_timer
|
||||
network_led_timer.deinit()
|
||||
network_led_pwm.duty_u16(0)
|
||||
|
||||
|
||||
def sleep(t):
|
||||
# Time to have a little nap until the next update
|
||||
rtc.clear_timer_flag()
|
||||
rtc.set_timer(t, ttp=rtc.TIMER_TICK_1_OVER_60HZ)
|
||||
rtc.enable_timer_interrupt(True)
|
||||
|
||||
# Set the HOLD VSYS pin to an input
|
||||
# this allows the device to go into sleep mode when on battery power.
|
||||
hold_vsys_en_pin.init(Pin.IN)
|
||||
|
||||
# Regular time.sleep for those powering from USB
|
||||
time.sleep(60 * t)
|
||||
|
||||
|
||||
# Turns off the button LEDs
|
||||
def clear_button_leds():
|
||||
inky_frame.button_a.led_off()
|
||||
inky_frame.button_b.led_off()
|
||||
inky_frame.button_c.led_off()
|
||||
inky_frame.button_d.led_off()
|
||||
inky_frame.button_e.led_off()
|
||||
|
||||
|
||||
def network_connect(SSID, PSK):
|
||||
# Enable the Wireless
|
||||
wlan = network.WLAN(network.STA_IF)
|
||||
wlan.active(True)
|
||||
|
||||
# Number of attempts to make before timeout
|
||||
max_wait = 10
|
||||
|
||||
# Sets the Wireless LED pulsing and attempts to connect to your local network.
|
||||
pulse_network_led()
|
||||
wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs
|
||||
wlan.connect(SSID, PSK)
|
||||
|
||||
while max_wait > 0:
|
||||
if wlan.status() < 0 or wlan.status() >= 3:
|
||||
break
|
||||
max_wait -= 1
|
||||
print('waiting for connection...')
|
||||
time.sleep(1)
|
||||
|
||||
stop_network_led()
|
||||
network_led_pwm.duty_u16(30000)
|
||||
|
||||
# Handle connection error. Switches the Warn LED on.
|
||||
if wlan.status() != 3:
|
||||
stop_network_led()
|
||||
led_warn.on()
|
||||
|
||||
def network_connect_better(SSID, PSK):
|
||||
# Enable the Wireless
|
||||
wlan = network.WLAN(network.STA_IF)
|
||||
wlan.active(True)
|
||||
|
||||
ssids = wlan.scan()
|
||||
for ssid in ssids:
|
||||
if ssid[0].decode('UTF-8') == SSID:
|
||||
# Number of attempts to make before timeout
|
||||
max_wait = 10
|
||||
|
||||
# Sets the Wireless LED pulsing and attempts to connect to your local network.
|
||||
pulse_network_led()
|
||||
wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs
|
||||
wlan.connect(SSID, PSK)
|
||||
|
||||
while max_wait > 0:
|
||||
if wlan.status() < 0 or wlan.status() >= 3:
|
||||
break
|
||||
max_wait -= 1
|
||||
print('waiting for connection...')
|
||||
time.sleep(1)
|
||||
|
||||
stop_network_led()
|
||||
network_led_pwm.duty_u16(30000)
|
||||
|
||||
# Handle connection error. Switches the Warn LED on.
|
||||
if wlan.status() != 3:
|
||||
stop_network_led()
|
||||
led_warn.on()
|
||||
|
||||
return True
|
||||
raise RuntimeError("Can't find SSID")
|
||||
|
||||
|
||||
state = {"run": None}
|
||||
app = None
|
||||
|
||||
|
||||
def file_exists(filename):
|
||||
try:
|
||||
return (os.stat(filename)[0] & 0x4000) == 0
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
def clear_state():
|
||||
if file_exists("state.json"):
|
||||
os.remove("state.json")
|
||||
|
||||
|
||||
def save_state(data):
|
||||
with open("/state.json", "w") as f:
|
||||
f.write(json.dumps(data))
|
||||
f.flush()
|
||||
|
||||
|
||||
def load_state():
|
||||
global state
|
||||
data = json.loads(open("/state.json", "r").read())
|
||||
if type(data) is dict:
|
||||
state = data
|
||||
|
||||
|
||||
def update_state(running):
|
||||
global state
|
||||
state['run'] = running
|
||||
save_state(state)
|
||||
|
||||
|
||||
def launch_app(app_name):
|
||||
global app
|
||||
app = __import__(app_name)
|
||||
print(app)
|
||||
update_state(app_name)
|
||||
Reference in New Issue
Block a user