ggwave — передача данных через звук — это просто
Когда Bluetooth недостаточно
Представьте ситуацию: нужно передать данные между устройствами без интернета и Bluetooth. Например, настроить IoT-устройство в «глухом» помещении или поделиться контактами на конференции с плохим Wi-Fi. Именно для таких случаев создана библиотека ggwave — миниатюрный акустический модем с открытым исходным кодом.

Что это за зверь?
ggwave — это крошечная библиотека на C++ для передачи небольших объемов данных (8-16 байт/сек) через звук. По сути, она превращает ваши динамики и микрофоны в средство связи, используя технологию частотной модуляции (FSK).
Основные преимущества:
- Кросс-платформенность — работает на Linux, Windows, macOS, ESP32, Arduino и даже в браузере через WebAssembly
- Гибкость — можно использовать любую аудиосистему (ALSA, PulseAudio, Web Audio API и др.)
- Простота интеграции — доступны binding-и для Python, Node.js, Java, Kotlin
- Надежность — Reed-Solomon коды коррекции ошибок
Как это работает?
Принцип действия ggwave напоминает старые dial-up модемы, только куда компактнее:
-
Кодирование:
- Данные разбиваются на 4-битные блоки
- Каждый блок преобразуется в звуковую частоту (в диапазоне 1.8-15 кГц)
- Добавляются корректирующие коды
-
Передача:
- Сигнал воспроизводится через динамик
- Может работать как в слышимом диапазоне, так и ультразвуке
-
Прием:
- Микрофон улавливает сигнал
- Быстрое преобразование Фурье выделяет частоты
- Частоты декодируются обратно в данные
Где применить?
1. IoT без головной боли
Вот пример отправки команд на Arduino через звук:
import ggwave
gg = ggwave.GGWave()
# Отправка команды на устройство
gg.send("LED_ON", protocolId=1) # protocolId определяет параметры передачи
Готовые примеры для популярных плат:
2. Обмен данными без интернета
Проект wave-share использует ggwave для передачи файлов между устройствами через звук — идеально для ситуаций без сетевой инфраструктуры.
3. Быстрая настройка устройств
С помощью звуковых «QR-кодов» можно передавать:
- Wi-Fi credentials
- Конфигурационные параметры
- Ключи шифрования
Попробуйте сами
Для быстрого тестирования есть несколько вариантов:
-
Мобильные приложения:
-
Веб-демо: ggwave.js
-
Командная строка (после установки библиотеки):
# Отправить сообщение echo "Hello" | ggwave-cli -p 1 -o hello.wav # Принять сообщение ggwave-cli -i hello.wav
Технические детали
- Протокол: Мультичастотная FSK модуляция
- Диапазон частот: 1.875-6.562 кГц (стандарт), 15-19.5 кГц (ультразвук)
- Коррекция ошибок: Reed-Solomon (до 25% ошибок)
- Задержка: ~100-200 мс
Под капотом
Библиотека построена вокруг трех компонентов:
- Модулятор — преобразует данные в звуковые частоты
- Демодулятор — анализирует спектр и восстанавливает данные
- Интерфейсы — адаптеры для разных платформ и языков
Архитектура сознательно сделана минималистичной — вы можете использовать любую аудиосистему, реализовав всего два callback-а: для отправки и приема аудиосэмплов.
Когда ggwave особенно хорош?
- Работа с air-gapped системами
- Быстрый обмен небольшими данными (до 64 байт)
- Образовательные проекты (демонстрация принципов цифровой связи)
- IoT сценарии без радиомодулей
Ограничения
- Низкая скорость передачи (не для потокового видео!)
- Чувствительность к фоновому шуму
- Ограниченная дальность (до 5-10 метров в тихих помещениях)
ggwave — это элегантное решение для нишевых, но важных задач. Хотя технология не заменит Wi-Fi или Bluetooth, она идеально подходит для:
- Разработчиков IoT решений
- Создателей образовательных проектов
- Энтузиастов нестандартных способов связи
Попробуйте демо-версию прямо сейчас — возможно, это именно то, чего не хватало в вашем проекте!
