Python源码示例:machine.PWM
示例1
def __init__(self):
self.notes = {
'cdef': [
self.C6, self.D6, self.E6, self.F6, self.G6, self.A6, self.B6, self.C7, self.D7, self.E7, self.F7, self.G7, self.A7, self.B7, self.C8, 0
],
'mario': [
self.E7, self.E7, 0, self.E7, 0, self.C7, self.E7, 0, self.G7, 0, 0, 0, self.G6, 0, 0, 0,
self.C7, 0, 0, self.G6, 0, 0, self.E6, 0, 0, self.A6, 0, self.B6, 0, self.AS6, self.A6, 0,
self.G6, self.E7, 0, self.G7, self.A7, 0, self.F7, self.G7, 0, self.E7, 0, self.C7, self.D7, self.B6, 0, 0,
self.C7, 0, 0, self.G6, 0, 0, self.E6, 0, 0, self.A6, 0, self.B6, 0, self.AS6, self.A6, 0,
self.G6, self.E7, 0, self.G7, self.A7, 0, self.F7, self.G7, 0, self.E7, 0, self.C7, self.D7, self.B6, 0, 0
],
'starwars': [
self.A4, 0, 0, 0, self.A4, 0, 0, 0, self.A4, 0, 0, 0, self.F4, 0, 0, self.C5,
self.A4, 0, 0, 0, self.F4, 0, 0, self.C5, self.A4, 0, 0, 0, 0, 0, 0, 0,
self.E5, 0, 0, 0, self.E5, 0, 0, 0, self.E5, 0, 0, 0, self.F5, 0, 0, self.C5,
self.GS4, 0, 0, 0, self.F4, 0, 0, self.C5, self.A4, 0, 0, 0, 0, 0, 0, 0,
],
}
# Init
self.pwm = PWM(Pin(27, Pin.OUT))
self.pwm.duty(0)
示例2
def __init__(self):
self.notes = {
'cdef': [
self.C6, self.D6, self.E6, self.F6, self.G6, self.A6, self.B6, self.C7, self.D7, self.E7, self.F7, self.G7, self.A7, self.B7, self.C8, 0
],
'mario': [
self.E7, self.E7, 0, self.E7, 0, self.C7, self.E7, 0, self.G7, 0, 0, 0, self.G6, 0, 0, 0,
self.C7, 0, 0, self.G6, 0, 0, self.E6, 0, 0, self.A6, 0, self.B6, 0, self.AS6, self.A6, 0,
self.G6, self.E7, 0, self.G7, self.A7, 0, self.F7, self.G7, 0, self.E7, 0, self.C7, self.D7, self.B6, 0, 0,
self.C7, 0, 0, self.G6, 0, 0, self.E6, 0, 0, self.A6, 0, self.B6, 0, self.AS6, self.A6, 0,
self.G6, self.E7, 0, self.G7, self.A7, 0, self.F7, self.G7, 0, self.E7, 0, self.C7, self.D7, self.B6, 0, 0
],
'starwars': [
self.A4, 0, 0, 0, self.A4, 0, 0, 0, self.A4, 0, 0, 0, self.F4, 0, 0, self.C5,
self.A4, 0, 0, 0, self.F4, 0, 0, self.C5, self.A4, 0, 0, 0, 0, 0, 0, 0,
self.E5, 0, 0, 0, self.E5, 0, 0, 0, self.E5, 0, 0, 0, self.F5, 0, 0, self.C5,
self.GS4, 0, 0, 0, self.F4, 0, 0, self.C5, self.A4, 0, 0, 0, 0, 0, 0, 0,
],
}
# Init
self.pwm = PWM(Pin(27, Pin.OUT))
self.pwm.duty(0)
示例3
def playnotes(self, title, length=150, duty=64):
# Init
p = Pin(27, Pin.OUT)
self.pwm = PWM(p)
self.pwm.duty(0)
if title not in self.notes:
print('unknown title: {}'.format(title))
return
melody = self.notes[title]
print('Play', title)
for i in melody:
if i == 0:
self.pwm.duty(0)
else:
self.pwm.freq(i)
self.pwm.duty(duty)
time.sleep_ms(length)
# deinit
self.pwm.deinit()
示例4
def digital_write(self, payload):
"""
Write to a digital gpio pin
:param payload:
:return:
"""
pin = payload['pin']
mode = Pin.OUT
if 'drain' in payload:
if not payload['drain']:
mode = Pin.OPEN_DRAIN
pin_object = Pin(pin, mode)
pwm = PWM(pin_object)
pwm.deinit()
Pin(pin, mode, value=payload['value'])
self.input_pin_objects[pin] = None
示例5
def pwm_freq(self, pin: Union[int, str], freq: Optional[int] = None, **kwargs) -> Optional[int]:
"""
Get/set the frequency of a PWM PIN.
:param pin: GPIO PIN number or configured name.
:param freq: If set, set the frequency for the PIN in Hz.
:param kwargs: Parameters to pass to :meth:`platypush.plugins.esp.EspPlugin.execute`.
"""
device = self._get_device(**kwargs)
pin = device.get_pin(pin)
code = '''
import machine
pin = machine.PWM(machine.Pin({pin}))
pin.freq({freq})
'''.format(pin=pin, freq=freq if freq else '')
ret = self.execute(code, **kwargs).output
if not freq:
return int(ret)
示例6
def pwm_duty(self, pin: Union[int, str], duty: Optional[int] = None, **kwargs) -> Optional[int]:
"""
Get/set the duty cycle of a PWM PIN.
:param pin: GPIO PIN number or configured name.
:param duty: Optional duty value to set.
:param kwargs: Parameters to pass to :meth:`platypush.plugins.esp.EspPlugin.execute`.
"""
device = self._get_device(**kwargs)
pin = device.get_pin(pin)
code = '''
import machine
pin = machine.PWM(machine.Pin({pin}))
pin.duty({duty})
'''.format(pin=pin, duty=duty if duty else '')
ret = self.execute(code, **kwargs).output
if not duty:
return int(ret)
示例7
def pwm_on(self, pin: Union[int, str], freq: Optional[int] = None, duty: Optional[int] = None, **kwargs):
"""
Set the specified PIN to HIGH.
:param pin: GPIO PIN number or configured name.
:param freq: PWM PIN frequency.
:param duty: PWM PIN duty cycle.
:param kwargs: Parameters to pass to :meth:`platypush.plugins.esp.EspPlugin.execute`.
"""
device = self._get_device(**kwargs)
pin = device.get_pin(pin)
code = '''
import machine
pin = machine.PWM(machine.Pin({pin}))
if {freq}:
pin.freq({freq})
if {duty}:
pin.duty({duty})
pin.on()
'''.format(pin=pin, freq=freq, duty=duty)
self.execute(code, **kwargs)
示例8
def pwm_off(self, pin: Union[int, str], **kwargs):
"""
Turn off a PWM PIN.
:param pin: GPIO PIN number or configured name.
:param kwargs: Parameters to pass to :meth:`platypush.plugins.esp.EspPlugin.execute`.
"""
device = self._get_device(**kwargs)
pin = device.get_pin(pin)
code = '''
import machine
pin = machine.PWM(machine.Pin({pin}))
pin.deinit()
'''.format(pin=pin)
self.execute(code, **kwargs)
示例9
def __init__(self, idx, is_debug=False):
gpio_a, gpio_b, self.motor_install_dir = Motor.MOTOR_LIST[idx]
# A相PWM
self.pwm_a = PWM(
Pin(gpio_a, Pin.OUT),
freq = Motor.MOTOR_PWM_FREQUENCY,
duty = 0)
# B相PWM
self.pwm_b = PWM(
Pin(gpio_b, Pin.OUT),
freq = Motor.MOTOR_PWM_FREQUENCY,
duty = 0)
# 电机安装方向
if not self.motor_install_dir:
self.pwm_a, self.pwm_b = self.pwm_b, self.pwm_a
# 电机速度信号 取值范围: -1023 - 1023
self._pwm = 0
# 设置电机的PWM
# self.pwm(self._pwm)
示例10
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list = None
self.turn_time_ms = turn_time_ms
self.turn_start = None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set": self.turn}, ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
self._init()
示例11
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list = None
self.turn_time_ms = turn_time_ms
self.turn_start = None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set": self.turn}, ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
self._init()
示例12
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list = None
self.turn_time_ms = turn_time_ms
self.turn_start = None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set": self.turn}, ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
self._init()
示例13
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list = None
self.turn_time_ms = turn_time_ms
self.turn_start = None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set": self.turn}, ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
self._init()
示例14
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list = None
self.turn_time_ms = turn_time_ms
self.turn_start = None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set": self.turn}, ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
self._init()
示例15
def checkInit(self):
if self.pwm_init == False:
self.pwm_init = True
self.pwm = machine.PWM(machine.Pin(self.pin, value=0), freq = 1, duty = 0, timer = 2)
示例16
def analogWrite(pin, duty):
if pin not in _pwm_map.keys():
try:
_pwm_map[pin] = PWM(pin, duty=duty, timer=1)
except:
pass
else:
_pwm_map[pin].duty(duty)
示例17
def __init__(self, port, freq=50, min_us=500, max_us=2500, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.port = port
self.pwm = PWM(port[0], freq=freq, duty=0, timer=3)
示例18
def __init__(self, port):
self.tx = PWM(port[0], freq=38000, duty=0, timer=1)
self.rx = Pin(port[1], Pin.IN)
self.rx.init(Pin.IN)
self.rx.irq(handler=self._irq_cb, trigger=Pin.IRQ_FALLING)
self.rx_value = 0
self.times = 0
self.status = 0
self.tx_en = 0
self.duty = 0
self.time_num = peripheral.get_timer()
if self.time_num == None:
raise unit.Unit('ir application time fail')
self.timer = Timer(self.time_num)
self.timer.init(period=50, mode=self.timer.PERIODIC, callback=self._update)
示例19
def play_tone(self, payload):
"""
Play a tone on the specified pin
:param payload:
:return:
"""
beeper = PWM(Pin(payload['pin']), freq=payload['freq'], duty=512)
utime.sleep_ms(payload['duration'])
beeper.deinit()
示例20
def pwm_write(self, payload):
"""
Write a value to a PWM pin
:param payload:
:return:
"""
PWM(Pin(payload['pin']), freq=500, duty=payload['value'])
示例21
def servo_position(self, payload):
"""
Set the servo position in degrees
:param payload:
:return:
"""
position = 30 + int((payload['position'] * 0.5))
servo = PWM(Pin(payload['pin']), freq=50, duty=position)
utime.sleep_ms(300)
servo.deinit()
示例22
def digital_write(self,payload):
pin=payload['pin']
mode=Pin.OUT
if 'drain' in payload:
if not payload['drain']:
mode=Pin.OPEN_DRAIN
pin_object=Pin(pin,mode)
pwm=PWM(pin_object)
pwm.deinit()
Pin(pin,mode,value=payload['value'])
self.input_pin_objects[pin]=None
示例23
def pwm_write(self,payload):
PWM(Pin(payload['pin']),freq=500,duty=payload['value'])
示例24
def servo_position(self,payload):
position=30+int((payload['position']*0.5))
servo=PWM(Pin(payload['pin']),freq=50,duty=position)
utime.sleep_ms(300)
servo.deinit()
示例25
def __init__(self, led_id):
# LED字典
# 数据结构: (gpio管脚编号, LED灭的电平, LED亮的电平)
led_list = [(2, False, True),(13, True, False)]
if led_id >= len(led_list) or led_id < 0:
print('ERROR:LED编号无效, 有效ID:{} - {}'.format(0, len(led_list-1)))
return None
gpio_id, self.LED_OFF, self.LED_ON = led_list[led_id]
self.pin = Pin(gpio_id, Pin.OUT)
self.pwm = PWM(self.pin, freq=1000)
示例26
def speed(self, value):
value = int(value)
if abs(value) > Motor.MOTOR_MAX_PWM:
# 判断pwm的绝对值是否越界
value = Motor.MOTOR_MAX_PWM if value > 0 else -1*Motor.MOTOR_MAX_PWM
# 设置当前的PWM信号
self._pwm = value
# 驱动电机驱动
if self._pwm >= 0:
self.pwm_a.duty(0)
self.pwm_b.duty(abs(self._pwm))
else:
self.pwm_a.duty(abs(self._pwm))
self.pwm_b.duty(0)
示例27
def tone(frequency, duration=100, pin=SPEAKER_PIN, volume=1):
pwm = PWM(pin, duty=volume % 50)
pwm.freq(frequency)
time.sleep_ms(duration)
pwm.deinit()
示例28
def play_boot_music():
speaker = PWM(Pin(25), freq=20000, duty=512)
boot_sound = [notes.D4, 0, notes.G4, 0, notes.D4, 0, notes.A4, 0]
for i in boot_sound:
if i == 0:
speaker.freq(0)
time.sleep_ms(50)
pass
else:
speaker.freq(i)
time.sleep_ms(250)
speaker.freq(0)
speaker.deinit()
示例29
def play_death():
speaker = PWM(Pin(25), freq=20000, duty=512)
speaker.freq(notes.D4)
time.sleep_ms(200)
speaker.freq(0)
time.sleep_ms(25)
speaker.freq(notes.A2)
time.sleep_ms(400)
speaker.freq(0)
speaker.deinit()
示例30
def play_sound( note, duration ):
speaker = PWM(Pin(25), freq=20000, duty=512)
speaker.freq(note)
time.sleep_ms(duration)
speaker.freq(0)
speaker.deinit()
# Create an instance of Snake