我希望能够检测外围传感器何时没有连接到我的Raspberry Pi 3.
例如,如果我有一个GPIO被动红外传感器。
我可以像这样获得所有GPIO端口:
PeripheralManagerService manager = new PeripheralManagerService();
List<String> portList = manager.getGpioList();
if (portList.isEmpty()) {
Log.i(TAG, "No GPIO port available on this device.");
} else {
Log.i(TAG, "List of available ports: " + portList);
}
然后我可以连接到这样的端口:
try {
Gpio pir = new PeripheralManagerService().openGpio("BCM4")
} catch (IOException e) {
// not thrown in the case of an empty pin
}
然而,即使引脚是空的,我仍然可以连接到它(技术上有意义,因为gpio只是二进制打开或关闭)。似乎没有任何api,我无法合理地从逻辑上思考如何区分连接外围传感器的引脚和#34;空的&#34;。< / p>
因此,目前我无法以编程方式断言我的传感器和电路设置正确。
任何人都有任何想法?从电子学的角度来看,它是否可能?
参考文档:
答案 0 :(得分:6)
有很多方法可以做&#34;存在检测&#34;电气,但你在SoC中本质上找不到任何东西。你通常不会问一个GPIO引脚是否有附件 - 它无法告诉你。
额外的GPIO引脚通常用于检测外围设备是否连接到连接器。例如,用于某些传感器的插头可能包括短路接地的“检测”线,并在连接传感器时将GPIO拉低。 USB和SDIO与接口中的某些专用电路类似。
您还可以使用电流感应等方法构建更精细的检测电路,但它们不可避免地需要输出通过专用GPIO捕获的二进制信号。
这对于串行外围设备来说更容易实现,因为您通常可以发送基本命令并验证您是否得到了响应。
答案 1 :(得分:2)
仅使用输入线进行检测可能很困难。首先,您要缩小问题的范围。将传感器未连接,传感器连接但未响应,或传感器以不寻常的方式响应,视为不存在。
因此,如果它是数字传感器,那么与传感器通信可能足以判断它是否存在(特别是如果涉及校验和或奇偶校验位)。 某些模拟传感器还具有触发时其行为方式的特定规格。您可以利用这些规格的偏差来确定传感器是否不存在。
如果你有一个数字传感器,没有任何错误检查它的输出,你输出数据(所有0或全1有效)或它只是一个二进制1或0输出,那么你需要外部帮助。对于大多数模拟传感器也是如此。
这个外部帮助可以让您将系统置于已知的受控状态,按下按钮,然后检查传感器是否在特定范围内输出。为了绝对确定,您需要至少两种不同的状态,以确保您的数字或模拟输入不会卡在正确的测试状态。
几乎任何其他方法都是系统外部的。使用额外的IO来“检测”传感器可以帮助提高传感器在那里的可信度,但是你可能会得到误报,你所学到的只是“有些东西” - 不一定是你期望的传感器。