Example #1
0
    def standby(self, duration=None):
        #self.slp.init(Pin.PULL_HOLD)
        #duration should be in seconds

        #level parameter can be: esp32.WAKEUP_ANY_HIGH or esp32.WAKEUP_ALL_LOW
        esp32.wake_on_ext0(pin=self.manual_open, level=esp32.WAKEUP_ALL_LOW)

        # Couldnt get ext1 with two wakeup switches to work. leave it here for knowledge...
        esp32.wake_on_ext1(pins=[self.manual_close],
                           level=esp32.WAKEUP_ALL_LOW)
        #esp32.wake_on_ext1(pins = [self.manual_open, self.manual_close], level = esp32.WAKEUP_ALL_LOW)

        ###  1000 * 60 * 10 = 10m in milliseconds
        if duration:
            print(
                'Going to sleep in 30s in case there are any pending threads...'
            )
            sleep(30)
            print('Going to sleep now...')
            sleepytime = duration * 1000
            deepsleep(sleepytime)
        else:
            # no duration specified, go into deepsleep indefinitely
            print('Going to sleep now...')
            deepsleep()
Example #2
0
    def standby(self):
        print("[bat] Standing by.")
        self.standing_by = True

        self._standby_callback(False)

        self._power.setPowerOutPut(consts.AXP202_LDO2, consts.AXP202_OFF)
        esp32.wake_on_ext1((Pin(35), ), esp32.WAKEUP_ALL_LOW)
        self._power.clearIRQ()
Example #3
0
def set_sleep(timer):
    # Board enters deepsleep for 60 seconds
    # Can be woken up by:
    # - touching touchpad 2 (touchpad 1 has no effect)
    # - pressing either of the push button switches
    print("I am awake. Going to sleep for 1 minute.")
    led_red.value(0)
    esp32.wake_on_touch(True)
    esp32.wake_on_ext1(pins=(switch1, switch2), level=esp32.WAKEUP_ANY_HIGH)
    deepsleep(60000)
def axp_callback(pin):
    power.clearIRQ()
    print("PEK was pressed! Go to sleep!!!!")
    watch.tft.backlight_fade(0)
    watch.tft.display_sleep()
    watch.power_off()
    power.setPowerOutPut(ttgo.axp202.AXP202_LDO2, False)
    esp32.wake_on_ext1((machine.Pin(35), ), esp32.WAKEUP_ALL_LOW)
    power.clearIRQ()
    machine.deepsleep()
# Complete project details at https://RandomNerdTutorials.com

import esp32
from machine import deepsleep
from machine import Pin
from time import sleep

wake1 = Pin(14, mode=Pin.IN)
wake2 = Pin(12, mode=Pin.IN)

#level parameter can be: esp32.WAKEUP_ANY_HIGH or esp32.WAKEUP_ALL_LOW
esp32.wake_on_ext1(pins=(wake1, wake2), level=esp32.WAKEUP_ANY_HIGH)

#your main code goes here to perform a task

print('Im awake. Going to sleep in 10 seconds')
sleep(10)
print('Going to sleep now')
deepsleep()
rtc = RTC()
hardTimer = Timer(0)
hardTimer.init(period=15000, mode=Timer.PERIODIC, callback=hardDispTime)


# turn on/off green led
def greenTouchSensor(timer):
    if greenTouch.read() < 300:
        led_green.on()
    else:
        led_green.off()


#button wakeup
esp32.wake_on_ext1(pins=(button1, button2), level=esp32.WAKEUP_ANY_HIGH)

#touchpad wakeup
redTouch.config(300)
esp32.wake_on_touch(True)


#deepsleep
def deepsleep(timer):
    print("I am awake. Going to sleep for 1 minute")
    machine.deepsleep(60000)


hardTimer3 = Timer(2)
hardTimer3.init(period=30000, mode=Timer.PERIODIC, callback=deepsleep)
Example #7
0
rtc.init(tm)

# call a function that prints the date and time every 15 seconds
rtc_timer = Timer(0)
rtc_timer.init(mode=Timer.PERIODIC, period=15000, callback=print_datetime)

# initialize capacitive touch wires
touch27 = TouchPad(Pin(27))
touch27.config(325)
touch33 = TouchPad(Pin(33))

# initialize leds
green_led = Pin(16, Pin.OUT, value=1)
red_led = Pin(17, Pin.OUT, value=1)

