Add alarm tests
This commit is contained in:
parent
6dbeb75a4f
commit
a23c659eda
|
@ -0,0 +1,81 @@
|
|||
import alarm
|
||||
import board
|
||||
import time
|
||||
import digitalio
|
||||
import neopixel
|
||||
|
||||
## WAKING PINS - uncomment appropriate pin per microcontroller
|
||||
wake_pin = board.X1 # STM32F4 Pyboard
|
||||
# wake_pin = board.GP0 # RP2040 Pico
|
||||
# wake_pin = board.A4 # NRF52840 Feather
|
||||
# wake_pin = board.IO5 # ESP32-S2 Saola
|
||||
|
||||
## LED - use on RP2040 Pico, STM32F4 Pyboard
|
||||
## PinAlarms blink 1x, TimeAlarms 2x, Startup 3x
|
||||
led_pin = board.LED
|
||||
led = digitalio.DigitalInOut(led_pin)
|
||||
led.direction = digitalio.Direction.OUTPUT
|
||||
|
||||
|
||||
def blink(num_blinks):
|
||||
for i in range(num_blinks):
|
||||
led.value = True
|
||||
time.sleep(0.2)
|
||||
led.value = False
|
||||
time.sleep(0.2)
|
||||
|
||||
|
||||
def show_timealarm():
|
||||
blink(2)
|
||||
|
||||
|
||||
def show_pinalarm():
|
||||
blink(1)
|
||||
|
||||
|
||||
def show_noalarm():
|
||||
blink(3)
|
||||
|
||||
|
||||
## Comment out above if using Neopixel
|
||||
|
||||
## NEOPIXEL - use on Circuitplayground Bluefruit, ESP32-S2 Saola
|
||||
## TimeAlarms are red, PinAlarms are blue, Default is white
|
||||
# np = neopixel.NeoPixel(board.NEOPIXEL, 1)
|
||||
# def show_timealarm():
|
||||
# np[0] = (50, 0, 0)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
# def show_pinalarm():
|
||||
# np[0] = (0, 0, 50)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
# def show_noalarm():
|
||||
# np[0] = (50, 50, 50)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
## Comment out above if using LED
|
||||
|
||||
## Show which alarm woke the chip
|
||||
print("Wake alarm:")
|
||||
print(alarm.wake_alarm)
|
||||
if isinstance(alarm.wake_alarm, alarm.time.TimeAlarm):
|
||||
show_timealarm()
|
||||
elif isinstance(alarm.wake_alarm, alarm.pin.PinAlarm):
|
||||
show_pinalarm()
|
||||
else:
|
||||
show_noalarm()
|
||||
|
||||
## USB enumeration may take 4-5s per restart
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
|
||||
## Deep sleep pin alarms may only accept a single configuration.
|
||||
pin_alarm = alarm.pin.PinAlarm(
|
||||
pin=wake_pin, value=True, edge=True, pull=True
|
||||
) # STM32 must be this exact config
|
||||
# pin_alarm = alarm.pin.PinAlarm(pin=wake_pin, value=False, edge=False, pull=True) # NRF and ESP32S2 must use level, not edge
|
||||
# pin_alarm = alarm.pin.PinAlarm(pin=wake_pin, value=False, edge=True, pull=True) # RP2040 supports any config
|
||||
|
||||
alarm.exit_and_deep_sleep_until_alarms(time_alarm, pin_alarm)
|
||||
# alarm.exit_and_deep_sleep_until_alarms(pin_alarm) # Using TimeAlarm will reduce performance on the RP2040
|
||||
# alarm.exit_and_deep_sleep_until_alarms(time_alarm) # Using PinAlarm will reduce performance on the ESP32-S2
|
|
@ -0,0 +1,11 @@
|
|||
import board
|
||||
import digitalio
|
||||
import storage
|
||||
|
||||
switch = digitalio.DigitalInOut(board.IO10)
|
||||
|
||||
switch.direction = digitalio.Direction.INPUT
|
||||
switch.pull = digitalio.Pull.UP
|
||||
|
||||
# If the switch pin is connected to ground CircuitPython can write to the drive
|
||||
storage.remount("/", switch.value)
|
|
@ -0,0 +1,19 @@
|
|||
import alarm
|
||||
import board
|
||||
import time
|
||||
import microcontroller
|
||||
import storage
|
||||
|
||||
temperature = microcontroller.cpu.temperature
|
||||
print("Temperature:", temperature)
|
||||
|
||||
try:
|
||||
with open("/log.txt", "a") as sdc:
|
||||
sdc.write("{}\n".format(temperature))
|
||||
except OSError as e:
|
||||
print("Cannot write to fs, is IO10 grounded?")
|
||||
|
||||
## USB enumeration may take 4-5s per restart
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
|
||||
alarm.exit_and_deep_sleep_until_alarms(time_alarm)
|
|
@ -0,0 +1,77 @@
|
|||
import alarm
|
||||
import board
|
||||
import time
|
||||
import digitalio
|
||||
import neopixel
|
||||
|
||||
## WAKING PINS - uncomment appropriate pin per microcontroller
|
||||
wake_pin = board.X1 # STM32F4 Pyboard
|
||||
# wake_pin = board.GP0 # RP2040 Pico
|
||||
# wake_pin = board.A4 # NRF52840 Feather
|
||||
# wake_pin = board.IO5 # ESP32-S2 Saola
|
||||
|
||||
## LED - use on RP2040 Pico, STM32F4 Pyboard
|
||||
## PinAlarms blink 1x, TimeAlarms 2x, Startup 3x
|
||||
led_pin = board.LED
|
||||
led = digitalio.DigitalInOut(led_pin)
|
||||
led.direction = digitalio.Direction.OUTPUT
|
||||
|
||||
|
||||
def blink(num_blinks):
|
||||
for i in range(num_blinks):
|
||||
led.value = True
|
||||
time.sleep(0.2)
|
||||
led.value = False
|
||||
time.sleep(0.2)
|
||||
|
||||
|
||||
def show_timealarm():
|
||||
blink(2)
|
||||
|
||||
|
||||
def show_pinalarm():
|
||||
blink(1)
|
||||
|
||||
|
||||
def show_noalarm():
|
||||
blink(3)
|
||||
|
||||
|
||||
## Comment out above if using Neopixel
|
||||
|
||||
## NEOPIXEL - use on Circuitplayground Bluefruit, ESP32-S2 Saola
|
||||
## TimeAlarms are red, PinAlarms are blue, Default is white
|
||||
# np = neopixel.NeoPixel(board.NEOPIXEL, 1)
|
||||
# def show_timealarm():
|
||||
# np[0] = (50, 0, 0)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
# def show_pinalarm():
|
||||
# np[0] = (0, 0, 50)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
# def show_noalarm():
|
||||
# np[0] = (50, 50, 50)
|
||||
# time.sleep(1)
|
||||
# np[0] = (0, 0, 0)
|
||||
## Comment out above if using LED
|
||||
|
||||
## PinAlarm only needs to be set once
|
||||
pin_alarm = alarm.pin.PinAlarm(pin=wake_pin, value=False, edge=True, pull=True) # STM32, RP2040
|
||||
# pin_alarm = alarm.pin.PinAlarm(pin=wake_pin, value=False, edge=False, pull=True) # NRF, ESP32-S2, RP2040
|
||||
|
||||
while True:
|
||||
## TimeAlarms must be reset each time you sleep, since they use monotonic time
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
ret_alarm = alarm.light_sleep_until_alarms(pin_alarm, time_alarm)
|
||||
|
||||
print("Returned alarm vs global alarm:") # These should be the same
|
||||
print(ret_alarm)
|
||||
print(alarm.wake_alarm)
|
||||
|
||||
if isinstance(ret_alarm, alarm.time.TimeAlarm):
|
||||
show_timealarm()
|
||||
elif isinstance(ret_alarm, alarm.pin.PinAlarm):
|
||||
show_pinalarm()
|
||||
else:
|
||||
show_noalarm()
|
|
@ -0,0 +1,29 @@
|
|||
import time
|
||||
import adafruit_ble
|
||||
from adafruit_ble_eddystone import uid, url
|
||||
import alarm
|
||||
|
||||
np = neopixel.NeoPixel(board.NEOPIXEL, 1)
|
||||
|
||||
radio = adafruit_ble.BLERadio()
|
||||
# Reuse the BLE address as our Eddystone instance id.
|
||||
eddystone_uid = uid.EddystoneUID(radio.address_bytes)
|
||||
eddystone_url = url.EddystoneURL("https://adafru.it/discord")
|
||||
|
||||
while True:
|
||||
np[0] = (50, 0, 0)
|
||||
# Alternate between advertising our ID and our URL.
|
||||
radio.start_advertising(eddystone_uid)
|
||||
time.sleep(0.5)
|
||||
radio.stop_advertising()
|
||||
|
||||
radio.start_advertising(eddystone_url)
|
||||
time.sleep(0.5)
|
||||
radio.stop_advertising()
|
||||
|
||||
## USB enumeration may take 4-5s per restart
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
|
||||
np[0] = (0, 0, 0)
|
||||
|
||||
alarm.exit_and_deep_sleep_until_alarms(time_alarm)
|
|
@ -0,0 +1,11 @@
|
|||
import board
|
||||
import digitalio
|
||||
import storage
|
||||
|
||||
switch = digitalio.DigitalInOut(board.GP4)
|
||||
|
||||
switch.direction = digitalio.Direction.INPUT
|
||||
switch.pull = digitalio.Pull.UP
|
||||
|
||||
# If the switch pin is connected to ground CircuitPython can write to the drive
|
||||
storage.remount("/", switch.value)
|
|
@ -0,0 +1,19 @@
|
|||
import alarm
|
||||
import board
|
||||
import time
|
||||
import microcontroller
|
||||
import storage
|
||||
|
||||
temperature = microcontroller.cpu.temperature
|
||||
print("Temperature:", temperature)
|
||||
|
||||
try:
|
||||
with open("/log.txt", "a") as sdc:
|
||||
sdc.write("{}\n".format(temperature))
|
||||
except OSError as e:
|
||||
print("Cannot write to fs, is GP4 grounded?")
|
||||
|
||||
## USB enumeration may take 4-5s per restart
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
|
||||
alarm.exit_and_deep_sleep_until_alarms(time_alarm)
|
|
@ -0,0 +1,29 @@
|
|||
import alarm
|
||||
import board
|
||||
import time
|
||||
import microcontroller
|
||||
import sdioio
|
||||
import storage
|
||||
import neopixel
|
||||
|
||||
np = neopixel.NeoPixel(board.NEOPIXEL, 1)
|
||||
np[0] = (50, 0, 0)
|
||||
|
||||
# SD Card
|
||||
sd = sdioio.SDCard(
|
||||
clock=board.SDIO_CLOCK, command=board.SDIO_COMMAND, data=board.SDIO_DATA, frequency=25000000
|
||||
)
|
||||
vfs = storage.VfsFat(sd)
|
||||
storage.mount(vfs, "/sd")
|
||||
|
||||
with open("/sd/log.txt", "a") as sdc:
|
||||
temperature = microcontroller.cpu.temperature
|
||||
print("Temperature:", temperature)
|
||||
sdc.write("{}\n".format(temperature))
|
||||
|
||||
## USB enumeration may take 4-5s per restart
|
||||
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 10)
|
||||
|
||||
np[0] = (0, 0, 0)
|
||||
|
||||
alarm.exit_and_deep_sleep_until_alarms(time_alarm)
|
Loading…
Reference in New Issue