建网站中企动力最行培训课程名称大全
Arduino 随身听
该项目基于 ESP8266 模块,通过 Arduino IDE 编程,实现音频播放和 OLED 波形显示,结合 3D 外壳,实现便携随身听的项目设计。
介绍
Arduino 随身听,通过网络远程控制并实现WiFi音频传输和播放。
基于ESP8266模组,通过 Arduino IDE 上传代码,实现音频传输;
通过模拟 PWM 输出实现音频播放。
详见:Arduino 无线随身听 - 立创开源硬件平台 .
参数特点
- ESP8266 全 I/O 管脚引出,便于外接模块和调试;
- IIC 通信接口与OLED 屏接口,便于快速验证和信息传递;
- 板载 DS18B20 传感器,实现环境温度实时监测;
- 多组 5V 和 3.3V 以及 GND 电源排针引出,便于多种外设连接;
- 四角螺丝孔固定,实现电气隔离,安全有保障;
- 网格状铺铜,提升手感。
3D 外壳
- 排针(I/O及电源)顶部挖槽以及圆角矩形设计,便于外接杜邦线调试;
- 螺丝孔沉头孔设计,确保表面平整与美观;
- OLED 接口及四角定位孔设计,使连接更加方便;
- Type-C 供电接口精准侧边挖槽,便于供电连接;
- RST 与 BOOT 按键侧边挖槽,便于安装按键与控制按钮;
- DS18B20 传感器对应侧边多孔挖槽,增强设备与环境的空气对流及热交换,实现精确测温;
原理图
PCB
实物展示
硬件连接
包括 OLED 和扬声器分别与 ESP8266 模组的接线方式。
OLED
OLED | ESP8266 |
---|---|
GND | GND |
VCC | 3V3 |
SCL | GPIO14 |
SDA | GPIO2 |
扬声器
Speaker | ESP8266 |
---|---|
Positive ( + ) | GPIO16 (D0) |
Negative ( - ) | GND |
测试代码
#include <Arduino.h>
#include <U8g2lib.h>// OLED配置(I2C)
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 2, /* reset=*/ U8X8_PIN_NONE);// 音频配置
const int speakerPin = D0; // GPIO16
const int sampleRate = 8000;
const unsigned long sampleInterval = 1000000 / sampleRate;
unsigned long lastSampleTime = 0;// 波形显示配置
#define WAVE_BUFFER_SIZE 128
int waveBuffer[WAVE_BUFFER_SIZE];
int waveIndex = 0;
bool isPlaying = true;// 音频数据(示例为1kHz正弦波,实际使用时替换为你的音频数据)
const uint16_t SOUND_LENGTH = 80; // 10ms音频(8000Hz/80=100Hz)
const uint8_t soundData[SOUND_LENGTH] PROGMEM = {128,140,152,164,176,187,197,206,213,219,223,225,225,223,219,213,206,197,187,176,164,152,140,128,115,103,91,79,68,58,49,42,36,32,30,30,32,36,42,49,58,68,79,91,103,115,128,140,152,164,176,187,197,206,213,219,223,225,225,223,219,213,206,197,187,176,164,152,140,128,115,103,91,79,68,58,49,42,36,32
};void setup() {Serial.begin(115200);// 初始化OLEDu8g2.begin();u8g2.clearBuffer();u8g2.setFont(u8g2_font_6x10_tr);u8g2.drawStr(0, 10, "Audio Looper");u8g2.drawStr(0, 25, "PWM Sample Rate: 8kHz");u8g2.sendBuffer();// 设置PWMpinMode(speakerPin, OUTPUT);analogWriteFreq(sampleRate); // 设置PWM频率为8kHzanalogWriteRange(255); // 8位分辨率delay(2000);
}void loop() {static uint16_t sampleIndex = 0;unsigned long currentTime = micros();if (currentTime - lastSampleTime >= sampleInterval) {lastSampleTime = currentTime;if (isPlaying) {// 读取音频样本uint8_t sample = pgm_read_byte(&soundData[sampleIndex]);// PWM输出analogWrite(speakerPin, sample);// 存储波形数据waveBuffer[waveIndex] = sample;waveIndex = (waveIndex + 1) % WAVE_BUFFER_SIZE;// 更新显示if (waveIndex == 0) {drawWaveform();}// 循环播放sampleIndex = (sampleIndex + 1) % SOUND_LENGTH;} else {analogWrite(speakerPin, 0); // 静音}}
}void drawWaveform() {u8g2.clearBuffer();// 绘制坐标轴u8g2.drawHLine(0, 32, 128);// 绘制波形for (int i = 0; i < WAVE_BUFFER_SIZE-1; i++) {int currentIdx = (waveIndex + i) % WAVE_BUFFER_SIZE;int nextIdx = (waveIndex + i + 1) % WAVE_BUFFER_SIZE;int y1 = map(waveBuffer[currentIdx], 0, 255, 63, 0);int y2 = map(waveBuffer[nextIdx], 0, 255, 63, 0);u8g2.drawLine(i, y1, i+1, y2);}// 显示状态信息u8g2.setFont(u8g2_font_6x10_tr);u8g2.setCursor(0, 10);u8g2.print(isPlaying ? "Playing" : "Stopped");u8g2.sendBuffer();
}
保存代码,编译并上传至开发板,复位运行。
效果展示
连接硬件,上传固件复位运行,效果如下
扬声器循环播放存储于 Flash 中的音频,同时 OLED 显示其波形。
总结
本文介绍了基于 ESP8266 模块,通过 Arduino IDE 编程,实现音频播放和 OLED 波形显示,结合 3D 外壳,实现便携随身听的项目设计,为相关产品的快速开发和应用提供了参考。