在这个实例中,使用Gravity: I2C录放音模块来负责声音的录制和播放,使用树莓派Pico负责逻辑的处理。
这个I2C录放音模块,可以录音10段,总计最长时间为100秒。可以通过按键单独操作,也可以通过I2C由其他设备进行控制。
本次实现的具体功能,就是利用树莓派Pico上的BOOTSEL按键,来控制录音和播放。
通常树莓派Pico上的BOOTSEL按键只能用于下载代码,但这个例子中,可以用于USER输入按键。
长按(3秒+左右),则进入录音模式;
短按,则负责结束录音,或者播放当前录制的内容。
正在代码的编写,使用Arduino IDE。
步骤1 连线参考下图:
具体接线说明:
1. 录放音板的SDA、SCL要接到Pico的4、5脚;Pico其他脚虽然可以复用为该功能,但是必须要接到这两个引脚,否则无法直接使用。
2. 小喇叭直接接到扬声器输出口。喇叭和耳机不能同时使用。
步骤2 代码编写
#include "DFRobot_VoiceRecorder.h"
#define I2C_ADDRESS 0x30 // default I2C address 0x30
DFRobot_VoiceRecorder_I2C voicerecorder(&Wire, I2C_ADDRESS);
void setup()
{
Serial.begin(115200);
while (voicerecorder.begin() != 0) {
Serial.print(voicerecorder.getI2CAddress());
Serial.println("i2c device number error!");
delay(1000);
}
Serial.println("i2c connect success!");
voicerecorder.playVoiceEnd();
voicerecorder.recordVoiceEnd();
pinMode(LED_BUILTIN, OUTPUT);
}
int button_cnt = 0;
bool record_status = 0;
bool play_status = 0;
void loop()
{
if(BOOTSEL==1) {
Serial.print("Push BOOTSEL ");
Serial.println(button_cnt+1);
button_cnt++;
} else {
if(button_cnt>=10) {
// 长按,重新录音
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("Long Button");
// 检测现有录音
voicerecorder.setVoiceNumber(VOICE_NUMBER_0);
// 先停止
voicerecorder.playVoiceEnd();
// 再检查
if(voicerecorder.getVoiceState()==0) {
// 不为空,先删除现有的
Serial.println("Delete old record");
voicerecorder.deleteVoice();
delay(3000);
}
// 设置录音状态
play_status = 0;
record_status = 1;
Serial.println("Start new record");
voicerecorder.recordvoiceStart();
} else if(button_cnt>0) {
// 短按,停止或者播放录音
Serial.println("Short Button");
voicerecorder.setVoiceNumber(VOICE_NUMBER_0);
if(record_status) {
// 录音中,先停止
Serial.println("Stop new record");
voicerecorder.recordVoiceEnd();
record_status = 0;
} else {
if(play_status) {
// 处于播放状态,停止
Serial.println("Stop play record");
voicerecorder.playVoiceEnd();
play_status = 0;
} else {
// 未播放,未录音,则检查是否有,有则播放
if(voicerecorder.getVoiceState()==0) {
// 有录音,则播放
Serial.println("Play record");
play_status = 1;
voicerecorder.playVoiceStart();
} else {
// 没有录音,不播放
Serial.println("No record");
play_status = 0;
}
}
}
} else {
// 无按键,不操作
}
button_cnt = 0;
}
if(record_status==0) {
digitalWrite(LED_BUILTIN, LOW);
} else {
digitalWrite(LED_BUILTIN, HIGH);
}
delay(100);
}
步骤3 代码逻辑
步骤4 实物效果
步骤5 使用视频
步骤6 补充说明
1. 录放音模块的使用可以参考官方资料:https://wiki.dfrobot.com.cn/DFR0699_%E9%9F%B3%E9%A2%91%E5%BD%95%E6%94%BE%E6%A8%A1%E5%9D%97_Pro
其中有DFRobot_VOiceRecord库的安装说明。
2. 树莓派Pico的BOOTSEL按键使用,可以参考:https://www.reddit.com/r/raspberrypipico/comments/lymezt/say_i_want_to_use_the_boot_select_button_as_a/
三春牛-创客2023.01.22
厉害厉害
三春牛-创客2023.01.22
厉害厉害