# measure the value of one of the wires every 10 ms
touch_timer = Timer(1)
touch_timer.init(mode=Timer.PERIODIC, period=10, callback=measure_brown_touch)

# initialize a timer to put our board to sleep every 30s
sleep_timer = Timer(2)
sleep_timer.init(mode=Timer.PERIODIC, period=30000, callback=go_to_sleep)

# initialize_buttons
green_button = Pin(14, Pin.IN, Pin.PULL_DOWN)
red_button = Pin(15, Pin.IN, Pin.PULL_DOWN)

# set what can wake up the board
esp32.wake_on_touch(True)
esp32.wake_on_ext1(pins=[green_button, red_button], level=esp32.WAKEUP_ANY_HIGH)
print()
wake_reason = machine.wake_reason()
if wake_reason == 3:  # button
    print("Woke up from button press (EXT1 wake-up)")
if wake_reason == 4:  # timer
    print("Woke up from a timer")
if wake_reason == 5:
    print("Woke up from touchpad touch")
print()

# A0 (or GPIO #26) is the gre led
# A1 (or GPIO #25) is the red led
# A2 and A3 (GPIO #34 and #39 respectively) are buttons
but1 = Pin(34, mode=Pin.IN, pull=Pin.PULL_DOWN)
but2 = Pin(39, mode=Pin.IN, pull=Pin.PULL_DOWN)
esp32.wake_on_ext1((but1, but2), esp32.WAKEUP_ANY_HIGH)

red_led = Pin(25, Pin.OUT)
red_led.value(1)

touch1 = TouchPad(Pin(14))  # yellow wire
touch2 = TouchPad(Pin(32))  # blue wire
# touchx.read() (x is 1 or 2) returns a number smaller than 200 when touched.

touch1.config(450)
esp32.wake_on_touch(True)

station = network.WLAN(network.STA_IF)
station.active(True)
station.connect("Y2K killed millions",
                "foogledoogle")  # this is my phone's SSID and password
Example #9
0
    sleep_ms(1000)
    led_indicate.on()
    led_reject.off()

client.on_connect = on_connect
client.set_callback(subscribe_calback)
client.connect()
client.subscribe(rfid_checkin, 0)


# Initial state
normal_boot = True  

#Wake up trigger pin
pir_wake = Pin(34, mode = Pin.IN, pull = Pin.PULL_DOWN)
esp32.wake_on_ext1([pir_wake], Pin.WAKE_HIGH)
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep, by the pulling of pin 34')
    if normal_boot:
      client.publish(device_state, "Wake from deepsleep")
      normal_boot = False

if normal_boot:
  client.publish(device_state, "ON")
    
# Door unlock?
canAccess = False

#Relay params
door_lock = Pin(22, Pin.OUT)
door_lock.on()  # Initial state
# tested on TTGO TDisplay
from machine import Pin, deepsleep, wake_reason
import esp, esp32
from time import sleep

pir = Pin(13, Pin.IN, Pin.PULL_UP)
btn = Pin(12, Pin.IN)

print('Wake from deepsleep... reasons.')
esp.osdebug(None)

while True:
    reason = wake_reason()
    print('Wake Reason =', reason)
    if reason == 3:
        print('button')
    if reason == 2:
        print('PIR')

    sleep(5)

    esp32.wake_on_ext0(pin=pir, level=esp32.WAKEUP_ANY_HIGH)
    esp32.wake_on_ext1(pins=(btn, ), level=esp32.WAKEUP_ANY_HIGH)
    print('going to sleep')
    deepsleep()
Example #11
0
#2.2.4
r_led = Pin(27, Pin.OUT)
p1 = Pin(34, Pin.IN, Pin.PULL_DOWN)
p2 = Pin(39, Pin.IN, Pin.PULL_DOWN)

#When the board is awake, the red led is on
r_led.value(1)

slp = 0


#Make the board to sleep every 30s
def toggle_slp(pin):
    global slp
    slp = 1


tim3 = Timer(3)
tim3.init(period=30000, mode=1, callback=toggle_slp)

#Final loop
while True:
    g_led.value(g_tog)
    if (slp):
        print("I am awake. Going to sleep for 1 minute")
        t2.config(0)  #Disable t2
        esp32.wake_on_ext1((p1, p2),
                           esp32.WAKEUP_ANY_HIGH)  #Wake up due to push botton
        esp32.wake_on_touch(True)  #Wake up due to touch pad
        machine.deepsleep(60000)
