xaker

MicIO.js: передача цифровых данных через аудиоразъем

  • пятница, 28 марта 2014 г. в 03:10:33
http://www.xakep.ru/post/62269/

Если перед вам стоит задача обеспечить передачу данных с микроконтроллера на любое мобильное устройство или компьютер, то вы не найдете подходящего интерфейса. Логично использовать USB, но немногие смартфоны позволят запросто передавать данные по USB, а за доступ к фирменному разъему Apple Lightning вообще нужно заплатить более $100 тыс. лицензионного сбора.

Bluetooth тоже не очень подходит, со своим зоопарком нативных библиотек для OS X, Windows, Linux, iOS, Motorola, HTC, Samsung, LG и проч.

Разработчик Колин Букман (Colin Bookman) придумал выход из положения. Он посмотрел на мобильный кард-ридер Square, который подключается в аудиоразъем мобильного телефона и позволяет считывать пластиковые карточки для оплаты, и подумал — а почему бы не разработать универсальную библиотеку, используя HTML5 Web Audio API, которая бы конвертировала любую полученную информацию через аудиовход в цифровой сигнал? Так появилась библиотека MicIO.js.

MicIO.js устанавливает канал передачи данных между микроконтроллером и браузером. Скрипт генерирует тактовый сигнал, управляя потоком информации из микроконтроллера. Когда значение меняется с 1 на 0, контроллер выдает блок информации в виде синусоид на 16-ти частотах, которые соответствуют значениям от 0 до 15.

MicIO.js в нынешнем виде передает информацию со скоростью 16 бит/с при частоте ошибок 5%. Скорость можно значительно повысить, если использовать более производительный микроконтроллер и другой алгоритм модуляции синусоид.

Получив сигнал, производится расшифровка синусоид с помощью быстрого преобразования Фурье (FFT). Например, 16-ричному значению 0x0 соответствует синусоида с частотой 818 Гц, 0x1 — 1076 Гц, 0x2 — 1335 Гц, и так далее.

MicIO.js — еще одно доказательство, что история развивается по спирали. Современные разработчики заново изобретают алгоритмы, которые давно придуманы для передачи цифрового сигнала в аналоговой среде.