Grove対応 ブザーモジュール

English page

シンプルなビープ音のほか、ユーザが設定した単音メロディ(最大61音)を鳴らすことができるモジュールです。
インターフェイスはGrove(I2C)とUSBに対応しています。

使用例

各部の名称

内容物

販売

販売ページ(スイッチサイエンス)
※販売ページに表示されている在庫数のほかにも、追加の在庫を保有している場合がございます。大量注文や在庫に関する問い合わせはこちらまでご連絡ください。

通信仕様

仕様

ファームウェアのアップデート

詳細を見る

必要なもの

  • 製品本体
  • USB Type-Cケーブル
  • PC

必要なソフトウェア

本製品に搭載しているSTMicroelectronics社のマイコンへの書込み用ソフト"STM32CubeProg"が必要です。下記のサイトからソフトウェアをダウンロードしインストールしてください。
https://www.st.com/ja/development-tools/stm32cubeprog.html
※本ソフトウェアをダウンロードするためにはmySTへの登録(無料)が必要です。

ファームウェアの書き換え手順

  1. こちらから最新版のファームウェアをダウンロードします。
  2. 製品にUSBケーブルやGroveケーブル等が接続されている場合、全て抜いてください。
  3. ブートローダーモードに移行します。「ファームウェア書き換え用BOOTボタン」を押したまま、USBケーブルを挿してください。
  4. STM32CubeProgからファームウェアを書き込みます。こちらのページの手順に従いファームウェアを書き込んでください。
  5. USBケーブルを抜いてください。

資料

回路図

基板の外形寸法

DXFファイル:dimension_dxf.zip

3D CADデータ

STEPファイル:3d_step.zip

プログラム例

M5Stack Core2のGrove(I2C)を用いたプログラム例

配線図・サンプルコードを見る

#include <M5Core2.h>

#define BUZZER_I2C_DEV_ADDR	0x16
#define SBEEP_REG_ADDR			0x01
#define CBEEP_REG_ADDR			0x02
#define FREQ0_REG_ADDR			0x04

void setup() {
  M5.begin(true, true, true, true);

  union _16bit_u
  {
    uint16_t uint16_data;
    uint8_t uint8_data[2];
  };

  struct note_t
  {
    union _16bit_u frequency;
    union _16bit_u period;
  };

  M5.Lcd.clear();
  M5.Lcd.setCursor(0, 0);
  delay(500);


  // Simple Beep (1kHz, 50ms, x3)
  M5.Lcd.setFont(FSB24);
  M5.Lcd.println();
  M5.Lcd.println("Simple Beep");
  M5.Lcd.setFont(FSB18);
  M5.Lcd.println("1kHz, 50ms, x3");
  delay(500);
  Wire.beginTransmission(BUZZER_I2C_DEV_ADDR);
  Wire.write(SBEEP_REG_ADDR);
  Wire.write(0b10000111); // 1kHz, 50ms, x3
  Wire.endTransmission();
  delay(2000);


  // Custom Beep (Amaryllis)
  M5.Lcd.clear();
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.setFont(FSB24);
  M5.Lcd.println();
  M5.Lcd.println("Custom Beep");
  M5.Lcd.setFont(FSB18);
  M5.Lcd.println("Amaryllis");
  const uint16_t freqs[] = {784,880,784,1047,784,880,784,880,880,784,880,784,698,659,587,659,523,784,880,784,1047,784,880,784,880,880,784,880,784,698,659,587,523,65535};
  const uint16_t periods[] = {300,300,300,300,300,300,600,300,300,300,300,150,150,150,150,300,300,300,300,300,300,300,300,600,300,300,300,300,150,150,150,150,600,0};
  const int note_num = sizeof(freqs) / sizeof(uint16_t);
  struct note_t notes[note_num];
  for(int i = 0; i < note_num; i++) {
    notes[i].frequency.uint16_data = freqs[i];
    notes[i].period.uint16_data = periods[i];
  }

#define NOTE_BLOCK_SIZE 16  // Write in separate blocks because it cannot write at once.
  int repeat_cnt = note_num / NOTE_BLOCK_SIZE + 1;
  for(int repeat_i = 0; repeat_i < repeat_cnt; repeat_i++) {
    Wire.beginTransmission(BUZZER_I2C_DEV_ADDR);
    Wire.write(FREQ0_REG_ADDR + repeat_i * NOTE_BLOCK_SIZE * 4);
    int buf_i = (note_num > (repeat_i + 1) * NOTE_BLOCK_SIZE) ? (repeat_i + 1) * NOTE_BLOCK_SIZE : note_num;
    int start_num = repeat_i * NOTE_BLOCK_SIZE;
    int end_num = (note_num > (start_num + NOTE_BLOCK_SIZE)) ? start_num + NOTE_BLOCK_SIZE : note_num;
    for(int note_i = start_num; note_i < end_num; note_i++) {
      Wire.write(notes[note_i].frequency.uint8_data[0]);
      Wire.write(notes[note_i].frequency.uint8_data[1]);
      Wire.write(notes[note_i].period.uint8_data[0]);
      Wire.write(notes[note_i].period.uint8_data[1]);
    }
    Wire.endTransmission();
    delay(500); // wait for device ready
  }

  Wire.beginTransmission(BUZZER_I2C_DEV_ADDR);
  Wire.write(CBEEP_REG_ADDR);
  Wire.write(1);  // repeat: x1
  Wire.endTransmission();
}

void loop() {
}


  1. モジュールの電源はUSBとGroveのどちらからでも供給可能です。また、双方を接続しても問題ありません(GNDは接続されています)。 ↩︎

  2. 基本的にPCとUSBで接続すると自動的にUSBドライバがインストールされますが、自動的にUSBドライバがインストールされない場合はこちらのページ下部のCH341SER.EXEをインストールして下さい。 ↩︎