Example #12
0
def esp32_deep_sleep(button_pins):
    wakeup_pins = get_wakeup_pins(button_pins)
    esp32.wake_on_ext1(wakeup_pins, esp32.WAKEUP_ANY_HIGH)
    machine.deepsleep()
Example #13
0
 def prepare_deep_sleep(self):
     self.keypad.stop()
     for pin in env.KEYPAD_ROW_PINS:
         Pin(pin, mode=Pin.OUT, pull=Pin.PULL_HOLD)
     esp32.wake_on_ext1(pins = self.keypad.col_pins, level = esp32.WAKEUP_ANY_HIGH)
def log():
    import machine, utime, esp, esp32, urequests, usocket, network, uos
    import bme280, ms5803, post_to_google_sheet
    from machine import Pin

    led = Pin(5, Pin.OUT)
    led.value(0)

    def flash(n, t):
        for i in range(n):
            led.value(1)
            utime.sleep(t)
            led.value(0)
            utime.sleep(t)

    esp.osdebug(None)
    startticks = utime.ticks_ms()

    #declare global login variables
    ssid = "Sensors"
    password = "******"
    gKey = "AKfycbwAJbCuZfNzar00oHPd3CZ8Hzn9c79LfUU5lg8u0p9kAxiGyetqGqWJ"
    gSheetKey = "1AIWnPTtGNdlZ1TfbzpGTnheCOrPnKUHLUVefa8i2Y8k"

    wake_reason = machine.wake_reason()
    reset_cause = machine.reset_cause()
    print('wake reason = ' + str(wake_reason))
    print('reset cause = ' + str(reset_cause))

    #mount SD card on Lolin D32 Pro.  If it doesn't work, sleep 20 seconds so user can break out.
    try:
        uos.mount(
            machine.SDCard(slot=2, width=1, sck=18, mosi=23, miso=19, cs=4),
            "/sd")
    except:
        flash(20, 0.25)

    #write header file if did not wake from deep sleep
    if machine.reset_cause != machine.DEEPSLEEP_RESET:
        outputtxt = 'date,time,Patm(mbar),Tatm(C),PH20(mbar),TH20(C),Depth(m),Battery(V)\r\n'
        try:
            uos.chdir('sd')
            f = open('datalog.txt', 'a')
            f.write(outputtxt)
            f.close()
            uos.chdir('/')
        except:
            #flash LED if fails to write and write to flash memory
            f = open('datalog.txt', 'a')
            f.write(outputtxt)
            f.close()
            flash(10, 0.5)

    #turn on power pins for RTC
    power = Pin(2, Pin.OUT)
    power.value(1)

    #connect to wlan
    try:
        sta_if = network.WLAN(
            network.STA_IF)  #define object to access station mode functions
        sta_if.active(True)  #make station mode active
        sta_if.connect(ssid, password)
        print('connected')
    except:
        print('not connected')
        pass

    utime.sleep(3)

    #read value of time from DS3231 RTC if it is connected. If not, set time from
    #web (NTP time) and if that doesn't work, just revert to system real time clock.
    try:
        import urtc  #needs to be on the board
        from machine import I2C, Pin
        i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
        rtc = urtc.DS3231(i2c)
        datetime = rtc.datetime()
        print('Time set from DS3231')
    except:
        try:
            from ntptime import settime
            print('Time set from NTP time to: ', end='')
            settime()
            utime.sleep_ms(500)
            rtc = machine.RTC()
            #can also set time manually using rtc.datetime(year, month, day, weekday, hour, minute, second, millisecond)
        except:
            print(
                "could not set time from NTP server, reverting to machine RTC for time"
            )
            rtc = machine.RTC()
        datetime = rtc.datetime()
    print('Datetime in machine.rtc format = ', end='')
    print(datetime)

    #read value of voltage using built-in 100k 100k voltage divider on pin 35 for Lolin D32 Pro
    from machine import ADC
    adc = ADC(Pin(35))
    adc.atten(ADC.ATTN_11DB)  #Voltage range 0 (0) V to 3.6 V (4095)
    adc_count = adc.read()
    battery = adc_count / 4095 * 3.6 * 2  #factor of two because of voltage divider
    print('battery = ', battery)

    #Read data
    i2c = machine.I2C(1, scl=machine.Pin(22), sda=machine.Pin(21))
    bad = False
    try:
        bme1 = bme280.BME280(i2c=i2c, address=119)  #sdo to 3.3v
        [T1, P1, H1] = bme1.raw_values  #T in degrees C, P in hPa
    except:
        [T1, P1, H1] = [-999, -999, -999]
        bad = True

    try:
        [P2, T2] = ms5803.read(i2c=i2c, address=118)
    except:
        [P2, T2] = [-999, -999]
        bad = True

    if not bad:
        WaterLevelDifference = (P2 - P1) * 100 / 9810
    else:
        WaterLevelDifference = -999

    data = {}
    data['Patm'] = P1
    data['Tatm'] = T1
    data['PH20'] = P2
    data['TH20'] = T2
    data['Depth'] = WaterLevelDifference
    data['Battery'] = battery

    #Send data to Google Sheet
    result = post_to_google_sheet.send_to_sheet(ssid, password, gKey,
                                                gSheetKey, data)
    print(result)

    #turn off wifi to lower power when in sleep mode
    sta_if.active(0)

    #format output string
    outputtxt = ('%s/%s/%s,%s:%s:%s,' %
                 (datetime[0], datetime[1], datetime[2], datetime[4],
                  datetime[5], datetime[6]))
    outputtxt += ('%s,%s,%s,%s,%s,%s\r\n' %
                  (P1, T1, P2, T2, WaterLevelDifference, battery))
    print(outputtxt)

    #then write final data to the SD
    try:
        uos.chdir('sd')
        f = open('datalog.txt', 'w')  #this erases the old file
        f.write(outputtxt)  #only first line of file is used
        f.close()
        uos.chdir('/')
    except:
        #flash LED if fails to write and write to flash memory
        f = open('datalog.txt', 'a')
        f.write(outputtxt)
        f.close()
        flash(10, 0.5)

    flash(5, 1)

    p1 = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
    #esp32.wake_on_ext0(p1, level = 0)
    #set machine to wake if p1 (so pin 15) is pulled low
    #the internal pull-up resistor may not work, so may require
    #an external pull-up resistor of perhaps 100K.
    esp32.wake_on_ext1([p1], level=0)

    timeon = (utime.ticks_ms() - startticks) / 1000
    print('Going to sleep after being awake for ' + str(timeon) + ' s')
    machine.deepsleep(1000 * 1 * 60)  #sleeps 5 minutes
