我正在做一个项目,在这个项目中,我需要从BLE环境传感器获取数据到一个raspberry pi,并定期将它发送到服务器。我能寄得越多越好。我找到了在线脚本,它与我正在工作的特定类型的传感器一起工作,但它只读取数据一次,不更新,除非某些设备连接到传感器并断开连接。
例如,如果我连续运行脚本两次,它将包含相同的数据,但是如果我只运行一次脚本,然后用我的手机连接和断开传感器,然后再次运行脚本,它就会有新的、更新的数据。现在,我试图使这个完全自动化,我不想每次都要和我的手机保持连接和断开连接来获取新的数据,所以我发现运行gatttool和connecting的效果就像我要与我的手机连接和断开一样。因此,我想出了一个有点笨重的自动化解决方案,所有的解决方案都通过crontab运行:
第三步是问题所在。我不能像我想的那样经常运行这个系列。理想的间隔是每30秒收集和发送数据,但出于某种原因,我间歇性地从gatttool获得一个错误:
connect error: Function not implemented (38)
在cron计划的每一次迭代中,我都会得到这个错误,直到我设置了时间间隔,这样脚本就只能每2分钟运行一次,即使这样,我也会间歇性地得到错误。我需要数据是一致的,绝对不像两分钟间隔那么稀疏。1分钟将是我能负担得起的数据发送的绝对最大间隔。
我怎样才能消除这个错误?
我的连接和断开设备的脚本:
import pexpect
import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
scan = pexpect.spawn("sudo hcitool lescan")
time.sleep(5)
print(scan.terminate())
child = pexpect.spawn("sudo gatttool -i hci0 -b E2:D8:9D:FF:72:A2 -I -t random")
child.sendline("connect")
child.expect("Connection successful", timeout=7)
print("connected!")
child.sendline("disconnect")
child.sendline("quit")
child.sendline("sudo hciconfig hci0 down")
child.sendline("sudo hciconfig hci0 up")
print("done!")
发布于 2020-07-12 21:53:22
您在问题开始时链接到的脚本似乎没有连接到传感器。我对他们剧本的理解是,它是从包含测量信息的传感器中扫描广告数据。这是一件常见的事情,你可以得到许多不同类型的信标。
我推测,当您连接和断开连接时,您将看到更频繁的测量结果,因为这是在重新设置广告,因为传感器在连接时不会做广告。
在您链接到的回购的首页上,有一些关于如何更改测量间隔的信息。您说要每30秒写一次,所以这是一个1E
的值,您需要将它写入到这个特性中。
他们建议用一个应用程序来做这件事。我已经使用了那个应用程序,没有任何具体的应用程序,他们指向你。如果您想要替代方案,我发现nRF连接应用程序非常适合这些类型的活动。如果您在您的PC或Raspberry Pi上安装了Chrome或Chrome浏览器,那么如果您输入以下URL,就可以从该浏览器安装浏览器:
按Start Scan
-> Inspect
,传感器设备->,单击0C4C3010-7700-46F4-AA96D5E974E32A54
服务->,单击0C4C3011-7700-46F4-AA96D5E974E32A54
特性->,输入值(1E) ->按Write
按钮。
这应该允许您使用他们的原始脚本与您想要的测量频率。
https://stackoverflow.com/questions/61569506
复制相似问题