MojoScale Studio Docs
API Reference

pwm

PWM output module.

Studio Docs Sensors & I/O

import pwm

The pwm module creates independent PWM outputs without exposing ESP32 LEDC channel numbers. Use it for dimming LEDs, driving passive buzzers, controlling simple speed inputs, or any signal that needs a configurable duty cycle and frequency.

Quick example

import pwm

led = pwm.open(pin=2, frequency=5000, resolution_bits=8)
buzzer = pwm.open(pin=4, frequency=2000, resolution_bits=10)

led.write_percent(50)
buzzer.write_percent(25)

led.fade_percent(100, 1000)
buzzer.stop()

importpwm

PWM output module.

The pwm module creates independent PWM outputs without exposing ESP32 LEDC channel numbers. Use it for dimming LEDs, driving passive buzzers, controlling simple speed inputs, or any signal that needs a configurable duty cycle and frequency.

API 11 available

pwm.open(pin: int, frequency: int = None, resolution_bits: int = None) -> pwm_output

Create an independent PWM output.

The firmware allocates a native PWM channel automatically. Keep the returned object and call methods on it; users do not choose or remember channel numbers.

Parameters
Name Type Pass as Required Description
pin int positional or keyword Yes GPIO output pin connected to the PWM device.
frequency int positional or keyword No Optional PWM frequency in hertz. Defaults to 5000.
resolution_bits int positional or keyword No Optional duty resolution in bits. Defaults to 8.
Returns

pwm_output pwm_output object.

pwm.open().write(duty) -> bool

Set the raw integer duty value for the configured resolution.

Parameters
Name Type Pass as Required Description
duty any positional or keyword Yes Required value.

pwm.open().write_percent(percent) -> bool

Set duty cycle from 0 through 100 percent.

Parameters
Name Type Pass as Required Description
percent any positional or keyword Yes Required value.

pwm.open().read() -> int

Return the last raw duty value written by this object.

pwm.open().fade(duty, duration_ms) -> bool

Fade to a raw duty value over duration_ms.

Parameters
Name Type Pass as Required Description
duty any positional or keyword Yes Required value.
duration_ms int positional or keyword Yes Required value.

pwm.open().fade_percent(percent, duration_ms) -> bool

Fade to a duty percentage over duration_ms.

Parameters
Name Type Pass as Required Description
percent any positional or keyword Yes Required value.
duration_ms int positional or keyword Yes Required value.

pwm.open().set_freq(frequency) -> bool

Change this output's PWM frequency.

Parameters
Name Type Pass as Required Description
frequency int positional or keyword Yes Required value.

pwm.open().get_freq() -> int

Return this output's configured frequency in hertz.

pwm.open().get_resolution() -> int

Return this output's duty resolution in bits.

pwm.open().stop() -> bool

Stop the signal and keep the output configured.

pwm.open().detach() -> bool

Stop the signal, release the pin, and free the PWM resource. Invalid pins, duplicate PWM pins, unavailable PWM resources, and unsupported frequency/resolution combinations raise a clear ValueError.