class Motor: def __init__(self, pin1, pin2, kind='dc'): self.kind = kind if kind == 'dc' or kind == 'step': self.left = Pin(pin1, Pin.OUT) self.right = Pin(pin2, Pin.OUT) elif kind == 'servo': self.left = PWM(Pin(pin1), freq=50, duty=77) self.right = None else: raise () def main(self, v1, v2, wtime=5): if self.kind == 'dc' or self.kind == 'step': self.left.value(v1) self.right.value(v0) elif self.kind == 'servo': self.left.duty() time.sleep(wtime) def __del__(self): if self.kind == 'dc' or self.kind == 'step': self.main(0, 0)
class GPIO(): def __init__(self,pin,pulse=0): self.pin = pin self.pulse = pulse if pulse == 0: self.pin=Pin(self.pin,Pin.OUT) self.pin.value(0) elif pulse == 1: self.pin=PWM(Pin(self.pin),Pin.OUT) self.pin.freq(500) def on(self): self.pin.value(1) def off(self): self.pin.value(0) def toggle(self): self.pin.value(not self.pin.value()) def repeat(self,n,t=0.5): for i in range(n): self.toggle() time.sleep(t) self.off() def scale(self,n): if n > 100: n = 100 elif n < 0: n = 0 percent = n*10 self.pin.duty(percent) return (percent) def fade_in(self,step=5,t=0.1): for i in range(0,100,step): self.scale(i) time.sleep(t) def fade_out(self,step=5, t=0.1): for i in range(0,100,step): self.scale(100-i) time.sleep(t) self.scale(0) def help(): print("") print("Cheat Sheet Wemos D1 Mini") print("-------------------------") print(" ____________") print(" / |") print(" RST-| = |- TX") print(" A0-| ESP8266 |- RX") print("NO PWM GPIO16 D0-| SCL-|- D1 GPIO5") print(" GPIO14 D5-|-SCK SDA-|- D2 GPIO4") print(" GPIO12 D6-|-MISO |- D3 GPIO0 PullUp") print(" GPIO13 D7-|-MOSI |- D4 GPIO2 PullUp Built-in Led") print("PullDn GPIO15 D8-| |- G") print(" 3v3-|_____________|- 5V") print("")
class PWMLight(DimmableLight): def __init__(self, server, pin, freq=1000): super().__init__(server, 'light-' + str(uid), \ self.get_state, self.set_state, \ self.get_level, self.set_level) if pin in pwm_pins: self.dimmable = True self._pin = PWM(GPIO(pin), freq=freq, duty=0) else: self.dimmable = False def get_state(self): return self._pin.value(), 0 def set_state(self, state): if state == 'on' or state == '1' or state == 'True': self._pin.on() return True, 0 else: self._pin.off() return False, 0 def get_level(self): return self._pin.duty(), 0 def set_level(self, level): #convert brightness from percent (0 - 100) to duty (0 - 1023) duty = round(1023 * (int(brightness)/100)) self._pin.duty(duty) return level, 0
class GPIO(): def __init__(self,pin,pulse=0): self.pin = pin self.pulse = pulse if pulse == 0: self.pin=Pin(self.pin,Pin.OUT) self.pin.value(0) elif pulse == 1: self.pin=PWM(Pin(self.pin),Pin.OUT) self.pin.freq(500) def on(self): self.pin.value(1) def off(self): self.pin.value(0) def repeat(self,n,t=0.5): for i in range(n): self.pin.value(1) time.sleep(t) self.pin.value(0) time.sleep(t) def scale(self,n): if n > 100: n = 100 elif n < 0: n = 0 percent = n*10 self.pin.duty(percent) def help(): print("Cheat Sheet") print("---------------------------------------") print("D0 IO GPIO16") print("D1 IO SCL GPIO5") print("D2 IO SDA GPIO4") print("D3 IO 10k Pull Up GPIO0") print("D4 IO 10k Pull Up, Built-in Led GPIO2") print("D5 IO SCK GPIO14") print("D6 IO MISO GPIO12") print("D7 IO MOSI GPIO13") print("D8 IO 10k Pull Down GPIO15") print("All Pins have PWM except D0")
class LED_a(): isPWMinit = False def __init__(self, pin, freq=1000): self.pin = pin self.freq = freq self.led = Pin(self.pin, Pin.OUT) self.led.value(1) def deinit(self): if self.isPWMinit: self.led.deinit() self.isPWMinit = False self.led = Pin(self.pin, Pin.OUT) self.led.value(1) def brightness(self, value=None): if value == None: if self.isPWMinit: return 255 - (self.led.duty() >> 2) else: return (self.led.value() + 1) % 2 elif value >= 255: value = 255 self.on() elif value <= 0: value = 0 self.off() else: if not self.isPWMinit: self.led = PWM(Pin(self.pin), self.freq) self.led.init() self.isPWMinit = True self.led.duty(((256 - value) << 2) - 1) def fade_up(self, delay=5): # pwmIntervals = 100 # R = (pwmIntervals * math.log10(2))/(math.log10(255)); # for i in range(pwmIntervals): # led_red.brightness(int(math.pow(2, (i / R)) - 1)) # time.sleep_ms(t) for i in range(100): self.brightness(int(sin((i - 50) / 100 * pi) * 128 + 128)) sleep_ms(delay) def fade_down(self, delay=5): for i in range(100): self.brightness(int(sin((i + 50) / 100 * pi) * 128 + 127)) sleep_ms(delay) def pulse(self, delay=5): self.fade_up(delay) self.fade_down(delay) def on(self): self.deinit() self.led.value(0) def off(self): self.deinit() self.led.value(1) def toggle(self): self.deinit() self.led.value((self.led.value() + 1) % 2)
class LED(): isPWMinit = False def __init__(self, pin, freq=1000): self.pin = pin self.freq = freq self.led = Pin(self.pin, Pin.OUT) #self.pwmIntervals = 255 #self.R = self.pwmIntervals /log(1023) #R = 36.79391 def deinit(self): if self.isPWMinit: self.led.deinit() self.isPWMinit = False self.led = Pin(self.pin, Pin.OUT) self.led.value(1) def brightness(self, value=None): if value == None: if self.isPWMinit: return (self.led.duty() >> 2) else: return self.led.value() elif not 0 <= value <= 255: raise ValueError("Brightness out of range") else: if not self.isPWMinit: self.led = PWM(Pin(self.pin), self.freq) self.led.init() self.isPWMinit = True self.led.duty(value << 2) # Next Line was inspired by # https://diarmuid.ie/blog/pwm-exponential-led-fading-on-arduino-or-other-platforms/ # but i dropped it because it doesn't look better than linear fading for me. #self.led.duty(int(exp( (value / 36.79391)) - 1)) # Next Line was inspired by this post: # https://electronics.stackexchange.com/a/11100 # but it looked even worse #self.led.duty(int(1 / (1 + exp( ((value / 21) -6) * -1)) * 1024)) def fade_up(self, delay=5): for i in range(100): self.brightness(int(sin((i - 50) / 100 * pi) * 128 + 128)) sleep_ms(delay) def fade_down(self, delay=5): for i in range(100): self.brightness(int(sin((i + 50) / 100 * pi) * 128 + 127)) sleep_ms(delay) def pulse(self, delay=5): self.fade_up(delay) self.fade_down(delay) def on(self): self.deinit() self.led.value(1) def off(self): self.deinit() self.led.value(0) def toggle(self): self.deinit() self.led.value((self.led.value() + 1) % 2)