MicroPython:Платы/ESP8266/Руководство по MicroPython для ESP8266/Управление устройствами NeoPixel: различия между версиями

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div"> =С...»)
 
 
Строка 2: Строка 2:
 
{{Перевод от Сubewriter}}
 
{{Перевод от Сubewriter}}
 
{{Myagkij-редактор}}
 
{{Myagkij-редактор}}
 +
 +
=Управление устройствами NeoPixel<ref>[http://docs.micropython.org/en/latest/esp8266/tutorial/neopixel.html docs.micropython.org - Controlling NeoPixels]</ref>=
 +
 +
Устройства [[NeoPixel]] (также известные как светодиоды [[WS2812]]) – это полноцветные светодиоды, у которых значения красного, зеленого и синего компонентов можно задать в диапазоне ''между «0» и «255»''. Кроме того, вы можете обратиться к каждому [[NeoPixel]] индивидуально, а их подключение выполняется последовательно.
 +
 +
Чтобы создать объект [[NeoPixel]], впишите следующее:
  
 
<syntaxhighlight lang="python" enclose="div">
 
<syntaxhighlight lang="python" enclose="div">
 +
>>> import machine, neopixel
 +
>>> np = neopixel.NeoPixel(machine.Pin(4), 8)
 +
</syntaxhighlight>
 +
 +
Это настроит [[ESP8266]] на использование NeoPixel-полосы из 8 пикселей на контакте ''GPIO4''. То есть здесь ''«4»'' – это номер контакта, а ''«8»'' – это количество пикселей; вы можете подредактировать эти значения, чтобы они соответствовали вашей ситуации.
 +
 +
Чтобы задать цвет пикселей, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> np[0] = (255, 0, 0) # красный, полная яркость
 +
>>> np[1] = (0, 128, 0) # зеленый, половина яркости
 +
>>> np[2] = (0, 0, 64)  # синий, четверть яркости
 +
</syntaxhighlight>
 +
 +
Для [[светодиод]]ов, у которых более 3 цветов – вроде RGBW-пикселей или RGBY-пикселей – у класса NeoPixel есть параметр bpp. Чтобы настроить объект NeoPixel для использования RGBW-пикселя, выполните следующее:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> import machine, neopixel
 +
>>> np = neopixel.NeoPixel(machine.Pin(4), 8, bpp=4)
 +
</syntaxhighlight>
 +
 +
Работая в режиме с четырьмя каналами, не забывайте, что вам теперь, чтобы задать цвет, нужно указывать не три значения, как раньше, а четыре. Например, чтобы задать цвет и яркость первых трех пикселей, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> np[0] = (255, 0, 0, 128) # в RGBY-режиме это оранжевый
 +
>>> np[1] = (0, 255, 0, 128) # в RGBY-режиме это желто-зеленый
 +
>>> np[2] = (0, 0, 255, 128) # в RGBY-режиме это зелено-синий
 +
</syntaxhighlight>
 +
 +
Затем используйте метод write(), чтобы отправить эти данные светодиодам:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> np.write()
 +
</syntaxhighlight>
 +
 +
Функция demo() ниже выполняет интересный световой эффект с помощью этих светодиодов:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
import time
 +
 +
def demo(np):
 +
    n = np.n
 +
 +
    # цикл:
 +
    for i in range(4 * n):
 +
        for j in range(n):
 +
            np[j] = (0, 0, 0)
 +
        np[i % n] = (255, 255, 255)
 +
        np.write()
 +
        time.sleep_ms(25)
 +
 +
    # скачки:
 +
    for i in range(4 * n):
 +
        for j in range(n):
 +
            np[j] = (0, 0, 128)
 +
        if (i // n) % 2 == 0:
 +
            np[i % n] = (0, 0, 0)
 +
        else:
 +
            np[n - 1 - (i % n)] = (0, 0, 0)
 +
        np.write()
 +
        time.sleep_ms(60)
 +
 +
    # увеличение/уменьшение яркости:
 +
    for i in range(0, 4 * 256, 8):
 +
        for j in range(n):
 +
            if (i // 256) % 2 == 0:
 +
                val = i & 0xff
 +
            else:
 +
                val = 255 - (i & 0xff)
 +
            np[j] = (val, 0, 0)
 +
        np.write()
 +
 +
    # сброс:
 +
    for i in range(n):
 +
        np[i] = (0, 0, 0)
 +
    np.write()
 +
</syntaxhighlight>
 +
 +
Чтобы запустить эту функцию, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> demo(np)
 +
</syntaxhighlight>
  
 
=См.также=
 
=См.также=

Текущая версия на 12:44, 1 июля 2020

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление устройствами NeoPixel[1]

Устройства NeoPixel (также известные как светодиоды WS2812) – это полноцветные светодиоды, у которых значения красного, зеленого и синего компонентов можно задать в диапазоне между «0» и «255». Кроме того, вы можете обратиться к каждому NeoPixel индивидуально, а их подключение выполняется последовательно.

Чтобы создать объект NeoPixel, впишите следующее:

>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8)

Это настроит ESP8266 на использование NeoPixel-полосы из 8 пикселей на контакте GPIO4. То есть здесь «4» – это номер контакта, а «8» – это количество пикселей; вы можете подредактировать эти значения, чтобы они соответствовали вашей ситуации.

Чтобы задать цвет пикселей, используйте:

>>> np[0] = (255, 0, 0) # красный, полная яркость
>>> np[1] = (0, 128, 0) # зеленый, половина яркости
>>> np[2] = (0, 0, 64)  # синий, четверть яркости

Для светодиодов, у которых более 3 цветов – вроде RGBW-пикселей или RGBY-пикселей – у класса NeoPixel есть параметр bpp. Чтобы настроить объект NeoPixel для использования RGBW-пикселя, выполните следующее:

>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8, bpp=4)

Работая в режиме с четырьмя каналами, не забывайте, что вам теперь, чтобы задать цвет, нужно указывать не три значения, как раньше, а четыре. Например, чтобы задать цвет и яркость первых трех пикселей, используйте:

>>> np[0] = (255, 0, 0, 128) # в RGBY-режиме это оранжевый
>>> np[1] = (0, 255, 0, 128) # в RGBY-режиме это желто-зеленый
>>> np[2] = (0, 0, 255, 128) # в RGBY-режиме это зелено-синий

Затем используйте метод write(), чтобы отправить эти данные светодиодам:

>>> np.write()

Функция demo() ниже выполняет интересный световой эффект с помощью этих светодиодов:

import time

def demo(np):
    n = np.n

    # цикл:
    for i in range(4 * n):
        for j in range(n):
            np[j] = (0, 0, 0)
        np[i % n] = (255, 255, 255)
        np.write()
        time.sleep_ms(25)

    # скачки:
    for i in range(4 * n):
        for j in range(n):
            np[j] = (0, 0, 128)
        if (i // n) % 2 == 0:
            np[i % n] = (0, 0, 0)
        else:
            np[n - 1 - (i % n)] = (0, 0, 0)
        np.write()
        time.sleep_ms(60)

    # увеличение/уменьшение яркости:
    for i in range(0, 4 * 256, 8):
        for j in range(n):
            if (i // 256) % 2 == 0:
                val = i & 0xff
            else:
                val = 255 - (i & 0xff)
            np[j] = (val, 0, 0)
        np.write()

    # сброс:
    for i in range(n):
        np[i] = (0, 0, 0)
    np.write()

Чтобы запустить эту функцию, используйте:

>>> demo(np)

См.также

Внешние ссылки