如何将外部传感器连接到Android设备?

Mar*_*usz 6 android android-sensors

我有没有晴雨表的智能手机,我想通过USB或蓝牙连接我的智能手机使用外部气压计.我希望每个安装的应用程序都能以标准方式使用这个baromter,但我不知道是否可能.按照标准方式,我的意思是从google play下载的每个需要气压计的应用程序都可以使用我的外部晴雨表.因此,有应用程序读取测量并通过Intent分享它的解决方案并不能让我满意.

添加外部GPS更容易,因为有android.location.LocationManager类有一个方法addTestProvider所以我可以开发应用程序,创建TestProvider并通过setTestProviderLocation方法设置从USB /蓝牙读取位置.问题是SensorManager不提供API来添加模拟传感器.

可以将外部气压计连接到Android设备并与所有应用程序共享测量值.

gar*_*man 5

外部 USB 传感器在插入时需要 Android 支持该设备。然后你需要一根 OTG 电缆来反转 USB 从/主。无需进入内核构建等...在您的 android 设备上安装终端应用程序,插入 OTG 和传感器,然后运行 ​​dmesg 以查看是否检测到设备并加载驱动程序。从那里你必须弄清楚你的 USB 传感器存在哪些 Linux 支持,并努力将这种支持引入到 Android 内核中。

如果你最终不得不构建一个新内核,你不妨完全切换到一个全新的 ROM。CyanogenMod 提供完整的源代码、构建脚本和 wiki,用于从头开始构建他们的 ROM。一旦您安装了新的 ROM zip,您就可以安全地调整内核和安装的软件。

Android 内核与直接的 Linux 内核非常接近,只要您的传感器驱动程序的源代码可用,或者它的预编译二进制文件可用,就可以使几乎所有在 Linux 上运行的东西都支持在 android 上运行。(也称为专有 blob)

最后,假设您有一个带有 OTG 电缆的设备,并且传感器似乎被检测到并且驱动程序已加载,您将需要一些工具或应用程序来实际使用传感器。如果有可用的 Linux 工具可以满足您的需求,请查看它们是否有预编译的 ARM 版本,或者您必须使用 Android NDK 从源代码编译它们(如果源代码可用)。

为什么我要费心解释这一切?蓝牙在 Android 中总体上非常不可靠。此外,您至少需要 Android 5.1。谷歌最初的蓝牙堆栈是垃圾。(Bluez 的包装有各种各样的问题,它在某些用途上运行良好,但总体上存在稳定性问题)您只需要在非三星设备上使用心率监测器即可知道它的连接时间不会超过 10 年秒。三星在早期设备中引入了自己的蓝牙堆栈。我开发了使用心率监测器和心电图读取器的身份验证应用程序,两者都使用蓝牙。一旦我的 Nexus5 设备升级到 5.1,一切都稳定了。谷歌的蓝牙问题是众所周知的。只是 Google android 和蓝牙堆栈实现。

除非您需要无线,否则有线总是更好。

您确实有一些替代 USB 选项。

1) 使用通过 USB 连接的 Arduino 或 RPi。不需要特殊的 Linux 驱动程序或内核,但您将需要突破设备,它必须为您的传感器设置网关。例如传感器 -> Arduino -> android。如果它是 RPi,您将有 4 个 USB 端口和一个完整的 Linux 内核可以使用,但根据您的需要,电源将是一个问题。这是一个很好的关于 Arduino 网络共享的应用程序: http //www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/

2) 使用 IOIO OTG 分线单元将您自己的传感器滚动到其各种输入中。您将能够从 Java 访问传感器。他们甚至提供了一个应用程序来测试一切。该装置本身还为任何有线传感器提供电池电源和充电支持。您只需将它们连接起来,将其插入您的 Android USB 即可。我认为他们即将发布新模型,因为当前单元被列为已停产:https : //www.sparkfun.com/news/2069

不管怎样,祝你好运。