Add some info about ir sensors and rework leds.md (#107)

* Create new artile ir_sensors.md

Create new article about ir sensors and their compatibility wit python.

* docs: edit ir_sensors.md

* Fix markdown mistake

* Add new article about IR sensors

* Add some fix and information about IR transmitter

* Add some fix

* Add info about py-irsend

* Change connections images

* Edit summary.md

* Edit

* Add some info about led and ir sensors

* Add some fix about ir and rework article about leds

* Fix in led

* Reset sitl

* fix

* Edit

* Small fixes

* Edit
This commit is contained in:
Alamoris
2019-02-22 17:57:39 +03:00
committed by Oleg Kalachev
parent 022eaed76c
commit a6484223a3
5 changed files with 91 additions and 203 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

View File

@@ -1,5 +1,7 @@
# Работа с ИК-датчиками на Raspberry Pi 3
Инфракрасные датчики – удобный инструмент для передачи каких-либо команд на коптер. Они гибки в настройке и взаимодействие с ними возможно из языка Python.
## Подключение ИК-приемника
Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND земля, V/VCC питание 5В, S/OUT сигнал.
@@ -12,11 +14,14 @@
LIRC (Linux Infrared Remote Control) стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту. LIRC поддерживается Raspbian.
Для установки модуля LIRC нужно подключить вашу Raspberry Pi к интернету и выполнить консольные команды:
Для установки LIRC и сопутствующих модулей нужно подключить вашу Raspberry Pi к интернету и выполнить консольные команды:
```bash
sudo apt-get update
sudo apt-get install lirc
sudo apt-get install python-lirc
pip install py-irsend
```
> **Hint** Для корректного редактирования системных файлов требуется иметь права доступа администратора, используйте `sudo` при вызове редактора текста.
@@ -57,10 +62,10 @@ driver = default
device = /dev/lirc0
```
Все требуемые настройки сделаны, теперь нужно перезагрузить соответствующий демон. Для этого выполните:
Все требуемые настройки сделаны, теперь нужно перезагрузить ваше устройство Raspberry Pi для завершения установки. Для этого выполните:
```bash
sudo service lircd resart
sudo reboot
```
После перезагрузки проверьте его статус, вызвав команду:
@@ -70,8 +75,6 @@ sudo /etc/init.d/lircd status
```
Если вы все сделали правильно, то статус работы должен быть `active`.
Перед проведением тестирования лучше будет перезагрузить Raspberry Pi командой `sudo reboot`.
Чтобы проверить, что установленный модуль LIRC работает, выключите демон `lircd` и вызовите соответствующую команду:
```bash
@@ -98,7 +101,7 @@ pulse 535
<a name="remote_control"></a>
В случае, если вы хотите использовать свой ИК-передатчик, вам нужно записать его характерные настройки с помощью прилагающегося модуля `irrecord`. Для этого вам нужно выключить демон `lircd` и вызвать соответствующую команду. Во время клабирбровки пульта точно выполняйте все написанные интсрукции.
В случае, если вы хотите использовать свой ИК-передатчик, вам нужно записать его характерные настройки с помощью прилагающегося модуля `irrecord`. Для этого вам нужно выключить демон `lircd` и вызвать соответствующую команду. Во время калибровки пульта точно выполняйте все написанные инструкции.
> **Hint** Обратите внимание, что на последнем шаге калибровки вам нужно будет задать наименования кнопок, которые вы захотите расшифровать программно. Для того чтобы посмотреть список доступных имен, вызовите команду `irrecord --list-namespace`.
@@ -106,11 +109,11 @@ pulse 535
irrecord -d /dev/lirc0 ~/lircd.conf
```
Если у вас успешно получилось записать конфигурацию вашего пульта, в папке `/home/pi/` должен был появиться файл веденное-имя.lircd.conf`. Теперь вам нужно перенести записанный конфигурационный файл в рабочую папку `lirc` и перезагрузить демон:
Если у вас успешно получилось записать конфигурацию вашего пульта, в папке `/home/pi/` должен был появиться файл аше-имя.lircd.conf`. Теперь вам нужно перенести записанный конфигурационный файл в рабочую папку `lirc` и перезагрузить демон:
```
sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc restart
sudo cp ~/ваше-имя.lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lircd restart
```
Для того чтобы проверить, распознается ли записаная вами конфигурация, вывзовите соответствующий модуль. Теперь при нажатии на кнопки, которые вы записали в ранее созданной конфигурации, в терминал будет выводиться отладочная информация о том, какая кнопка была нажата.
@@ -119,23 +122,22 @@ sudo /etc/init.d/lirc restart
irw
```
Если вы все сделали правильно, то вы увидите выход похожий на:
> **Caution** В случае работы с некоторыми пультами бывают ситуации, когда битовые описания кнопок являются излишними и в таком случае у вас может не работать команда `irw`. Что бы исправить эту ошибку откройте файл `etc/lirc/lircd.conf` и проверьте как выглядит описание ваших клавиш, если оно похоже на `KEY_1 0x00FF6897 0x7EE0CF2C` и во всех строках у вас второе число совпадает, то вам нужно его удалить, что бы строки с назначением кнопок выглядели таким образом `KEY_1 0x00FF6897` и все числа в них были уникальны. После выполнения этих действий закройте файл и перезагрузите демон.
TODO Добавить реальные строчки раскодированных сигналов пульта
Если вы все сделали правильно, то при нажатии кнопки вы увидите выход похожий на:
```
000000007689718e 01 KEY_OK
0000000000ff6897 00 KEY_1 pult
0000000000ff6897 01 KEY_1 pult
0000000000ff9867 00 KEY_2 pult
0000000000ff9867 01 KEY_2 pult
```
Это значит, что ваша конфигурация корректно распознается программой и теперь вы можете запрограммировать нужные вам действия в случае нажатия определенной клавиши.
## Работа с ИК-датчками в Python
Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, требуется установить пакет `python-lirc`, для этого используйте команду:
```
sudo apt-get install python-lirc
```
Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, вам потребуется пакет `python-lirc`. [Установите его](#install) при необходимости.
Для корректного получения информации в собственном скрипте нужно создать файл `lircrc`, в котором будут храниться настройки ваших кнопок и программный ответ в случае их вызова.
@@ -213,11 +215,7 @@ irsend SEND_ONCE deviceName keyName
+ deviceName - имя пульта, которое вы давали во время его [настройки](#remote_control)
+ keyName - имя одной из кнопок, которые были вами заданы во время настройки пульта
Для того чтобы работать с `irsend` внутри вашего скрипта требуется установить модуль `python-irsend`, для этого используйте команду:
```bash
pip install py-irsend
```
Для того чтобы работать с `irsend` внутри вашего скрипта, вам потребуется модуль `python-irsend`, при необходимости [установите его](#install).
Чтобы использовать `irsend` импортируйте библиотеку и вызовите соответствующую команду:

View File

@@ -2,105 +2,19 @@
## Подключение и определение типа ленты
Есть два основных типа адресуемых светодиодов: WS2812 и WS2812B. Принцип управления один и тот же, однако тайминги разные. Найдите на ленте чип светодиода и определите сколько у него ножек: 6 или 4. Если ножек 6, то это WS2812, если 4 то WS2812B или его аналог SK6812.
> **Note** Документация для версии образа, начиная с 0.14. Для более ранних версий см. [документацию для версий 0.13](https://github.com/CopterExpress/clever/blob/v0.13/docs/leds.md)
<img src="../assets/timing_with_thumbs.png" height="400px" alt="leds">
Подключите светодиодную ленту к питанию +5v - 5v, земле GND - GND и сигнальному порту DIN - GPIO30, GPIO21, GPIO18.
Т.к. принцип управления одинаковый, то и ленты подключаются одинаково:
<img src="../assets/led_connection.png" height="400px" alt="leds">
| Лента | Raspberry Pi |
| :---: | :---: |
| GND | GND |
| 5V | 5V |
| DIN | GPIO21 или GPIO31 |
Типы лент для обозначения ленты в коде описаны в [файле](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):
```bash
sudo apt-get install scons python-dev swig
```
Соберите библиотеку с помощью Scons \(команда выполняется внутри папки с исходным кодом библиотеки\):
```bash
cd rpi_ws281x
scons
```
Соберите Python-обёртку библиотеки с помощью Swig и установите её для возможности использования в своих Python-скриптах.
```bash
cd python
sudo python ./setup.py build
sudo python ./setup.py install
```
## Пример программы для светодиодной ленты на RPI3
Откройте в текстовом редакторе файл `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!).
#LED_PIN = 10 # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53
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.
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53
LED_STRIP = ws.SK6812_STRIP # Strip type and colour ordering
```
Запустите тестовую программу, используя права администратора:
```bash
sudo python strandtest.py
```
Права администратора необходимы для выполнения скрипта, т.к. без них нет доступа к функциям прерывания, которые использует библиотека для работы с лентой.
> **Caution** Обратите внимание, что светодиодную ленту нужно питать от стабильного источника энергии. Если вы подключите питание напрямую к Raspberry, то это создаст слишком большую нагрузку на ваш микрокомпьютер. Для снятия нагрузки с Raspberry можно подключить питание к преобразователю `BEC`.
## Совместимость с ROS и Python
При запуске программы с помощью sudo пользовательское окружение изменяется и появляются ошибки импорта библиотек, т.к. в окружении отсутствуют необходимые пути. Чтобы добавить в окружение пути к библиотекам Python и пакетам ROS, необходимо добавить в файл `/etc/sudoers` следующие строки:
Чтобы корректно работать со светодиодной лентой вам нужно добавить в окружение необходимые пути к библиотекам Python и пакетам ROS, для этого необходимо добавить в файл `/etc/sudoers` следующие строки:
```bash
```
Defaults env_keep += "PYTHONPATH"
Defaults env_keep += "PATH"
Defaults env_keep += "ROS_ROOT"
@@ -111,18 +25,66 @@ Defaults env_keep += "ROS_HOME"
Defaults env_keep += "ROS_LOG_DIR"
```
## Функции для работы со светодиодной лентой
## Пример программы для светодиодной ленты на RPI3
Для подключения библиотеки и её корректной работы требуется подключить следующие модули: neopixel - для работы ленты, time для управления задержками, sys и signal для прерываний и формирования управляющего сигнала.
Для проверки работоспособности ленты можете использовать приведенный ниже код, данный код поочередно зажжет первые 10 диодов 3 цветами и в конце их погасит.
```python
from neopixel import *
import time
import signal
import sys
from rpi_ws281x import Adafruit_NeoPixel
from rpi_ws281x import Color
LED_COUNT = 10 # Количество светодиодов в ленте
LED_PIN = 18 # GPIO пин, к которому вы подсоединяете светодиодную ленту
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0 # Set to '1' for GPIOs 13, 19, 41, 45 or 53
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT)
strip.begin()
def colorWipe(strip, color, wait_ms=50):
"""Wipe color across display a pixel at a time."""
for i in range(strip.numPixels()):
strip.setPixelColor(i, color)
strip.show()
time.sleep(wait_ms/1000.0)
print('Color wipe animations.')
colorWipe(strip, Color(255, 0, 0), wait_ms=100) # Red wipe
colorWipe(strip, Color(0, 255, 0), wait_ms=100) # Blue wipe
colorWipe(strip, Color(0, 0, 255), wait_ms=100) # Green wipe
colorWipe(strip, Color(0, 0, 0), wait_ms=100) # Green wipe
```
Для работы с лентой необходимо создать объект типа **Adafruit_NeoPixel** и инициализировать библиотеку:
> **Note** Вы так же можете использовать тестовый код разработчиков данного модуля. Вы можете его [скачать](https://github.com/jgarff/rpi_ws281x/blob/master/python/examples/strandtest.py "Github разработчика") из репозитория разработчика. Обратите внимание, что для корректной работы вам нужно будет изменить импорт модуля `numpixel` на `rpi_ws281x`.
Сохраните программу в ваш скрипт и запустите его используя права администратора:
```bash
sudo python UourScriptName.py
```
Права администратора `sudo` необходимы для выполнения скрипта, т.к. без них нет доступа к функциям прерывания, которые использует библиотека для работы с лентой.
## Основные функции используемые для работы со светодиодной лентой
Для подключения библиотеки и её корректной работы требуется подключить следующие модули: `Adafruit_NeoPixel` и `Color` - для работы ленты и `time` для управления задержками.
```python
from rpi_ws281x import Adafruit_NeoPixel
from rpi_ws281x import Color
import time
```
Для работы с лентой необходимо создать объект типа `Adafruit_NeoPixel` и инициализировать библиотеку:
```python
# Создание объекта NeoPixel c заданной конфигурацией
@@ -133,91 +95,18 @@ 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`. Каждый компонент должен находиться в диапазоне 0255, где 0 отсутствие цвета, а 255 наибольшая доступная яркость компонента в светодиодном модуле.
* `show()` обновляет состояние ленты. Только после её использования все программные изменения перемещаются на светодиодную ленту.
Остальные функции можно обнаружить, вызвав команду
```bash
pydoc neopixel
```
Результат выполнения команды:
```bash
Help on module neopixel:
NAME
neopixel
DESCRIPTION
# Adafruit NeoPixel library port to the rpi_ws281x library.
# Author: Tony DiCola (tony@tonydicola.com)
CLASSES
__builtin__.object
Adafruit_NeoPixel
class Adafruit_NeoPixel(__builtin__.object)
| Methods defined here:
|
| __del__(self)
|
| __init__(self, num, pin, freq_hz=800000, dma=5, invert=False)
| Class to represent a NeoPixel/WS281x LED display. Num should be the
| number of pixels in the display, and pin should be the GPIO pin connected
| to the display signal line (must be a PWM pin like 18!). Optional
| parameters are freq, the frequency of the display signal in hertz (default
| 800khz), dma, the DMA channel to use (default 5), and invert, a boolean
| specifying if the signal line should be inverted (default False).
|
| begin(self)
| Initialize library, must be called once before other functions are
| called.
|
| getPixelColor(self, n)
| Get the 24-bit RGB color value for the LED at position n.
|
| getPixels(self)
| Return an object which allows access to the LED display data as if
| it were a sequence of 24-bit RGB values.
|
| numPixels(self)
| Return the number of pixels in the display.
|
| setBrightness(self, brightness)
| Scale each LED in the buffer by the provided brightness. A brightness
| of 0 is the darkest and 255 is the brightest. Note that scaling can have
| quantization issues (i.e. blowing out to white or black) if used repeatedly!
|
| setPixelColor(self, n, color)
| Set LED at position n to the provided 24-bit color value (in RGB order).
|
| setPixelColorRGB(self, n, red, green, blue)
| Set LED at position n to the provided red, green, and blue color.
| Each color component should be a value from 0 to 255 (where 0 is the
| lowest intensity and 255 is the highest intensity).
|
| show(self)
| Update the display with the data from the LED buffer.
|
FUNCTIONS
Color(red, green, blue)
Convert the provided red, green, blue color to a 24-bit color value.
Each color component should be a value 0-255 where 0 is the lowest intensity
and 255 is the highest intensity.
```
+ `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`. Каждый компонент должен находиться в диапазоне 0255, где 0 отсутствие цвета, а 255 наибольшая доступная яркость компонента в светодиодном модуле.
+ `show()` обновляет состояние ленты. Только после её использования все программные изменения перемещаются на светодиодную ленту.
## Почему именно так и можно ли по-другому?
Основные типы лент, которые используются для Клевера 3, это WS2812, WS2812B и SK6812 \(аналог WS2812B\). Они управляются по одному и тому же принципу: для массива светодиодов в ленте отправляется пакет данных по 24 бита на светодиод; каждый светодиод считывает первые 24 бита из пришедших к нему данных и устанавливает соответствующий цвет, остальные данные он отправляет следующему светодиоду в ленте. Нули и единицы задаются разными сочетаниями длительностей высокого и низкого уровня в импульсе.
Основной тип ленты, который используется для Клевера 3 управляются по принципу: для массива светодиодов в ленте отправляется пакет данных по 24 бита на светодиод; каждый светодиод считывает первые 24 бита из пришедших к нему данных и устанавливает соответствующий цвет, остальные данные он отправляет следующему светодиоду в ленте. Нули и единицы задаются разными сочетаниями длительностей высокого и низкого уровня в импульсе.
Все эти ленты поддерживаются для управления библиотекой [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 распберри для правильной работы\) лед лента блокирует все остальные устройства, подключенные по этому каналу.
Есть некоторые особенности работы с каналами, например при передаче данных с помощью PWM \(ШИМ\) перестаёт работать встроенная аудиосистема распберри, при передаче данных по PCM блокируется использование подключенных цифровых аудиоустройств \(при этом встроенная система работает\), а при использовании SPI \(кстати, требуется специальная настройка размера буфера и частоты GPU распберри для правильной работы\) лента блокирует все остальные устройства, подключенные по этому каналу.
Есть некоторые особенности выбора канала DMA для управления лентой: некоторые каналы используются системой, поэтому их использование может привести к неприятным последствиям, например использование 5 канала рушит файловую систему Raspberry, т.к. этот канал используется при чтении-записи на SD карту. Безопасный канал 10, он же установлен по умолчанию в приведённой выше библиотеке.
@@ -226,8 +115,9 @@ pydoc neopixel
1. Если нам не важна работоспособность встроенного аудио на распберри \(и мы его не используем, т. к. аудио и лента будут выдавать билиберду в этом случае\), то можно использовать PWM канал \(для этого требуется подключить вход ленты к одному из следующих GPIO портов распберри: 12, 18, 40, или 52 для PWM0 канала и 13, 19, 41, 45 или 53 для PWM1 канала\).
2. Если нам не важно наличие на шине SPI других устройств, то можно управлять лентой по каналу SPI \(GPIO на распберри 10 или 38\).
Здесь требуется произвести следующие настройки \(только для Raspberry Pi 3\):
* увеличить размер буфера передачи данных для поддержки длинных лент, добавив стройку `spidev.bufsiz=32768` в файл `/boot/cmdline.txt`;
* установить частоту GPU для правильной частоты работы SPI, добавив строку `core_freq=250` в файл `/boot/config.txt`.
+ увеличить размер буфера передачи данных для поддержки длинных лент, добавив стройку `spidev.bufsiz=32768` в файл `/boot/cmdline.txt`;
+ установить частоту GPU для правильной частоты работы SPI, добавив строку `core_freq=250` в файл `/boot/config.txt`.
+ перезагрузить вашу Raspberry, используя команду `sudo reboot`
3. Если нам важна и работа аудио, и подключение к SPI устройств кроме лед ленты, то можно управлять лентой по каналу PCM \(GPIO 21 или 31\). При этом никаких дополнительных манипуляций с Raspberry не требуется.
Исходя из вышеперечисленных способов управления лентой, наилучшим вариантом, позволяющим управлять лентой, сохранить работоспособность встроенной аудиосистемы и возможность подключения всяческих устройств и датчиков по SPI, является управление по каналу PCM \(GPIO 21\) с использованием 10 канала DMA.

View File

@@ -72,4 +72,4 @@ QGroundControl автоматически подключится к запуще
```bash
roslaunch mavros px4.launch fcu_url:=udp://@127.0.0.1:14557
```
```