没有网络跨设备怎么传数据5分钟上手ggwave声学数据传输【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave想象一下两台设备没有WiFi、没有蓝牙、没有数据线只有喇叭和麦克风你却想把几十字节的数据送给对方。这正是ggwave要做的事——它是个小巧的“声波传输”库把数据变成声音播出去对方用麦克风听回来还原出原始数据这就是声学数据传输的全部魔法。声音如何“携带”数据ggwave声波传输原理一分钟看懂原理不复杂记住这条链路数据 → 切成4比特小块 → 映射成不同频率的音调 → 喇叭播放 → 麦克风采集 → 频谱分析纠错 → 原始数据具体说ggwave把你的数据切成4比特的小块每块用一个特定频率的“音”说出来这种用频率表示0和1的调制方式叫FSK移频键控。每一时刻6个音同时播出一次捎走3字节。接收端把声音做快速傅里叶变换一种把声音拆成各频率强弱的分析手段找出出现了哪些频率再用内置的里德-所罗门纠错码校验——即使部分声音被杂音盖住也能补回来。先记两个数速度约8~16字节/秒单条消息不超过256字节。传配置、密钥、短文本绰绰有余。5分钟跑通示例收发第一条声音消息新手最快的路是Python绑定。先克隆仓库、装依赖、跑发送脚本git clone https://gitcode.com/GitHub_Trending/gg/ggwave cd ggwave pip install ggwave pyaudio python examples/ggwave-py/send.py跑完 send.py你的电脑喇叭会播出一段短音把文字“hello python”发到了空气里。再另开一个程序接收也可以在另一台设备上import ggwave, pyaudio p pyaudio.PyAudio() stream p.open(formatpyaudio.paFloat32, channels1, rate48000, inputTrue, frames_per_buffer1024) instance ggwave.init() while True: res ggwave.decode(instance, stream.read(1024, exception_on_overflowFalse)) if res: print(收到:, res.decode(utf-8))这就是最小完整回路ggwave.encode()造波形ggwave.decode()听波形。两个核心API的定义见 include/ggwave/ggwave.h完整收发脚本在 examples/ggwave-py/send.py 和 examples/ggwave-py/receive.py。协议选择速查表按场景挑对传输协议ggwave内置几组协议每组都有Normal / Fast / Fastest三档Fastest比Normal快约3倍代价是距离变短协议族常量示例声音特点适合场景可听声GGWAVE_PROTOCOL_AUDIBLE_FAST听得见距离适中演示、近距离设备通信超声波GGWAVE_PROTOCOL_ULTRASOUND_NORMAL人耳听不见隐私数据、自动配对双工GGWAVE_PROTOCOL_DT_FAST双向实时交互式应用、遥控多目标GGWAVE_PROTOCOL_MT_FASTEST一对多广播广播通知、批量配置选择时先问自己一句“需不需要被听见”要人知道在传选可听声要悄悄进行选超声波对方要回应选双工一份内容发给多台设备选多目标。这些设备都能用从Arduino到浏览器ggwave是纯C/C小库只管“数据↔波形”音频怎么读怎么写由你接所以它能跑在很多设备上Arduino Uno接小喇叭做发送端examples/arduino-tx/ 有完整电路图和示例程序ESP32接麦克风做接收端见 examples/esp32-rx/Raspberry Pi PicoRP2040见 examples/rp2040-rx/浏览器编译成WebAssembly在网页里跑见 examples/ggwave-wasm/Python / JavaScript / iOS等bindings/ 里有现成的语言绑定下面是官方示例中“Arduino Uno喇叭”的发送电路几个无源器件就够了两个实战场景把想法变成能用的东西场景一给物联网设备推送WiFi凭据。ESP32联网最烦的就是手输密码你可以这样绕开把喇叭和麦克风接到ESP32烧录 examples/esp32-rx/ 的固件 → 手机浏览器打开ggwave演示页填入SSID和密码选超声波协议发送 → ESP32“听见”后自动连上WiFi全程零手输。场景二手机之间分享小文件。两台手机都装上waver应用或直接用官方浏览器演示输入文字或选个小文件发送对方收到后原样显示waver还支持一对多一台设备广播、多台同时接收。调参时别踩这些坑6条实用建议⚠️ 按踩坑频率从高到低排列音量25够用别超过50。太大声会把喇叭推爆失真后接收端反而解不出来。采样率默认48000Hz两端必须一致麦克风采样率不同时告诉库一声它会自动重采样。嘈杂环境优先换超声波协议人耳听不见也少受环境噪声干扰其次把两台设备凑近。传输距离安静环境下可听声约3~5米超声波约1~2米别指望隔着一整个房间喊话。数据量单次≤256字节更长的内容要自己切片、分多次发接收端按序拼回来。失败处理decode返回-1多半是背景噪声太大建议应用层加“没收到就再播一遍”的重试事先知道协议时把其他接收协议关掉还能降低误报。下次再遇到“无网络数据怎么传”的窘境先想想设备自带的喇叭和麦克风。从几行代码到一条完整的声波传输链路最快的入口是 examples/ggwave-py/send.py 与 examples/ggwave-py/receive.py想直观看效果就去 examples/waver/ 把GUI应用跑起来——声波传文件远比你想象得更简单。【免费下载链接】ggwaveTiny>项目地址: https://gitcode.com/GitHub_Trending/gg/ggwave创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
