Neopixel

Neopixel

Этот модуль содержит функции для работы со светодиодами, подключенными к однопроводной шине, такими как светодиод WS2812B. Каждый светодиод в шине известен как пиксель.

Основным ограничивающим фактором для количества пикселей, которые вы можете управлять с помощью этого модуля, является объем памяти на вашей плате. С 1 Кб памяти вы можете управлять до 128 пикселями.

instance = neopixel.attach(type, gpio, pixels)

Подключить NEOPIXEL к GPIO. Яркость устанавливается на уровне 20%.

Аргументы:

  • type (тип): тип светодиода, который вы подключили к шине. На данный момент поддерживается только neopixel.WS2812B.
  • gpio: GPIO для управления шиной. Используйте любое из значений pio.GPIOx, определенных в модуле pio, для этого.
  • pixels (пиксели): количество пикселей (светодиодов), подключенных к шине.

Возвращает: экземпляр шины NEOPIXEL или исключение. Этот экземпляр необходимо сохранить в переменной для дальнейших операций с ним.

-- Attch a NEOPIXEL bus formed by 6 WS2812B leds, connected to GPIO14
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO14, 6)

instance:setBrightness(brightness)

Установить яркость.

Аргументы:

  • brightness (яркость): значение яркости, число между 0 и 1, которое внутренне используется для установки яркости пикселей, окторый будут отрисованы следом.

Возвращает: ничего или исключение.

instance:fade(brightness, upd_opt)

Установить яркость всей ленты.

Аргументы:

  • brightness (яркость): значение яркости, число между 0 и 1, которое внутренне используется для установки яркости пикселей.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

instance:setPixel(pixel, red, green, blue, upd_opt)

Установить цвет пикселя, выраженный в его r/g/b компонентах. Эта функция только обновляет внутренний буфер пикселей, но ничего не передает по шине. Вы должны вызвать функцию обновления, чтобы обновить светодиоды, подключенные к шине.

Аргументы:

  • pixel: номер пикселя.
  • red (красный): компонент красного цвета, от 0 до 255.
  • green (зеленый): компонент зеленого цвета, от 0 до 255.
  • blue (синий): компонент синего цвета, от 0 до 255.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

-- Setup a NEOPIXEL bus formed by 6 WS2812B leds, connected to GPIO14
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO14, 6)

-- Set color for pixel 0 (pure red)
neo:setPixel(0, 255, 0, 0)

-- Set color for pixel 1 (pure green)
neo:setPixel(1, 0, 255, 0)

-- Set color for pixel 2 (pure white)
neo:setPixel(2, 255, 255, 255)

instance:fill(begin, end, r, g, b, upd_opt)

Заполнить сектор ленты заданным цветом.

Аргументы:

  • begin: номер начального пикселя.
  • end: номер конечного пикселя.
  • red (красный): компонент красного цвета, от 0 до 255.
  • green (зеленый): компонент зеленого цвета, от 0 до 255.
  • blue (синий): компонент синего цвета, от 0 до 255.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

instance:shift(dir, upd_opt)

Сдвинуть ленту на один пиксель.

Аргументы:

  • dir: направление свдига. true - вперед.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

instance:shift(dir, upd_opt)

Сдвинуть ленту на один пиксель.

Аргументы:

  • dir: направление свдига. true - вперед.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

instance:gradient(begin, end, upt_opt)

Отобразить градиент цветов на заданном секторе.

Аргументы:

  • begin: номер начального пикселя.
  • end: номер конечного пикселя.
  • upd_opt: отобразить сразу.

Возвращает: ничего или исключение.

r,g,b = hsvToRgb(h, s, v)

Преобразование цветов из hsv в компоненты r,g,b.

Аргументы:

  • h: Hue (Оттенок) 0-359
  • s: Saturation (Насыщенность) 0-1
  • v: Value (Яркость) 0-1

Возвращает:

  • red (красный): компонент красного цвета, от 0 до 255.
  • green (зеленый): компонент зеленого цвета, от 0 до 255.
  • blue (синий): компонент синего цвета, от 0 до 255.

instance:update()

Обновить светодиоды, подключенные к шине.

Аргументы: нет.

Возвращает: ничего или исключение.

-- Setup a NEOPIXEL bus formed by 6 WS2812B leds, connected to GPIO14
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO14, 6)

-- Set color for pixel 0 (pure red)
neo:setPixel(0, 255, 0, 0)

-- Set color for pixel 1 (pure green)
neo:setPixel(1, 0, 255, 0)

-- Set color for pixel 2 (pure white)
neo:setPixel(2, 255, 255, 255)

-- Update the bus
neo:update()

Пример

В этом примере пиксель перемещается справа налево и слева направо в шине на 6 пикселей.

thread.start(function()
  neo = neopixel.attach(neopixel.WS2812B, pio.GPIO14, 6)

  pixel = 0
  direction = 0

  while true do
    neo:setPixel(pixel, 0, 255, 0)
    neo:update()
    tmr.delayms(100)
    neo:setPixel(pixel, 0, 0, 0)

    if (direction == 0) then
      if (pixel == 5) then
        direction = 1
        pixel = 4
      else
        pixel = pixel + 1
      end
    else
      if (pixel == 0) then
        direction = 0
        pixel = 1
      else
        pixel = pixel - 1
      end
    end
  end
end)