wb_editors
556
правок
Vdromanov (обсуждение | вклад) |
Vdromanov (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
<translate> | <translate> | ||
<!--T:1--> | <!--T:1--> | ||
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules и python. | Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules и python. | ||
Строка 10: | Строка 8: | ||
ШИМ (PWM) - это распространённый способ управления мощностью, подаваемой к нагрузке. | ШИМ (PWM) - это распространённый способ управления мощностью, подаваемой к нагрузке. | ||
<!--T: | <!--T:3--> | ||
В контексте управления Buzzer'ом, нас интересуют 2 параметра PWM: | В контексте управления Buzzer'ом, нас интересуют 2 параметра PWM: | ||
*Коэффициент заполнения (duty cycle) - влияет на громкость звука. Обычно, считается в процентном соотношении от периода сигнала. | *Коэффициент заполнения (duty cycle) - влияет на громкость звука. Обычно, считается в процентном соотношении от периода сигнала. | ||
*Частота PWM (frequency) - влияет на высоту звука (чем выше частота, тем выше и звук). Единица, обратная периоду сигнала. | *Частота PWM (frequency) - влияет на высоту звука (чем выше частота, тем выше и звук). Единица, обратная периоду сигнала. | ||
<!--T: | <!--T:4--> | ||
Ядро Linux предоставляет интерфейс sysfs для pwm, который принимает частоту pwm и duty cycle в '''наносекундах (10<sup>-9</sup>С)'''! Поэтому, для низкоуровневого управления Buzzer'ом нужно производить пересчёт желаемой частоты из kHz в период в наносекундах по формуле: | Ядро Linux предоставляет интерфейс sysfs для pwm, который принимает частоту pwm и duty cycle в '''наносекундах (10<sup>-9</sup>С)'''! Поэтому, для низкоуровневого управления Buzzer'ом нужно производить пересчёт желаемой частоты из kHz в период в наносекундах по формуле: | ||
<b> | <b> | ||
Строка 21: | Строка 19: | ||
</b> | </b> | ||
==Низкоуровневая работа==<!--T: | ==Низкоуровневая работа==<!--T:5--> | ||
===Номер pwm-порта для sysfs===<!--T: | ===Номер pwm-порта для sysfs===<!--T:6--> | ||
<!--T:7--> | |||
Ножка gpio настраивается, как выход PWM в dts ядра linux. Подробнее можно посмотреть [[https://github.com/wirenboard/linux/blob/ef2d87e222b365848fe7262c022ca887b6449432/arch/arm/boot/dts/imx6ul-wirenboard61.dts#L495 на нашем github]]. | Ножка gpio настраивается, как выход PWM в dts ядра linux. Подробнее можно посмотреть [[https://github.com/wirenboard/linux/blob/ef2d87e222b365848fe7262c022ca887b6449432/arch/arm/boot/dts/imx6ul-wirenboard61.dts#L495 на нашем github]]. | ||
<!--T: | <!--T:8--> | ||
В зависимости от ревизии контроллера и версии его ПО, узнать номер порта PWM для Buzzer можно разными способами: | В зависимости от ревизии контроллера и версии его ПО, узнать номер порта PWM для Buzzer можно разными способами: | ||
*По умолчанию (для всех контроллеров до WB6.X.X), номер порта = 2 | *По умолчанию (для всех контроллеров до WB6.X.X), номер порта = 2 | ||
Строка 33: | Строка 33: | ||
Во всех примерах далее будем считать, что номер pwm-порта = 0. | Во всех примерах далее будем считать, что номер pwm-порта = 0. | ||
===Работа из sysfs===<!--T: | ===Работа из sysfs===<!--T:9--> | ||
<!--T:10--> | |||
Для работы c pwm через sysfs нужно: | Для работы c pwm через sysfs нужно: | ||
#Экспортировать порт <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/export</syntaxhighlight>После этого появляется директория /sys/class/pwm/pwmchip0/pwm0 | #Экспортировать порт <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/export</syntaxhighlight>После этого появляется директория /sys/class/pwm/pwmchip0/pwm0 | ||
Строка 40: | Строка 42: | ||
#Включить выход PWM <syntaxhighlight lang="bash">echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | #Включить выход PWM <syntaxhighlight lang="bash">echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | ||
<!--T: | <!--T:11--> | ||
Для того, чтобы выключить Buzzer, нужно записать 0: <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | Для того, чтобы выключить Buzzer, нужно записать 0: <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | ||
Строка 46: | Строка 48: | ||
[https://github.com/contactless/wirenboard/tree/master/examples/beeper '''Пример bash-скрипта для работы с pwm'''] | [https://github.com/contactless/wirenboard/tree/master/examples/beeper '''Пример bash-скрипта для работы с pwm'''] | ||
<!--T: | <!--T:13--> | ||
Установка периода в наносекундах. Пересчёт из частоты (в килогерцах) в период (в наносекундах) производится по формуле: | Установка периода в наносекундах. Пересчёт из частоты (в килогерцах) в период (в наносекундах) производится по формуле: | ||
<b> | <b> | ||
Строка 52: | Строка 54: | ||
</b> | </b> | ||
==Управление из web-интерфейса==<!--T: | ==Управление из web-интерфейса==<!--T:14--> | ||
[[Файл:buzzer.png |250px|thumb|right| Управление Buzzer'ом]] | [[Файл:buzzer.png |250px|thumb|right| Управление Buzzer'ом]] | ||
В web-интрефейсе контроллера управление Buzzer'ом доступно во вкладке ''"Devices"''. От параметра ''"frequency"'' зависит тональность звука. Начиная с 2019 года, параметры Buzzer сохраняются при перезагрузке контроллера. | В web-интрефейсе контроллера управление Buzzer'ом доступно во вкладке ''"Devices"''. От параметра ''"frequency"'' зависит тональность звука. Начиная с 2019 года, параметры Buzzer сохраняются при перезагрузке контроллера. | ||
==Управление из движка правил==<!--T: | ==Управление из движка правил==<!--T:15--> | ||
<!--T: | <!--T:15--> | ||
Управление Buzzer'ом, выведенное в web-интерфейс, внутри представляет собой виртуальное устройство, созданное системным правилом wb-rules при старте контроллера. Исходный код правила доступен [https://github.com/wirenboard/wb-rules-system/blob/master/rules/buzzer.js на нашем github]. | Управление Buzzer'ом, выведенное в web-интерфейс, внутри представляет собой виртуальное устройство, созданное системным правилом wb-rules при старте контроллера. Исходный код правила доступен [https://github.com/wirenboard/wb-rules-system/blob/master/rules/buzzer.js на нашем github]. | ||
<!--T: | <!--T:16--> | ||
О том, для чего нужны виртуальные устройства можно узнать подробнее в [[#Движок_правил_wb-rules:Первое правило с виртуальным устройством|описании движка правил]]. | О том, для чего нужны виртуальные устройства можно узнать подробнее в [[#Движок_правил_wb-rules:Первое правило с виртуальным устройством|описании движка правил]]. | ||
<!--T: | <!--T:17--> | ||
Системное правило внутри реализует пересчёт тональности и громкости (см [[#О ШИМ и пересчёт параметров|раздел о пересчёте]]) и работу с pwm через sysfs (см [[#Работа из sysfs|соответствующий раздел]]). Наружу пользователю доступно устройство ''"buzzer"'', имеющее несколько mqtt-контролов: | Системное правило внутри реализует пересчёт тональности и громкости (см [[#О ШИМ и пересчёт параметров|раздел о пересчёте]]) и работу с pwm через sysfs (см [[#Работа из sysfs|соответствующий раздел]]). Наружу пользователю доступно устройство ''"buzzer"'', имеющее несколько mqtt-контролов: | ||
{| class="wikitable" | {| class="wikitable" | ||
Строка 87: | Строка 89: | ||
|} | |} | ||
<!--T: | <!--T:18--> | ||
Контролы устройста можно использовать в собственных правилах. Подробнее о структуре mqtt-топиков виртуальных и физических устройств можно узнать из нашей [https://github.com/wirenboard/homeui/blob/master/conventions.md mqtt-конвенции]. | Контролы устройста можно использовать в собственных правилах. Подробнее о структуре mqtt-топиков виртуальных и физических устройств можно узнать из нашей [https://github.com/wirenboard/homeui/blob/master/conventions.md mqtt-конвенции]. | ||
==Управление из python==<!--T: | ==Управление из python==<!--T:19--> | ||
<!--T: | <!--T:20--> | ||
На контроллерах Wiren Board работать с Buzzer можно из python с помощью модуля ''beeper'' из пакета ''wb_common''. Модуль представляет собой обёртку вокруг интерфейса sysfs. Модуль предустановлен на все контроллеры в составе deb-пакета ''python-wb-common''. Исходный код доступен [https://github.com/wirenboard/wb-common/blob/master/wb_common/beeper.py на нашем github]. | На контроллерах Wiren Board работать с Buzzer можно из python с помощью модуля ''beeper'' из пакета ''wb_common''. Модуль представляет собой обёртку вокруг интерфейса sysfs. Модуль предустановлен на все контроллеры в составе deb-пакета ''python-wb-common''. Исходный код доступен [https://github.com/wirenboard/wb-common/blob/master/wb_common/beeper.py на нашем github]. | ||
<!--T: | <!--T:21--> | ||
Пример работы с Buzzer из python: | Пример работы с Buzzer из python: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> |