python之pyQt5实例:树莓派+MPU6050采集数据

news2024/11/13 8:56:41

1、安装必要的软件包:

sudo apt-get update
sudo apt-get install python3-smbus python3-dev i2c-tools
sudo apt-get install python3-smbus

2、确认I2C接口已经启用:

运行 sudo raspi-config 命令打开Raspberry Pi配置工具。

在菜单中选择 "5 Interfacing Options",然后 "P5 I2C"。

确保已经启用了I2C接口。

3、确认传感器连接正确:

请确认MPU6050的VCC引脚已正确连接到树莓派的3.3V电源引脚。

请确认MPU6050的GND引脚已正确连接到树莓派的地引脚(GND)。

请确认MPU6050的SCL引脚(时钟)已正确连接到树莓派的GPIO3引脚(BCM标号为2)。

请确认MPU6050的SDA引脚(数据)已正确连接到树莓派的GPIO2引脚(BCM标号为3)。

4、进入存放代码的目录

cd /home/pi/my_code_directory

5、新建py文件

nano mpu6050_qt.py

6、输入代码

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QLabel, QMessageBox
from PyQt5.QtCore import QTimer
import RPi.GPIO as GPIO
import smbus

class DataCollectionApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Data Collection App")

        # 创建按钮和标签
        self.start_button = QPushButton("开始采集")
        self.stop_button = QPushButton("停止采集")
        self.accel_label = QLabel("等待数据采集...")
        self.gyro_label = QLabel("等待数据采集...")

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.start_button)
        layout.addWidget(self.stop_button)
        layout.addWidget(self.accel_label)
        layout.addWidget(self.gyro_label)

        central_widget = QWidget()
        central_widget.setLayout(layout)

        self.setCentralWidget(central_widget)

        # 连接信号和槽函数
        self.start_button.clicked.connect(self.start_collection)
        self.stop_button.clicked.connect(self.stop_collection)

        # 初始化状态
        self.is_collecting = False
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_data)

    def start_collection(self):
        if not self.is_collecting:
            self.is_collecting = True
            self.timer.start(2000)  # 每2秒更新一次数据
        else:
            QMessageBox.warning(self, "警告", "采集已经开始!")

    def stop_collection(self):
        if self.is_collecting:
            self.is_collecting = False
            self.timer.stop()
        else:
            QMessageBox.warning(self, "警告", "采集尚未开始!")

    def read_data(self):
        bus = smbus.SMBus(1)
        device_address = 0x68  # MPU6050设备地址

        # 启动加速度计和陀螺仪
        bus.write_byte_data(device_address, 0x6B, 0x00)
        bus.write_byte_data(device_address, 0x1B, 0x08)

        # 读取加速度值
        accel_x = self.read_word_2c(bus, device_address, 0x3B)
        accel_y = self.read_word_2c(bus, device_address, 0x3D)
        accel_z = self.read_word_2c(bus, device_address, 0x3F)

        # 读取角速度值
        gyro_x = self.read_word_2c(bus, device_address, 0x43)
        gyro_y = self.read_word_2c(bus, device_address, 0x45)
        gyro_z = self.read_word_2c(bus, device_address, 0x47)

        return (accel_x, accel_y, accel_z), (gyro_x, gyro_y, gyro_z)

    def read_word_2c(self, bus, address, register):
        high = bus.read_byte_data(address, register)
        low = bus.read_byte_data(address, register + 1)
        value = (high << 8) + low

        if value >= 0x8000:
            return -((65535 - value) + 1)
        else:
            return value

    def update_data(self):
        acceleration, gyro = self.read_data()

        accel_data = "加速度:{},{},{}".format(acceleration[0], acceleration[1], acceleration[2])
        gyro_data = "角速度:{},{},{}".format(gyro[0], gyro[1], gyro[2])

        self.accel_label.setText(accel_data)
        self.gyro_label.setText(gyro_data)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = DataCollectionApp()
    window.show()
    sys.exit(app.exec_())

