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()
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()
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)
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
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()
#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)
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()
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
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')
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