ESP32究竟有什么魔力?逆袭Arduino,取代STM32成为单片机市场的新晋
失传技术研究所工作室
编辑于 2025年11月03日 21:45

ESP32 和 ESP8266 的区别

ESP32 和 ESP8266 是乐鑫推出的两款广泛应用于物联网的 Wi-Fi 模块。以下是它们的主要区别:

处理器与性能 ESP8266 配备单核 80MHz 的 Tensilica L106 处理器,而 ESP32 使用双核 Xtensa LX6 处理器,主频高达 240MHz,性能显著提升。

内存与存储 ESP8266 的 RAM 通常为 64KB 至 512KB,闪存为 1MB 至 4MB。ESP32 提供更大的内存选项,RAM 最小 512KB,闪存最大可达 16MB。

通信功能 ESP8266 仅支持 2.4GHz Wi-Fi,而 ESP32 除了 2.4GHz Wi-Fi,还支持蓝牙 5.0 和 BLE,通信能力更强。

GPIO 和外设 ESP8266 通常有 16 个 GPIO 引脚,外设支持有限。ESP32 提供多达 40 个 GPIO 引脚,支持更多外设如 SPI、I2C 和 UART。

功耗与电源管理 ESP8266 功耗较高,电源管理功能简单。ESP32 支持多种睡眠模式,功耗更低,适合电池供电的应用。

开发环境 ESP8266 通常使用 Arduino IDE 开发,社区支持广泛。ESP32 除了支持 Arduino IDE,还支持功能更强大的 ESP-IDF 框架。

安全性 ESP8266 安全性较低,缺乏内置安全特性。ESP32 支持 WPA/WPA2 协议,并提供安全启动和闪存加密等高级安全功能。

适用场景 ESP8266 适合简单的物联网项目,如家庭自动化和小型传感器网络。ESP32 则适用于需要高性能和高级功能的复杂项目。

成本与市场定位 ESP8266 成本低廉,适合入门级和教育市场。ESP32 功能更强,价格略高,适合专业开发者和商业应用。

总结来说,ESP32 在性能、功能和扩展性上全面优于 ESP8266,但 ESP8266 因其低成本和易用性,仍然在简单项目中占有一席之地。选择哪款模块取决于具体的项目需求和预算。

ESP8266 的 DAC 功能与实现1

2

3

ESP8266 本身并未配备硬件 DAC(数模转换器),但可以通过软件模拟或外部 I2S DAC 实现音频输出。以下是关于 ESP8266 DAC 功能的详细说明和实现方法。

软件模拟 DAC

ESP8266 可以通过软件实现 Delta-Sigma DAC。这种方法利用 I2S 接口,通过高频脉冲密度调制(PDM)生成模拟信号。虽然音质不如硬件 DAC,但对于简单的音频输出需求已经足够。

以下是一个使用软件模拟 DAC 播放 MP3 文件的代码示例:

#include <Arduino.h>

#include "AudioFileSourceSPIFFS.h"

#include "AudioGeneratorMP3.h"

#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;

AudioFileSourceSPIFFS *file;

AudioOutputI2SNoDAC *out;

void setup() {

Serial.begin(115200);

delay(1000);

SPIFFS.begin();

file = new AudioFileSourceSPIFFS("/example.mp3");

out = new AudioOutputI2SNoDAC();

mp3 = new AudioGeneratorMP3();

mp3->begin(file, out);

}

void loop() {

if (mp3->isRunning()) {

if (!mp3->loop()) mp3->stop();

} else {

Serial.println("Playback finished");

delay(1000);

}

}

此代码使用 ESP8266Audio 库,通过软件模拟 DAC 输出音频。需要将 MP3 文件上传到 SPIFFS 文件系统中。

使用外部 I2S DAC

ESP8266 支持通过 I2S 接口连接外部 DAC,例如 PCM5102 或 Adafruit I2S DAC。这种方法可以提供更高质量的音频输出。

连接方式:

  • LRC(LRCLK): GPIO2

  • BCLK(Bit Clock): GPIO15

  • DIN(Data In): GPIO3

以下是使用 I2S DAC 播放音频的代码示例:

#include <Arduino.h>

#include "AudioFileSourceSPIFFS.h"

#include "AudioGeneratorMP3.h"

#include "AudioOutputI2S.h"

AudioGeneratorMP3 *mp3;

AudioFileSourceSPIFFS *file;

AudioOutputI2S *out;

void setup() {

Serial.begin(115200);

delay(1000);

SPIFFS.begin();

file = new AudioFileSourceSPIFFS("/example.mp3");

out = new AudioOutputI2S();

mp3 = new AudioGeneratorMP3();

mp3->begin(file, out);

}

void loop() {

if (mp3->isRunning()) {

if (!mp3->loop()) mp3->stop();

} else {

Serial.println("Playback finished");

delay(1000);

}

}

注意事项

  1. 硬件连接:确保 I2S DAC 的引脚正确连接到 ESP8266 的 GPIO。

  2. 性能优化:ESP8266 的 CPU 频率应设置为 160MHz,以确保音频解码的流畅性。

  3. 文件系统:使用 SPIFFS 文件系统存储音频文件,需提前上传文件。

  4. 音频格式支持:ESP8266 支持 MP3、WAV、FLAC 等多种格式,但需根据内存限制选择合适的格式。

通过上述方法,ESP8266 可以实现音频播放功能,无论是通过软件模拟 DAC 还是外部 I2S DAC,都可以满足不同场景的需求。

ESP32 提供两个 8 位 DAC 通道(GPIO25 和 GPIO26),可以将数字信号转换为模拟电压,范围为 0V 到 3.3V。通过 dacWrite 函数,可以轻松实现 DAC 输出。

示例代码:使用 dacWrite 输出模拟信号

以下代码展示了如何通过 dacWrite 控制两个 LED 的亮度变化,形成呼吸灯效果:

#include <Arduino.h>

#define LED1 25 // DAC 通道 1

#define LED2 26 // DAC 通道 2

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

}

void loop() {

// 渐亮

for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {

dacWrite(LED1, dutyCycle); // 输出到 LED1

dacWrite(LED2, 255 - dutyCycle); // 输出到 LED2

delay(5);

}

// 渐暗

for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {

dacWrite(LED1, dutyCycle);

dacWrite(LED2, 255 - dutyCycle);

delay(5);

}

}

运行此代码后,连接到 GPIO25 和 GPIO26 的 LED 将交替变亮和变暗,形成呼吸灯效果。

注意事项

  1. 支持的引脚:DAC 功能仅支持 GPIO25 和 GPIO26,其他引脚调用 dacWrite 将无效。

  2. 电压范围:输出电压范围为 0V 到 Vref(通常为 3.3V),对应数字值范围为 0 到 255

  3. 硬件限制:DAC 输出的波形在高频下可能会失真,不建议频率超过 200kHz

通过上述方法,您可以轻松实现 ESP32 的 DAC 功能,用于音频输出、信号生成等场景。