Example #15
0
red = Pin(32, Pin.OUT)

#Buttons
button_red = Pin(25, Pin.IN, Pin.PULL_DOWN)
button_green = Pin(26, Pin.IN, Pin.PULL_DOWN)

#Touchpad
tpin = TouchPad(Pin(27))
tpin_green = TouchPad(Pin(33))

# configure the threshold at which the pin is considered touched
tpin.config(500)
esp32.wake_on_touch(True)

#External button wake-up
esp32.wake_on_ext1(pins = (button_red, button_green), level = esp32.WAKEUP_ANY_HIGH)

#Red led turns on
red.value(1)

#Hardware timer - 2
tim2 = Timer(2)
tim2.init(period=10, mode=Timer.PERIODIC, callback=handletouch)

# #Hardware timer - 3
tim3 = Timer(3)
tim3.init(period=30000, mode=Timer.PERIODIC, callback=handlesleep)

# check if the device woke from a deep sleep
if machine.wake_reason() == 5:
    print('Touchpad Wake-up') 
Example #16
0
            wifi_esp32.disable()
            lcd.client.host = False
            machine.freq(20000000)
            sleepmode = 1
    elif sleepmode == 1:
        if sleepdt > idletimeout + sleeptimeout:
            if rtc_memory == 'deepsleep':
                print('sleep power down')
                rtc.memory('powerdown')
                gpio_esp32.powerdown()
                # if we get here, give up
                rtc_memory = 'powerdown'
            else:
                print('sleep deep sleep')
                import esp32
                esp32.wake_on_ext1(pins=tuple(gpio_esp32.keypad_pins_wake),
                                   level=esp32.WAKEUP_ANY_HIGH)
                rtc.memory('deepsleep')
                machine.deepsleep(powerofftimeout * 1000)

    #if wifi_esp32.station.isconnected():
    wifi_esp32.poll(lcd.client)

    t3 = gettime()
    dt = t3 - t0
    if dt < 0:
        s = .1
    else:
        if sleepmode:
            s = 1 - dt
        else:
            s = period - dt