Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ESP8266 node.sleep() hang #3662

Open
dpleposta opened this issue Sep 15, 2024 · 0 comments
Open

ESP8266 node.sleep() hang #3662

dpleposta opened this issue Sep 15, 2024 · 0 comments

Comments

@dpleposta
Copy link

Expected behavior

esp8266 does not hang

Actual behavior

esp8266 hangs (does not return from sleep no matter the level changes on the trigger pin)

Test code

Provide a Minimal, Complete, and Verifiable example which will reproduce the problem.

-- Physically grounding D7 with INT_LOW specified hangs ESP with node.sleep
gpio.mode(7,0); print("start",gpio.read(7),"\n")
cfg={}
cfg.wake_pin=7
cfg.int_type=node.INT_LOW
cfg.resume_cb=function() print("resume",gpio.read(7),wifi.sta.getip()) end
cfg.preserve_mode=true
node.sleep(cfg)

Terminal

test 1: ok: high to low

gpio.mode(7,0); print("start",gpio.read(7),"\n")
start 1
cfg={}
cfg.wake_pin=7
cfg.int_type=node.INT_LOW
cfg.resume_cb=function() print("resume",gpio.read(7),wifi.sta.getip()) end
cfg.preserve_mode=true
node.sleep(cfg)
resume 0 nil

test 2: ok: low to high

gpio.mode(7,0); print("start",gpio.read(7),"\n")
start 0
cfg={}
cfg.wake_pin=7
cfg.int_type=node.INT_HIGH
cfg.resume_cb=function() print("resume",gpio.read(7),wifi.sta.getip()) end
cfg.preserve_mode=true
node.sleep(cfg)
resume 1 nil

test 3: hangs: high to high (no change), but use INT_HIGH so level should trigger immediately, fails with hang

print("now start with the trigger level already set")
now start with the trigger level already set
gpio.mode(7,0); print("start",gpio.read(7),"\n")
start 1
cfg={}
cfg.wake_pin=7
cfg.int_type=node.INT_HIGH
cfg.resume_cb=function() print("resume",gpio.read(7),wifi.sta.getip()) end
cfg.preserve_mode=true
node.sleep(cfg)
Soft restart by user command
Soft restart by user command
r$

test 4: hangs: D7 is low and start node.sleep with INT_LOW hangs just like test 3.
Furthermore no amount of high and low cycling on D7 returns the ESP from sleep.
Hard reset required as with test 3.

test 5: hangs: any edge trigger, hangs
INT_UP, INT_DOWN and INT_BOTH hang the ESP

Other things tried

  1. a really old build with release DTS: 202002231746 with the same result.
  2. minimum module builds for new and old. just
    modules: file,gpio,net,node,tmr,uart,wifi.
  3. Pins D1, D2, D5, D6 tested with current build
  4. Same result in all cases

NodeMCU startup banner

NodeMCU 3.0.0.0 built with Docker provided by frightanic.com
branch: release
commit: 36cb f9f017d356319a6369e299765eedff191154
release: 3.0.0-release_20211229 +25
release DTS: 202402250804
SSL: false
build type: float
LFS: 0x40000 bytes total capacity
modules: adc,bit,cron,dht,file,gpio,i2c,net,node,ow,pwm,rtcmem,rtctime,sntp,spi,struct,tmr,uart,wifi
build 2024-09-12 18:10 powered by Lua 5.1.4 on SDK 3.0.1-dev(fce080e)
cannot open init.lua:

user_config.h snippet

// GPIO_INTERRUPT_ENABLE needs to be defined if your application uses the
// gpio.trig() or related GPIO interrupt service routine code. Likewise the
// GPIO interrupt hook is required for a few modules such as rotary. If you
// don't require this functionality, then commenting out these options
// will remove any associated runtime overhead.

#define GPIO_INTERRUPT_ENABLE
#define GPIO_INTERRUPT_HOOK_ENABLE

// If your application uses the light sleep functions and you wish the
// firmware to manage timer rescheduling over sleeps (the CPU clock is
// suspended so timers get out of sync) then enable the following options

#define TIMER_SUSPEND_ENABLE
#define PMSLEEP_ENABLE

Hardware

Describe which ESP8266/ESP32 device you use and document any special hardware setup
required to reproduce the problem.
ESP8266: D1 Mini, 12E, 12F with 10k pullup on D7 with push button switch to ground
D7=high and INT_LOW works when D7 pulled down
D7=low and INT_HIGH works when D7 pulled high
D7=low and INT_LOW hangs ESP and requires hard reset
INT_UP, INT_DOWN and INT_BOTH hang the ESP

Hard to imagine this is a bug, but nothing in the docs
https://nodemcu.readthedocs.io/en/dev/modules/node/#nodesleep
indicates additional hardware or software setup required

Perhaps this just requires an update to the documentation with the missing element(s).

Build Environment

  1. Docker Desktop 4.33.1 (161083)
  2. Git-2.46.0-64-bit
  3. Windows 11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant