ggwave 声波传输入门教程:让两台设备隔空互传数据的实操指南

发布时间:2026/9/20 1:23:08
ggwave 声波传输入门教程:让两台设备隔空互传数据的实操指南 ggwave 声波传输入门教程让两台设备隔空互传数据的实操指南【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave两台机器之间隔着一扇玻璃窗没有网线、没有 WiFi甚至碰不到对方。但如果一边有扬声器、另一边有麦克风数据就能直接走空气。ggwave 就是这个思路的一个很小众但很好用的 C 库——把字节变成一段几秒长的 FSK 音调对端听着听解出来。本篇带你从 3 步跑通 Demo到接线、选型、排坑。3 分钟跑通第一个声波 Demo先别管原理让它响起来git clone https://gitcode.com/GitHub_Trending/gg/ggwave cd ggwave mkdir build cd build cmake .. make编完得到./bin/ggwave-cli。开两个终端一个输入文字点发送另一个监听几秒后接收端把那句话原样打回来——声音通信这条链路就通了。不想编译Python 路线更直接pip install ggwave之后核心 API 其实就三步——初始化、编码、解码waveform ggwave.encode(hello python, protocolId1, volume20) # 字节 → 波形 res ggwave.decode(instance, data) # 波形 → 字节发送示例在 examples/ggwave-py/send.py接收在 examples/ggwave-py/receive.py各 20 行左右是理解整个库最快的入口。协议怎么选速度、距离、隐私的取舍ggwave 本质是「FSK 多频移相键控 Reed-Solomon 纠错」数据先切成 4-bit 小块每一拍用 6 个音并行承载 3 字节音与音的间隔约 4.5ms48kHz 采样、1024 点 FFT前后用特殊音标记界定一次传输。单次最多 256 字节码率大约 8~16 字节/秒。协议族就四个方向按需求对号入座拼速度FASTEST系列。每拍只用 3 帧但抗噪最弱适合安静环境 近距离。拼距离/稳定性NORMAL系列每拍 9 帧冗余更足。收发双方协议固定时用ggwave_rxToggleProtocol关掉其他协议能明显减少误触发。拼隐私超声波系列[U]。起始频率 15kHz可听声是 1875Hz——超声波版本旁人基本听不见代价是对方麦克风得能收到高频笔记本小音箱基本无望手机扬声器更靠谱。一对多广播[MT]系列单音协议播一次附近所有接收端都能解。小内存设备比如 AVR可以开GGWAVE_OPERATING_MODE_TX_ONLY_TONES只输出音调表让硬件自己去鸣叫不占波形内存。具体参数都摆在 include/ggwave/ggwave.h 里GGWAVE_PROTOCOL_COUNT之前那串枚举就是全部选项。硬件接线先发送端再接收端发送端Arduino Uno 点按钮喊话对应 examples/arduino-tx/两个轻触开关图中标注按钮 1、2接数字引脚8Ω 小喇叭接在 PWM 引脚上LED 用来指示状态。玩法很直白——按一下按钮 1计数值 1按按钮 2把当前计数值发出去并清零。烧录arduino-tx.ino即可Uno 的 SRAM 很紧张所以 Uno 默认只编少数协议GGWAVE_CONFIG_FEW_PROTOCOLS。接收端Pico 配模拟麦克风对应 examples/rp2040-rx/MAX9814 这类模拟麦克风KY-037/KY-038、WS 声音传感器也行接 Pico 的模拟输入引脚5V 供电。注意 ggwave 要的是原始采样流I2S 数字麦克风用这套例子接不了。Arduino 版接收电路见 examples/arduino-rx/OLED 屏可选。ESP32 则推荐 I2S 麦克风参考 examples/esp32-rx/。实战配方三个具体场景配方一命令行生成 WAV手机播放输入一句话。操作echo WiFi: cafe-2024 | ./bin/ggwave-to-file -p4 msg.wav-p4切到超声波 Fast生成的 wav 发给任何能播声音的设备手机、音箱再播放另一台开着 Waver 或 ggwave-cli 的机器就能收到。协议编号清单写在 examples/ggwave-to-file/README.md。配方二两台 Python 设备互发一台跑send.py另一台跑receive.py中间 3 米左右、安静环境Received text: hello python几秒内就出来。适合临时给树莓派、ESP32 传配置不用接串口屏。配方三Waver 多设备同场广播Waver 是仓库里的 GUI 应用examples/waver/有手机 App 也有桌面版。一台发消息周围几台同时收到点「Spectrum」标签能实时看到对端信号进来的频谱调试距离和音量时非常直观。排坑清单现象 → 原因 → 解法decode返回 -1背景噪声太大。关掉风扇、空调再试仍不行就只启用收发双方实际用的那一个协议。一直返回 0还没收到完整标记对正常现象——持续喂音频帧即可别误当成错误处理。收到的字符串末尾乱码/截断解码结果不带 null 结尾payload[n] 0要自己补头文件注释里专门提醒过这一点。音量调多大参数范围 0~10010~25 基本够用别过 50大了先削波再谈传输。超过 256 字节怎么办单次上限是kMaxDataSize大文件按 256 字节分片应用层自己加序列号和确认实现应用层重传。误触发多ggwave_rxToggleProtocol把不需要的协议关光解码只认你要的那种。下一站想从 Python 跳到 C 层examples/ggwave-cli/main.cpp 展示了init → encode → decode的完整主循环语言绑定全在 bindings/ 下Python、JS/WASM、iOS。把上面任一个配方跑通剩下的就是把你自己的数据塞进去了。【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考