如何快速用ggwave实现跨设备声波传输:完整指南
如何快速用ggwave实现跨设备声波传输完整指南【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave两台设备没有网络、没有 USB 线你却想把一条 WiFi 口令或一小段文件递过去——这种活儿正是声波传输擅长的。开源项目 ggwave 让扬声器和麦克风充当隐形线缆发送端把数据编进声音里放出去接收端用话筒收下来再还原成数据。它能帮你干这几件事离线设备配置物联网开发板刚开箱把 WiFi 账号密码直接说给它不用翻手机查密码。近距离设备配对网络不通或被屏蔽的环境里两台相邻设备用超声波数据传输交换密钥、联系信息。近距文件分享几 KB 的小文件隔空过墙相当于声波版的传文件全程无需网络。一对多广播一个喇叭放N 个话筒同时收效果类似声音版二维码。5分钟上手从安装到发出第一条声波消息先把仓库拉下来构建git clone https://gitcode.com/GitHub_Trending/gg/ggwave --recursive cd ggwave mkdir build cd build cmake .. make构建完可以直接跑./bin/ggwave-cli命令行收发数据只写 Python 的话pip install ggwave也能立刻用起来。核心 API 在 include/ggwave/ggwave.h 中整个流程就是三步// ① 初始化取默认参数48000Hz 采样率等创建一个实例 ggwave_Parameters p ggwave_getDefaultParameters(); ggwave_Instance inst ggwave_init(p); // ② 编码把要发的字节变成一段能播放的波形先用 query1 问出需要多大缓冲区 int n ggwave_encode(inst, hello, 5, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, NULL, 1); char *wave malloc(n); ggwave_encode(inst, hello, 5, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, wave, 0); // ③ 解码接收端循环喂入采集到的音频样本收到数据时返回字节数 int len ggwave_decode(inst, micSamples, nBytes, payload);人话版说明ggwave_init是装好翻译器ggwave_encode把数据变成声音ggwave_decode把声音还原成数据。如果不想写代码仓库里的 examples/waver/ 是一个现成的图形界面应用按场景选协议别猜看表协议常量命名有规律前半段是频段AUDIBLE可听声 /ULTRASOUND超声波后半段是速度档位NORMAL→FAST→FASTESTDT是双工DuplexMT是一对多Many-Target。对照下面的表选就行你最在意推荐协议一句话点评传得快GGWAVE_PROTOCOL_AUDIBLE_FASTEST可听频段最快档环境吵时容易出错传得稳、远GGWAVE_PROTOCOL_AUDIBLE_NORMAL速度换稳定可听隐私人听不见GGWAVE_PROTOCOL_ULTRASOUND_NORMAL超声波频段旁人无感双向对话GGWAVE_PROTOCOL_DT_FAST双工协议收发互答一对多广播GGWAVE_PROTOCOL_MT_FASTEST单发多收效率优先收发端怎么接线发送端Arduino UnoArduino Uno——负责计算并把波形信号推出去无源蜂鸣器——当喇叭用播放编码后的声波按键——按一下发一次示例代码在 examples/arduino-tx/接线图如下接收端ESP32NodeMCU-ESP32——片内 12 位 ADC 实时采集麦克风模拟信号麦克风——模拟款KY-037 / KY-038 等或 I2S MEMS 款SPH0645均可OLED SSD1306可选——把收到的文字直接显示出来模拟麦克风接 GPIO 35I2S 麦克风接 BCLK / Data / LRCL 三根线完整引脚表见 examples/esp32-rx/手里只有树莓派 PicoRP2040也能收接一个模拟麦克风即可参考 examples/rp2040-rx/参数调优与抗干扰5个让接收更稳的调节音量ggwave_encode的 volume 参数范围 0–100建议落在 15–30官方注释认为 25 比较合适别超过 50。采样率收发两端都按 48000 Hz 配置默认值支持范围 1000–96000 Hz两端不一致时库会自动重采样但保持一致最省心。嘈杂环境换GGWAVE_PROTOCOL_ULTRASOUND_*系列——人耳听不到的频段不容易被人声、音乐盖住。应用层重传ggwave_decode返回不大于 0 就按失败处理重发一轮。库内置 Reed-Solomon 纠错但信号太弱时纠错也救不回来。锁定协议收发两端协议固定时用ggwave_txToggleProtocol/ggwave_rxToggleProtocol关掉用不上的协议误报更少、内存占用更低。避坑这几个问题别踩以为能隔空几米必达→ 可听声协议在安静环境大约 3–5 米超声波只有 1–2 米传不远就拉近距离、换NORMAL档。想一口气塞大文件→ 单次解码输出上限 256 字节变长模式有效负载 ≤140 字节、定长模式 ≤64 字节大文件必须分片发送、上层重组。把解码结果直接当字符串用→ 返回的数据不自动以\0结尾按字符串处理前记得自己补上payload[len] 0否则会读到脏数据。期待一次必成功→ 返回 -1 通常是环境噪声太大先调低音量、缩短距离再检查两端协议是否一致最后上重传。到这里剩下的就是动手一副耳机、一个话筒、几条字节就能把整条链路跑通。项目里附带了一份可直接运行的 Python 收发示例——examples/ggwave-py/send.py 负责发examples/ggwave-py/receive.py 负责收先各跑一遍你就真正知道声波通信是什么手感了。【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →