使用两个XIAO ESP32-S3 Sense板和ESP-NOW构建一个简单的无线对讲机
对讲机是一个经典的电子项目,而ESP32让其制作变得出人意料地简单。得益于XIAO ESP32-S3 Sense内置的麦克风以及低延迟的ESP-NOW协议,两个ESP32设备之间可以直接传输音频。
在这个项目中,我们将使用少量组件构建一个简单的对讲机,能够通过无线方式在两个设备之间传输语音。
功能
•按钮对讲(PTT)——按住按钮发送,松开后收听
•ESP-NOW 音频流传输——设备间直接通信,无需接入点
•内置PDM麦克风——使用XIAO ESP32S3 Sense内置麦克风,无需外接麦克风线路
•线程安全的音频环缓冲区——输入音频被缓冲,并在主循环中回放,避免因WiFi回调线程导致的I2S数据损坏
•自动对等身份识别——两块板均烧录相同固件;每块板在启动时检测自身MAC地址,并配置为设备1或设备2
•周期性链路检查(ping/pong)——设备1每30秒发送一次ping请求,设备2自动回复;双方均播放确认音,确保链路正常连接
•状态提示音——开机提示音、PTT按键按下/释放时的“Roger”蜂鸣声、ping成功/失败提示音,实时合成,无需音频文件
•软件增益带削波保护——可调节麦克风增益,硬性限制以防止溢出失真
工作原理
XIAO ESP32-S3 Sense 通过内置的数字麦克风采集音频。当按下对讲按钮时,系统会收集音频样本,并通过 ESP-NOW 进行无线传输。第二个 ESP32 接收这些音频数据包,并立即通过连接至 I2S 放大器的扬声器播放出来。由于 ESP-NOW 支持设备间的直接通信,因此无需使用 Wi-Fi 路由器或互联网连接。
软件设置
1. 要求
•支持ESP32板的Arduino IDE(通过“工具”中的“管理板”,搜索“esp32”来自Espressif)
•所选芯片:XIAO_ESP32S3
•ESP_I2S 库(随 ESP32 Arduino 核心包附带)
2. 获取每个网板的MAC地址
一个极简的Flash草图,包含:
以115200波特率打开串行监视器,并记录启动时显示的MAC地址。对第二块板重复此操作。
3. 创建 secrets.h
在草图文件夹中,打开名为 secrets.h 的文件:
替换为步骤2中收集的MAC地址。两个板上的secrets.h文件内容相同。
4. 同时闪存两个板
将主 .ino 蓝牙程序上传到两个板子上——两块板上的固件完全相同。每块板在启动时都会读取自身的 MAC 地址,将其与 mac1/mac2 进行比对,并据此进行相应配置(设备 1 成为信标,设备 2 自动响应)。
硬件组件
•Seeed Studio XIAO ESP32S3 传感器
•MAX98357A I2S 放大器
•扬声器:0.25瓦,8欧姆
•Wi-Fi天线
•DFRobot Gravity:数字按钮(黄色)
•滑动开关
•18650电池保护壳 V3
引脚信息:
机载PDM麦克风无需外部接线,只需连接扬声器放大器和PTT按钮即可。
可拆卸电池
所有组件
充电指示灯LED
用法
•开启两块板,每块板在就绪后各发出一次启动提示音。
•按住PTT按钮进行通话——你会听到一个快速上升的蜂鸣声。
•松开按钮以收听——“Roger”(确认)蜂鸣声将提示传输结束。
•每约30秒的静默期间,设备1会发送一次链路检查ping;若链路正常,两块板会同时发出轻柔的双频蜂鸣;若对端无响应,则发出下降频率的提示音。
本文编译自hackster.io