7、执行代码

python3 mpu6050_qt.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThreadLocal,一次到位

一、定义 ThreadLocal是线程私有变量&#xff0c;用于保存每个线程的私有数据。 那么什么情况下需要进行线程隔离 二、源码分析 public class ThreadLocalTest01 {ThreadLocal<Integer> t new ThreadLocal<>();public void test() {t.set(1);Integer integer…

如果你还不了解双亲委派模型,来看看这篇吧

文章首发于【Java天堂】&#xff0c;跟随我探索Java进阶之路&#xff01; 类与类加载器 类是由它的类加载器加载进虚拟机中的&#xff0c;在同一个Java虚拟机中&#xff0c;对于同一个Class文件&#xff0c;如果采用不同的类加载器&#xff0c;得到的是不相等的类&#xff0c;…

k8s二进制部署--多master、负载均衡、高可用

目录 1、环境准备 1.1 服务器配置 1.2 master02 节点部署 2、负载均衡部署 2.1 下载nginx 2.2 修改nginx配置文件 2.3 启动nginx 2.3.1 检查配置文件语法 2.3.2 启动nginx服务&#xff0c;查看已监听6443端口 3. 部署keepalived服务(nginx主机&#xff0c;以nginx01为…

十一.吊打面试官系列-JVM优化-深入JVM类加载机制

前言 从本篇文章开始我们来探讨JVM相关的知识&#xff0c;内容附带JVM的启动&#xff0c;JVM内存模型&#xff0c;JVM垃圾回收机制&#xff0c;JVM参数调优等&#xff0c;跟着文章一步一步走相信你对JVM会有一个不一样的认识&#xff0c;如果觉得文章对你有所帮助请给个好评吧…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 驾校管理系统 设计与实现

一.项目介绍 系统角色&#xff1a;管理员、驾校教练、学员 管理员&#xff1a; 个人中心&#xff1a;修改密码以及个人信息修改 学员管理&#xff1a;维护学员信息&#xff0c;维护学员成绩信息 驾校教练管理&#xff1a;驾校教练信息的维护 驾校车辆管理&…

水离子雾化壁炉与会所房间的氛围搭配

水离子雾化壁炉在会所房间的氛围搭配可以为房间增添舒适、温馨和现代感&#xff0c;以下是一些建议&#xff1a; 主题定位&#xff1a; 根据会所房间的主题和定位选择合适的水离子雾化壁炉款式和设计风格。可以是现代简约、欧式古典或是豪华奢华&#xff0c;确保与房间整体风格…

Java基础学习笔记二

Java基础学习笔记二 6 File1.File类1.1File类概述和构造方法【应用】1.2File类创建功能【应用】1.3File类判断和获取功能【应用】1.4File类删除功能【应用】 2.递归1递归【应用】2递归求阶乘【应用】3递归遍历目录【应用】 3.IO流1 IO流概述和分类【理解】2字节流写数据【应用】…

HL7协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.介绍2.传输协议规范2.1. MLLP2.1.1. 数据头定义2.1.2. 转义字符集 2.2. 规范说明2.3. 消息格式说明 3.HL7结构介绍3.1. 患者建档&#xff08;ADT^A28&#xff09;…

AI应用之智能体介绍

AI应用之智能体介绍 一、LLM介绍二、智能客服应用1&#xff0c;阿里智能能话机器人2&#xff0c;华为对话机器人3&#xff0c;公司基于讯飞知识库和讯飞大模型的智能客服 三、大模型应用平台介绍1&#xff0c;fastgpt2&#xff0c;毕昇3&#xff0c; 字节海外版&#xff08;科学…

学习Nginx(二):版本介绍和安装

