Featured image of post [物联网] 树莓派Pico 通过蜂鸣器播放音乐

[物联网] 树莓派Pico 通过蜂鸣器播放音乐

给大家听一首歌放松心情

接入蜂鸣器比较简单, 需要有一个蜂鸣器, 我买的是这款有/无源蜂鸣器模块

蜂鸣器的线比较少, 只有三根

  • 所以我打算直接参考它的定义来接线

    树莓派 蜂鸣器 备注
    VUSB VCC 电源线, 40 号脚输出 5V
    GP22 I/0 输入输出口
    GND GND 地线, 树莓派上的随便找一个靠近的 GND 接即可
  • 在网上找了一个铁血丹心的歌曲

package main

import (
	"machine"
	"time"

	"tinygo.org/x/drivers/buzzer"
)

type note struct {
	tone     float64
	duration float64
}

func main() {

	// 这里的 22 注意就是 I/O 线
	bzrPin := machine.Pin(22)
	bzrPin.Configure(machine.PinConfig{Mode: machine.PinOutput})

	bzr := buzzer.New(bzrPin)

	song := []note{
		{buzzer.A4, 1.5},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.A4, 1},        // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.E4, 0.5},      // 3

			// 2
			{buzzer.G4, 1},        // 5
			{buzzer.D4, 3},        // 2

			// 3
			{buzzer.C4, 1.5},      // 1
			{buzzer.A3, 0.5},      // .6
			{buzzer.D4, 0.5},      // 2
			{buzzer.E4, 0.5},      // 3
			{buzzer.G4, 0.5},      // 5
			{buzzer.F4, 0.5},      // 4

			// 4
			{buzzer.E4, 3},        // 3
			{buzzer.E4, 0.5},      // 3
			{buzzer.G4, 0.5},      // 5

			// 5
			{buzzer.A4, 1.5},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.A4, 1},        // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.E4, 0.5},      // 5

			// 6
			{buzzer.G4, 1},        // 5
			{buzzer.D4, 3},        // 2

			// 7
			{buzzer.C4, 1.5},      // 1
			{buzzer.A3, 0.5},      // .6
			{buzzer.D4, 0.5},      // 2
			{buzzer.E4, 0.5},      // 3
			{buzzer.G3, 0.5},      // .5
			{buzzer.B3, 0.5},      // .7

			// 8
			{buzzer.A3, 4},        // .6

			{0, 1},              // 0
			{buzzer.E4, 0.5},      // 3
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 1.5},      // 1
			{buzzer.B3, 0.5},      // .7

			//
			{buzzer.A3, 1.5},      // .6
			{buzzer.E3, 0.5},      // .3
			{buzzer.A3, 2},        // .6

			//{buzzer.A3, 1},        // .6
			{buzzer.A4, 0.5},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.E4, 1},        // 3
			{buzzer.G4, 0.5},      // 5
			{buzzer.D4, 0.5},      // 2

			{buzzer.E4, 3},        // 3

			{buzzer.E4, 0.5},      // 3
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 1.5},      // 1
			{buzzer.B3, 0.5},      // .7

			{buzzer.A3, 1.5},        // .6
			{buzzer.E3, 0.5},        // .6
			{buzzer.A3, 2},          // .6

			{0, 1},              // 0
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 0.5},      // 1
			{buzzer.A3, 1},        // .6
			{buzzer.C4, 0.5},      // 1
			{buzzer.D4, 0.5},      // 1

			{buzzer.E4, 3},        // 3*/
			{buzzer.E4, 1},        // 3 逐草四方

			{buzzer.A4, 1.5},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.A4, 1},        // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.E4, 0.5},      // 3

			{buzzer.G4, 1},        // 5
			{buzzer.D4, 3},        // 2

			{buzzer.C4, 1.5},      // 1
			{buzzer.A3, 0.5},      // .6
			{buzzer.D4, 0.5},      // 2
			{buzzer.E4, 0.5},      // 3
			{buzzer.G4, 0.5},      // 5

			{buzzer.E4, 3},        // 3
			{buzzer.E4, 0.5},      // 3
			{buzzer.G4, 0.5},      // 5

			{buzzer.A4, 1.5},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.A4, 1.0},      // 6
			{buzzer.G4, 0.5},      // 5
			{buzzer.E4, 0.5},      // 3

			{buzzer.G4, 1.0},      // 5
			{buzzer.D4, 3},        // 2

			{buzzer.C4, 1.5},      // 1
			{buzzer.A3, 0.5},      // .6
			{buzzer.D4, 0.5},      // 2
			{buzzer.E4, 0.5},      // 3
			{buzzer.G3, 0.5},      // .5
			{buzzer.B3, 0.5},      // .7

			{buzzer.A3, 3},         // .6

			{0, 1},              // 0
			{buzzer.E4, 0.5},      // 3 应知爱意似
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 1.0},      // 1
			{buzzer.C4, 0.5},      // 1
			{buzzer.B3, 0.5},      // .7

			{buzzer.A3, 1.5},      // .6
			{buzzer.E3, 0.5},      // .3
			{buzzer.A3, 2.0},      // .6

			{0, 1},              // 0
			{buzzer.A3, 0.5},      // .6
			{buzzer.G3, 0.5},      // .5
			{buzzer.E3, 1.0},      // .3
			{buzzer.G3, 0.5},      // .5
			{buzzer.D3, 0.5},      // .2

			{buzzer.E3, 3.0},      // .3

			{0, 1},              // 0
			{buzzer.E4, 0.5},      // 3 身经百劫也
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 1.0},      // 1
			{buzzer.C4, 0.5},      // 1
			{buzzer.B3, 0.5},      // .7

			{buzzer.A3, 1.5},      // .6
			{buzzer.E4, 0.5},      // 3
			{buzzer.D4, 2.0},      // 2

			{0, 1},              // 0
			{buzzer.D4, 0.5},      // 2
			{buzzer.C4, 0.5},      // 1
			{buzzer.A3, 1.0},      // .6
			{buzzer.B3, 0.5},      // .7
			{buzzer.G3, 0.5},      // .5

			{buzzer.A3, 3.0},      // .6
	}

	for _, val := range song {
		bzr.Tone(val.tone, val.duration)
		time.Sleep(10 * time.Millisecond)
	}
}
  • 编译烧录
go mod tidy
tinygo flash -target=pico
  • 之后运行就可以听到一首优美的音乐了