
不插线怎么传数据ggwave 声波传输 3 步上手【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave桌上一块 ESP32没串口线也不联网WiFi 密码怎么喂给它ggwave 是一个做声波传输的 C 库把一小段数据变成声波一端扬声器喊出去另一端麦克风听着再还原回数据。不接线、不联网中间隔的只有几米空气。听着像魔法拆开看机制其实很直白。30 秒看懂原理声音怎么变成数据一句话声波传数据的本质就是把字节换成音高。发送端干三件事把数据切成 4 bit 的小块每块对应一个特定频率FSK 频移键控同一时刻用 6 个音同时发出 3 字节像 6 个人同时举牌在数据前后各加一段开始 / 结束标记音接收端反过来靠标记音判断数据从哪开始、到哪结束把录到的声音做傅里叶变换看到出现过哪些频率频率映射回 4 bit 小块拼回字节流最后走 Reed-Solomon 解码把丢掉的位数补回来——环境有点杂音也大多能解出来速率大约 8~16 字节/秒。传不了电影但传密码、传密钥、传配置、传一个小文件刚刚好。协议常量、采样格式、API 定义都在 include/ggwave/ggwave.h 里想抠细节直接翻。上手三步编译、编码、解码第 1 步把库编出来标准 CMake 流程git clone https://gitcode.com/GitHub_Trending/gg/ggwave --recursive cd ggwave mkdir build cd build cmake .. make ./bin/ggwave-cli图形化示例需要 SDL2Ubuntu 下sudo apt install libsdl2-dev即可。走 Python 或 Node 的话更省事pip install ggwave、npm install ggwave跳过编译直接写业务。第 2 步三个函数跑通闭环核心就三个函数ggwave_init→ggwave_encode→ggwave_decode。最小闭环长这样ggwave_Parameters params ggwave_getDefaultParameters(); ggwave_Instance inst ggwave_init(params); // 发先问声波多大再生成 const char *msg WiFiMySecret; int size ggwave_encode(inst, msg, 13, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, NULL, 1); char *wave (char *)malloc(size); ggwave_encode(inst, msg, 13, GGWAVE_PROTOCOL_AUDIBLE_FAST, 25, wave, 0); // 把 wave 播给扬声器 // 收循环喂麦克风的音频帧直到拿到数据 char payload[256]; int n ggwave_decode(inst, micFrame, frameBytes, payload); if (n 0) payload[n] 0; // n0 表示收到 n 字节 ggwave_free(inst);几个容易踩的点ggwave_encode故意调两次第一次传 NULL、query 传 1只是问输出多大第二次才真正生成省得猜缓冲区大小ggwave_decode不是一次调用就出结果要循环喂音频帧返回值大于 0 才算收到一帧数据解码结果不带空结尾自己补\0第 3 步拿示例验证别急着写自己的代码先玩现成的。examples/ggwave-py/ 里两个 Python 脚本就能跑send.py 让扬声器把 hello python 喊出去receive.py 用麦克风听并打印收到的文字。一台电脑配副耳机、一个麦克风或者干脆两台机器各跑一半十几分钟就有直观感受。怎么选协议按场景对号入座 ggwave 给了四族协议选哪个其实是回答三个问题人要不要听到要多快发给几台设备AUDIBLE可听声人能听见滴滴声。适合当面演示、近距离设备配对声音响、传播最远ULTRASOUND超声波起始频率 15kHz人耳听不见做超声波数据传输时旁人毫无感知适合自动配对的场景代价是距离缩短DT双工收发轮流对话适合两边都要说话的场景比如远程控制和状态同步MT多目标单调广播一台发、多台同时收一次给一批设备下发配置最划算每族内部还有 NORMAL / FAST / FASTEST 三档区别在一块数据占多少个帧帧少传得快、但单块更脆弱帧多慢一点、更抗噪。拿不准就从 FAST 起步。另外还留了 10 个 CUSTOM 档位频率起点可以自己挪适合硬件对某段频段特别敏感的项目。实战把 WiFi 密码喊给 ESP32 最经典的一招一块刚出厂的 ESP32没有 USB、没网WiFi 凭据全靠声音给它。仓库里 examples/esp32-rx/ 是现成工程ESP32 内置 ADC 直接采模拟麦克风也支持 I2S MEMS 麦比如 SPH0645。接线就三根线的事GND → GND3.3V → VCC模拟麦 Out → GPIO 35I2S 麦走 BCLK / Data / LRCL 三根线可选加块 OLED 把收到的内容直接显示出来I2C 接 GPIO 21 / 22发送端更简单Arduino Uno 加蜂鸣器加一个按钮按一下按钮Uno 把 WiFi 凭据喊出去ESP32 听着、解码、连网完事。一个小细节Arduino UnoAVR 架构内存有限ggwave 会自动裁掉可听声和超声波协议只保留 DT 和 MT 两族别在 Uno 上找 AUDIBLE 常量。调优与避坑音量参数范围 0~100从 25 起步扬声器小、声音闷就往上加一般不用超过 50采样率默认 48000Hz收发两端保持一致。支持 1000~96000Hz输入输出率不一致时 ggwave 内部会重采样单次数据量硬上限 256 字节可变长度模式实际约 140 字节封顶。更大的数据在应用层分片带个序号接收端按序拼装误报环境吵时接收端容易凭空听出数据。对策关掉不用的接收协议ggwave_rxToggleProtocol顺带省内存或者改用超声波协议距离普通房间里可听声协议大约 1~3 米超声波基本在一米内的短距游戏。真正卡距离的是扬声器声压和麦克风增益不是算法还能玩什么waver官方桌面 / 移动端 GUI 应用源码在 examples/waver/文本框里输数据、界面直接看频谱是跨设备声音通信最直观的演示玩具浏览器examples/ggwave-js/ 和 bindings/javascript/ 都有Web Audio 就能跑无物理连接传文件在两个浏览器标签页里就能试文件互转ggwave-to-file 和 ggwave-from-file 把数据编成 WAV、再从 WAV 解回来调试链路时非常顺手现在就可以动手两台设备各开一个 examples/ggwave-py/ 里的脚本先听见那声哔再想着给 ESP32 接线。【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考