将音频插孔用作 Android 系统上的数据接口
作为手机和平板电脑上的接口之一,音频插孔的主要功能是播放音乐。然而,它的其他用途也不容忽视——音频插孔还可以用于传输数据。
Intel® Developer Zone 提供跨平台应用开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,帮助开发者创新并取得成功。加入我们的社区,了解 Android、物联网、Intel® RealSense™ 技术 和 Windows,下载工具,获取开发套件,与志同道合的开发者交流想法,并参与黑客松、竞赛、路演和本地活动。
概述
作为手机和平板电脑上的接口之一,音频插孔的主要功能是播放音乐。然而,它的其他用途也不容忽视——音频插孔还可以用于传输数据。
用于连接设备的音频插孔的更多用法正在不断开发中。iHealth Lab 的血糖仪¹(血糖计算器)、Irdroid²(提供红外遥控功能,可控制电视、机顶盒和音响设备)以及 Flojack*³(一款 NFC 读取器,可实现近场通信功能,与 NFC 标签或移动设备交互)等外围设备,都通过音频插孔连接成为可能。
鉴于可穿戴设备和外围设备具有广阔的市场前景,我相信音频插孔将成为主要的数据通信端口。在本文中,我将更详细地介绍这项新功能。
引言
音频插孔接口有两种标准:OMTP 和 CTIA⁴。OMTP 是国际标准;ATIS 是美国标准,用于 Apple iPhone* 和 iPad*。它们在 V-Mic 和 GND 位置上有所不同,区别如图 1 所示。
如何传输数据
当我们发送 0x00FF 数据值时,第一步是将数字数据值转换为模拟信号。我们需要对数据值进行调制。通常,我们使用正弦波载波作为模拟信号。
第二步,在 Android 系统中,调用 AudioTrack API⁷ 函数播放缓冲区。以下代码使用 `audioTrack` 函数将数据发送到缓冲区。
public void send(byte[] bytes_pkg) {
int bufsize = AudioTrack.getMinBufferSize(8000,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack trackplayer = new AudioTrack(AudioManager.STREAM_MUSIC,
8000, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufsize,
AudioTrack.MODE_STREAM);
trackplayer.play();
trackplayer.write(bytes_pkg, 0, bytes_pkg.length);
}
如何接收数据
作为接收器,我们需要将模拟信号转换为数据值,对信号进行解调以去除载波信号,并通过协议解码数据。协议可以是公共数据格式,也可以是私有定义协议。
在 Android 系统中,我们使用 `audioRecord` API⁸ 函数来录制音频。
public void receive(){
int minBufferSize = AudioRecord.getMinBufferSize(AUDIO_SAMPLE_FREQ, 2,
AudioFormat.ENCODING_PCM_16BIT);
AudioRecord ar = new AudioRecord(MediaRecorder.AudioSource.MIC,
AUDIO_SAMPLE_FREQ, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize);
ar.startRecording();
}
如何从音频信号中获取能量
显然,音频插孔外围设备需要电力来驱动电路。例如,L 声道发送数据信息。R 声道发送持续的方波或正弦波。这些波形可以转换为能量,为 MCU(微控制器单元)和几个传感器供电。
案例研究:红外外围设备
Androlirc⁹ 是一个基于 Github 的项目。它的功能是利用音频插孔接口发送红外命令。我们可以研究这个项目来了解音频插孔的数据通信。Androlirc 使用 LIRC¹⁰ 库创建数据缓冲区。该库是一个 Linux* 红外库,支持多种接口,例如:USB、音频插孔等。Androlirc 可以使用 LIRC 库进行数据封装或数据封装。在市场上,您可以找到许多红外编码类型,如 RC-5 和 RC-6 协议。在本例中,我们使用 RC-5 协议来控制电视机。首先,我们需要使用 38k 频率的正弦波对数据值进行调制,以生成缓冲区数据;然后,我们使用 Android 音频 API 函数播放音频缓冲区数据。同时,我们可以使用两个声道中的一个来播放正弦波或方波,为外围设备硬件供电。
案例研究:音频插孔开发工具
NXP Semiconductors 的新型智能手机解决方案 Quick-Jack*¹¹ 是一款基于名为 Hijack 的原型项目的工具/开发板。Hijack¹² 是密歇根大学的学生项目。Hijack 平台支持即插即用操作,能够实现一类新型的小型、廉价、以手机为中心的高科技传感器外围设备。我们可以使用 NXP Quick-Jack 开发板来帮助构建我们的原型产品设计。图 4 显示了一个智能手机显示来自音频插孔外围温度传感器的室内温度。
图 5 显示了我们如何通过基于 Android 的应用程序控制外围设备的 LED。
摘要
可穿戴设备和智能设备外围设备在消费市场中越来越普遍。音频插孔作为一种数据通信功能,正被越来越多的 ODM 和 iMaker 采用。也许在未来,音频插孔数据通信功能将得到智能手机操作系统的普遍支持。
参考
- http://www.ihealthlabs.com/glucometer/ihealth-align/
- http://www.irdroid.com/
- https://www.kickstarter.com/projects/flomio/flojack-nfc-for-ipad-and-iphone
- http://en.wikipedia.org/wiki/Phone_connector_(audio)
- http://en.wikipedia.org/wiki/Frequency-shift_keying
- http://www.maximintegrated.com/en/app-notes/index.mvp/id/4676
- https://developer.android.com.cn/reference/android/media/AudioTrack.html
- https://developer.android.com.cn/reference/android/media/AudioRecord.html
- https://github.com/zokama
- http://lirc.org
- http://www.nxp.com/news/press-releases/2014/05/nxp-unveils-smartphone-quick-jack-solution-transforming-audio-jack-into-multi-purpose-self-powered-data-port.html
- http://web.eecs.umich.edu/~prabal/projects/hijack/
关于作者
李亮(Li Liang)毕业于长春工业大学,获得信号与信息处理专业硕士学位。他于 2013 年加入英特尔,担任中国 Android 移动赋能团队的应用工程师。他专注于 Android 平台上的差异化赋能,例如多窗口等。