Buzzer/en: различия между версиями

Нет описания правки
(Новая страница: «beeper.beep(0.5, 2) </syntaxhighlight> All sysfs interface settings are supported (recalculation must be done manually; see section on recalculation).»)
 
(не показано 13 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Зуммер (звуковой излучатель)}}
<languages/>
<languages/>
{{DISPLAYTITLE:Buzzer}}
==Description==
==Description==
The Wiren Board controller has a Buzzer (sound emitter) on board. The buzzer is powered by 5V and controlled by the CPU's gpio pin in PWM mode. The buzzer can be controlled through the sysfs interface of the kernel and various software on top of it. Management from the web interface, the wb-rules rule engine and python is now implemented.
The Wiren Board controller has a Buzzer (sound emitter) on board. The buzzer is powered by 5V and controlled by the CPU's gpio pin in PWM mode. The buzzer can be controlled through the sysfs interface of the kernel and various software on top of it. Also, it can be controlled via the web interface, the wb-rules rule engine and python.


==Management from web interface==
==Controlling via web-interface==


[[File:buzzer.png |300px|thumb|right| Buzzer control]]
[[File:buzzer.png |300px|thumb|right| Buzzer control]]
In the web interface of the controller, buzzer control is available in the ''"Devices"'' tab. Parameter ''"Frequency"'' - sound frequency in Hz. ''"Volume"'' - volume (in conventional units, linear scale). The settings are saved when the controller is rebooted.
In the web-interface of the controller, buzzer control is available in the ''"Devices"'' tab. Parameter ''"Frequency"'' - sound frequency in Hz. ''"Volume"'' - volume (in conventional units, linear scale). The settings are saved when the controller is rebooted.


==Control from rule engine==
==Controlling via rule engine==




The buzzer control displayed in the web interface is a virtual device created by the wb-rules system rule when the controller starts. The source code of the rule is available [https://github.com/wirenboard/wb-rules-system/blob/master/rules/buzzer.js on our github].
The buzzer control displayed in the web interface is a virtual device created by the wb-rules system rule when the controller starts. The source code of the rule is available [https://github.com/wirenboard/wb-rules-system/blob/master/rules/buzzer.js on our github].


You can learn more about what virtual devices are for in the [[wb-rules|description of the rules engine]].
You can learn more about virtual devices usage in the [[wb-rules|description of the rules engine]].


The system rule internally implements tone and volume recalculation (see [[#About PWM and parameter recalculation|section on recalculation]]) and work with pwm via sysfs (see [[#Working from sysfs|corresponding section]]). Outside, the user has access to the ''"buzzer"'' device, which has several mqtt controls:
The system rule internally implements tone and volume recalculation (see [[#About PWM and parameter recalculation|section on recalculation]]) and work with pwm via sysfs (see [[#Working from sysfs|corresponding section]]). Outside, the user has access to the ''"buzzer"'' device, which has several mqtt controls:
Строка 39: Строка 40:
Device controls can be used in custom rules. More details about the structure of mqtt topics for virtual and physical devices can be found in our [https://github.com/wirenboard/conventions/blob/main/README.md mqtt convention].
Device controls can be used in custom rules. More details about the structure of mqtt topics for virtual and physical devices can be found in our [https://github.com/wirenboard/conventions/blob/main/README.md mqtt convention].


==Control from python==
==Controlling via python==


On Wiren Board controllers, you can work with the buzzer from python using the ''beeper'' module from the ''wb_common'' package. This is a wrapper around the sysfs interface. The module is preinstalled on all controllers as part of the ''python-wb-common'' deb package. The source code is available [https://github.com/wirenboard/wb-common/blob/master/wb_common/beeper.py on our github].
On Wiren Board controllers, you can work with the buzzer from python using the ''beeper'' module from the ''wb_common'' package. This is a wrapper around the sysfs interface. The module is preinstalled on all controllers as part of the ''python-wb-common'' deb package. The source code is available [https://github.com/wirenboard/wb-common/blob/master/wb_common/beeper.py on our github].
Строка 76: Строка 77:
===Working from sysfs===
===Working from sysfs===


<div class="mw-translate-fuzzy">
To work with pwm through sysfs you need:
Enable PWM output:
#Export port <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/export</syntaxhighlight>After that, the /sys/class/pwm/pwmchip0/pwm0 directory appears
<pre>
# Write the pwm period in nanoseconds <syntaxhighlight lang="bash">echo 250000 > /sys/class/pwm/pwmchip0/pwm0/period # set the period to 250,000 ns, i.e. in 250µs, which corresponds to a frequency of 4kHz</syntaxhighlight>
echo 1 > /sys/class/pwm/pwmchip0/pwm2/enable
#Record volume (calculated from duty-cycle) <syntaxhighlight lang="bash">echo 125000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle # maximum volume is reached when duty_cycle = period / 2 => set duty_cycle to 125,000 ns</syntaxhighlight>
</pre>
#Enable PWM output <syntaxhighlight lang="bash">echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight>
</div>


<div class="mw-translate-fuzzy">
To turn off the buzzer, write 0: <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight>
Shutdown:
<pre>
echo 0 > /sys/class/pwm/pwmchip0/pwm2/enable
</pre>
</div>


<div class="mw-translate-fuzzy">
[https://github.com/contactless/wirenboard/tree/master/examples/beeper '''An example of a bash script for working with pwm''']
[https://github.com/contactless/wirenboard/tree/master/examples/beeper '''Example''']
</div>


Установка периода в наносекундах. Пересчёт из частоты (в килогерцах) в период (в наносекундах) производится по формуле:
Set the period in nanoseconds. The conversion from frequency (in kilohertz) to period (in nanoseconds) is performed using the formula:
<b>
<b>
T(ns) = 1 000 000 / f(kHz)
T(ns) = 1,000,000 / f(kHz)
</b>
</b>
translator, wb_editors
4251

правка