
用声音传数据ggwave 声波数据传输完整指南【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave把 WiFi 凭据发给一台断网的 ESP32让对面设备的喇叭叫几声就行。ggwave 是一个轻量的声波数据传输库把字节编码成一串声波音调接收端再把声音解回数据让没有线缆、没有网络的设备互传小数据常用于物联网配网、设备间近距离配对、文件分享这类场景。线缆会成为麻烦的时候这些情况你可能都遇到过新买的 ESP32 躺在机房里断网、手边没有串口线WiFi 凭据只能回工位拖线去配两台隔离的电脑想递一小段密钥USB 线却在抽屉里桌上块带喇叭的单片机你想从手机给它递文字可它没有蓝牙模块。这些需求都不值当加一个无线模块却全卡在没有通道上——而声音是任何带喇叭和麦克风的设备本来就有的通道。ggwave 做的事就是让这条通道能跑数据。声波怎么驮字节原理速览这一节回答声音为什么能当数据线用。ggwave 采用多频 FSK 调制数据先切成 4-bit 小块每个小块对应一个固定频点一次用 6 个音调同时发出 3 字节共 96 个等间距频点铺在 4.5 kHz 带宽内——可听声系列从 1875 Hz 起超声波系列在 15 kHz。数据前后包着声音标记接收端听到标记才开始录再用 FFT 还原频谱、把频点读回比特最后经 Reed-Solomon 纠错码把原始数据抠出来。库本身只管字节 ↔ 波形的换算音频的进出由你自己接。waver 客户端界面一边输入文本另一边解码出收到的内容选协议时记住三档就够了GGWAVE_PROTOCOL_AUDIBLE_NORMAL / FAST / FASTEST人耳可闻方便调试FAST 系列更快但对噪声更敏感GGWAVE_PROTOCOL_ULTRASOUND_NORMAL / FAST / FASTEST15 kHz 超声波听不见、更私密传输距离更短GGWAVE_PROTOCOL_MT_*与DT_*低频单音系列便宜蜂鸣器也能发MT 是一对多广播五步跑通声波数据传输 Demo这是你真正要动手的部分跑完手里会有一个能用的收发对。核心 API 只有三个ggwave_init、ggwave_encode、ggwave_decode。1. 克隆并构建。库本身无第三方依赖但示例需要 SDL2Ubuntusudo apt install libsdl2-dev。git clone https://gitcode.com/GitHub_Trending/gg/ggwave --recursive cd ggwave mkdir build cd build cmake .. make为什么这样构建一条命令把库和全部示例都编出来bin/下有一堆能直接跑的程序。2. 跑一把./bin/ggwave-cli。敲一句文本就是可工作的发送端没配音响也没关系ggwave-to-file能把波形写成 WAV先用眼睛验证流程。3. 初始化实例。就两行ggwave_getDefaultParameters()拿默认参数塞给ggwave_init()返回实例 id。默认 48 kHz、每帧 1024 采样、采样格式都配好了不用改就能起步。4. 把数据编码成波形。正确姿势是先问再写ggwave_Parameters p ggwave_getDefaultParameters(); ggwave_Instance inst ggwave_init(p); const char * msg hello ggwave; int n ggwave_encode(inst, msg, 12, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, NULL, 1); char waveform[8192]; ggwave_encode(inst, msg, 12, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, waveform, 0);为什么先来一次 queryquery1时不真正编码只告诉你会生成多大的波形先照这个尺寸备好缓冲区再实写不会溢出。音量在 0–10025 是安全值。5. 解码把麦克风数据一帧一帧喂进去。char payload[256]; while (true) { // 读一帧麦克风采样到 micFrame int k ggwave_decode(inst, micFrame, frameBytes, payload); if (k 0) printf(收到 %d 字节\n, k); }注意解码结果不带\0结尾想当字符串打印就自己补上。跑通之后的效果大致是这样一次完整的 ggwave 声波数据传输发送端发声接收端解码出文本跨平台实战Arduino、浏览器、桌面怎么接这一节回答我的硬件上怎么接每个平台给你 50 字内的要点。Arduino Uno只发一个通用蜂鸣器就够。示例用GGWAVE_OPERATING_MODE_TX_ONLY_TONES模式只输出音调列表再逐条tone()播放AVR 这种小内存芯片也跑得动。完整例程见 examples/arduino-tx。ESP32只收模拟麦如 MAX9814接 GPIO35或用 I2S MEMS 麦 SPH0645例程还带 OLED 显示见 examples/esp32-rx。桌面与浏览器桌面跑ggwave-cli或 waver 图形应用examples/waver浏览器走 bindings/javascript/ 里的 Web 封装Python 一行pip install ggwave即可用。Arduino Uno 电路按钮触发发送蜂鸣器发出 ggwave 音调调优与踩坑收不到数据时怎么办这几条都是跑起来之后会真实撞上的如果一直收不到先调音量发送端音量放到 15–30收发距离收到几十厘米内再试。如果环境吵换超声波系列协议或打开 DSS直接序列扩展模式抗干扰。如果喇叭发不出 MT/DT 协议所需的 1–2 kHz 低频把收发两端的freqStart同时上调相同的 bin 数一个 bin 等于 46.875 Hz。如果想一次发更长的数据变长负载单次上限 140 字节固定长度负载上限 64 字节更大的数据要靠你自己的协议分片。如果误报多用ggwave_rxToggleProtocol只留你需要的协议既能减少误检也能省内存。如果你在意距离安静环境下可听声协议通常能到几米超声波只有 1–2 米别指望超声波跨房间。延伸与资源想继续挖直接看仓库里这些路径examples/ggwave-cli命令行收发工具验证最快examples/ggwave-to-file把文本编码成 WAV 文件没有喇叭也能调试examples/ggwave-from-file反过来解码 WAV 文件离线回放examples/ggwave-py/send.pyPython 发送完整例程examples/spectrogram频谱图可视化工具亲眼看频点落在哪tests/test-ggwave.cpp带加噪测试的 API 用法参考下一步动作开两个终端把 examples/ggwave-py/send.py 和 examples/ggwave-py/receive.py 跑起来两分钟后你手里就有第一次完整的 ggwave 声波数据传输。【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考