基于Python的PyQt5.QtSensors模块调用Android手机的传感器数据

文章目录

前言

一、运行环境

二、使用步骤

1.引入库

2.功能函数

2.1 初始化

2.2 定时器函数

 2.3 刷新传感器数据

2.4 主函数

3.最终效果 

总结

后记


前言

        给小朋友做了一个手机遥控器来遥控小车,需要调用手机的加速度传感器的数据来控制转向。因为本人从来没玩过Java,只会一点Python,想着在Android上直接跑Python把这个功能实现。找了很久的实现方式,发现正好PYQT5支持跨平台,里面的QtSensors似乎就是我想要的东西,同时还能一并把遥控器的界面也解决了!但奈何网上查到的QtSensors的用例几乎都是基于C语言的,或者QML。折腾一番后还是给弄出来,这里分享出来,给自己做个记录,也给大家演示一下基于Python的QtSensors用法(也算是弥补网上空白?当然,也可能是我自己没发现而已)。

        有点啰嗦,毕竟第一次发博,下面进入正题。


一、运行环境

        我是用Pydroid3在Android上跑的python。其实鸿蒙应该也可以的,之前没弄出来,以为是鸿蒙系统不支持,后面特意刷回了Android,又是一番瞎折腾。

        至于Pydroid3怎么安装,怎么用,这里就不多了,网上很多资料。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写的蓝牙通信接口。后面有时间也把这部分的经验分享出来,其中有几个问题其实至今也没有很完美的解决,还得请教网络上的各位高手了!

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值