micropython / micropython/micropython

Docu: Multiple machine.Timer() instances on ESP8266

Open
#8,383 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

port-esp8266
Dominant language
C
Stars
22.1k
Forks
9k
Avg merge
6d 4h
Merged PRs (30d)
16

Description

There is sadly only a little docu on the timer usage on ESP8266. It shows this example:

from machine import Timer

tim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(2))

As it uses the same timer only "2" is printed every 2 seconds, the one_shot "1" is never printed. I tried two instances of Timer(-1) but still only the last one was active. I just tried Timer(-2) and it worked, with Timer(1) and Timer(2) it also worked:

tim1 = Timer(1)
tim2 = Timer(2)
tim1.init(period=2500, mode=Timer.ONE_SHOT, callback=lambda t: print("once"))
tim2.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: print("periodic"))
sleep(3.5)
tim2.deinit()

# expected printout:
# periodic
# periodic
# once
# periodic

There is one thing I'm not sure about I'd like to understand before starting a pull request on the docu:

  1. Is only one virtual (RTOS -based) timer possible on the ESP8266? machine docu mentions Timer(-1) creates a virtual timer - which sounds good as it doesn't affect hardware.
  2. If I create a timer with another ID, will it interfere with PWM or sleep() or time()?

By the way, great project, love it:)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read docs/esp8266/quickref.rst and the machine.Timer constructors documentation linked in the issue. Verify the documented behavior of Timer(-1), Timer(-2), Timer(1), and Timer(2), including possible interaction with PWM and sleep/time. Done means updating the ESP8266 timer documentation with accurate guidance and a working multiple-timer example.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
embedded-iot
Issue type
Documentation
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.