基于Python的PyQt5.QtSensors模块调用Android手机的传感器数据
时间:2022-10-03 14:30:00
文章目录
前言
一、运行环境
二、使用步骤
1.引入库
2.功能函数
2.1 初始化
2.2 定时器函数
传感器数据-toc" style="margin-left:80px;">2.3 刷新传感器数据
2.4 主函数
3.最终效果
总结
后记
前言
为孩子们制作手机遥控器来遥控汽车,需要调用手机的加速度传感器数据来控制转向。因为我从来没有玩过Java,只会一点Python,想着在Android上直接跑Python实现此功能。找了很久的实现方法,发现正好PYQT5支持跨平台,内部QtSensors这似乎是我想要的,遥控器的界面可以一起解决!但是网上找到的QtSensors的用例几乎都是基于C语言的,或者QML。折腾之后还是拿出来,在这里分享,给自己做个记录,也给大家演示一下Python的QtSensors用法(也算是弥补网上空白?当然,也许我自己没有发现)。
有点啰嗦,毕竟第一次发博,下面进入正题。
一、运行环境
我是用Pydroid3在Android上跑的python。其实鸿蒙也应该可以。之前没拿出来,以为鸿蒙系统不支持,后来特意刷回来了。Android,又是一番瞎折腾。
至于Pydroid如何安装,如何使用,这里不多,网上有很多信息。Pydroid3自带了PYQT5.省去了安装仓库的麻烦。
二、使用步骤
1.引入库
从PyQt5.QtSensors导入QAccelerometer模块(还有很多其他传感器模块,可以自己玩)。
from PyQt5.QtSensors import QAccelerometer
本示例中做了一个简单的界面来反馈当前的传感器获取的值,所以一并导入相关的模块:
import sys from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QLineEdit from PyQt5.QtCore import QTimer
2.功能函数
2.1 初始化
界面初始化,同时正确QAccelerometer()模块实例化setActive(True)打开传感器。添加定时器,定期刷新数据。
代码如下:
def __init__(self, parent=None): super(App, self).__init__(parent) layout = QFormLayout() self.editX = QLineEdit() self.editY = QLineEdit() self.editZ = QLineEdit() layout.addRow("X数值", self.editX) layout.addRow("Y数值", self.editY) layout.addRow("Z数值", self.editZ) self.setLayout(layout) self.Accelerometer = QAccelerometer() self.Accelerometer.setActive(True) self.MyTimer()
2.2 定时器函数
定时器每100ms刷新数据:
def MyTimer(self): timer = QTimer(self) timer.timeout.connect(self.update) timer.start(100)
2.3 刷新传感器数据
刷新传感器数据reading获取当前相应轴坐标的加速度数据,然后刷新到界面:
def update(self): current_x = self.Accelerometer.reading().x() current_y = self.Accelerometer.reading().y() current_z = self.Accelerometer.reading().z() self.editX.setText(str(current_x)) self.editY.setText(str(current_y)) self.editZ.setText(str(current_z))
2.4 主函数
剩下的是主函数:
def main(): app = QApplication(sys.argv) window = App() window.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
3.最终效果
最终效果截图。事实上,如果你摇动手机,界面上每个轴的数据都会发生变化。找出您想要的变化规则,您可以开发相应的应用程序。制作手机遥控器来控制方向非常简单.^-^.
总结
最后,它看起来很简单。关键是两三行代码。然而,由于他们的基础薄弱,他们总是认为自己可以copy当互联网上找不到现成的东西时,它们就会失明。事实上,虽然它不是一种相应的语言,但实现方法和步骤非常不同的,自己认真研究一下也是能行的!
另外,QtSensors还支持很多其他的传感器类型,用法都是差不多了,大家可以试试其他的,这样就可以开发出各种类型的app,可玩性就很高了!
后记
手机跟小车的通信是靠的蓝牙,同样也是基于Python的PyQt5写的蓝牙通信接口。后面有时间也把这部分的经验分享出来,其中有几个问题其实至今也没有很完美的解决,还得请教网络上的各位高手了!