要晶莹剔透。我不讨厌 1-wire 令牌的想法。我其实很喜欢。以这种方式使用 1-wire 正是 1-wire 总线的用途。我担心的是这个项目是玩具级的;低安全性/预算。然后,当您添加耐用性考虑因素时,很明显可能需要其他不涉及专用芯片的选项。这带来了以下内容。
正如其他人所说,几乎最佳的答案是使用 RC 时间延迟。唯一的组件令牌侧将是一个电容器。

模拟此电路- 使用CircuitLab创建的原理图
为什么?因为 RC 代币...
- 不易受到 ESD 的影响。(编辑:如果我们诚实和实际)
- 可以只使用两根电线。
- 将非常便宜和简单。
- 有足够的空间容纳 8 人以上。
对于 Pi 端电子设备,您只需要两个 GPIO 引脚;充电引脚和感应引脚。您还需要/需要一个快速充电电路,我将在图表后解释。

模拟这个电路
快速充电电路用一个小得多的电阻绕过定时电阻。这允许令牌中的电容器几乎立即充电(好吧,就用户将看到的任何方式而言)。它还使得感应引脚不会直接看到充电引脚。相反,它将严格查看电容器电压。值并不重要,但是,二极管确实需要是肖特基/小信号二极管,否则它将从 3.3v 的顶部切断很多。这也可以用一个 5v 的晶体管代替,但可能需要保护输入引脚。
在那之后,都是代码,这也很简单。
(注意:当场想出这个。它完全未经测试。标准免责声明适用;风险自负,调整口味等)
import RPi.GPIO as GPIO
import time
#Setup some pins
GPIO.setup(<charging_pin>, GPIO.OUT)
GPIO.setup(<sensing_pin>, GPIO.IN)
# Set "charging" pin to 3.3v
GPIO.output(<charging_pin>,TRUE)
# Wait some time for the capacitor to be fully charged
time.sleep(1.0)
# Set the charging pin to 0v
GPIO.output(<charging_pin>,FALSE)
#count how long the sense pin stays high
counter=0
while GPIO.input(<sensing_pin>) == GPIO.HIGH:
counter += 1
time.sleep(0.01)
# Finally our counter is going to have a value proportional to the RC
# time delay of our token. Window match it to bounds, and we're golden.
if (counter > a) and (counter < b):
print "Is person X"
if (counter > b) and (counter < c):
print "Is person Y"
[...]
最后(并且只是作为一个旁白/事后考虑)同样的事情不会太糟糕重新用作电容器测试仪/仪表,因为这基本上就是我们在这里所做的一切。
批评
这比 1-wire 解决方案要困难得多。1-wire 解决方案即插即用。RC会有一堆接线和焊接等等。单独的 Pi 侧电路将非常复杂,以至于总成本将高于仅使用 1 线。
一点也不真实。
我想我已经在上面展示了 RC 解决方案是多么微不足道;约 13 行代码,3 个组件 Pi 侧,每人 1 个电容器。其实很简单。
不可否认,1-wire 的设置同样相当简单,但那是因为您正在购买自己的出路。每个 1-wire 代币增加了一个 0.5 美元的芯片,而每个 RC 代币添加的只是一个 0.01 美元的电容器。
几乎一样简单,但只是成本的一小部分。很清楚谁是赢家。
你的想法很容易受到静电的影响。Raspberry Pi 容易受到静电的影响。这很容易受到静电的影响。那很容易受到静电的影响。你的狗容易受到静电的影响。等等等等等等
新闻快讯!从技术上讲,一切都容易受到静电/ESD的影响,即使是你!不相信我?拿着雨伞在空旷的地方脱颖而出,证明我是对的。(PS。不要这样做)
但是,如果我们不聪明@$$,那么我们会画出明显的线条。常识点是在 CMOS IC 上,因为从非常真实和实际的意义上说,这实际上很容易受到静电的影响。有趣的是,我们完全不用 IC 就可以完全解决这个问题!
无源器件对于所提出的任务几乎同样简单,并且对 ESD 更稳健。时期。这就是为什么人们可能要重新考虑其他方法的原因。
现在,当然,树莓派总是容易受到静电的影响,除非你移除树莓派,否则无法解决这个问题。当然,这也不实用。所以,我们能做的最好的就是做其他人用这些柠檬做的事情。首先,我们将带有适当保护环的 Pi 侧的插座接地。其次,我们可以疯狂使用 TVS 二极管等。底线在这里...
我们现在只需对一 (1) 个设备进行 ESD 保护,所以如果您愿意,请发疯!
简单的无源是不安全的。它们很容易伪造/复制/破解/等。
(-_-) ...这是儿童玩具 FFS ...我们为什么要在其中引入信息安全?即便如此,您真的认为 1-wire 硬件地址(或者更糟的是 SPI/I2C 地址)是一种很好的安全机制吗?真的吗?你是认真的吗!?
好的,那么这个怎么样......把这个想法带到security.SE。看看他们怎么说。(提示:带上绷带,你会被撕破一个新的。)
不,唯一一次 1-wire 是安全的,是如果您使用的是实际的安全令牌/身份验证器[ 1 ]。然后它可以是国家安全的......除了攻击者肯定可以物理访问身份验证设备的事实......
安全性在这里不是问题,这完全是题外话。
编辑:将其余部分分解为自己的答案,因为它就是这样;一个不同的答案。