Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

在安卓* 系统中使用音频接口用于数据传输

$
0
0

概述

作为移动设备和平板电脑的一种接口,音频接口 (audio jack) 的主要功能是播放音乐。 但是,音频接口的另一个用途也不容忽视,即传输数据。

一直以来,整个行业都在开发利用音频接口来连接设备的更多用途。 iHealth 实验室的 Glucometer[1] (血糖检测仪)、Irdroid[2](提供红外遥控电视、机顶盒和音频组件功能)和 NFC 阅读器 Flojack*[3](具有近场通信功能,支持与 NFC 标签或移动设备进行交互传输)等外围设备的功能均可通过音频接口连接来实现。

可穿戴设备和外围设备拥有广泛的市场前景,因此我相信音频接口将会成为重要的数据通信门户。 在本文中,我将会更加详细地介绍这种新特性。

简介

音频接口有两种标准: OMTP 和 CTIA[4]。  OMTP 是一种国际性标准,而 ATIS 是美国标准,常用于 Apple iPhone* 和 iPad*。 两者的区别在于 V-Mic 和 GND 的位置,如图 1 所示。

OMPT 和 CTIA
图 1.   OMTP 和 CTIA

如何传输数据

当我们发送 0x00FF 数据值时,第一步就是将数字数据值转换成模拟信号。 我们需要调制数据值。 通常我们使用正弦波载波传输模拟信号。 

FSK 调制信号
图 2. FSK[5]调制信号[6]

第二步在 Android 系统中调用 audioTrack API[7] 功能,用于播放缓冲区的数据。 以下代码通过使用 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);
	}

如何接收数据

作为接收者,我们需要将模拟信号转换成数据值,解调信号以移除载波信号,并且通过协议对数据进行解码。 该协议可以是公共数据格式,也可以是自定义协议。 

解调信号
图 3. 解调信号6]

在 Android 系统中,我们使用 audioRecord API[8]功能来记录音频

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();
	   }

如何从音频信号中获取电能

毫无疑问,驱动支持音频接口外围设备的电路需要能源。 比如,左声道能够发送数据信息, 右声道发送持续的方波形或正弦波形。 这些波形能够转换成电能以支持 MCU(微控制器装置)和多个传感器。

案例研究:红外设备

Androlirc[9]是一个基于 Github 的项目, 它的功能是使用音频接口来发送红外指令。 我们可以通过研究这个项目来了解音频接口的数据通信。 Androlirc 使用 LIRC[10]库来创建一个数据缓冲区。 它是一个 Linux* 红外库,可支持多种接口类型,如 USB 和音频接口等。Androlirc 可以将 LIRC 库用于数据封装。 在市场上您会发现许多种红外编码类型,比如 RC-5 和 RC-56 协议。 在本例中我们将使用 RC-5 协议来控制电视。 首先,我们需要使用 38k 频率的正弦波形调制数据值,以生成缓冲区数据;然后使用 Android 音频 API 功能来播放音频缓冲区数据。 同时我们选择一个声道来播放正弦波形或方波形,以便为外围设备硬件提供电能。

案例研究:音频接口开发工具

恩智浦半导体公司 (NXP Semiconductors) 的新型智能手机解决方案 Quick-Jack*[11]是一款以 Hijack 项目为原型的工具/开发板。 Hijack[12]是密歇根大学的一个学生项目。 Hijack 平台能够支持即插即用的小型、廉价并且以手机为中心的新型传感器外围设备。 我们可以借助 NXP 的 Quick-Jack 开发板来设计我们的原型产品。 图 4 展示了一部智能手机利用基于音频接口的外围设备气温传感器而获取的室内气温。

通过 Quick-Jack 获取的气温值
图 4. 通过 Quick-Jack 获取的气温值

图 5 展示了如何利用基于 Android 的应用控制外围设备的 LED。

在 Quick-Jack 上控制 LED
图 5. 在 Quick-Jack 上控制 LED

总结

可穿戴设备和智能设备的外围设备如今在消费市场上日益普及。 具有数据通信功能的音频接口正在被越来越多的原始设备制造商 (ODM) 和 iMaker 采用。 或许,在未来音频接口数据通信功能会得到智能手机操作系统的普遍支持。

参考资料

  1. http://www.ihealthlabs.com/glucometer/ihealth-align/
  2. http://www.irdroid.com/
  3. https://www.kickstarter.com/projects/flomio/flojack-nfc-for-ipad-and-iphone
  4. http://en.wikipedia.org/wiki/Phone_connector_(audio)
  5. http://en.wikipedia.org/wiki/Frequency-shift_keying
  6. http://www.maximintegrated.com/en/app-notes/index.mvp/id/4676
  7. http://developer.android.com/reference/android/media/AudioTrack.html
  8. http://developer.android.com/reference/android/media/AudioRecord.html
  9. https://github.com/zokama
  10. http://lirc.org
  11. 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
  12. http://web.eecs.umich.edu/~prabal/projects/hijack/

关于作者

Li Liang 拥有长春科技大学信号与信息处理专业硕士学位。 他于 2013 年加入英特尔,现在是中国 Android 移动支持团队的一名应用工程师, 专注于研究对 Android 平台的差异化支持,如多窗口功能 (Multi-Window) 等。


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>