nanoFramework.Iot.Device.Buzzer
1.0.288-preview.58
Prefix Reserved
See the version list below for details.
dotnet add package nanoFramework.Iot.Device.Buzzer --version 1.0.288-preview.58
NuGet\Install-Package nanoFramework.Iot.Device.Buzzer -Version 1.0.288-preview.58
<PackageReference Include="nanoFramework.Iot.Device.Buzzer" Version="1.0.288-preview.58" />
paket add nanoFramework.Iot.Device.Buzzer --version 1.0.288-preview.58
#r "nuget: nanoFramework.Iot.Device.Buzzer, 1.0.288-preview.58"
// Install nanoFramework.Iot.Device.Buzzer as a Cake Addin #addin nuget:?package=nanoFramework.Iot.Device.Buzzer&version=1.0.288-preview.58&prerelease // Install nanoFramework.Iot.Device.Buzzer as a Cake Tool #tool nuget:?package=nanoFramework.Iot.Device.Buzzer&version=1.0.288-preview.58&prerelease
Buzzer - Piezo Buzzer Controller
This device binding allows playing certain tones using piezo buzzer. It uses PWM with 50% duty cycle and various frequencies.
Piezo buzzers with three pins supported as well as piezo buzzers with two pins.
Device Family
This binding was tested on two types of piezo buzzers. First type of buzzer has two pins vcc and gnd. Second type of buzzers has addition signal pin.
Usage
The Buzzer
class can use either software or hardware PWM. This is done fully transparently by the initialization.
If you want to use the software PWM, you have to call the constructor that takes in one integer: public Buzzer(int pinNumber)
.
To use the hardware PWM, make sure you reference correctly the chip and channel you want to use, and call the constructor that takes two integers (chip and channel).
Also you could explicitly pass a PwmChannel if you want to construct that yourself.
Here's an example how you could use Buzzer
.
using (Buzzer buzzer = new Buzzer(21)); // Initialize buzzer with software PWM connected to pin 21.
{
buzzer.PlayTone(440, 1000); // Play tone with frequency 440 hertz for one second.
}
Important Depending on your platform, you may have to setup the pins properly. In case of ESP32, use the
nanoFramework.Hardware.Esp32
nuget then configure the pin properly likeConfiguration.SetPinFunction(21, DeviceFunction.PWM1);
. That should be done before creating the Buzzer.
Buzzer
allows to play tone for certain duration like in example above.
Or you could start tone playing, perform some operation and then stop tone playing like in a following example.
using (Buzzer buzzer = new Buzzer(21));
{
buzzer.StartPlaying(440);
Thread.Sleep(1000);
buzzer.StopPlaying();
}
The result will be the same as in previous example.
Buzzer
allows you to play only single tone at a single moment. If you will call SetFrequency
sequentially with a different frequencies then the last call will override previous calls. Following example explains it.
using (Buzzer buzzer = new Buzzer(21)); // Initialize buzzer with software PWM connected to pin 21.
{
buzzer.StartPlaying(440);
Thread.Sleep(1000);
buzzer.StartPlaying(880);
Thread.Sleep(1000);
buzzer.StopPlaying();
}
This example will play tone with frequency 440 for a second and then will play tone with a frequency 880 for a second.
Example of Alphabet song played using Buzzer
Schematic
You have 2 types of buzzers. Those with 2 pins only and those with 3 pins. For buzzer with 3 pins: simply connect signal pin of buzzer to commutation pin (any valid GPIO), vcc pin to +5v, gnd pin to ground. For buzzer with 2 pins: connect vcc pin of buzzer to commutation pin (any valid GPIO) and gnd to ground.
You could use any types of buzzers in any order. No changes to code are required.
Code
This sample contains a wrapper on a Buzzer called MelodyPlayer
.
MelodyPlayer and MelodyElement
To create an instance of a MelodyPlayer use following line:
MelodyPlayer player = new MelodyPlayer(new Buzzer(26));
Constructor takes a single parameter type of Buzzer
.
After initialization MelodyPlayer allows playing melody represented by sequence of MelodyElement
objects.
MelodyElement is a base class for two types of elements:
NoteElement
- It will be played. So in a constructor it acceptsNote
andOctave
to determine frequency of the sound andDuration
to determine duration of the sound.PauseElement
- It's supposed to make a pause between two NoteElements so it's only have duration of pause as constructor parameter.
How to use
Following example demonstrates how to create MelodyElement sequence and how to play it using MelodyPlayer:
IListMelodyElement sequence = new ListMelodyElement()
{
new NoteElement(Note.C, Octave.Fourth, Duration.Quarter),
new PauseElement(Duration.Quarter),
new NoteElement(Note.C, Octave.Fourth, Duration.Quarter)
};
using (var player = new MelodyPlayer(new Buzzer(21)))
{
player.Play(sequence, 100);
}
Play
method MelodyPlayer accepts a sequence of MelodyElements as the first parameter and a tempo as the second.
Tempo is an amount of quarter notes per minute. So the more tempo is the quicker melody will be played.
Also there is an overload of MelodyPlayer.Play
with 3 parameters: MelodyElement sequence, tempo and transposition value. Transposition increases or decreases every tone of melody sequence by desired amount of semitones. For example: following line will decrease every tone of sequence by one octave since octave consists of 12 semitones.
player.Play(sequence, 100, -12);
Parallel buzzer playing
As far as MelodyPlayer.Play
method is not asynchronous, calls of this method are wrapped by task like this:
var player1 = new MelodyPlayer(new Buzzer(21));
player1.Play(AlphabetSong, 100, -12);
player1.Play(AlphabetSong, 100);
This approach allows playing two melodies independently however example above plays a single melody in the same time using two different buzzers.
Alphabet song
Presented sample plays Alphabet song using two buzzers. The song is hardcoded in a Buzzer.Sample.cs
file as a sequence of MelodyElements. Read more about Alphabet song on Wikipedia
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net is compatible. |
-
- nanoFramework.CoreLibrary (>= 1.12.0-preview.5)
- nanoFramework.System.Device.Model (>= 1.0.288-preview.20)
- nanoFramework.System.Device.Pwm (>= 1.0.1-preview.6)
- nanoFramework.System.Math (>= 1.4.4-preview.13)
- UnitsNet.nanoFramework.Frequency (>= 4.119.0)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on nanoFramework.Iot.Device.Buzzer:
Package | Downloads |
---|---|
nanoFramework.M5Core
This package includes the nanoFramework.M5Core assembly for .NET nanoFramework C# projects. |
|
nanoFramework.M5StickCPlus
This package includes the nanoFramework.M5StickCPlus assembly for .NET nanoFramework C# projects. |
|
nanoFramework.Fire
This package includes the nanoFramework.Fire assembly for .NET nanoFramework C# projects. |
|
nanoFramework.MagicBit
This package includes nanoFramework.MagicBit, a board package library for MagicBit in .NET nanoFramework C# projects. |
|
nanoFramework.M5Stack
This package includes the nanoFramework.M5Stack assembly for .NET nanoFramework C# projects. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on nanoFramework.Iot.Device.Buzzer:
Repository | Stars |
---|---|
nanoframework/nanoFramework.M5Stack
:package: Board support package for M5Stack, M5StickC and M5StickCPlus for .NET nanoFramework
|
Version | Downloads | Last updated |
---|---|---|
1.2.696 | 205 | 12/16/2024 |
1.2.673 | 564 | 10/23/2024 |
1.2.656 | 682 | 10/3/2024 |
1.2.639 | 505 | 9/6/2024 |
1.2.631 | 310 | 8/28/2024 |
1.2.613 | 433 | 8/9/2024 |
1.2.601 | 227 | 7/26/2024 |
1.2.590 | 399 | 7/17/2024 |
1.2.573 | 599 | 6/19/2024 |
1.2.570 | 143 | 6/14/2024 |
1.2.536 | 809 | 4/15/2024 |
1.2.514 | 598 | 3/22/2024 |
1.2.494 | 395 | 2/28/2024 |
1.2.474 | 535 | 1/24/2024 |
1.2.462 | 184 | 1/5/2024 |
1.2.458 | 174 | 12/20/2023 |
1.2.436 | 474 | 11/10/2023 |
1.2.416 | 408 | 11/8/2023 |
1.2.403 | 412 | 10/6/2023 |
1.2.396 | 398 | 9/27/2023 |
1.2.384 | 421 | 9/6/2023 |
1.2.378 | 511 | 8/16/2023 |
1.2.369 | 454 | 8/2/2023 |
1.2.363 | 349 | 7/28/2023 |
1.2.357 | 454 | 7/19/2023 |
1.2.354 | 379 | 7/14/2023 |
1.2.345 | 464 | 6/21/2023 |
1.2.341 | 389 | 6/14/2023 |
1.2.337 | 527 | 6/7/2023 |
1.2.335 | 250 | 6/2/2023 |
1.2.329 | 401 | 5/26/2023 |
1.2.313 | 737 | 5/12/2023 |
1.2.302 | 524 | 5/10/2023 |
1.2.297 | 476 | 5/3/2023 |
1.2.273 | 1,890 | 3/17/2023 |
1.2.267 | 1,174 | 3/10/2023 |
1.2.263 | 867 | 3/8/2023 |
1.2.259 | 840 | 2/27/2023 |
1.2.256 | 875 | 2/24/2023 |
1.2.253 | 855 | 2/22/2023 |
1.2.222 | 2,162 | 1/9/2023 |
1.2.217 | 1,284 | 1/6/2023 |
1.2.208 | 1,327 | 1/3/2023 |
1.2.203 | 886 | 12/28/2022 |
1.2.159 | 1,558 | 11/14/2022 |
1.2.153 | 2,844 | 11/5/2022 |
1.2.141 | 4,404 | 10/25/2022 |
1.2.128 | 1,299 | 10/22/2022 |
1.2.87 | 10,112 | 9/15/2022 |
1.2.63 | 4,083 | 9/3/2022 |
1.2.47 | 1,737 | 8/15/2022 |
1.2.40 | 2,011 | 8/6/2022 |
1.2.38 | 1,644 | 8/5/2022 |
1.2.32 | 3,753 | 8/2/2022 |
1.2.28 | 1,591 | 8/1/2022 |
1.2.13 | 3,195 | 7/24/2022 |
1.2.10 | 1,602 | 7/23/2022 |
1.1.145.58726 | 3,174 | 7/7/2022 |
1.1.133.52556 | 5,051 | 6/30/2022 |
1.1.121.35854 | 3,918 | 6/26/2022 |
1.1.116.8772 | 2,826 | 6/24/2022 |
1.1.113.2032 | 786 | 6/23/2022 |
1.1.102.51394 | 2,216 | 6/15/2022 |
1.1.99.36719 | 1,660 | 6/14/2022 |
1.1.72.29765 | 7,830 | 5/31/2022 |
1.1.64.21380 | 3,324 | 5/26/2022 |
1.1.58.10097 | 2,190 | 5/23/2022 |
1.1.54.28879 | 1,070 | 5/23/2022 |
1.1.40 | 3,842 | 5/5/2022 |
1.1.3 | 12,288 | 4/15/2022 |
1.1.1 | 510 | 4/14/2022 |
1.0.302 | 5,170 | 3/31/2022 |
1.0.300 | 496 | 3/31/2022 |
1.0.288-preview.114 | 164 | 3/25/2022 |
1.0.288-preview.113 | 134 | 3/25/2022 |
1.0.288-preview.103 | 157 | 3/21/2022 |
1.0.288-preview.100 | 141 | 3/19/2022 |
1.0.288-preview.99 | 148 | 3/18/2022 |
1.0.288-preview.98 | 131 | 3/18/2022 |
1.0.288-preview.94 | 186 | 3/15/2022 |
1.0.288-preview.93 | 134 | 3/15/2022 |
1.0.288-preview.90 | 186 | 3/11/2022 |
1.0.288-preview.86 | 167 | 3/8/2022 |
1.0.288-preview.77 | 189 | 2/27/2022 |
1.0.288-preview.75 | 142 | 2/26/2022 |
1.0.288-preview.65 | 169 | 2/18/2022 |
1.0.288-preview.63 | 155 | 2/16/2022 |
1.0.288-preview.61 | 154 | 2/12/2022 |
1.0.288-preview.58 | 148 | 2/10/2022 |
1.0.288-preview.53 | 143 | 2/9/2022 |
1.0.288-preview.48 | 175 | 2/4/2022 |
1.0.288-preview.41 | 175 | 1/31/2022 |
1.0.288-preview.29 | 156 | 1/28/2022 |
1.0.288-preview.22 | 176 | 1/27/2022 |
1.0.288-preview.20 | 150 | 1/27/2022 |
1.0.288-preview.19 | 146 | 1/27/2022 |
1.0.288-preview.18 | 150 | 1/27/2022 |
1.0.288-preview.5 | 162 | 1/24/2022 |
1.0.288-preview.1 | 160 | 1/21/2022 |
1.0.272 | 588 | 1/10/2022 |
1.0.263 | 396 | 12/24/2021 |
1.0.260 | 533 | 12/10/2021 |
1.0.259 | 181 | 12/9/2021 |
1.0.258 | 192 | 12/7/2021 |
1.0.218 | 365 | 10/18/2021 |
1.0.191 | 190 | 9/29/2021 |
1.0.179 | 179 | 9/22/2021 |