Esempio n. 1
0
class RubanLeds():
    """ Classe d'animation du ruban de leds Neopixels RGB
        /!\ A partir de 9 leds il faut alimenter le ruban en 5v avec une alimentation externe
        dépendance: bibliothèque ws2812.py nécessaire
        usage: leds = RubanLeds(nb_leds, intensity)
            * nb_leds: nombre de leds sur le ruban (8 par défaut). 
            * intensity = intensité des leds 0 à 1 (1 par défaut)
    """
    def __init__(self, nb_leds=8, intensity=1):
        """constructeur de la classe
            nb_leds: nombre de leds du ruban (8 par défaut)
            intensity 0 à 1 (1 par défaut)
        """
        self.pixels = NeoPixel(spi_bus=1, led_count=nb_leds, intensity=intensity )
        self.nb_leds = nb_leds     # nb de leds du rubans
        self.wait_shortms = 0.001  # délais d'attente ultra-court (en secondes)
        self.wait_short = 0.01     # délais d'attente (secondes) courts
        self.wait_long = 0.03      # délais d'attente (secondes) plus long
        self.rgbMIN = 10           # min pour les couleurs au hasard
        self.rgbMAXpastel = 127    # max pour les couleurs au hasard pastel
        self.rgbMAXhigh = 255      # max pour les couleurs au hasard vives

    # méthodes utilisées pour contrôler les animations
    #-------------------------------------------------
        
    def fade_in_out(self, fadein=True):
        """ retourne tuple (start, end, step) pour parcourir les leds du ruban dans un ordre:
              fadein = True : de la 1ère led à la dernière (valeur par défaut)
              fadein = False: de la dernière led à la première
        """
        start, end, step = 0 , self.nb_leds, 1
        if not fadein:
            start, end, step = self.nb_leds-1, -1 , -1
        return (start, end, step)
    
    def wheel(self, pos):
        """ pos = 0 to 255 correspond à une couleur arc en ciel
            transition r - g - b - back to r.
            retourne un tuple (r,g,b)
        """
        if pos < 0 or pos > 255:
            r = g = b = 0
        elif pos < 85:
            r = int(pos * 3)
            g = int(255 - pos*3)
            b = 0
        elif pos < 170:
            pos -= 85
            r = int(255 - pos*3)
            g = 0
            b = int(pos*3)
        else:
            pos -= 170
            r = 0
            g = int(pos*3)
            b = int(255 - pos*3)
        return (r, g, b)

    def shuffle(self, l):
        """Fisher–Yates shuffle Algorithm : la methode random.shuffle(l) n'existant pas en micropython
            input: l = liste
            retourne la liste l mélangée
        """
        for i in range(len(l)-1, 0, -1): # parcours la liste à l'envers
            j = randint(0, i)            # random index entier dans l'intervalle [0, i]  
            l[i], l[j] = l[j], l[i]      # Swap l[i] avec l[j]
        return l

    # méthodes d'extinction du ruban
    #----------------------------------
    def off(self):
        """ éteint toutes les leds d'un coup """
        self.pixels.fill((0,0,0))
        self.pixels.write()

    def fade_off(self, fadein = True):
        """ éteint toutes les leds une après les autres
             fadein = True pour simuler un fade in en partant de la 1ère led
             fadein = False pour un fade out en partant de la dernière led
        """
        start, end, step = self.fade_in_out(fadein)
        for l in range(start, end, step):
            self.pixels[l] = (0,0,0)
            self.pixels.write()
            sleep(self.wait_short)      

    # méthodes de rendus de couleur d'une led
    #-----------------------------------------
    def pcolor_random(self, pastel=True, red=True, green=True, blue=True):
        """ retourne une couleur (r,g,b) au hasard
            pastel: rendu de couleur pastel(True) ou vives(False)
            red=False: couleur sans rouge
            green=False: couelmur sans vert
            blue=False: couleur sans bleu
        """
        rgbMAX = pastel * self.rgbMAXpastel + (not pastel) * self.rgbMAXhigh
        r,g,b = 0,0,0
        #on évite la combinaison (0,0,0) qui éteint la led ...
        while (r+g+b) <= self.rgbMIN :
            r,g,b = red*randrange(0,rgbMAX), green*randrange(0,rgbMAX), blue*randrange(0,rgbMAX)
        return (r,g,b)
            
    
    def pcolor_wheel(self, id_led):
        """ retourne une couleur (r,g,b) arc-en-ciel selon la position de la led """
        pixel_index = (id_led * 256 // self.nb_leds)
        return  self.wheel(pixel_index & 255) 
                

    # méthodes d'animation du ruban de leds
    #-----------------------------------------------------------------------------------------
    def rainbow_cycle(self):
        """ cycle de couleurs arc-en ciel """
        for j in range(255):
            for i in range(self.nb_leds):
                pixel_index = (i * 256 // self.nb_leds) + j
                self.pixels[i] = self.wheel(pixel_index & 255)
            self.pixels.write()
            sleep(self.wait_shortms)

    def random_cycle(self, pastel=True, red=True, green=True, blue=True):
        """ cycle de couleurs aléatoires
                pastel: True/False pour des couleurs pastel ou vives
                red, green, blue = True/False pour activer/désactiver des composantes Rouge, Verte, Bleue
        """
        for l in range(self.nb_leds):
            self.pixels[l] = self.pcolor_random(pastel=pastel, red=red, green=green, blue=blue)
            self.pixels.write()
        sleep(self.wait_long)

    def fade_wheel(self, fadein=True):
        """ anime le ruban de leds avec des couleurs arc-enciel
            fadein = True: fade in depuis la 1ère leds jusqu'à la dernière
            fadein = False: fade out depuis la dernière led jusqu'à la 1ère
        """
        start, end, step = self.fade_in_out(fadein)
        for l in range(start, end, step):
            self.pixels[l] = self.pcolor_wheel(l)
            sleep(self.wait_long)
            self.pixels.write()
        
    def fade_random(self, fadein = True, pastel=True, red=True, green=True, blue=True):
        """ anime le ruban de leds avec un fade-in de couleurs aléatoires
            params: fadein = True pour un Fade-in False Fade-out
            pastel: True/False pour avoir des couleurs pastels ou vives
            red,green,blue : True/False pour activer/désactiver une composante rouge, verte, bleu
        """
        start, end, step = self.fade_in_out(fadein)
        for l in range(start, end, step):
            self.pixels[l] = self.pcolor_random(red=red, green=green, blue=blue)
            sleep(self.wait_long)
            self.pixels.write()
        
    def shuffle_wheel(self):
        """ anime le ruban en allumant les leds au hasard avec couleur arc-en-ciel """
        leds = self.shuffle([i for i in range(self.nb_leds)])
        for l in leds:
            pixel_index = (l * 256 // self.nb_leds)
            self.pixels[l] = self.wheel(pixel_index & 255)
            sleep(self.wait_short)
            self.pixels.write()
    
    def shuffle_random(self, pastel=True, red=True, green=True, blue=True):
        """ anime le ruban en allumant les leds au hasard avec couleur aléatoire """
        leds = self.shuffle([i for i in range(self.nb_leds)])
        for l in leds:
            self.pixels[l] = self.pcolor_random(red=red, green=green, blue=blue)
            sleep(self.wait_short)
            self.pixels.write()

    def mono_wheel(self, fadein = True, delay=0.1):
        """ anime le ruban en allumant toutes les leds de la même couleur
            changmeent de couleur après chaque delay (en secondes)
            en suivant le rythme de couleur arc-en-ciel
            fadin:  True démarre l'animation avec un fade  in de puis la 1er led
                    False: ... depuis la dernière led
        """
        #1ère mise en couleur avec fadein
        start, end, step = self.fade_in_out(fadein)
        for l in range(start, end, step):
            self.pixels[l] = self.pcolor_wheel(0)
            sleep(self.wait_long)
            self.pixels.write()
        #enchainer les couleurs arc-en-ciel pour toutes le leds
        for j in range(255):
            for i in range(self.nb_leds):
                self.pixels[i] = self.wheel(j)
            self.pixels.write()
            sleep(delay)
        
    def mono_color(self, fadein = True, color = (2555,0,0),  delay=0.1):
        """ anime le ruban en allumant tous les leds de la même couleur 'color'
            fadin:  True démarre l'animation avec un fade  in de puis la 1er led
                    False: ... depuis la dernière led
            delay: delay d'attente 
        """
        #mise en couleur avec fadein
        start, end, step = self.fade_in_out(fadein)
        for l in range(start, end, step):
            self.pixels[l] = color
            sleep(self.wait_long)
            self.pixels.write()
        sleep(delay)
* Library source @ https://github.com/mchobby/esp8266-upy/tree/master/neopixel
* Shop: https://shop.mchobby.be/55-leds-neopixels-et-dotstar
"""
from ws2812 import NeoPixel
from time import sleep
np = NeoPixel(spi_bus=1, led_count=8, intensity=1)

# Fixer la couleur la couleur du premier pixel
# avec un tuple (r,g,b) ou chaque valeur est
# située entre 0 et 255
np[0] = (255, 0, 0)  # rouge

np[1] = (0, 255, 0)  # vert
np[2] = (0, 0, 128)  # bleu (1/2 brillance)

# Voir aussi HTML Color Picker
# https://www.w3schools.com/colors/colors_picker.asp
np[3] = (255, 102, 0)  # Orange
np[4] = (255, 0, 102)  # Rose bonbon
np[5] = (153, 51, 255)  # Violet
np[6] = (102, 153, 255)  # bleu pastel
np[7] = (153, 255, 153)  # vert pastel

np.write()

sleep(2)

# Tout éteindre
np.fill((0, 0, 0))
np.write()
Esempio n. 3
0
np[1] = (0, 255, 0) # vert
np[2] = (0, 0, 128) # bleu (1/2 brillance)

# Voir aussi HTML Color Picker
# https://www.w3schools.com/colors/colors_picker.asp
np[3] = (255, 102, 0) # Orange
np[4] = (255, 0, 102) # Rose bonbon
np[5] = (153, 51, 255) # Violet
np[6] = (102, 153, 255) # bleu pastel
np[7] = (153, 255, 153) # vert pastel

# Envoyer l'info au NeoPixels
np.write()

sleep(2)

# fill() permet de remplir tout
# le NeoPixel avec une seule couleur
colors = [ (255,0,0), (0, 255, 0), (0, 0, 128),
    (255, 102, 0) , (255, 0, 102), (153, 51, 128),
    (102, 153, 128), (153, 255, 128) ]

for color in colors:
    np.fill( color )
    np.write()
    sleep(2)

# Eteindre les NeoPixels
np.fill( (0,0,0) )
np.write()
Esempio n. 4
0
"""
test_allblue.py - set all the pixels to BLUE to check power and data wiring

* Author(s): Meurisse D. from MCHobby (shop.mchobby.be).

See project source @ https://github.com/mchobby/pyboard-projects/tree/master/word-clock

"""

from wclib import *
from ws2812 import NeoPixel

# Pyboard NeoPixel( spi_bus=1, led_count=1, intensity=1 ) -> X8
np = NeoPixel(spi_bus=1, led_count=len(PANEL) * len(PANEL[0]))
np.fill((0, 0, 255))
np.write()
Esempio n. 5
0
from pyb import Switch
from machine import Pin, I2C
from time import sleep
from ws2812 import NeoPixel
from tcs34725 import TCS34725

# Pyboard - SDA=Y10, SCL=Y9
i2c = I2C(2)

np = NeoPixel( spi_bus=1, led_count=44, intensity=1)
np.fill( (0,128,0) ) # Starting GBR
np.write()

color = TCS34725(i2c)
color.integration_time = 400 # Bigger integration time means collect more data about color
led = Pin( "Y12", Pin.OUT, value=False )
switch = Switch() # Wired on Pin

def gamma_255( x ):
	""" Apply a gamma correction factor for a value in the range 0 - 255 """
	x /= 255
	x = pow(x, 2.5)
	x *= 255
	return int(x) if x < 255 else 255

def gamma_color( color ):
	""" Apply the Gamma correction to a tuple of rgb color.
		Eyes does not sense the color range in a linear way """
	return gamma_255(color[0]), gamma_255(color[1]), gamma_255(color[2])

# Started and ready for operation