Если перед вам стоит задача обеспечить передачу данных с микроконтроллера на любое мобильное устройство или компьютер, то вы не найдете подходящего интерфейса. Логично использовать 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 — еще одно доказательство, что история развивается по спирали. Современные разработчики заново изобретают алгоритмы, которые давно придуманы для передачи цифрового сигнала в аналоговой среде.