mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
Fix: Syntax
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
#### Подключение и определение типа ленты
|
||||
|
||||
Есть два основных типа адресуемых светодиодов: WS2812 и WS2812B. Принцип управления один и тот же, однако тайминги разные. Посмотрите на светодиодный модуль на ленте и определите, сколько у него ножек: 6 или 4. Если ножек 6, то это WS2812, если 4 - то WS2812B или SK2812.
|
||||
Есть два основных типа адресуемых светодиодов: WS2812 и WS2812B. Принцип управления один и тот же, однако тайминги разные. Найдите на ленте чип светодиода и определите сколько у него ножек: 6 или 4. Если ножек 6, то это WS2812, если 4 - то WS2812B или его аналог SK6812.
|
||||
|
||||

|
||||
<img src="/assets/timing_with_thumbs.png" height="400px" alt="leds">
|
||||
|
||||
Т.к. принцип управления одинаковый, то и ленты подключаются одинаково:
|
||||
|
||||
@@ -14,40 +14,38 @@
|
||||
| 5V | 5V |
|
||||
| DIN | GPIO21 или GPIO31 |
|
||||
|
||||
Типы лент для обозначения ленты в коде описаны в файле [https://github.com/jgarff/rpi\_ws281x/blob/master/ws2811.h](https://github.com/jgarff/rpi_ws281x/blob/master/ws2811.h)
|
||||
|
||||
Основные типы лент - это WS2812\_STRIP \(для WS2812\) и SK6812\_STRIP \(для WS2812B или SK6812\).
|
||||
Типы лент для обозначения ленты в коде описаны в [файле](https://github.com/jgarff/rpi_ws281x/blob/master/ws2811.h). Основные типы лент - это WS2812\_STRIP \(для WS2812\) и SK6812\_STRIP \(для WS2812B или SK6812\).
|
||||
|
||||
#### Установка библиотеки для работы со светодиодной лентой
|
||||
|
||||
Определите папку, в которой будут находиться файлы библиотеки, и открыть путь к этой папке в терминале. По-умолчанию можно использовать домашнюю папку, для перехода в неё нужно выполнить команду
|
||||
|
||||
```
|
||||
```(bash)
|
||||
cd ~
|
||||
```
|
||||
|
||||
Склонируйте репозиторий библиотеки для работы с led лентами на Raspberry Pi
|
||||
|
||||
```
|
||||
```(bash)
|
||||
git clone https://github.com/jgarff/rpi_ws281x.git
|
||||
```
|
||||
|
||||
Установите Scons \([что это?](https://ru.wikipedia.org/wiki/SCons)\) и Swig \([что это?](https://ru.wikipedia.org/wiki/SWIG)\)
|
||||
Установите [Scons](https://ru.wikipedia.org/wiki/SCons) и [Swig](https://ru.wikipedia.org/wiki/SWIG)
|
||||
|
||||
```
|
||||
```(bash)
|
||||
sudo apt-get install scons python-dev swig
|
||||
```
|
||||
|
||||
Соберите библиотеку с помощью Scons \(команда выполняется внутри папки с исходным кодом библиотеки\)
|
||||
|
||||
```
|
||||
```(bash)
|
||||
cd rpi_ws281x
|
||||
scons
|
||||
```
|
||||
|
||||
Соберите python обёртку библиотеки с помощью Swig и установите её для возможности использования в своих python скриптах.
|
||||
|
||||
```
|
||||
```(bash)
|
||||
cd python
|
||||
python ./setup.py build
|
||||
python ./setup.py install
|
||||
@@ -57,13 +55,13 @@ python ./setup.py install
|
||||
|
||||
Откройте в текстовом редакторе файл strandtest.py из папки python/examples \(находится в папке с библиотекой\)
|
||||
|
||||
```
|
||||
```(bash)
|
||||
nano strandtest.py
|
||||
```
|
||||
|
||||
Найдите участок кода с настройками ленты
|
||||
|
||||
```
|
||||
```(bash)
|
||||
# LED strip configuration:
|
||||
LED_COUNT = 16 # Number of LED pixels.
|
||||
LED_PIN = 18 # GPIO pin connected to the pixels (18 uses PWM!).
|
||||
@@ -78,7 +76,7 @@ LED_STRIP = ws.WS2811_STRIP_GRB # Strip type and colour ordering
|
||||
|
||||
Поправьте настройки для работы с лентой и сохраните файл. Чтобы использование ленты не мешало работе других устройств на Raspberry Pi, рекомендуется использовать следующие настройки \(настройки подходят для ленты в комплекте с Клевер 3\):
|
||||
|
||||
```
|
||||
```(bash)
|
||||
# LED strip configuration:
|
||||
LED_COUNT = 30 # Number of LED pixels.
|
||||
LED_PIN = 21 # GPIO pin connected to the pixels.
|
||||
@@ -92,7 +90,7 @@ LED_STRIP = ws.SK6812_STRIP # Strip type and colour ordering
|
||||
|
||||
Запустите тестовую программу, используя права администратора
|
||||
|
||||
```
|
||||
```(bash)
|
||||
sudo python strandtest.py
|
||||
```
|
||||
|
||||
@@ -102,7 +100,7 @@ sudo python strandtest.py
|
||||
|
||||
Для подключения библиотеки и её корректной работы требуется подключить следующие модули: neopixels - для работы ленты, time - для управления задержками, sys и signal для прерываний и формирования управляющего сигнала.
|
||||
|
||||
```
|
||||
```(python)
|
||||
from neopixels import *
|
||||
import time
|
||||
import signal
|
||||
@@ -111,7 +109,7 @@ import sys
|
||||
|
||||
Для работы с лентой необходимо создать объект типа **Adafruit\_NeoPixel **и инициализировать библиотеку:
|
||||
|
||||
```
|
||||
```(python)
|
||||
# Создание объекта NeoPixel c заданной конфигурацией
|
||||
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT)
|
||||
# Инициализация библиотеки, должна быть выполнена перед другими функциями
|
||||
@@ -120,20 +118,20 @@ strip.begin()
|
||||
|
||||
Основные функции, которые используются для управления лентой:
|
||||
|
||||
* **numPixels\(\) ** - Возвращает количество пикселей в ленте. Удобно для цикличного управления всей лентой целиком.
|
||||
* **setPixelColor\(pos, color\) ** - Устанавливает цвет пикселя в позиции **pos** в цвет **color**. Цвет должен быть 24 битным значением, где первые 8 бит - красный цвет \(red\), следующие 8 бит - зелёный цвет \(green\) и последние 8 бит - голубой \(blue\). Для получения значения **color **можно использовать функцию **Color\(red, green, blue\),** которая составляет это значение из 3х компонент. Каждый компонент должен находиться в диапазоне 0-255, где 0 - отсутствие цвета, а 255 - наибольшая доступная яркость компонента в светодиодном модуле.
|
||||
* **setPixelColorRGB\(pos, red, green, blue\) ** - Устанавливает цвет пикселя в позиции pos в цвет, состоящий из компонент **red, green, blue.** Каждый компонент должен находиться в диапазоне 0-255, где 0 - отсутствие цвета, а 255 - наибольшая доступная яркость компонента в светодиодном модуле.
|
||||
* **show\(\) **- Обновляет состояние ленты. Только после её использования все программные изменения перемещаются на светодиодную ленту.
|
||||
* **numPixels\(\)** - Возвращает количество пикселей в ленте. Удобно для цикличного управления всей лентой целиком.
|
||||
* **setPixelColor\(pos, color\)** - Устанавливает цвет пикселя в позиции **pos** в цвет **color**. Цвет должен быть 24 битным значением, где первые 8 бит - красный цвет \(red\), следующие 8 бит - зелёный цвет \(green\) и последние 8 бит - голубой \(blue\). Для получения значения **color** можно использовать функцию **Color\(red, green, blue\)**, которая составляет это значение из 3х компонент. Каждый компонент должен находиться в диапазоне 0-255, где 0 - отсутствие цвета, а 255 - наибольшая доступная яркость компонента в светодиодном модуле.
|
||||
* **setPixelColorRGB\(pos, red, green, blue\)** - Устанавливает цвет пикселя в позиции pos в цвет, состоящий из компонент **red, green, blue**. Каждый компонент должен находиться в диапазоне 0-255, где 0 - отсутствие цвета, а 255 - наибольшая доступная яркость компонента в светодиодном модуле.
|
||||
* **show\(\)** - Обновляет состояние ленты. Только после её использования все программные изменения перемещаются на светодиодную ленту.
|
||||
|
||||
Остальные функции можно обнаружить, вызвав команду
|
||||
|
||||
```
|
||||
```(bash)
|
||||
pydoc neopixel
|
||||
```
|
||||
|
||||
Результат выполнения команды:
|
||||
|
||||
```
|
||||
```(bash)
|
||||
Help on module neopixel:
|
||||
|
||||
NAME
|
||||
@@ -202,11 +200,7 @@ pydoc neopixel
|
||||
|
||||
Основные типы лент, которые используются для Clever3, это WS2812, WS2812B и SK6812 \(аналог WS2812B\). Они управляются по одному и тому же принципу: для массива светодиодов в ленте отправляется пакет данных по 24 бита на светодиод; каждый светодиод считывает первые 24 бита из пришедших к нему данных и устанавливает соответствующий цвет, остальные данные он отправляет следующему светодиоду в ленте. Нули и единицы задаются разными сочетаниями длительностей высокого и низкого уровня в импульсе.
|
||||
|
||||
Все эти ленты поддерживаются для управления библиотекой
|
||||
|
||||
[https://github.com/jgarff/rpi\_ws281x](https://github.com/jgarff/rpi_ws281x)
|
||||
|
||||
, при этом для управления используется модуль DMA \(direct memory access\) процессора распберри и один из каналов передачи данных: PWM, PCM или SPI, что гарантирует отсутствие задержек в управлении \(а управляется всё на многозадачной операционке, это важно\).
|
||||
Все эти ленты поддерживаются для управления библиотекой [rpi_ws281x](https://github.com/jgarff/rpi_ws281x), при этом для управления используется модуль DMA \(direct memory access\) процессора распберри и один из каналов передачи данных: PWM, PCM или SPI, что гарантирует отсутствие задержек в управлении \(а управляется всё на многозадачной операционке, это важно\).
|
||||
|
||||
Есть некоторые особенности работы с каналами, например при передаче данных с помощью PWM \(ШИМ\) перестаёт работать встроенная аудиосистема распберри, при передаче данных по PCM блокируется использование подключенных цифровых аудиоустройств \(при этом встроенная система работает\), а при использовании SPI \(кстати, требуется специальная настройка размера буфера и частоты GPU распберри для правильной работы\) лед лента блокирует все остальные устройства, подключенные по этому каналу.
|
||||
|
||||
@@ -214,15 +208,12 @@ pydoc neopixel
|
||||
|
||||
Поэтому сценарии использования лед ленты следующие:
|
||||
|
||||
1\) Если нам не важна работоспособность встроенного аудио на распберри \(и мы его не используем, т.к. аудио и лента будут выдавать билиберду в этом случае\), то можно использовать PWM канал \(для этого требуется подключить вход ленты к одному из следующих GPIO портов распберри: 12, 18, 40, или 52 для PWM0 канала и 13, 19, 41, 45 или 53 для PWM1 канала\)
|
||||
|
||||
2\) Если нам не важно наличие на шине SPI других устройств, то можно управлять лентой по каналу SPI \(GPIO на распберри 10 или 38\). Здесь требуется произвести следующие настройки \(только для распберри 3\):
|
||||
|
||||
\* увеличить размер буфера передачи данных для поддержки длинных лент, добавив стройку spidev.bufsiz=32768 в файле /boot/cmdline.txt
|
||||
|
||||
\* установить частоту GPU для правильной частоты работы SPI, добавив строку core\_freq=250 в файл /boot/config.txt
|
||||
|
||||
3\) Если нам важна и работа аудио, и подключение к SPI устройств кроме лед ленты, то можно управлять лентой по каналу PCM \(GPIO 21 или 31\). При этом никаких дополнительных манипуляций с распберри не требуется.
|
||||
1. Если нам не важна работоспособность встроенного аудио на распберри \(и мы его не используем, т.к. аудио и лента будут выдавать билиберду в этом случае\), то можно использовать PWM канал \(для этого требуется подключить вход ленты к одному из следующих GPIO портов распберри: 12, 18, 40, или 52 для PWM0 канала и 13, 19, 41, 45 или 53 для PWM1 канала\)
|
||||
2. Если нам не важно наличие на шине SPI других устройств, то можно управлять лентой по каналу SPI \(GPIO на распберри 10 или 38\).
|
||||
Здесь требуется произвести следующие настройки \(только для распберри 3\):
|
||||
* увеличить размер буфера передачи данных для поддержки длинных лент, добавив стройку spidev.bufsiz=32768 в файле /boot/cmdline.txt
|
||||
* установить частоту GPU для правильной частоты работы SPI, добавив строку core\_freq=250 в файл /boot/config.txt
|
||||
3. Если нам важна и работа аудио, и подключение к SPI устройств кроме лед ленты, то можно управлять лентой по каналу PCM \(GPIO 21 или 31\). При этом никаких дополнительных манипуляций с распберри не требуется.
|
||||
|
||||
Исходя из вышеперечисленных способов управления лентой, наилучшим вариантом, позволяющим управлять лентой, сохранить работоспособность встроенной аудиосистемы и возможность подключения всяческих устройств и датчиков по SPI, является управление по каналу PCM \(GPIO 21\) с использованием 10 канала DMA.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user