版本 Nginx官方定义了Mainline、Stable、Legacy三种版本。 1. Mainline version&#xff08;主线版本&#xff09; 该版本包含最新的功能和bug修复&#xff0c;被视为开发版&#xff0c;即正在活跃开发中的版本。其版本号通常为单数&#xff0c;例如1.25.5。这个版本的更新较快…

Nvidia Jetson编译安装Opencv With CUDA,完善GSTREAMER功能

简介 Nvidia Jetson 官方刷机流程结束以后&#xff0c;虽然安装了opencv&#xff0c;但是此版本是CPU版本&#xff0c;并且不包含Cpp版本。如果想要完整的OpenCV支持&#xff0c;需要从源码编译。本文介绍如何下载编译&#xff0c;并安装OPENCV库&#xff0c;并获得完整的CUDA…

必应bing广告开户费用介绍,必应搜索广告推广开户服务!

微软必应Bing搜索引擎广告成为了企业提升品牌知名度与市场份额的有效途径之一&#xff0c;作为全球第二大搜索引擎&#xff0c;在中国市场正逐步展现出其独特的广告价值与潜力。对于希望拓展在线市场的中国企业而言&#xff0c;通过云衔科技开启必应Bing国内广告推广之旅&#…

谷歌外贸seo优化怎么做?

一般有两种选择&#xff0c;在大型电商平台开展业务&#xff0c;如亚马逊&#xff0c;阿里巴巴等平台&#xff0c;也可以选择搭建自己的独立站 选择在大型电商平台可以方便迅速建立起自己的商铺&#xff0c;不需要考虑太多交易&#xff0c;支付&#xff0c;物流等方面的问题&am…

2024.05.14 Diffusion 代码学习笔记

配环境 我个人用的是Geowizard的环境&#xff1a;https://github.com/fuxiao0719/GeoWizard。 出于方便考虑&#xff0c;用的pytorch官方的docker容器&#xff0c;因此python版本&#xff08;3.10&#xff09;和原作者&#xff08;3.9&#xff09;不同&#xff0c;其余都是一…

Java小游戏之汤姆猫

背景&#xff1a; 博主写过羊了个羊小游戏&#xff0c;客户觉得羊了个羊同学写过了&#xff0c;想换一个&#xff0c;于是笔者想到了汤姆猫。就是那个以前在苹果手机上的猫。 过程&#xff1a; 初始会有一个猫的图片展示&#xff0c;然后你点击按钮&#xff0c;猫会有不同动作…

力扣刷题 day2

快乐数 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;   图: java // 快乐数 --> 19 > 1^2 9 ^2 82 > 82 > 8 ^ 2 2 ^ 2 ......public boolean isHappy(int n) {// 使用快慢指针int slow n, fast getSum(n);while (slow ! fast) {slow getSum(slo…

【Day3:JAVA运算符、方法的介绍】

目录 1、运算符1.1 赋值运算符1.2 比较运算符1.3 逻辑运算符1.3.1 逻辑运算符概述1.3.2 逻辑运算符分类1.3.3 短路的逻辑运算符 1.4 三元运算符1.5 运算符优先级 2、方法2.1 方法介绍2.2 方法的定义和调用格式2.2.1 方法的调用2.2.2 带参数方法的调用2.2.3 带返回值方法的调用2…

Zookeeper and RPC dubbo

javaguide zookeeper面试题 Zookeeper 啥是Zookeeper干啥的 ZooKeeper 可以被用作注册中心、分布式锁&#xff1b; ZooKeeper 是 Hadoop 生态系统的一员&#xff1b; 构建 ZooKeeper 集群的时候&#xff0c;使用的服务器最好是奇数台。 启动ZK 下载安装解压 不过多赘述 我的…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

luceda ipkiss教程 66:金属线的钝角转弯

案例分享&#xff1a;金属线的135度转弯&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from ipkiss.geometry.shape_modifier import __ShapeModifierAutoOpenClosed__ from numpy import sqrtclass ShapeManhattanStub(__…